كنترل پنل             جستجو               پرسشهای متداول            .:: آخرین پست‌های انجمن ::.            لیست اعضا            مدیران سایت             درجات        ورود
فهرست انجمن‌ها -> عمومي برنامه‌نويسي -> زبان برنامه‌نويسي C و مشابه
پاسخ دادن به این موضوع رفتن به صفحه 1, 2  بعدی
کمک در مورد سی پلاس پلاس
پست تاریخ: دوشنبه 28 دی 1388 - 00:16    
arkco
خوب داره پيش مي‌ره
خوب داره پيش مي‌ره


پست: 43
عضو شده در: 24 فروردین 1387
محل سکونت: آران و بیدگل
blank.gif


امتياز: 699

عنوان: کمک در مورد سی پلاس پلاس خواندن مشخصات فردی ارسال پیام شخصی

سلام
می خوام یک برنامه بنویسم که 20 تا عدد رو از ورودی بگیره و اگه عددی با عددهای قبلی وارد شده برابر بود پیغام بده که این عدد قبلا وارد شده و بعد یک عدد دیگه بگیره باز اگه عدد وارد شده مساوی با عددهای قبلی باشه پیغام بده و یه عدد دیگه بگیره .
یعنی این که به هیچ وجه نشه دو عدد یک جور به برنامه داد. اگه کسی بلده برام بنویسه یا حداقل راهنمایی کنه که من به این برنامه نیاز فوری دارم.
ضمنا می خوام برنامه در سی پلاس پلاس نوشته بشه.
دستتون درد نکنه.

[ وضعيت كاربر: ]

تشکر کردن از پست  پاسخگویی به این موضوع بهمراه نقل قول 
تشکرها از این پست:

پست تاریخ: دوشنبه 28 دی 1388 - 15:11    
Hamid
مدیريت كل سایت
مدیريت كل سایت


پست: 5505
عضو شده در: 31 اردیبهشت 1384
محل سکونت: -::ساوه::-
iran.gif


امتياز: 47855

عنوان: پاسخ به «کمک در مورد سی پلاس پلاس» خواندن مشخصات فردی ارسال پیام شخصی

سلام؛
کار سختی نیست، اعداد رو در یک آرایه بریز و یک شمارنده در نظر بگیر.
هر بار اگر یک عدد رو با موفقیت گرفتی، یکی به شمارنده اضافه کن.
هر عددی که می‌گیری، آرایه رو از 0 تا شمارنده، جستجو کن و ببین که مساوی با اون عدد ورودی پیدا می‌کنی یا خیر. اگر پیدا شد، وارد آرایه نکن، وگرنه، به آرایه اضافه کن.
همین Wink

[ وضعيت كاربر: ]

تشکر کردن از پست  پاسخگویی به این موضوع بهمراه نقل قول 
تشکرها از این پست:

پست تاریخ: چهار‌شنبه 30 دی 1388 - 14:03    
Gytyonline
مديريت كل انجمن‌ها
مديريت كل انجمن‌ها


پست: 899
عضو شده در: 14 شهریور 1384
محل سکونت: tehran
iran.gif


امتياز: 8184

عنوان: پاسخ به «کمک در مورد سی پلاس پلاس» خواندن مشخصات فردی ارسال پیام شخصی ارسال email

سلام به همه
همون طوری که حمید جان گفتن برنامه سختی نیستش و توضیحاشم کامل بودش بازم اگه نتونستی یا متوجه نشدی بگو تا برات برنامه رو یا حداقل قسمتی از اون رو برات بنویسم

[ وضعيت كاربر: ]

تشکر کردن از پست  پاسخگویی به این موضوع بهمراه نقل قول 
تشکرها از این پست:

پست تاریخ: چهار‌شنبه 30 دی 1388 - 23:11    
arkco
خوب داره پيش مي‌ره
خوب داره پيش مي‌ره


پست: 43
عضو شده در: 24 فروردین 1387
محل سکونت: آران و بیدگل
blank.gif


امتياز: 699

عنوان: پاسخ به «کمک در مورد سی پلاس پلاس» خواندن مشخصات فردی ارسال پیام شخصی

Hamid و ali048 عزیز خیلی ممنونم که مرا راهنمایی کردید.
ali048 اگه می شه این برنامه را برام بنویس.پیشاپیش از شما تشکر می کنم.

