PDA

View Full Version : سوال: مشکل در مرتب سازی حبابی



ms-ninja
پنج شنبه 21 آذر 1392, 22:28 عصر
با سلام
من یک برنامه نوشتم که لیست دنشجو هایی رو وراد میکنید
و یک سری عملیات دیگر هم انجام میدیم

من در جست و جوی حبابی به مشکل خوردم





#include <conio.h>
#include <stdio.h>
int sstno,i,c;
int hold;
const count=10;
void main()
{
int number=0,temp=0;
struct std
{
int stno;
char name[30];
int grade;
}student[10];


int select;


while(1){
printf("\n1) add ");
printf("\n2) delete ");
printf("\n3) list ");
printf("\n4) mr ");
printf("\n5) exit ");
printf("\nplease enter number ");
scanf("%d",&select);
switch(select)
{
case 1:
{

printf("\n enter stno ");
scanf("%d",&student[number].stno);

printf("\n enter name ");
scanf("%s",student[number].name);


printf("\n enter grade ");
scanf("%d",&student[number].grade);

number++;


break;
}

case 2:
{
printf("\n enter stno for delete ");
scanf("%d",&temp);
for(int i=0;i<number;i++)
{
if(temp==student[i].stno)
{
student[i].stno=-1;
}
}

}
break;
case 3:
{

for(int i=0;i<number;i++)
{
if(student[i].stno!=-1)
{
printf("\n %d",student[i].stno);
printf("\t %s",student[i].name);
printf("\t %d",student[i].grade);
}
}
}

break;
case 4:
{
//start Bubble sorting
for (int c=0;c<count;c++)
{
for(int i=0;i<count-1;i++)
{
if(student[i].stno<student[i+1].stno)
{
hold=student[i].stno;
student[i].stno=student[i+1].stno;
student[i+1].stno=hold;
}
}
}
//end bubble sorting

for (int i=0;i<count;i++)
{
printf("\n %d",student[i].stno);

}
}

break;
case 5:
{
return;
}

}
}






}


لطفا دوستانی کمک کنن


با تشکر

fahimeh1512
پنج شنبه 21 آذر 1392, 23:23 عصر
خب میگفتی تو اجراش چه مشکلی ایجاد میشه
من که کدتو نگاه کردم فکر کنم این تغییرات و باید ایجاد کنی


struct hold
{
int stno;
char name[30];
int grade;
}

for (int c=1;c<count;C++‎)
{
for(int i=0;i<count-c;i++)
{
if(student[i].stno>student[i+1].stno)
{
hold=student[i];
student[i].stno=student[i+1];
student[i+1]=hold;
}
}
}

به جای متغیر hold که از نوع اینتیجره یه استراکچر تعریف کردم که کل مشخصات دانشجو جابجا بشه نه فقط شماره دانشجوییش
شرط کوچک تری و بزرگ تری رو هم برعکس کردم
شرط ایف رو هم تغییر دادم
ضمنا تو قسمتی ک میخوای شماره دانشجویی رو از تو ارایه ت حذف کنی جایی ک شماره دانشجویی مورد نظر پیدامیشه break باید داخل همون if باشه نه خارجش
حالا اینا رو امتحان کن ببین درسته؟

saina2006
جمعه 22 آذر 1392, 04:34 صبح
فقط یه نکته، از کجا مطمئنی که کاربر همه 10 تا دانشجو رو وارد میکنه و بعد گزینه 4 رو انتخاب میکنه؟

fahimeh1512
جمعه 22 آذر 1392, 08:48 صبح
ساینا جان راست میگه count رو اول برنامه صفر بذار بعد تو این قسمت دستور count++ رو اضافه کن

case 1:
{

printf("\n enter stno ");
scanf("%d",&student[number].stno);

printf("\n enter name ");
scanf("%s",student[number].name);


printf("\n enter grade ");
scanf("%d",&student[number].grade);

number++;
count++;

break;
}



این قسمت رو هم اینجوری بنویس


case 2:
{
printf("\n enter stno for delete ");
scanf("%d",&temp);
for(int i=0;i<number;i++)
{
if(temp==student[i].stno)
{
student[i].stno=-1;
count--;
break;
}
}

}

ms-ninja
جمعه 22 آذر 1392, 10:58 صبح
به hold گیر میده :متفکر:


#include <conio.h>
#include <stdio.h>
void main()
{
int count=10;
int number=0,temp=0;
struct hold
{
int stno;
char name[30];
int grade;
}student[10];


int select;
while(1){
printf("\n1) add ");
printf("\n2) delete ");
printf("\n3) list ");
printf("\n4) mr ");
printf("\n5) exit ");
printf("\nplease enter number ");
scanf("%d",&select);
switch(select)
{
case 1:
{

printf("\n enter stno ");
scanf("%d",&student[number].stno);

printf("\n enter name ");
scanf("%s",student[number].name);


printf("\n enter grade ");
scanf("%d",&student[number].grade);

number++;
count++;

break;
}

case 2:
{
printf("\n enter stno for delete ");
scanf("%d",&temp);
for(int i=0;i<number;i++)
{
if(temp==student[i].stno)
{
student[i].stno=-1;
count--;
break;
}
}

}

case 3:
{

for(int i=0;i<number;i++)
{
if(student[i].stno!=-1)
{
printf("\n %d",student[i].stno);
printf("\t %s",student[i].name);
printf("\t %d",student[i].grade);
}
}
break;
}


case 4:
{
for(int c=1;c<count;c++)
{
for(int i=0;i<count-c;i++)
{
if(student[i].stno>student[i+1].stno)
{
hold=student[i];
student[i].stno=student[i+1];
student[i+1]=hold;
}
}
}

break;
}


case 5:
{
return;
}

}
}






}

