ورود

View Full Version : مشکل این برنامه چیه؟



pc_math
یک شنبه 20 آبان 1386, 22:01 عصر
برنامه ای بنویسید که رشته ای را از کاربر بگیرد و آن را بصورت معکوس چاپ کند(با استفاده از پشته ها):
#include <iostream.h>
#include <conio.h>
#include <math.h>
#define max 100;
int s[max];
int top=0;
int i;
void push(char s[], int i);
int pop();
int main(){
char ch;
cout<<"Enter string:";
cin>>i;
while(ch!=13)
push(s[max],i);
cout<<pop;
getch();
return 0;
}
//
void push(char s[], int i)
{
if(top >= max){
cout<<"\n stack is full.";
getch();
return;
}
s[top]=i;
top++;
}
//
int pop()
{
top--;
if(top < 0){
cout<<" \n stack is empty";
return HUGE_VAL;
}
return s[top];
}

(لطفا نخندید ضعیف ترین دانشجو تو کلاسمونم)

emad_67
دوشنبه 21 آبان 1386, 00:26 صبح
اشکالات برنامت:
نمیتونی بنویسی:


int s[max];

مقدار داخل آرایه حتما باید const باشه یعنی max رو به صورت const تعریف کرده باشی یا اینکه عینا یه عدد رو بزاری. در غیر این صورت باید از آرایه داینامیک استفاده کنی.


int pop();

باید مقدار برگشتی pop یک کاراکتر یعنی char باشه نه int.
توی این قسمت:


while(ch!=13)
push(s[max],i);

ch رو از ورودی نگرفتی ولی توی حلقه ازش استفاده کردی تازه بازم اشتباه هست چون تو میخوای یه رشته رو رو از ورودی بگیری که ch فقط یه کاراکتر رو میگیره. بهتره از cin.get() استفاده کنی برای خوندن کاراکتر به کاراکتر رشته.


push(s[max],i);

برای فراحوانی pudh باید بنویسی:


push(s,i);

در کل تابع pudh غلطه چون شما باید کاراکتر به تابع ارسال کنی نه آرایه. این وسط i هم معلوم نیست اصلا چیکارست. چون آرایه رو سراسری تعریف کردی نیازی به ارسال به تابع هم نیست. فقط کافیه تک تک کاراکتر ها رو ارسال کنی.


cout<<pop;

اگه قراره pop یک کاراکتر برگردونه باید اونو تو یه حلقه فراخوانی کنی چون اینجوری فقط یک کاراکتر برمیگردونه. برای فراخوانی هم باید اینجوری بنویسی:


cout<<pop();