برگزیده های پرشین تولز

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

mo|-|sen

Registered User
تاریخ عضویت
4 آگوست 2005
نوشته‌ها
1,368
لایک‌ها
50
محل سکونت
KASHAN
سلام بر دوستان برنامه نويس

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

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

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

  • BINARY.zip
    346 بایت · نمایش ها: 10

programmer

کاربر تازه وارد
تاریخ عضویت
1 نوامبر 2005
نوشته‌ها
85
لایک‌ها
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;
}
البته میشه برنامه رو کاملتر کرد.
 

mo|-|sen

Registered User
تاریخ عضویت
4 آگوست 2005
نوشته‌ها
1,368
لایک‌ها
50
محل سکونت
KASHAN
به نقل از programmer :
برای نوشتن برنامه اول مفهوم و راه حل کلی رو روی کاغذ بنویسید بعد اونو پیاده سازی کنید.
برای حل مسائل راه های زیادی وجود داره که با توجه به شرایط یکیشون رو انتخاب می کنیم.
مثلآ برای همین برنامه میشد به جای اینکه نتایج در یک آرایه ی صحیح ذخیره شود در یک رشته ذخیره شود تا محدودیتی از لحاظ طول عدد در مبنای نباشد.
این کد کار تبدیل اعداد(صحیح مثبت) از مبنای 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;
}
البته میشه برنامه رو کاملتر کرد.

فداي شما دوست عزيز

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

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

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

اميدوارم هميشه پاينده باشيد.
 

mo|-|sen

Registered User
تاریخ عضویت
4 آگوست 2005
نوشته‌ها
1,368
لایک‌ها
50
محل سکونت
KASHAN
سلام دوست عزيز

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

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

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

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

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

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

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

پايان حلقه

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

programmer

کاربر تازه وارد
تاریخ عضویت
1 نوامبر 2005
نوشته‌ها
85
لایک‌ها
0
سلام
من هنوز با دفتر و قلم عادت نكردم همش دوست دارم اول برنامه رو با ++C بنويسم بعد خطايابي كنم
منظور از استفاده از قلم و کاغذ این نیست که کل برنامه رو اول روی کاغذ بنویسیم بعد بیاییم اونو تایپ کنیم.
فقط 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;
}
 

mo|-|sen

Registered User
تاریخ عضویت
4 آگوست 2005
نوشته‌ها
1,368
لایک‌ها
50
محل سکونت
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;
 }
 

mo|-|sen

Registered User
تاریخ عضویت
4 آگوست 2005
نوشته‌ها
1,368
لایک‌ها
50
محل سکونت
KASHAN
دوست عزيز شما سايتي سراغ نداريد كه مثلاهاي ++C داشته باشه

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

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

programmer

کاربر تازه وارد
تاریخ عضویت
1 نوامبر 2005
نوشته‌ها
85
لایک‌ها
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;
}
 

programmer

کاربر تازه وارد
تاریخ عضویت
1 نوامبر 2005
نوشته‌ها
85
لایک‌ها
0
دوست عزيز شما سايتي سراغ نداريد كه مثلاهاي ++C داشته باشه
مثلا در مورد منو ، آرايه ، گرافيك ، بازي ،........
اگه محبت كني سايتي معرفي كني ممنون ميشم
متاسفانه من سایتی سراغ ندارم! شاید سایر دوستان چنین سایتی سراغ داشته باشند.
تاپیکی که دوستمون جناب 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 رو قرار بدید.
 

mo|-|sen

Registered User
تاریخ عضویت
4 آگوست 2005
نوشته‌ها
1,368
لایک‌ها
50
محل سکونت
KASHAN
خيلي متاسفم درست ميگيد من فراموش كرده بودم اينو بزاريد پاي بي حواسيم
تمامي اين نكات ارزنده شما رو من تو برنامه اصليم رعايت كرده بودم
شرمنده اشتباه تايپي بود.
 

littlerabbit

مدیر بازنشسته
کاربر فعال
تاریخ عضویت
13 جولای 2003
نوشته‌ها
678
لایک‌ها
6
سن
42
محل سکونت
Iran
لطفا عنوان مناسب انتخاب کنید!!! یعنی چی کمک کنید یا بدادم برسید یا.....

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

programmer

کاربر تازه وارد
تاریخ عضویت
1 نوامبر 2005
نوشته‌ها
85
لایک‌ها
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;

اما چون در صورت سوال از کد اسکی استفاده کرده بودید من هم با کد ها نوشتم.
 

mo|-|sen

Registered User
تاریخ عضویت
4 آگوست 2005
نوشته‌ها
1,368
لایک‌ها
50
محل سکونت
KASHAN
به نقل از littlerabbit :
لطفا عنوان مناسب انتخاب کنید!!! یعنی چی کمک کنید یا بدادم برسید یا.....

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

ببخشيدا ولي من نمي دونم كجا بايد موضوع تايپيك عوض كرد.

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

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;
}

ابتدا یه ارایه داینامیک از نوعی که کاربر خواسته ایجاد می شه ولی بعدش که میخوام آرایه رو مقدار دهی کنم شناخته شده نیست.
این یه قسمت از برنامه ی شبیه سازی اسکریپت نویسی هست.
 

Arash_j13

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

CDEB

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

Arash_j13

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