fahimeh1512
جمعه 22 آذر 1392, 11:26 صبح
ببین مشکلش حل شده؟



#include <stdio.h>
#include <conio.h>

int sstno,i,c;
struct hold
{
int stno;
char name[30];
int grade;
};
int count=0;
void main()
{
int number=0,temp=0;
struct std
{
int stno;
char name[30];
int grade;
}student[10];


int select;


while(1){
printf("\n1) add ");
printf("\n2) delete ");
printf("\n3) list ");
printf("\n4) mr ");
printf("\n5) exit ");
printf("\nplease enter number ");
scanf("%d",&select);
switch(select)
{
case 1:
{

printf("\n enter stno ");
scanf("%d",&student[number].stno);

printf("\n enter name ");
scanf("%s",student[number].name);


printf("\n enter grade ");
scanf("%d",&student[number].grade);

number++;
count++;
//break;
}
case 2:
{
printf("\n enter stno for delete ");
scanf("%d",&temp);
for(int i=0;i<number;i++)
{
if(temp==student[i].stno)
{
student[i].stno=-1;
count--;
break;
}
}
}


case 3:
{
for(int i=0;i<number;i++)
{
if(student[i].stno!=-1)
{
printf("\n %d",student[i].stno);
printf("\t %s",student[i].name);
printf("\t %d",student[i].grade);
}
}
}
//break;
case 4:
{
//start Bubble sorting
for (int c=1;c<count;C++‎‎)
{
for(int i=0;i<count-c;i++)
{
if(student[i].stno>student[i+1].stno)
{
hold=student[i];
student[i].stno=student[i+1];
student[i+1]=hold;
}
}
}
//end bubble sorting
for (int i=0;i<count;i++)
{
printf("\n %d",student[i].stno);
}
}
//break;
case 5:
{
return;
}
}
}






}


کامپایلرت چیه؟ من کدتو تو ویژوال استودیو مرتب کردم ولی اجرا نگرفتم به همه چی گیر میداد

ms-ninja
جمعه 22 آذر 1392, 11:32 صبح
نه این متن اررور


--------------------Configuration: Cpp1 - Win32 Debug--------------------
Compiling...
Cpp1.cpp
c:\users\administrator\desktop\c\cpp1.cpp(91) : error C2513: 'struct hold' : no variable declared before '='
c:\users\administrator\desktop\c\cpp1.cpp(92) : error C2679: binary '=' : no operator defined which takes a right-hand operand of type 'struct main::std' (or there is no acceptable conversion)
c:\users\administrator\desktop\c\cpp1.cpp(93) : error C2275: 'hold' : illegal use of this type as an expression
c:\users\administrator\desktop\c\cpp1.cpp(6) : see declaration of 'hold'
Error executing cl.exe.

Cpp1.obj - 3 error(s), 0 warning(s)

fahimeh1512
جمعه 22 آذر 1392, 11:48 صبح
چرا std رو پاک کردی؟؟؟
اون استراکچری ک اسمش std بود رو بذار اخرشم یه ارایه ده تایی همونجوری ک تعریف کرده بودی بذار

ولی متغیر hold هم باید جداگانه ب صورت استراکچر (ب عنوان ی متغیر کمک ) تعریف بشه ولی نیاز نیست ارایه ده تایی از همون نوع تعریف بشه
کدی ک من گذاشتم و نگاه کن این مشکلی نداره

ms-ninja
جمعه 22 آذر 1392, 13:03 عصر
پاک نکردم

همون کد شما رو قرار دادم

شما خودتون برنامه رو کامپایل کردین؟

ms-ninja
جمعه 22 آذر 1392, 13:13 عصر
تو turbo c++ هم ارور میده


Info :Compiling C:\PROGRAM FILES\BC5\BIN\noname00.cpp
Error: noname00.cpp(91,30):Improper use of typedef 'hold'
Error: noname00.cpp(92,41):Cannot convert 'std' to 'int'
Error: noname00.cpp(93,43):Improper use of typedef 'hold'

fahimeh1512
جمعه 22 آذر 1392, 13:14 عصر
من با ویژوال کامپایل کردم ارور خاصی نداشت ولی مثلا به اسپیس و فضاها اشکال میگرفت
ب خاطر همین ازت پرسیدم کامپایلرت چیه
حالا اینی ک من گذاشتمو امتحان کن

ms-ninja
جمعه 22 آذر 1392, 13:21 عصر
امکانش هست سورسه خودت ون رو اینجا ضمیمه کنید

fahimeh1512
جمعه 22 آذر 1392, 13:46 عصر
راستی مشکل استراکچرو پیداکردم تعریف hold رو کلا پاک کن ولی اون یکی رو اینجوری بذار

struct std
{
int stno;
char name[30];
int grade;
}holder,student[10];

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

student[i]=student[i+1];

ms-ninja
جمعه 22 آذر 1392, 14:00 عصر
درست شد ممنون

میشه تو قرار دادن یک نوع جست و جو هم کمک کنید

fahimeh1512
جمعه 22 آذر 1392, 14:18 عصر
اگه منظورت این شکلیه که کاربر یه شماره دانشجویی رو بده و بخواد مشخصات اون دانشجو رو چاپ کنی:
حلقه ش مثل case 2 میشه یعنی دنبال اون شماره دانشجویی میگرده و هرجا ک برابر بود تو حلقه if ب جای این دو خط
student[i].stno=-1;
count--;
سه تا پرینت اف بذار و نام و شماره دانشجویی و معدلشو چاپ کن
بریک بذار باشه همونجا