View Full Version : ورود اطلاعات در یونیون ها
fati63
چهارشنبه 08 آذر 1391, 22:25 عصر
با سلام
برنامه ای که شماره شناسنامه یا معدل یا شماره دانشجویی 5 دانشجو را گرفته و نزولی مرتب کند.
برای این برنامه از تعریف یونیون به صورت زیراستفاده شده ولی برای ورود اطلاعات مشکل دارم آیا بین دستور cin میتوان از or استفاده کرد؟ لطفا راهنمایی کنید چطور بنویسم؟؟
union student {
int id;
int ids;
float avg;
};
void main()
{
int i;
union student st [5];
for(i=0;i<5;i++)
{
cin>>st[i].id ||cin>>st[i].ids||cin>>st[i].avg;
}
مسعود اقدسی فام
چهارشنبه 08 آذر 1391, 22:29 عصر
با سلام
برنامه ای که شماره شناسنامه یا معدل یا شماره دانشجویی 5 دانشجو را گرفته و نزولی مرتب کند.
برای این برنامه از تعریف یونیون به صورت زیراستفاده شده ولی برای ورود اطلاعات مشکل دارم آیا بین دستور cin میتوان از or استفاده کرد؟ لطفا راهنمایی کنید چطور بنویسم؟؟
union student {
int id;
int ids;
float avg;
};
void main()
{
int i;
union student st [5];
for(i=0;i<5;i++)
{
cin>>st[i].id ||cin>>st[i].ids||cin>>st[i].avg;
}
خب این یا به چه معنیه؟ یا این رو بگیره یا اون رو؟!
fati63
چهارشنبه 08 آذر 1391, 22:36 عصر
در صورت تمرین از کلمه یا استفاده شده یعنی یا معدل بگیرد یا شماره شناسنامه یا شماره دانشجویی و سپس مرتب سازی رو بر اساس یکی از آنها انجام بده .نمیدونم چطور ورودی بنویسم
smemamian
چهارشنبه 08 آذر 1391, 23:08 عصر
ممنون میشم کسی در مورد union هم توضیحی بدهد .
مسعود اقدسی فام
چهارشنبه 08 آذر 1391, 23:19 عصر
در صورت تمرین از کلمه یا استفاده شده یعنی یا معدل بگیرد یا شماره شناسنامه یا شماره دانشجویی و سپس مرتب سازی رو بر اساس یکی از آنها انجام بده .نمیدونم چطور ورودی بنویسم
خب فرض کن فقط می خوای از معدل استفاده کنی. فقط قسمت معدل رو دریافت کن و مرتب کن و غیره. استاد به خودت واگذار کرده که یکی رو انتخاب کنی. نه اینکه کد خودش هوشمند یکی رو انتخاب کنه.
H_G_G_I
پنج شنبه 09 آذر 1391, 09:49 صبح
فکر کنم شما کلا مفهوم union رو خوب نفهمیدین !
الان این که نوشتین زیاد منطقی نیست !
union ها محل اشتراک هستن !
اندازه union برابر انداره بزرگترین عضوش هست .
ادرس همه اعاضشم یکی هست !
یعنی وقتی شما id رو تغییر می دی اون قسمت از حافظه (به اندازه 4 بایت) تغییر می کنه !
ids و avg هم از همون قسمت حافظه استفاده می کنن پس مقدار اونا هم میشه هرچی تو اون قمست حافظه هست .
مثلا تو این مثال .
ما می تونیم بایت های val رو بگیریم . بدون شیفت دادن !
union test
{
unsigned int val;
unsigned char bytes[4];
struct
{
unsigned char byte1,byte2,byte3,byte4;
};
} uvar;
uvar.val = 0xFFFFFFFF;
printf("%d\n%d\n%d\n%d\n", uvar.byte1, uvar.byte2, uvar.byte3, uvar.byte4);
fati63
جمعه 10 آذر 1391, 10:31 صبح
برنامه بالا یه منو براش نوشتم و با یونیون حل کردم دوستان نظر بدن ببینم درسته؟؟؟؟،البته زیر برنامه ای ننوشتم اگه درسته تا زیر برنامه ای بنویسم
[CPP][#include<iostream.h>
#include<conio.h>
union student {
int id;
int ids;
float avg;
};
void main()
{ int x,i,j;
union student st[20],temp;
cout<<"1-moadel"<<"\n";
cout<<"2-shomare shenasname"<<"\n";
cout<<"3-shomare daneshjoe"<<"\n";
cin>>x;
while(x>=1&& x<=3)
{
if(x==1)
{
for(i=0;i<20;i++)
cin>>st[i].avg;
for(i=20;i>0;i--)
for(j=0;j<i;j++)
if (st[j].avg<st[j+1].avg)
{
temp=st[j];
st[j]=st[j+1];
st[j+1]=temp;
}
for(i=0;i<20;i++)
cout <<st[i].avg<< " ";
}
else
if (x==2)
{
for(i=0;i<20;i++)
cin>>st[i].id;
for(i=20;i>0;i--)
for(j=0;j<i;j++)
if (st[j].id<st[j+1].id)
{
temp=st[j];
st[j]=st[j+1];
st[j+1]=temp;
}
for(i=0;i<20;i++)
cout <<st[i].id<< " ";
}
else
if (x==3)
{
for(i=0;i<20;i++)
cin>>st[i].ids;
for(i=20;i>0;i--)
for(j=0;j<i;j++)
if (st[j].ids<st[j+1].ids)
{
temp=st[j];
st[j]=st[j+1];
st[j+1]=temp;
}
for(i=0;i<20;i++)
cout <<st[i].ids<< " ";
}
getch();
} }/CPP]
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.