PDA

View Full Version : سوال: خروجی عجیب و غریب.



Faraz Mehraien
شنبه 02 آذر 1392, 17:47 عصر
با سلام .من یه برنامه نوشتم که یه سری عدد بگیره و وقتی عدد-1 وارد شد دیگر عددی نگیرد.با دریافت کلمه ی middle . و مرتب سازی صعودی آن عدد وسط رو نمایش بده.که یک خروجی عجیب می بینم.اشکال از کجاس؟؟#include <cstdlib>
#include <iostream>
#include <math.h>
#include <string.h>
using namespace std;

int main(int argc, char *argv[])
{
int counter,j,count,counter2,m;
char function[80];
float scores,varyans,middle,ave,sum=0,i;
float student [100];
cout<<"enter scores\n";
cout<<"for end enter-1\n";
for(counter=0;counter<100;counter++)
{
cin>>student[counter];
if(student[counter]==-1)
break;
}

count=counter;
cout<<"what to do\n";
cin>>function;
if(strcmp(function,"middle")==0)
{
for( ;counter>=0;counter--)
for(j=0;j<=count;j++)
if(student[j-1]<student[j])
{
i=student[j-1];
student[j-1]=student[j];
student[j]=i;
}
for(;count>1;count--)
cout<<student[count];
}
m=count/2;
cout<<student[m];
}
cout<<"\n";
system("PAUSE");
return EXIT_SUCCESS;
}

aminsaeedi
شنبه 02 آذر 1392, 19:44 عصر
سلام خسته نباشید
توی سومین حلقه برنامه j در اولین حالت با صفر مقدار دهی شده که بعدش j-1 در برنامه استفاده شده است که عدد منفی میشه و در آرایه student وجود نداره
به نظرم مشکل همینجا باشه

Faraz Mehraien
شنبه 02 آذر 1392, 21:23 عصر
آخه اگر قسمت اصلی برنامه اینجوری هم باشه هم خروجی درستی بوجود نمی آید for( ;counter>=0;counter--)
for(j=0;j<=(counter-1);j++)
if(student[j]<student[j+1])
{
i=student[j];
student[j]=student[j+1];
student[j+1]=i;
}
for(count=counter-1;count>=0;count--)
cout<<student[count];
}
m=(counter)/2;
cout<<"\n"<<student[m];

storm_saeed
شنبه 02 آذر 1392, 23:25 عصر
میشه صورت سوال رو یبار دیگه بگی خوب متوجه نشدم؟

aminsaeedi
یک شنبه 03 آذر 1392, 00:31 صبح
مشکلات برنامتون حل شد
درواقع منطقتون مشکل نداشت یک مقدار توی نوشتنتون مشکل داشتید
اون عدد هم عجیب و غریب نبود در واقع جواب درست رو می نوشته

#include <cstdlib>
#include <iostream>
#include <math.h>
#include <string.h>
using namespace std;

int main(int argc, char *argv[])
{
int counter,j,jj,count,counter2,m;
char function[80];
float scores,varyans,middle,ave,sum=0,i;
float student [100];
cout<<"enter scores\n";
cout<<"for end enter-1\n";
for(counter=0;counter<100;counter++)
{
cin>>student[counter];
if(student[counter]==-1)
break;
}

count=counter-1;
cout <<"what to do\n";
cin >>function;
if(strcmp(function,"middle")==0)
{
for( ;counter>=0;counter--)
for(j=0;j<count;j++)
if(student[j]<student[j+1])
{
i=student[j];
student[j]=student[j+1];
student[j+1]=i;
}
for(jj=count;jj>=0;jj--)
cout<<student[jj]<<endl;
}
m=count/2;
cout<<student[m];

cout <<"\n";
system("PAUSE");
return EXIT_SUCCESS;
}

Faraz Mehraien
یک شنبه 03 آذر 1392, 21:43 عصر
مشکل برنامه آخریه چی بود؟؟؟بعد چرا شما در دستور for اخر از j استفاده کردین؟؟

aminsaeedi
یک شنبه 03 آذر 1392, 21:47 عصر
من از j استفاده نکردم از jj استفاده کردم که اصلا مهم نیست

و اینکه توی خروجی تمام اعداد پشت سر هم نشان داده میشد
که من با endl جدا کردمشون

و اینکه توی خروجی -1 و سپس اعداد مرتب شده چاپ می شد که توی برنامه اولیه
count=counter-1
گذاشتم که دیگه -1 آخر رو چاپ نکنه

Faraz Mehraien
دوشنبه 04 آذر 1392, 07:52 صبح
من از j استفاده نکردم از jj استفاده کردم که اصلا مهم نیست

و اینکه توی خروجی تمام اعداد پشت سر هم نشان داده میشد
که من با endl جدا کردمشون

و اینکه توی خروجی -1 و سپس اعداد مرتب شده چاپ می شد که توی برنامه اولیه
count=counter-1
گذاشتم که دیگه -1 آخر رو چاپ نکنه
یعنی می شه به جای jj از j یا حتی count استفاده کرد؟؟؟

aminsaeedi
دوشنبه 04 آذر 1392, 09:47 صبح
از j میشه استفاده کرد چون داخل حلقه j نیستیم
از count هم میشه استفاده کرد ولی باید در قسمت تقسیم به جای count از counter -1 استفاده کرد
دلیل این -1 شدن هم ذخیره شدن عدد -1 در زمان دریافت ورودی ها هست و counter یک واحد اضافه تر از اعداد اصلی را در خودش جای داده