PDA

View Full Version : C++ مشکل دردو برنامه



mahdi_o
پنج شنبه 20 اردیبهشت 1386, 01:19 صبح
دوستان عزیز
من در این برنامه که یک کلاس هستش که اطلاعات دانشجو رو می گیری
و یکسری اعمال روش انجام می ده
متاسفانه اروری دریافت می کنم که اصلا نمی فهمم چیه؟

دومین مشکل من در این برنامه این هستش که
می خوام اسم هر فرد رو در یک خونه از آرایه ذخیره کنم
می خواستم بدونم آرایه رو از چه نوعی تعریف کنم و چه طوری از ورودی بخونم
ممنون
اینم کدها برنامه



#include <iostream.h>
#include <conio.h>

class info
{
public:
char name , n[20]; // Name of student
int num , i , id[20]; // student number
void add();
void remove();
void update();
void sort();
void search();

} // end of class

//************************************************** *****************

void info::add()
{
cout << "Enter your last name : " ;
cin.getline(n[i]);
cout << "Enter your number : " ;
cin >> id[i] ;
i++ ;
} //end of add

//************************************************** *****************

void info::remove()
{
cout << "Enter your number for removing : " ;
cin >> num ;
for (i=0;i<=19;i++)
{
if (id[i] == num)
{
for (int j=i;j<=19;j++)
id[j] = id[j+1];
}
else
{
cout <<"Your number not exist ! \n" ;
remove();
}
}
} //end of remove

//************************************************** *****************

void info::update()
{
cout << "Enter your number for editing your name : " ;
cin >> num ;
cout << "Enter your new name : " ;
cin >> name ;
for (i=0;i<=19;i++)
{
if (id[i] == num)
n[i] == name ;
else
cout <<"Your number not exist ! \n" ;
}
} //end of update

//************************************************** *****************

void info::sort() //Bubble Sort
{
int temp;
for (i=0;i<=18;i++)
for(int j=0;j<=18 ; j++)
if (id[j] > id[j+1])
{
temp=id[j];
id[j]=id[j+1];
id[j+1]=temp;
}

cout << "Sorted number is : " ;
for (i=0;i<=19;i++)
cout << id[i] << " " ;
} //end of sort

//************************************************** *****************

void info::search()
{
cout << "Enter your number for finding : " ;
cin >> num ;
for (i=0;i<=19;i++)
{
if (id[i] == num)
cout <<"Your number is " << num << " & your name is " ;
else
cout <<"Your number not exist ! \n" ;
}
} //end of search


//************************************************** *****************


void call()
{
info st ;
char act=' ' ;
cout << "1- add name & number 2- remove name & number ";
cout << "\n3- update name 4- sort student number " ;
cout << "\n5- search by student number " ;
cout << "\n\nEnter number of your action : " ;
cin >> act ;

switch(act)
{
case '1' :
st.add();
break;
case '2' :
st.remove();
break;
case '3' :
st.update();
break;
case '4' :
st.sort();
break;
case '5' :
st.search();
break;
default :
cout <<"Your number is incorrect !" ;
}
} //end of call method


//************************************************** *****************


int main()
{
char ans=' ';
do
{
call();
cout << "Do you want to contiue ? (y/n) : " ;
cin >> ans ;
} while(ans !='n');

getch() ;
return 0 ;
}

mahdi_o
پنج شنبه 20 اردیبهشت 1386, 01:21 صبح
اما برنامه دوم
یک پشته هستش که یک عمل خاصی رو انجام می ده
(زیاد مهم نیست بدونید چیه مهم سوال من هستش)

استادم گفته که اندازه این پشته رو که با

#define SIZE 30
تعریف کردم
بیارم داخل خود کلاس پشته تعریف کنم (با کمک اشاره گرها و malloc)
راستش من نتونستم
اگه می شه کمک کنید
و گفته که دوتا کلاس سازنده داشته باشم
که یکی حالت دیفالت داشته باشه و در یکی دیگر توسط قسمت main برنامه
اندازه خود را بگیره
امیدوارم منظور منو فهمیده باشید
ممنون

اینم کدهاش

#include <iostream.h>
#include <conio.h>
#include <stdlib.h>

const int SIZE = 30;
class stack {
public :

int num;
private :
int myTop;
char a[SIZE];



public:
int sizeNum()
{
cout << "Enter size of phrases : ( Enter 0 for default size ) : " ;
cin >> num ;
if (num == 0)
return 30;
else
return num ;
}

stack()
{ myTop = -1 ; }

int empty() { return (myTop == -1); }

char pop()
{
if (empty())
{
cout << "Your phrase is incorrect \n ')' is more than the '('";
getch();
exit(1);
}
else
return a[myTop--];
}

void push(char x)
{
if (myTop == SIZE - 1)
{
cout << "Stack is full. press any key ...";
getch();
}
else
a[++myTop]=x;
}

};

stack s ; // s is object

int main()
{
// s.sizeNum();
char x,ans;
do
{
cout << "\n\nPlease enter your phrases : " ;
cin >> x ;
if (x == ')')
{
cout << "You shoud at first enter '(' \n" ;
cout << "Enter again your phrases : " ;
cin >> x;
}

s.push(x);
while (x != '=')
{
cin >> x;
if (x == '(' )
s.push(x);
else if (x == ')')
s.pop();
} // end while



if (s.empty())
cout << "Your phrase is correct" ;
else
cout << "Your phrase is incorrect\n '(' is more than the ')' " ;

cout << "\n\nDo you want to continue ? (y/n) : " ;
cin >> ans ;

} while (ans != 'n') ;


return 0 ;
}