[ وضعيت كاربر: ]

تشکر کردن از پست  پاسخگویی به این موضوع بهمراه نقل قول 
تشکرها از این پست:

پست تاریخ: پنج‌شنبه 1 بهمن 1388 - 00:22    
Gytyonline
مديريت كل انجمن‌ها
مديريت كل انجمن‌ها


پست: 899
عضو شده در: 14 شهریور 1384
محل سکونت: tehran
iran.gif


امتياز: 8184

عنوان: پاسخ به «کمک در مورد سی پلاس پلاس» خواندن مشخصات فردی ارسال پیام شخصی ارسال email

سلام arkco جان
سعی کن همیشه کد های برنامه تو خودت بنویسی هر چند غلط باشه بعدا اون کد رو بزار اگه غلط باشه و اصلاح می کنیم برات اگه نه هم کمکت می کنیم البته اگه میخوای خودت م یاد بگیری برنامه نویسی رو اگه نه هم که ....

اینم کد برنامه ببین کار می کنه ( با سی هستش تبدیلش به سی پلاس کاری نداره)
کد:

int main ()
{
int number[20],num,i=0,flag=0;
 while(i<20)
 {
     printf("please enter your number : ");
    scanf("%d",num);
    for(int j=0;j<i;j++)
    {
         if(num==number[j])
           {
              flag=1;
              break();
          }
        if(flag==0)
            {
               number[i]=num;
                 i++;
           }   
     }      
 }
 getch();
 return 0;
}
         
         

[ وضعيت كاربر: ]

تشکر کردن از پست  پاسخگویی به این موضوع بهمراه نقل قول 
تشکرها از این پست:

پست تاریخ: پنج‌شنبه 1 بهمن 1388 - 15:24    
Hamid
مدیريت كل سایت
مدیريت كل سایت


پست: 5505
عضو شده در: 31 اردیبهشت 1384
محل سکونت: -::ساوه::-
iran.gif


امتياز: 47855

عنوان: پاسخ به «کمک در مورد سی پلاس پلاس» خواندن مشخصات فردی ارسال پیام شخصی

ali048, جان،
الگوریتم رو درست پیاده‌سازی کردی، اما چند تا قسمت از برنامه بهینه نیست.
1- این یکی از بزرگ‌ترین مشکلات برنامه‌نویس‌هاست:
هیچ وقت توی یک حلقه، متغیر رو تعریف نکن!
چرا j رو وسط حلقه while تعریف کردی؟ این یعنی اینکه j حداقل بیست بار تعریف می‌شه! در حالی که متغیر آمده که از تعریف مجدد جلوگیری کنه. یک بار تعریف، چند بار مقداردهی.
j رو هم کنار همون i تعریف کن.

