آژانس هواپیماییexchanging

اشكالات برنامه نويسي ++C

شروع موضوع توسط mo|-|sen ‏17 دسامبر 2005 در انجمن خانواده C++ , C

  1. mo|-|sen

    mo|-|sen Registered User

    تاریخ عضویت:
    ‏4 آگوست 2005
    نوشته ها:
    1,311
    تشکر شده:
    25
    محل سکونت:
    KASHAN
    سلام بر دوستان برنامه نويس

    من برنامه تبديل اعداد 10 به 2 نوشتم اما يه كمكي ايراد داره

    اگه ميتونيد منو راهنمايي كنيد
     

    فایل های ضمیمه:

    • BINARY.zip
      اندازه فایل:
      346 بایت
      نمایش ها:
      10
  2. programmer

    programmer کاربر تازه وارد

    تاریخ عضویت:
    ‏1 نوامبر 2005
    نوشته ها:
    84
    تشکر شده:
    0
    برای نوشتن برنامه اول مفهوم و راه حل کلی رو روی کاغذ بنویسید بعد اونو پیاده سازی کنید.
    برای حل مسائل راه های زیادی وجود داره که با توجه به شرایط یکیشون رو انتخاب می کنیم.
    مثلآ برای همین برنامه میشد به جای اینکه نتایج در یک آرایه ی صحیح ذخیره شود در یک رشته ذخیره شود تا محدودیتی از لحاظ طول عدد در مبنای نباشد.
    این کد کار تبدیل اعداد(صحیح مثبت) از مبنای 10 به 2 رو انجام میده :
    کد:
    #include <iostream.h>
    #include <conio.h>
    
    int x,i,b[20]={0};
    int main()
    {
      clrscr();
      i=0;//counter
      cout<<"Enter number decimal format : ";
      cin>>x;
      while(x!=0)
      {
       b[i]=x % 2 ;
       x=x / 2;
       i++;
      }//end of while
      cout<<"number in binary format : ";
      for(int j=i-1;j>=0;j--)
       cout<<b[j];
      cout<<endl;
      getch();
      return 0;
    }
    البته میشه برنامه رو کاملتر کرد.
     
  3. mo|-|sen

    mo|-|sen Registered User

    تاریخ عضویت:
    ‏4 آگوست 2005
    نوشته ها:
    1,311
    تشکر شده:
    25
    محل سکونت:
    KASHAN
    فداي شما دوست عزيز

    ولي خيلي خوب بود تو اين پرشين تولز يكي پيدا بشه يه تايپك بزنه كه در مورد مثلاهاي ++C توضيحي بدند

    من هنوز با دفتر و قلم عادت نكردم همش دوست دارم اول برنامه رو با ++C بنويسم بعد خطايابي كنم

    البته نه اينطور كه بگم اصلا از دفتر و كاغذ استفاده نمي كنم ولي خوب ....

    اميدوارم هميشه پاينده باشيد.
     
  4. mo|-|sen

    mo|-|sen Registered User

    تاریخ عضویت:
    ‏4 آگوست 2005
    نوشته ها:
    1,311
    تشکر شده:
    25
    محل سکونت:
    KASHAN
    سلام دوست عزيز

    فكر نكني تنبل بازي در ميارم من قبلا زياد به برنامه نويسي علاقه نداشتم اما به قول معروف يه انقلابي تو ذهنم ايجاد شده الانم نياز به تمرين زيادي دارم با مثلاهاي كه قبلا برام مشكل بود دارم كه ذهنمو مشغول كرده اول بايد اونارو حل كنم بعد برم سراغ برنامه هاي بهتر.

    من ديشب داشتم روي برنامه اي كه يه رشته مثل "MOHsen" بگيره و تمامي حروف بزرگ اونو به حروف كوچك و بلعكس تبديل كنه فكر ميكردم و الگوريتم براي خودم روي كاغذ ترسيم كردم

    1- يه رشته بگير

    2- با استفاده از حلقه for در خانه هاي آرايه قرار بده

    3- با استفاده از حلقه for ابتدا خانه هاي آرايه را بخوان و تك تك شرط را بررسي كن

    4- اگر خانه ارايه بزرگتر از 97 بود يعني كد حروف بزرگ هست سپس 32-97 و در همان خانه بريز

    5- شرط دوم حلقه for : اگر خانه ارايه كوچكتر از 97 بود يعني كد حروف كوچك هست سپس 32+65و در همان خانه بريز

    پايان حلقه

    اما تو نوشتن برنامش برام مشكل پيش اومد اگه ميتوني بيشتر كمكم كن
     
  5. programmer

    programmer کاربر تازه وارد

    تاریخ عضویت:
    ‏1 نوامبر 2005
    نوشته ها:
    84
    تشکر شده:
    0
    سلام
    منظور از استفاده از قلم و کاغذ این نیست که کل برنامه رو اول روی کاغذ بنویسیم بعد بیاییم اونو تایپ کنیم.
    فقط Base و مفهوم کلی راه حل رو روی کاغذ میاریم طوری که وقتی پشت سیستم نشستیم بفهمیم الان می خواهیم چه کار کنیم و با چه روشی مسئله رو حل کنیم نه اینکه تازه به فکر راه حل باشیم.
    الگوریتم شما زیادی پیچیده شده.در مرحله 2 لازم نیست رشته رو در آرایه قرار بده چون رشته خودش یک آرایه ست !
    مرحله 4 اشتباه هستش باید اینجوری باشه : اگه حرف بزرگتر مساوی 97 بود کد حروف کوچک هست و باید 32 تا از اون کم کنه.اگه هم حرف بزرگ باشه که نباید دستکاری بشه.
    این هم کد برنامه :
    کد:
    #include<iostream.h>
    #include<conio.h>
    int main()
    {
     char* str;
     cout<<"Enter string: ";
     cin>>str;
     for(int i=0;str[i]!='\0';i++)
      if(str[i]>=97)
       str[i]=str[i]-32;
     cout<<"Uppercase : "<<str<<endl;
     getch();
     return 0;
    }
     
  6. mo|-|sen

    mo|-|sen Registered User

    تاریخ عضویت:
    ‏4 آگوست 2005
    نوشته ها:
    1,311
    تشکر شده:
    25
    محل سکونت:
    KASHAN
    خيلي ممنون از راهنمايي

    اميدوارم روزي بتونم مثل شما برنامه نويس قابلي بشم

    من اينجوري نوشتم

    کد:
    #include <conio.h>
    #include <iostream.h>
    main()
     {
       char name[10];
       int i=0;
       cin>>name;
       while (name[i]='\0')
        {
          if (name[i]>=65 && name[i]<=91) 
            name[i]=name[i]+32;
          if (name[i]>=65 && name[i]<=91)
            name[i]=name[i]-32;
           i++;
        }
    cout<<name;
     }
     
  7. appbannerkhuniresbanner
  8. mo|-|sen

    mo|-|sen Registered User

    تاریخ عضویت:
    ‏4 آگوست 2005
    نوشته ها:
    1,311
    تشکر شده:
    25
    محل سکونت:
    KASHAN
    دوست عزيز شما سايتي سراغ نداريد كه مثلاهاي ++C داشته باشه

    مثلا در مورد منو ، آرايه ، گرافيك ، بازي ،........

    اگه محبت كني سايتي معرفي كني ممنون ميشم
     
  9. programmer

    programmer کاربر تازه وارد

    تاریخ عضویت:
    ‏1 نوامبر 2005
    نوشته ها:
    84
    تشکر شده:
    0
    خواهش میکنم.من فکر نمیکنم هنوز برنامه نویس قابلی باشم.اما مهم علاقه ست اگه به برنامه نویسی علاقه داشته باشی با یه کم سعی مطمئن باش برنامه نویس خوبی میشی.
    اول یه توضیح بدم:
    اول از همه من صورت سوال رو کامل متوجه نشدم یعنی فکر کردم فقط باید حروف کوچیک رو به بزرگ تبدیل کنه!
    چون شبیه یکی از تمرین هایی بود که قبلآ دیده بودم.
    پس برنامه ای که من نوشتم فقط برای تبدیل حروف کوچک به بزرگ جواب میده.
    در ضمن در برنامه ای که من نوشتم فرض کردم فقط حروف الفبا بعنوان ورودی هستند اگه بخواین برنامه کاملتر بشه باید شرط داخل حلقه For رو به این شرط تغییر بدین:
    کد:
    if((str[i]>=97)&&(str[i]<=122))
    در مورد الگوریتم و برنامه شما باید بگم اولآ سعی کنید وقتی لازمه کاربر مقداری را وارد کنه قبلش یه پیغام قرار بدید.
    یعنی قبل از هر دستور cin یه cout قرار بدید تا به کاربر اعلام کنه باید یه داده رو وارد کنه.این پیغام بهتره نوع داده رو هم به کاربر بگه. مثلآ به کاربر اعلام کنه یک عدد صحیح رو وارد کنه.
    محدوده کد حروف کوچک الفبای انگلیسی از 97 (a) تا 122(z) هست.پس برنامه باید چک کنه اگه کد یک کاراکتر بین این مقادیر بود 32 تا از اون کم کنه،چون کد هر حرف بزرگ 32 تا از کد حرف کوچک معادلش کمتره.
    محدوده کد حروف بزرگ هم از 65 تا 90 هست.
    پس برنامه شما به این صورت میشه :
    کد:
    #include<iostream.h>
    #include<conio.h>
    
    int main()
    {
     char* str;
     clrscr();
     cout<<"Enter a string : ";
     cin>>str;
     for(int i=0;str[i]!='\0';i++)
      if((str[i]>=97)&&(str[i]<=122))
       str[i]=str[i]-32;
      else if((str[i]>=65)&&(str[i]<=90))
       str[i]=str[i]+32;
     cout<<"New Mode  is : "<<str;
     cout<<"\nPress any key to Exit...";
     getch();
     return 0;
    }
     
  10. programmer

    programmer کاربر تازه وارد

    تاریخ عضویت:
    ‏1 نوامبر 2005
    نوشته ها:
    84
    تشکر شده:
    0
    متاسفانه من سایتی سراغ ندارم! شاید سایر دوستان چنین سایتی سراغ داشته باشند.
    تاپیکی که دوستمون جناب saalek زدند نکات خوبی رو داره .
    در ضمن در مورد گرافیک و سایر موارد بهترین کار اینه که از Help خود برنامه استفاده کنید.
    در ضمن من کتاب «چگونه با ++C برنامه بنویسیم؟» ( دیتل و دیتل) رو پیشنهاد میکنم،منبع خوبیه .
    اما در مورد برنامه شما :

    کد:
    1  #include <conio.h>
    2  #include <iostream.h>
    3  main()
    4  {
    5   char name[10];
    6   int i=0;
    7  cin>>name;
    8  while (name[i]='\0')
    9  {
    10  if (name[i]>=65 && name[i]<=91) 
    11    name[i]=name[i]+32;
    12       if (name[i]>=65 && name[i]<=91)
    13         name[i]=name[i]-32;
    14        i++;
    15     }
    16  cout<<name;
    17  }
    بهتر بود قبل از خط 7 یک دستور cout میذاشتین تا به کاربر اعلام کنه یک رشته که حداکثر 9 کاراکتر هست رو وارد کنه.
    در خط 8 شرط حلقه اشتباه است.شما هر بار در شرط حلقه کاراکتر های name را با '0\' (NULL) مقدار میدین !!!
    شرط باید به این صورت باشه :
    کد:
    while(name[i] != '\0')
    یعنی تا هنگامی که کاراکتر برابر با NULL (انتهای رشته) نیست حلقه را اجرا کن.
    در مورد محدوده کد اسکی حروف بزرگ و کوچک هم اشتباه کردید.
    در ضمن باید قبل از خط 17دستور Return 0 رو قرار بدید.
     
  11. mo|-|sen

    mo|-|sen Registered User

    تاریخ عضویت:
    ‏4 آگوست 2005
    نوشته ها:
    1,311
    تشکر شده:
    25
    محل سکونت:
    KASHAN
    خيلي متاسفم درست ميگيد من فراموش كرده بودم اينو بزاريد پاي بي حواسيم
    تمامي اين نكات ارزنده شما رو من تو برنامه اصليم رعايت كرده بودم
    شرمنده اشتباه تايپي بود.
     
  12. littlerabbit

    littlerabbit مدیر بازنشسته کاربر فعال

    تاریخ عضویت:
    ‏13 جولای 2003
    نوشته ها:
    667
    تشکر شده:
    4
    محل سکونت:
    Iran
    لطفا عنوان مناسب انتخاب کنید!!! یعنی چی کمک کنید یا بدادم برسید یا.....

    پیشاپیش ممنون.
     
  13. programmer

    programmer کاربر تازه وارد

    تاریخ عضویت:
    ‏1 نوامبر 2005
    نوشته ها:
    84
    تشکر شده:
    0
    خواهش میکنم.مطمئن هستم شما برنامه نویس خوبی هستید.
    راستی فراموش کردم بگم که در مورد کد های اسکی لازم نیست اون ها را حفظ کنید میتونید از شرط های زیر داخل حلقه استفاده کنید:
    کد:
    if((str[i]>='a')&&(str[i])<='z')  
      str[i]=str[i]-32;
    if((str[i]>='A')&&(str[i])<='Z') 
      str[i]=str[i]+32;
    اما چون در صورت سوال از کد اسکی استفاده کرده بودید من هم با کد ها نوشتم.
     
  14. avajang.com .leftavajang.com.right
  15. mo|-|sen

    mo|-|sen Registered User

    تاریخ عضویت:
    ‏4 آگوست 2005
    نوشته ها:
    1,311
    تشکر شده:
    25
    محل سکونت:
    KASHAN
    ببخشيدا ولي من نمي دونم كجا بايد موضوع تايپيك عوض كرد.

    و فكر ميكنم موضوع " اشكالات برنامه نويسي ++C " موضوع خوبي باشه
     
  16. CDEB

    CDEB کاربر تازه وارد

    تاریخ عضویت:
    ‏5 ژوئن 2006
    نوشته ها:
    21
    تشکر شده:
    0
    من یه سوال دارم
    چطور میتونم توی یه بلاک کد یه متغییر تعریف کنم که گلبال باشه و جای دیگه شناخته بشه؟
    کد:
     
    #include<iostream>
    #include<cstring>
     
    using namespace std;
     
    int main()
    {
    string x;//keep command.
    string temp;
     
    string c1="create dynamic array a_int_(10)";
    string c2="sort a";
    string c3="get data a";
    string c4="replace a_1_x";
    string c5="return index x in a";
     
    string type;
    int i=0,j;
     
     
    cout<<"p enter ur command"<<'\n';
    getline(cin, x , '\n');
     
     
    j=x.find('>');
    temp=x.substr(0,j);
     
     
    if (temp=="create dynamic arr a_int_(10)") 
    {
    cout<<"enter the desired type (int, char or float) : ";
    getline(cin, type , '\n');
    if (type=="int")
    {
    int *a;
    a=new int[10];
    cout<<"a dynamic array with size of 10 and type of integer is created";
    }
    else if (type=="char")
    {
    char *a;
    a=new char[10];
    cout<<"a dynamic array with size of 10 and type of character is created";
    }
    else if (type=="float")
    {
    float *a;
    a=new float[10];
    cout<<"a dynamic array with size of 10 and type of float is created"; 
    }
    }
     
     
    if (temp=="get data a")
    {
    for (int m=0 ; m<10 ; m++)
    { 
    cout<<"please enter data :"<< m <<endl;
    cin>>a[m];
    }
    }
     
     
     
     
     
    //cout<<temp;
    cin.get();
    return 0;
    }
    
    ابتدا یه ارایه داینامیک از نوعی که کاربر خواسته ایجاد می شه ولی بعدش که میخوام آرایه رو مقدار دهی کنم شناخته شده نیست.
    این یه قسمت از برنامه ی شبیه سازی اسکریپت نویسی هست.
     
  17. Arash_j13

    Arash_j13 Registered User

    تاریخ عضویت:
    ‏18 فوریه 2005
    نوشته ها:
    778
    تشکر شده:
    2
    محل سکونت:
    مشهد
    می تونید یه کلاس بسازید که مثل متغییر های ورینت تو دلفی عمل کنه و هر نوع داده ای رو پبذیره بعد از اون یه ارایه بسازید یا اینکه تمام انواع رو در نظر بگیرد و بر اساس درخواست کاربر از یکی از اونها استفاده کنید
     
  18. CDEB

    CDEB کاربر تازه وارد

    تاریخ عضویت:
    ‏5 ژوئن 2006
    نوشته ها:
    21
    تشکر شده:
    0
    این کار توی سی هم قابل اجراس؟
    اگر اینطوره لطف کنید کدش رو بنویسید که به چه صورته...
    ممنون میشم
     
  19. Arash_j13

    Arash_j13 Registered User

    تاریخ عضویت:
    ‏18 فوریه 2005
    نوشته ها:
    778
    تشکر شده:
    2
    محل سکونت:
    مشهد
    شدن می شه ولی کدش خیلی کم نیست که براتون بنویسم