mahdi_o
پنج شنبه 20 اردیبهشت 1386, 20:39 عصر
دوستان عزیز
کسی این جواب مشکل مارو نفهمید چیه؟
ممنون می شم
اگه جواب بدید
خیلی نیاز دارم

emad_67
جمعه 21 اردیبهشت 1386, 09:44 صبح
دوستان عزیز
من در این برنامه که یک کلاس هستش که اطلاعات دانشجو رو می گیری
و یکسری اعمال روش انجام می ده
متاسفانه اروری دریافت می کنم که اصلا نمی فهمم چیه؟

دومین مشکل من در این برنامه این هستش که
می خوام اسم هر فرد رو در یک خونه از آرایه ذخیره کنم
می خواستم بدونم آرایه رو از چه نوعی تعریف کنم و چه طوری از ورودی بخونم
ممنون
اینم کدها برنامه


جواب سوات اولتون
من برنامه رو برات اشکال زدایی کردم یعنی فقط خطا های دستوری اونو رفع کردم نمی دونم شاید از لحاظ منطق هنوز مشکل داشته باشه
برای اینکه اسم هر فرد رو در یک خونه از آرایه ذخیره کنی باید آرایه ای از اشاره گر بسازی که هر حونه از اون یک اشاره گر به اسم یک فرد است ضمنا من یک متغیر static در تابه add اضافه کردم تا تعداد افراد رو بشمره همیشه سعی کنید متغیر های اساسی رو در بدنه کلاس تعریف کنید مثلا متغییری مثل i بودنش تو کلاس ضروری نیست ضمنا تابع sort هم مشکل داره چون فقط میاد شماره دانشجویی ها رو جابجا میکنه د صورتی که باید اسم افراد هم جابجا شه اون error های بی خودی هم که میداد به خاطر قرار ندادن ; در انتهای { کلاس هست اینم برنامه لصلاح شده


#include <iostream.h>
#include <conio.h>
class info
{
public:
char name[20] , *n[20]; // Name of student
int num ,i, id[20]; // student number
void add();
void remove();
void update();
void sort();
void search();
}; // end of class
//************************************************** *****************
void info::add()
{
static int count=0;
cout << "Enter your last name : " ;
cin.getline(name,20);
n[i]=name;
cout << "Enter your number : " ;
cin >> id[i] ;
count++ ;
} //end of add
//************************************************** *****************
void info::remove()
{
cout << "Enter your number for removing : " ;
cin >> num ;
for (i=0;i<=19;i++)
{
if (id[i] == num)
{
for (int j=i;j<=19;j++)
id[j] = id[j+1];
}
else
{
cout <<"Your number not exist ! \n" ;
remove();
}
}
} //end of remove
//************************************************** *****************
void info::update()
{
cout << "Enter your number for editing your name : " ;
cin >> num ;
cout << "Enter your new name : " ;
cin >> name ;
for (i=0;i<=19;i++)
{
if (id[i] == num)
n[i] = name ;
else
cout <<"Your number not exist ! \n" ;
}
} //end of update
//************************************************** *****************
void info::sort() //Bubble Sort
{
int temp;
for (i=0;i<=18;i++)
for(int j=0;j<=18 ; j++)
if (id[j] > id[j+1])
{
temp=id[j];
id[j]=id[j+1];
id[j+1]=temp;
}
cout << "Sorted number is : " ;
for (i=0;i<=19;i++)
cout << id[i] << " " ;
} //end of sort
//************************************************** *****************
void info::search()
{
cout << "Enter your number for finding : " ;
cin >> num ;
for (i=0;i<=19;i++)
{
if (id[i] == num)
cout <<"Your number is " << num << " & your name is "<<n[i] ;
else
cout <<"Your number not exist ! \n" ;
}
} //end of search

//************************************************** *****************

void call()
{
info st ;
char act=' ' ;
cout << "1- add name & number 2- remove name & number ";
cout << "\n3- update name 4- sort student number " ;
cout << "\n5- search by student number " ;
cout << "\n\nEnter number of your action : " ;
cin >> act ;
switch(act)
{
case '1' :
st.add();
break;
case '2' :
st.remove();
break;
case '3' :
st.update();
break;
case '4' :
st.sort();
break;
case '5' :
st.search();
break;
default :
cout <<"Your number is incorrect !" ;
}
} //end of call method

//************************************************** *****************

int main()
{
char ans=' ';
do
{
call();
cout << "Do you want to contiue ? (y/n) : " ;
cin >> ans ;
} while(ans !='n');
getch() ;
return 0 ;
}

emad_67
جمعه 21 اردیبهشت 1386, 10:04 صبح
اما برنامه دوم
یک پشته هستش که یک عمل خاصی رو انجام می ده
(زیاد مهم نیست بدونید چیه مهم سوال من هستش)


در مورد این سوال هم میتونی عبارت #define رو حذف کنی و دو سازنده تو public به صورت زیر تعریف کنی که اولی برا حالت دیفالت باشه و دومی برای گرقتن اندازه از main ولی میشه ای دو حالتم رو با یک سازنده نوشت ولی حالا من با دوتا که خودت گفته بودی نوشتم
[CODE]
stack(int);
stack();
که اینا prototype دیگه خودت بدنه تابع رو تعریف کن
اول پیش نمونه ها رو تو خود قسمت public تعریف کن بعد بیا بیرون از کلاس بدنه تابع ها رو بنویس اینجوری برنامه خوانا تر میشه