2- شرط if(flag==0 رو باید بعد از حلقه for بذاری.
ضمناً flag رو هم باید انتهای حلقه مجدداً 0 کنی وگرنه کلاً برنامه با مشکل مواجه می‌شه.

3- بهتره قبل از break یک دستور بنویسی که مثلا: "این عدد تکراری است" وگرنه کاربر فکر می‌کنه باید عدد بعدی رو وارد کنه.


به هر حال، فکر می‌کنم بهتر باشه کدها رو به این صورت تغییر بدیم:

کد:
int main ()
{
int number[20],num,j,i=0,flag=0;
 while(i<20)
 {
     cout <<"Please enter #"<< i << ":";
    cin >> num;
    for(j=0;j<i;j++)
    {
         if(num==number[j])
           {
              flag=1;
              break();
          }
     }
if (flag==0)
{
   number[i]=num;
   i++; 
}
else
{
    cout << "This number exist in the list. Please enter another one:";
   flag=0;
}
}
getch();
return 0;
}

[ وضعيت كاربر: ]

تشکر کردن از پست  پاسخگویی به این موضوع بهمراه نقل قول 
تشکرها از این پست:

پست تاریخ: پنج‌شنبه 1 بهمن 1388 - 23:17    
Gytyonline
مديريت كل انجمن‌ها
مديريت كل انجمن‌ها


پست: 899
عضو شده در: 14 شهریور 1384
محل سکونت: tehran
iran.gif


امتياز: 8184

عنوان: پاسخ به «کمک در مورد سی پلاس پلاس» خواندن مشخصات فردی ارسال پیام شخصی ارسال email

سلام حمید جان
واقعا ممنون به خاطر راهنمایی ها و نکته های عالی که بهم گوش زد کردی ، در مورد نکته اول به شخصه فکر میکردم اگه متغییر داخل حلقه for تعریف بشه بهینه تر هستش چون وقتی for تموم بشه فضای اشغال شده به حافظه بر می گرده ولی به این نکته یی که گفتی تا حالا اصلا توجه نکرده بودم . بازم مرسی
به خاطر همین شعار سایتم رو گذاشتم : " ياد بگير و به ديگران ياد بده " چون توی یاد گرفتن 1سری چیزا رو یاد میگیره ادم توی یاد دادن 1سری چیزای جدید تر و ناب تری رو Razz

[ وضعيت كاربر: ]

تشکر کردن از پست  پاسخگویی به این موضوع بهمراه نقل قول 
تشکرها از این پست: Hamid (جمعه 2 بهمن 1388 - 14:30)

پست تاریخ: جمعه 2 بهمن 1388 - 13:11    
arkco
خوب داره پيش مي‌ره
خوب داره پيش مي‌ره


پست: 43
عضو شده در: 24 فروردین 1387
محل سکونت: آران و بیدگل
blank.gif


امتياز: 699

عنوان: پاسخ به «کمک در مورد سی پلاس پلاس» خواندن مشخصات فردی ارسال پیام شخصی

سلام دوستان
من خودم این برنامه رو این طوری نوشتم.چک کنید ببینید درسته یا نه
کد:
#include<iostream.h>
#include<conio.h>
int main()
{int i,k,x[20];
for(i=0;i<=19;i++)
{cout<<" \n\n Please enter student "<<i+1<<" number   : ";
cin>>x[i];
if(i>0)
{for(k=0;k<=i-1;k++)
{while(x[i]==x[k])
{cout<<" \n This student number enter already ";
cout<<" \n Please reenter student "<<i+1<<" number : ";
cin>>x[i];
k=0;
continue;}}}
getch();
return 0;}}

[ وضعيت كاربر: ]

تشکر کردن از پست  پاسخگویی به این موضوع بهمراه نقل قول 
تشکرها از این پست:

پست تاریخ: جمعه 2 بهمن 1388 - 14:32    
Hamid
مدیريت كل سایت
مدیريت كل سایت


پست: 5505
عضو شده در: 31 اردیبهشت 1384
محل سکونت: -::ساوه::-
iran.gif


امتياز: 47855

عنوان: پاسخ به «کمک در مورد سی پلاس پلاس» خواندن مشخصات فردی ارسال پیام شخصی

arkco, جان؛
اول یک نکته بگم: فراموش نکن که همیشه الگوریتم یک برنامه بیشتر از کد ارزش داره.
شما اگر الگوریتم یک برنامه رو بدونید می‌تونید خیلی راحت اون رو پیاده‌سازی کنید.

خوب، حالا شما همیشه اول در مورد الگوریتم برنامه‌ت توضیح بده و بعد، کد اون رو قرار بده.
الان ما هی بالا و پایین می‌ریم، متوجه نمی‌شیم که شما چی کار کردی.
اگر ممکنه روند عملکرد (الگوریتم) برنامه‌ت رو توضیح بده... Wink

[ وضعيت كاربر: ]

تشکر کردن از پست  پاسخگویی به این موضوع بهمراه نقل قول 
تشکرها از این پست:

پست تاریخ: شنبه 3 بهمن 1388 - 00:36    
Gytyonline
مديريت كل انجمن‌ها
مديريت كل انجمن‌ها


پست: 899
عضو شده در: 14 شهریور 1384
محل سکونت: tehran
iran.gif


امتياز: 8184

عنوان: پاسخ به «کمک در مورد سی پلاس پلاس» خواندن مشخصات فردی ارسال پیام شخصی ارسال email

سلام arkco
اول از همه این کدت رو من فقط ظاهرش رو درست کردم تا قابل خوندن بشه چون اون طوری فکنم خودتم سرت گیج میرفت اگه می خواستی دوباره بخونیش Mr. Green

کد:

#include<iostream.h>
#include<conio.h>
int main()
{
int i,k,x[20];
for(i=0;i<=19;i++)
     {
         cout<<" \n\n Please enter student "<<i+1<<" number   : ";
         cin>>x[i];
         if(i>0)
             {
              for(k=0;k<=i-1;k++)
                     {
                    while(x[i]==x[k])
                             {
                          cout<<" \n This student number enter already ";
                                 cout<<" \n Please reenter student "<<i+1<<" number : ";
                                 cin>>x[i];
                                 k=0;
                                 continue;
                      }
                }
          }
getch();
return 0;}}



1- همون طوری که Hamid جان گفتن الگریتم یه برنامه خیلی مهم تر از کد های اون برنامه هستن اول بگو چی کار می خواستی بکنی و چی کار کردی آخه بعضی وقت ها بین کارایی که ادم می خواد بکنه و کارایی که می کنه فرقا هایی وجود داره Embarassed

2- نکته بعدی اینکه همیشه سعی کن کد هاتو خوانا بنویسی تا اگه برنامه نویسه دیگه ای هم خواستش کدهاتو بخونه بتونه ازشون سر در بیاره و وسط خوندن از ادامه دادن منصرف نشه، باید کداتو جوری بنویسی که معلوم بشه کدوم دستورات برای کدوم شرط ها هستن و هر آکولادی برای چه دستوری هستش و کی باز و کی بسته می شه باید همه اینا توی نیگاه اول معلوم باشه کد های من و Hamid رو نیگا کن و با کد خودت مقایسه کن!!

3- چرا شرط حلقه ی for ات هستش j<=i-1 ؟؟؟؟؟ این طوری که برای بار اول حلقه ای میشه از j=0 تا j=i-1=0-1=-1  یعنی از j=0 تا j=-1 به نظرت درسته ؟؟؟ باید شرط حلقه ات j<=i باشه

چرا اومدی و نوشتی :
کد:

while(x[i]==x[k])

تو باید این دو تا خونه رو باهم مقایسه کنی چرا while استفاده کردی به جای if ؟؟؟؟؟ این طوری که اگه این دو خونه با هم برابر بشن یه حلقه نا محدود از while به وجود اومده که هی به کاربر میگه عددتون تکراری هستش و دوباره عدد از کاربر می گیره و این عمل بینهایت بار انجام میشه چون توی این دوتا دستور شرط ها همیشه بر قرار هستش حلقه while نامحدود میشه:
کد:

1 :
while(x[i]==x[k])

2:
while(1)

54- این حلقه برای بار اول میادش و خونه اول آرایه رو با خدش مقایسه میکنه یعنی بار اول که مقایسه x[i]==x[k] انجام میشه هم i و هم j در نتیجه مقداراشون باهم برابر هستش پس اشتباه چون برنامه فکر می کنه عددی تکراری وارد شده و میادش دوباره از کاربر عدد می گیره!!!

6- طوی این قسمت از برنامه که اگه عدد تکراری بودش دوباره از کابر عدد می گیره اومدی دوباره نوشتی شماره دانشجوی i ام را وارد کنید این طوری i که مقداری بیشتر از 20 تا شمارش میشه

7- برای چی دستور k=0 رو نوشتی ؟؟ این طوری که حلقه for تم بینهایت بار تکرار میشه ؟؟؟

8- دلیله استفاده از دستور continue چی بوده ؟؟؟ هرجی فکر کردم نفهمیدم ؟؟ Very Happy Embarassed

[ وضعيت كاربر: ]

تشکر کردن از پست  پاسخگویی به این موضوع بهمراه نقل قول 
تشکرها از این پست:


نمایش پستها:                 مشاهده موضوع قبلی :: مشاهده موضوع بعدی  
پاسخ دادن به این موضوع
 
رفتن به صفحه 1, 2  بعدی
صفحه 1 از 2

تمام زمانها بر حسب GMT + 3.5 Hours می‌باشند
 Related Topics 


 information 

 

پرش به:  
شما نمی توانید در این بخش موضوع جدید پست کنید
شما نمی توانید در این بخش به موضوعها پاسخ دهید
شما نمی توانید موضوع های خودتان را در این بخش ویرایش کنید
شما نمی توانید موضوع های خودتان را در این بخش حذف کنید
شما نمی توانید در این بخش رای دهید


Copyright 2004-2024. All rights reserved.
© by Aftabgardan Cultural Center : Aftab.cc