PDA

View Full Version : مرتب سازی برحسب



Collector
پنج شنبه 08 دی 1390, 14:26 عصر
سلام

من یه آرایه دارم که بر حسب سن مرتبش میکنم.
من میخاوم دو تا آرایه دیگه نام و نام خانوادگی که مربوط به سن هست با اون مرتب بشن.
و اطلاعات مثلا کمترین سن رو چاپ کنم.

اصول کار چطوریه ؟ من قبلا اینجا تاپیک (http://barnamenevis.org/showthread.php?319859-%D9%85%D8%B4%DA%A9%D9%84-%D8%A8%D8%A7-%D8%A8%D8%A7%D8%B2%DB%8C%D8%A7%D8%A8%DB%8C-%D8%A7%D8%B7%D9%84%D8%A7%D8%B9%D8%A7%D8%AA-%D8%A8%D8%A7-%D8%A2%D8%B1%D8%A7%DB%8C%D9%87-%28%D8%A8%D8%A7%D8%B2%DB%8C%D8%A7%D8%A8%DB%8C-%D9%85%D8%B4%D8%AE%D8%B5%D8%A7%D8%AA-%D8%AF%D8%A7%D9%86%D8%B4%D8%AC%D9%88%29) رو زدم کسی جواب نداد.

fshb_ 1370
پنج شنبه 08 دی 1390, 15:27 عصر
سلام
شما باید به صورت موازی هر 3 آرایه رو مرتب کنید. مثلا عنصر 4 از آرایه سن کوچکترین سن هست و باید در خانه 0 آزایه سن قرار بگیره پس عنصر 4ام از دو آرایه دیگر نیز در خانه 0 آرایه خود قرار میگیره و بدین ترتیب آرایه مرتب میشه.
موفق باشید.

Collector
پنج شنبه 08 دی 1390, 17:59 عصر
سلام
شما باید به صورت موازی هر 3 آرایه رو مرتب کنید. مثلا عنصر 4 از آرایه سن کوچکترین سن هست و باید در خانه 0 آزایه سن قرار بگیره پس عنصر 4ام از دو آرایه دیگر نیز در خانه 0 آرایه خود قرار میگیره و بدین ترتیب آرایه مرتب میشه.
موفق باشید.

خوب وقتي مرتب كردم از كجا بدونم عضو صفر كدوم ايندكس بوده.

quiet_programmer
جمعه 09 دی 1390, 12:47 عصر
با سلام.


خوب وقتي مرتب كردم از كجا بدونم عضو صفر كدوم ايندكس بوده.

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

ولی روش بهتر استفاده از استراکچره. کد زیر رو ببین. فکر نکنم نیازی به توضیح بیشتر داشته باشه ولی اگه داشت بگو تا بگم.

#include <iostream.h>
#include<string.h>

struct Info
{
string Name;
string LastName;
int Age;
};
void main()
{
Info StuInfo[100];

for(int i=0;i<100;i++)
{
cout<<"Enter Student Name:";
cin>>StuInfo[i].Name;
cout<<"Enter Student LastName:";
cin>>StuInfo[i].LastName;
cout<<"Enter Student Age:";
cin>>StuInfo[i].Age;
}

//مرتب سازی
//البته میتونی به روشهای دیگه هم مرتب کنی
//مشکلی پیش نمیاد
for(int i=0;i<100;i++)
for(int j=0;j<100;j++)
if(StuInfo[i].Age>StuInfo[j].Age)
{
Info Temp;
Temp=StuInfo[i];
StuInfo[i]=StuInfo[j];
StuInfo[j]=Temp;
}
//چاپ اطلاعات کمترین سن
//چون اطعلاعات رو بر اساس سن و به صورت غیر نزولی مرتب کردیم
//کمترین سن در عنصر صفر قرار داره
//پس
cout<<"Name is: "<<StuInfo[0].Name<<endl<<"Family is:"<<StuInfo[0].LastName<<endl<<"Age is: "<<StuInfo[0].Age<<endl;
}

یاحق.
موفق باشید/

Collector
جمعه 09 دی 1390, 23:25 عصر
با سلام.

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

ولی روش بهتر استفاده از استراکچره. کد زیر رو ببین. فکر نکنم نیازی به توضیح بیشتر داشته باشه ولی اگه داشت بگو تا بگم.

یاحق.
موفق باشید/

سلام

ممنون که پاسخ دادید اگر تاپیک قبلی من رو دیده باشید گفته بودم که من فقط میخوام از آرایه استفاده کنم . نه از استراکچر یا کلاس
اگر این طوری بود که مشکلی نداشت .

quiet_programmer
شنبه 10 دی 1390, 00:52 صبح
با سلام.


اگر تاپیک قبلی من رو دیده باشید گفته بودم که من فقط میخوام از آرایه استفاده کنم . نه از استراکچر یا کلاس

خوب منم از آرایه استفاده کردم دیگه.
Info StuInfo[100];
شما به این چی میگین؟ آرایه ای که عناصر اون از نوع Info که نوع تعریف شده توسط برنامه نویسه. ولی اگه منظورت اینه که هر کدوم از اطلاعات در آرایه جداگانه ذخیره بشه خوب فرمایش جناب fshb_ 1370 (http://barnamenevis.org/member.php?119172-fshb_-1370) درسته و شما باید به همون روش عمل کنید.

یاحق.
موفق باشید/

Collector
شنبه 10 دی 1390, 10:46 صبح
من ميام يك آرايه رو مرتب ميكنم
عضو 3 با 0 عوض ميشود
آرايه هاي ديكر را جطوري 3 را با0 عوض كنم

quiet_programmer
شنبه 10 دی 1390, 12:58 عصر
با سلام.

من ميام يك آرايه رو مرتب ميكنم
عضو 3 با 0 عوض ميشود
همون لحظه مرتب سازی جایی که باید جای دو عنصر رو جابجا کنی آرایه های دیگه رو هم جابجا کن. مثل کد زیر که هنگام جابجا کردن سن میاد نام و نام خ رو هم جابجا میکنه.

#include <iostream.h>
#include<string.h>
void main()
{
string Name[100];
string LastName[100];
int Age[100];

for(int i=0;i<100;i++)
{
cout<<"Enter Student Name:";
cin>>Name[i];
cout<<"Enter Student LastName:";
cin>>LastName[i];
cout<<"Enter Student Age:";
cin>>Age[i];
}

for(int i=0;i<100;i++)
for(int j=0;j<100;j++)
if(Age[i]>Age[j])
{
swap(Age[i],Age[j]);
swap(Name[i],Name[j]);
swap(LastName[i],LastName[j]);
}
//چاپ اطلاعات کمترین سن
//چون اطعلاعات رو بر اساس سن و به صورت غیر نزولی مرتب کردیم
//کمترین سن در عنصر صفر قرار داره
//پس
cout<<"Name is: "<<Name[0]<<endl<<"Family is:"<<LastName[0]<<endl<<"Age is: "<<Age[0]<<endl;
}

رویه swap رو خودت پیاده سازی کن.مقدار دو پارامتر ورودی رو با یکدیگه عوض میکنه.

یاحق.
موفق باشید/

Collector
چهارشنبه 14 دی 1390, 20:21 عصر
سلام

در این برنامه من وقتی مقدارها رو وارد میکنم (توی ضمیمه هست)
برای اولین بار که max age رو میزنم درست نشون میده ولی وقتی اینتر رو میزنم و وارد منو میشم و دوباره max age رو میزنم.

مقدار نام و نام خانوادگی رو درست نشون نمیده
وهمین طور برای min age

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

# define Max_Stu 3

int Count = 0 , Any;

void All_Avg(float Avg);
void Insert(char **First_Name,char **Last_Name,float Avg,float Stu_Code,float Birth_Day,char **Location_Birth);
void Max_AVG(char **First_Name,char **Last_Name,float Avg,float Stu_Code,float Birth_Day,char **Location_Birth);
void Min_AVG(char **First_Name,char **Last_Name,float Avg,float Stu_Code,float Birth_Day,char **Location_Birth);
void Max_Age(char **First_Name,char **Last_Name,float Avg,float Stu_Code,float Birth_Day,char **Location_Birth);
void Min_Age(char **First_Name,char **Last_Name,float Avg,float Stu_Code,float Birth_Day,char **Location_Birth);

void Min_AVG(char **First_Name,char **Last_Name,float *Avg,float *Stu_Code,float *Birth_Day,char **Location_Birth)
{
int i,j;
float x;
for(i = 0; i < Max_Stu - 1; i++)
for(j = i + 1; j < Max_Stu; j++)
if (Avg[i] > Avg[j])
{
x = Avg[i];
Avg[i] = Avg[j];
Avg[j] = x;
}
clrscr();
cout<<"Min Avg is = "<< Avg[0]<<endl<<endl;

cout<<"Stu Code is = "<< Stu_Code[0]<<endl;
cout<<"First Name is = "<< First_Name[0]<<endl;
cout<<"Last Name is = "<< Last_Name[0]<<endl;
cout<<"Birth Day is = "<< Birth_Day[0]<<endl;
cout<<"Location Birth is = "<< Location_Birth[0]<<endl;

Any = getche();
clrscr();
}

void Max_AVG(char **First_Name,char **Last_Name,float *Avg,float *Stu_Code,float *Birth_Day,char **Location_Birth)
{
int i, j;
float x;
for(i = 0; i < Max_Stu - 1; i++)
for(j = i + 1; j < Max_Stu-1; j++)
if (Avg[i] > Avg[j])
{
x = Avg[i];
Avg[i] = Avg[j];
//First_Name[i] = First_Name[j];
Avg[j] = x;
}
clrscr();
cout<<"Max Avg is = "<< Avg[0]<<endl<<endl;

cout<<"Stu Code is = "<< Stu_Code[0]<<endl;
cout<<"First Name is = "<< First_Name[0]<<endl;
cout<<"Last Name is = "<< Last_Name[0]<<endl;
cout<<"Birth Day is = "<< Birth_Day[0]<<endl;
cout<<"Location Birth is = "<< Location_Birth[0]<<endl;

Any = getche();
clrscr();
}

void Min_Age(char **First_Name,char **Last_Name,float *Avg,float *Stu_Code,float *Birth_Day,char **Location_Birth)
{
float Stu_Code_1[Max_Stu];
float Birth_Day_1[Max_Stu];

char **First_Name_1, F_Name[21];
First_Name_1= new char * [Max_Stu];

char **Last_Name_1, L_Name[21];
Last_Name_1 = new char * [Max_Stu];

for(int i=0;i <= Max_Stu;i++)
{
Birth_Day_1[i] = Birth_Day[i];
}

for(int i=0;i <= Max_Stu;i++)
{
Stu_Code_1[i] = Stu_Code[i];
}

for(int i=0;i <= Max_Stu;i++)
{
First_Name_1[i] = First_Name[i];
}

for(int i=0;i <= Max_Stu;i++)
{
Last_Name_1[i] = Last_Name[i];
}

int i, j;
float temp;
for (i = Max_Stu - 1; i >= 0; i--)
{
for (j = 1; j <= i; j++)
{
if (Birth_Day_1[j-1] > Birth_Day_1[j])
{
temp = Birth_Day_1[j-1];

Birth_Day_1[j-1] = Birth_Day_1[j];
Stu_Code_1[j-1] = Stu_Code_1[j];
First_Name_1[j-1]= First_Name_1[j];
Last_Name_1[j-1] = Last_Name_1[j];

Birth_Day_1[j] = temp;
}
}
}
clrscr();
cout<<"Min Birth Day is = "<< Birth_Day_1[0]<<endl<<endl;
cout<<"Stu Code is = "<< Stu_Code_1[0]<<endl;
//cout<<"First Name is = "<< *(First_Name_ + 0)<<endl;
cout<<"First Name is = "<< First_Name_1[0]<<endl;
cout<<"Last Name is = "<< Last_Name_1[0]<<endl;
cout<<"Avg is = "<< Avg[0]<<endl;
cout<<"Location Birth is = "<< Location_Birth[0]<<endl;

Any = getche();
clrscr();
}

void Max_Age(char **First_Name,char **Last_Name,float *Avg,float *Stu_Code,float *Birth_Day,char **Location_Birth)
{
//char *F_Name;
//F_Name = new char [21];

float Stu_Code_2[Max_Stu];
float Birth_Day_2[Max_Stu];

char **First_Name_2, F_Name_[21];
First_Name_2 = new char * [Max_Stu];

char **Last_Name_2, L_Name[21];
Last_Name_2 = new char * [Max_Stu];

for(int i=0;i <= Max_Stu;i++)
{
Birth_Day_2[i] = Birth_Day[i];
}

for(int i=0;i <= Max_Stu;i++)
{
Stu_Code_2[i] = Stu_Code[i];
}

for(int i=0;i <= Max_Stu;i++)
{
First_Name_2[i] = First_Name[i];
//*(First_Name_ + i) = *(First_Name + i);
}

for(int i=0;i <= Max_Stu;i++)
{
Last_Name_2[i] = Last_Name[i];
}

int i, j;
float temp;
for (i = Max_Stu - 1; i >= 0; i--)
{
for (j = 1; j <= i; j++)
{
if (Birth_Day_2[j-1] < Birth_Day_2[j])
{
temp = Birth_Day_2[j-1];

Birth_Day_2[j-1] = Birth_Day_2[j];
Stu_Code_2[j-1] = Stu_Code_2[j];
//*(First_Name_ + j + 1)= *(First_Name_ + j);
First_Name_2[j-1] = First_Name_2[j];
Last_Name_2[j-1] = Last_Name_2[j];

Birth_Day_2[j] = temp;
}
}
}

clrscr();
cout<<"Max Birth Day is = "<< Birth_Day_2[0]<<endl<<endl;
cout<<"Stu Code is = "<< Stu_Code_2[0]<<endl;
//cout<<"First Name is = "<< *(First_Name_ + 0)<<endl;
cout<<"First Name is = "<< First_Name_2[0]<<endl;
cout<<"Last Name is = "<< Last_Name_2[0]<<endl;
cout<<"Avg is = "<< Avg[0]<<endl;
cout<<"Location Birth is = "<< Location_Birth[0]<<endl;

Any = getche();
clrscr();
}

void All_Avg(float *Avg)
{
float av = 0;

for(int s = 0; s <= Max_Stu-1; s++)
{
av += Avg[s];
}
clrscr();
cout<<"All AVG is : "<< av / Max_Stu;
Any = getche();
}

void Insert(char **First_Name,char **Last_Name,float *Avg,float *Stu_Code,float *Birth_Day,char **Location_Birth)
{
int count;

clrscr();
cout<<"*** WellCome To Insert New Student ***\n";

char *F_Name;
char *L_Name;
char *L_Birth;

for(int i = 0 ; i < Max_Stu; i++)
{
cout<<"\n---------- Enter Stu_Code Of Student : ";
cin>> Stu_Code[i];

cout<<"\n---------- Enter First Name Of Student : ";
F_Name = new char [21];
cin.get();
cin.get ( F_Name , 20 );
*(First_Name + i) = F_Name;

cout<<"\n---------- Enter Last Name Of Student : ";
L_Name = new char [21];
cin.get();
cin.get ( L_Name , 20 );
*(Last_Name + i) = L_Name;

cout<<"\n---------- Enter Birth Day Of Student : ";
cin>> Birth_Day[i];

cout<<"\n---------- Enter Location_Birth Of Student : ";
L_Birth = new char [21];
cin.get();
cin.get (L_Birth , 20);
*(Location_Birth + i) = L_Birth;

cout<<"\n---------- Enter Avg Of Student : ";
cin>> Avg[i];

clrscr();
}
Any = getche();
clrscr();
}

int main(void)
{
int Menu = 0;

char **First_Name, F_Name[21];
First_Name = new char * [Max_Stu];

char **Last_Name, L_Name[21];
Last_Name = new char * [Max_Stu];

char **Location_Birth, L_Birth[21];
Location_Birth = new char * [Max_Stu];

float Avg[Max_Stu];
float Stu_Code[Max_Stu];
float Birth_Day[Max_Stu];

for(int Tek = 0 ; Tek < 10 ; Tek++)
{
cout<<" *_*_*_* Menu *_*_*_*"<<endl<<endl;
cout<<"| 1 | --> Insert"<<endl;
cout<<"| 2 | --> All Avg"<<endl;
cout<<"| 3 | --> Max Avg"<<endl;
cout<<"| 4 | --> Min Avg"<<endl;
cout<<"| 5 | --> Max Age"<<endl;
cout<<"| 6 | --> Min Age"<<endl;
cout<<"| 7 | --> Exit"<<endl;

cout<<"\n\nPlease Enter Number : ";
cin >> Menu;
cout<<"\n";

if (Menu == 1) { Insert(First_Name,Last_Name, Avg, Stu_Code, Birth_Day,Location_Birth) ; }
if (Menu == 2) { All_Avg(Avg);}
if (Menu == 3) { Max_AVG(First_Name,Last_Name, Avg, Stu_Code, Birth_Day,Location_Birth) ; }
if (Menu == 4) { Min_AVG(First_Name,Last_Name, Avg, Stu_Code, Birth_Day,Location_Birth) ; }
if (Menu == 5) { Max_Age(First_Name,Last_Name, Avg, Stu_Code, Birth_Day,Location_Birth) ; }
if (Menu == 6) { Min_Age(First_Name,Last_Name, Avg, Stu_Code, Birth_Day,Location_Birth) ; }
if (Menu == 7)
{
clrscr();
cout<<"\n *_*_*_*_* Good Bye *_*_*_*_*";
break;
Any = getch();
}
Menu = 0;
}
return 0;
}