مشکل در مرتب سازی آرایه (فوری)
با سلام :20:
برنامه ای به زبان c نوشتم که
مشخصات دانشجویانی را گرفته و خروجی های خاصی مانند مرتب کردن و چاپ و تغییرات و پیدا کردن را روی این داده ها اعمال میکند
در زمان اجرای برنامه و پس از وارد کردن حداقل 3 دانشجو برنامه بعد از مرتب سازی داده ها یه (sort) در سطر اول منو معدل یکی از دانشجویان را به جای یکی از گزینه های منو چاپ میکند (اشکال برنامه دقیقا اینجاست) :21:
مشخصال برنامه :
1 - نزدیک به 6 تا فانکشن برای اجرای عملیات منو دارد
2 - در مرتب سازی ، از مرتب سازی دو دو یی با استفاده از آرایه ها و بر روی فامیلی دانشجو استفاده شده است ( مربوط به اشکال برنامه )
Source برنامه را قرار دادم .
کد:
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <iostream.h>
//*******************CONSTANT***********************
const int n = 100;
//********************VARIABLE***********************
int q,w,i,p,k=-1;
char firstname[n][16],lastname[n][16],number[n][13],average[n][6],menu;
char namech[1][16],familych[1][16],tempn[1][16],tempf[1][16],tempnu[1][13],tempa[1][6];
//********************FUNCTION***********************
int Find(void);
void Name(int l);
void Family(int r);
void Numbers(int f);
void Ave(int t);
void Printd(int e);
//********************menu***************************
void main(void)
{
do
{
clrscr();
printf("\n\n1.Enter Data");
printf("\n\n2.Change Data");
printf("\n\n3.Find Data");
printf("\n\n4.Print Data");
printf("\n\n5.Sort Data");
printf("\n\n6.Exit");
printf("\n\nEnter Your Choice:");
menu=getche();
switch (menu)
{
case '1':
{
k++;
Name(k);
Family(k);
Numbers(k);
Ave(k);
break;
}
case '2':
{
i=Find();
if ( i>=0)
{
Printd(i);
Name(i);
Family(i);
Numbers(i);
Ave(i);
}//********END OF IF
else printf("Student Not Availabel");
getch();
break;
}
case '3':
{
i=Find();
Printd(i);
getch();
break;
}
case '4':
{
clrscr();
for (int i=0 ; i<=k ; i++)
Printd(i);
getch();
break;
}
case '5':
{
for ( int i=1 ; i<k ; i++)
for ( int j=0 ; j<=k-i ; j++)
if (strcmp(lastname[j],lastname[j+1])>0)
{
strcpy(tempn[1],lastname[j]);
strcpy(lastname[j],lastname[j+1]);
strcpy(lastname[j+1],tempn[1]);
strcpy(tempf[1],firstname[j]);
strcpy(firstname[j],firstname[j+1]);
strcpy(firstname[j+1],tempf[1]);
strcpy(tempnu[1],number[j]);
strcpy(number[j],number[j+1]);
strcpy(number[j+1],tempnu[1]);
strcpy(tempa[1],average[j]);
strcpy(average[j],average[j+1]);
strcpy(average[j+1],tempa[1]);
}//******** END OF SORT
printf("\n\n%s","yes.............................");
getch();
break;
}
case '6':
{
menu='6';
printf("\n\n\n\n\n\t\t\t********GOOD BAY********");
getch();
break;
}
}//***********END OF SWITCH
}//**********END OF DO
while (menu!='6');
}//***********END OF MAIN
//********************FUNCTION***********************
void Name(int l)
{
printf("\n\n Enter First Name:");
gets(firstname[l]);
}
void Family(int r)
{
printf("\n\n\ Enter Last Name:");
gets(lastname[r]);
}
void Numbers(int f)
{
printf("\n\n Enter Number of Student:");
gets(number[f]);
}
void Ave(int t)
{
printf("\n\n Enter Average:");
gets(average[t]);
}
int Find(void)
{
printf("\n\nplease Enter First Name:");
gets(namech[1]);
printf("\n\nplease Enter Last Name:");
gets(familych[1]);
for (int i=0; i<=k ; i++)
{
q=strcmp(namech[1],firstname[i]);
w=strcmp(familych[1],lastname[i]);
if((q==0)&&(w==0))
{
p=i;
printf("\n\n%s\n","Exist in Table.......... ");
}
else p=-1;
if (p!=-1) break;
}
return p;
}
void Printd(int e)
{
if (e>=0)
{
printf("\nFIRST NAME: %s",firstname[e]);
printf("\nLAST NAME: %s",lastname[e]);
printf("\nNUMBER: %s",number[e]);
printf("\nAVREAG: %s\n",average[e]);
}
else
printf("\n Not Exist in Table.");
}
لطفا مرا راهنمایی کنید.