kitten
دوشنبه 02 دی 1387, 17:45 عصر
سلام دوستان
فرض کنید دم در تالار 1 آقای نگهبان دارای کامپیوتری است. ابتدا استاد وارد
می شود و تعداد دانشجویان را به او می گوید. هر دانشجو که وارد می شود شماره
دانشجویی او را با حرف i و هر که خارج می شود را با حرف o وارد می کند.( به
عنوان مثال i8610463 به معنای ورود دانشجویی با شماره 8610463 است و
o8610463به معنای خروج دانشجویی با شماره 8610463 است )
هرگاه نگهبان بخواهد لیست دانشجویان حاضر در تالار را داشته باشد d را تایپ می
کند. در این صورت *ابتدا اطلاعات **sort** می شود* و سپس در هر خط یک شماره
دانشجویی چاپ می گردد. هرگاه نگهبان بخواهد وضعیت دانشجویی را ببیند شماره
دانشجویی را با f وارد می کند (یعنی f8610463) که اگر دانشجو در تالار باشد i و
اگر بیرون تالار باشد o در یک خط چاپ می شود. اگر e را وارد کند برنامه تمام می
شود.
من این برنامه را نوشتم اما یه مشکل دارم با این که متغیر i بعد از هر حلقه افزایش می دهم اما دوباره عدد در ساختار قبلی جایگذاری می شه و برنامه ایراد داره
#include <iostream.h>
#include <stdio.h>
#include <string.h>
#include <fstream.h>
#include <math.h>
int i=0;
struct Student
{
char *number;
int status;
};Student *s;
int StrToInt(char* input)
{
int num=0;
for(int i=0;i<strlen(input);i++)
{
if(input[i]>=48 || input[i]<=57) // if is number
num=num*10+input[i]-48;
}
return num;
}
char *IntToStr(int stdno)
{char *x;
int count=1;
while(stdno>9)
{
stdno=stdno/10;
count ++;
}int p=count;
for(int i=0;i<count;i++,p--)
x[i]=stdno/pow(10,p-1);
return x;
}
int FindStd(struct Student *s,int len,int stdno)
{
char x[20];
int count=1;
int n=stdno;
while(stdno>9)
{
stdno=stdno/10;
count ++;
}int p=count;
for(int h=0;h<count;h++,p--)
{x[h]=n/pow(10,p-1);
n=n % (int)pow(10,p-1);
}x[h]='/0';
int index=-1;
for(int i=0;i<len;i++)
{
if(s[i].number=="")
break;
if(s[i].number==x)
{
index=i;
break;
}
}
return index;
}
void ShowList(struct Student *s,int len)
{
struct Student temp;
for(int i=0;i<len;i++)
{
char * minStNumber;
minStNumber=s[i].number;
int minindex=-1;
for(int j=i;j<len;j++)
{
if(strcmp(minStNumber,s[j].number)<0)
{
minStNumber=s[j].number;
minindex=j;
}
}
if(minindex!=-1)
{
temp.number=s[minindex].number;
temp.status=s[minindex].status;
s[minindex].number=s[i].number;
s[minindex].status=s[i].status;
s[i].number=temp.number;
s[i].status=temp.status;
}
}
for(int k=0;k<len;k++)
{
cout<<s[k].number<<" Status:";
if(s[k].status==1) cout<<"In";
else cout<<"Out";
cout<<endl;
}
}
readData()
{
ifstream fin;
char temp[9];
char n[7];
fin.open("c:\\in.txt");
int num;
fin>>num;
s = new Student[num+1];
while(!fin.eof())
{
fin>>temp;
if(temp[0]!='d') //if was not d
{
strcpy(n,temp+1);
}
if(temp[0]=='i')
{
s[i].status =1;
s[i].number=n;
i++;
}
else if(temp[0]=='o')
{
int y=StrToInt(n);
int index=FindStd(s,num,y);
if(index==-1)
{
cout<<"Error: a student number that not input call to output";
}
s[index].number=n;
}
else if(temp[0]=='f')
{
int z=StrToInt(n);
int index=FindStd(s,num,z);
if(index==-1)
cout<<"o"<<endl;
else
cout<<"i"<<endl;
}
else if(temp[0]=='d')
{
ShowList(s,num);
}
}
fin.close();
}
int main()
{
readData();
return 0;
}
اگه سوالم نامفهومه تابیشتر توضیح بدهم
اینم فایل in.txt
فرض کنید دم در تالار 1 آقای نگهبان دارای کامپیوتری است. ابتدا استاد وارد
می شود و تعداد دانشجویان را به او می گوید. هر دانشجو که وارد می شود شماره
دانشجویی او را با حرف i و هر که خارج می شود را با حرف o وارد می کند.( به
عنوان مثال i8610463 به معنای ورود دانشجویی با شماره 8610463 است و
o8610463به معنای خروج دانشجویی با شماره 8610463 است )
هرگاه نگهبان بخواهد لیست دانشجویان حاضر در تالار را داشته باشد d را تایپ می
کند. در این صورت *ابتدا اطلاعات **sort** می شود* و سپس در هر خط یک شماره
دانشجویی چاپ می گردد. هرگاه نگهبان بخواهد وضعیت دانشجویی را ببیند شماره
دانشجویی را با f وارد می کند (یعنی f8610463) که اگر دانشجو در تالار باشد i و
اگر بیرون تالار باشد o در یک خط چاپ می شود. اگر e را وارد کند برنامه تمام می
شود.
من این برنامه را نوشتم اما یه مشکل دارم با این که متغیر i بعد از هر حلقه افزایش می دهم اما دوباره عدد در ساختار قبلی جایگذاری می شه و برنامه ایراد داره
#include <iostream.h>
#include <stdio.h>
#include <string.h>
#include <fstream.h>
#include <math.h>
int i=0;
struct Student
{
char *number;
int status;
};Student *s;
int StrToInt(char* input)
{
int num=0;
for(int i=0;i<strlen(input);i++)
{
if(input[i]>=48 || input[i]<=57) // if is number
num=num*10+input[i]-48;
}
return num;
}
char *IntToStr(int stdno)
{char *x;
int count=1;
while(stdno>9)
{
stdno=stdno/10;
count ++;
}int p=count;
for(int i=0;i<count;i++,p--)
x[i]=stdno/pow(10,p-1);
return x;
}
int FindStd(struct Student *s,int len,int stdno)
{
char x[20];
int count=1;
int n=stdno;
while(stdno>9)
{
stdno=stdno/10;
count ++;
}int p=count;
for(int h=0;h<count;h++,p--)
{x[h]=n/pow(10,p-1);
n=n % (int)pow(10,p-1);
}x[h]='/0';
int index=-1;
for(int i=0;i<len;i++)
{
if(s[i].number=="")
break;
if(s[i].number==x)
{
index=i;
break;
}
}
return index;
}
void ShowList(struct Student *s,int len)
{
struct Student temp;
for(int i=0;i<len;i++)
{
char * minStNumber;
minStNumber=s[i].number;
int minindex=-1;
for(int j=i;j<len;j++)
{
if(strcmp(minStNumber,s[j].number)<0)
{
minStNumber=s[j].number;
minindex=j;
}
}
if(minindex!=-1)
{
temp.number=s[minindex].number;
temp.status=s[minindex].status;
s[minindex].number=s[i].number;
s[minindex].status=s[i].status;
s[i].number=temp.number;
s[i].status=temp.status;
}
}
for(int k=0;k<len;k++)
{
cout<<s[k].number<<" Status:";
if(s[k].status==1) cout<<"In";
else cout<<"Out";
cout<<endl;
}
}
readData()
{
ifstream fin;
char temp[9];
char n[7];
fin.open("c:\\in.txt");
int num;
fin>>num;
s = new Student[num+1];
while(!fin.eof())
{
fin>>temp;
if(temp[0]!='d') //if was not d
{
strcpy(n,temp+1);
}
if(temp[0]=='i')
{
s[i].status =1;
s[i].number=n;
i++;
}
else if(temp[0]=='o')
{
int y=StrToInt(n);
int index=FindStd(s,num,y);
if(index==-1)
{
cout<<"Error: a student number that not input call to output";
}
s[index].number=n;
}
else if(temp[0]=='f')
{
int z=StrToInt(n);
int index=FindStd(s,num,z);
if(index==-1)
cout<<"o"<<endl;
else
cout<<"i"<<endl;
}
else if(temp[0]=='d')
{
ShowList(s,num);
}
}
fin.close();
}
int main()
{
readData();
return 0;
}
اگه سوالم نامفهومه تابیشتر توضیح بدهم
اینم فایل in.txt