IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

 
 Ответить  Открыть новую тему 
> прога на Си++/Си, подскажите что изменить
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 13
Пол: Мужской

Репутация: -  0  +


у меня имется такая прога на Си++
говорю что она делает.

записывает информацию о N студентах для каждого
ФИО
Дата рождения
Дата поступления
Название факультета и кафедры
Группа
Номер зачетной книжки
Количество сессий (максимум 9) и предметов(в каждой сессии 10)
И
создает 4 файла

в первый файл идет вся информация о каждом студенте и о результатах каждой сессий вместе с предметом и оценкой

во второй файл записвывается Отличники с указанием отличивщейся сессии и информация о студенте от ФИО до Номера зачетки.

в третий и четвертый записывается что и в третий только информация о Хорошистах и Троешниках соответственно.

у меня пара вопросов.
1.что можно сделать (так сказать) для улучшения.

2.Так как в Си нет библиотеки <fstream> то, как будет лучше первести с Си++ на чистый Си. С помощью
fread или fputs? Если можно, то покажите эту реализацию на моем примере, хотя бы кусочке.

#include <conio.h>
#define c char
#define FNAME "C:\\BORLANDC\\BIN\\file.txt"
#define FNAME1 "C:\\BORLANDC\\BIN\\file1.txt"
#define FNAME2 "C:\\BORLANDC\\BIN\\file2.txt"
#define FNAME3 "C:\\BORLANDC\\BIN\\file3.txt"
#define FIO "F.I.O."
#define Date "Data rozhdeniya"
#define DateP "God postuplenia v instityt"
#define Fak "Fakultet. Kafeda"
#define Grup "Gruppa"
#define Zach "Nomer zachetnoi knigki"
#define Ses "Kolichestvo sessyi"
#define Nses "-aya sessiya"
#define Npr "-iy predmet"
#include <fstream.h>
#include <iostream.h>

void main()
{
{
ofstream face(FNAME);
ofstream face1(FNAME1);
ofstream face2(FNAME2);
ofstream face3(FNAME3);
c f[50];
c im[50];
c o[50];
c dat[11];
c datp[5];
c ffak[20];
c kaff[10];
c group[10];
c zac[8];
c pr[10];
c q[10];
int y1,z1,x1,oc,s,n,k,j,i,x,s1,p1;
int b,ss;
x=1;
x1=1;
y1=1;
z1=1;
cout<<"Vvedite kolicestvo studentov"<<endl;
cin>>n;
do
{
clrscr();
cout<<"\nDani pro "<<x++<<"-go studenta"<<endl;
for(i=0;i<1;i++)
{
cout<<FIO<<endl;
cin>>f>>im>>o;
cout<<Date<<endl;
cin>>dat;
cout<<DateP<<endl;
cin>>datp;
cout<<Fak<<endl;
cin>>ffak>>kaff;
cout<<Grup<<endl;
cin>>group;
cout<<Zach<<endl;
cin>>zac;

face<<"\nDani pro "<<x-1<<"-go studenta"<<endl;
face<<FIO<<endl<<f<<" "<<im<<" "<<o<<" "<<endl;
face<<Date<<endl<<dat<<endl;
face<<DateP<<endl<<datp<<endl;
face<<Fak<<endl<<ffak<<" "<<kaff<<endl;
face<<Grup<<endl<<group<<endl;
face<<Zach<<endl<<zac<<endl;
face<<"\n1-aya sessiya"<<endl;
cout<<Ses<<endl;
cin>>s;
s1=1;
ss=0;
face1<<"\nOtlichnik №"<<x1++<<endl;
face2<<"\nHoroshisty №"<<y1++<<endl;
face3<<"\nTroeshniki №"<<z1++<<endl;
do
{
cout<<endl<<s1++<<Nses<<endl;
for (j=0;j<1;j++)
{
cout<<"Vvdite predmet i ocenky"<<endl;
p1=1;
b=0;
do
{
cout<<p1++<<Npr<<endl;
for (k=0;k<1;k++);
{
cin>>pr>>oc;
face<<p1-1<<Npr<<endl<<pr<<" "<<oc<<endl;

b=b+oc;
ss=ss+s;

if ((b/10)==5)
{face1<<ss/(s*10)<<" "<<"Sessiya"<<endl;
}
}
}
while(p1<11);

face<<"\n"<<s1<<Nses<<endl;

if ((b/10)==4)
face2<<ss/(s*10)<<" "<<"Sessiya"<<endl;


if ((b/10)==3)
face3<<ss/(s*10)<<" "<<"Sessiya"<<endl;


if ((b/10)==5)
{face1<<FIO<<endl;
face1<<f<<" "<<im<<" "<<o<<endl;
face1<<Date<<endl<<dat<<endl;
face1<<DateP<<endl<<datp<<endl;
face1<<Fak<<endl<<ffak<<" "<<kaff<<endl;
face1<<Grup<<endl<<group<<endl;
face1<<Zach<<endl<<zac<<endl;
}
}
}
while(s1<s+1);
if ((b/10)==4)
face2<<FIO<<endl;
face2<<f<<" "<<im<<" "<<o<<endl;
face2<<Date<<endl<<dat<<endl;
face2<<DateP<<endl<<datp<<endl;
face2<<Fak<<endl<<ffak<<" "<<kaff<<endl;
face2<<Grup<<endl<<group<<endl;
face2<<Zach<<endl<<zac<<endl;

if ((b/10)==3)
face3<<FIO<<endl;
face3<<f<<" "<<im<<" "<<o<<endl;
face3<<Date<<endl<<dat<<endl;
face3<<DateP<<endl<<datp<<endl;
face3<<Fak<<endl<<ffak<<" "<<kaff<<endl;
face3<<Grup<<endl<<group<<endl;
face3<<Zach<<endl<<zac<<endl;
}
}
while (x<n+1);
}
cout<<"Danie zapisani v file "<<FNAME<<endl;
cin<<n;
getch();
}


 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Новичок
*

Группа: Пользователи
Сообщений: 13
Пол: Мужской

Репутация: -  0  +


плиз, полскажите как лучше и правельнее на Си переделать.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Гость






Цитата
как будет лучше первести с Си++ на чистый Си.
Чтоб перевести программу с С++, надо ее сначала на С++ написать... То, что ты использовал iostream - еще не значит, что программа написана на С++. Это просто мешанина чисто С-шного кода и классов...

Заменяй все cout << ... на printf, всю работу с fase - на fprintf, и ввод данных делай через scanf...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Новичок
*

Группа: Пользователи
Сообщений: 13
Пол: Мужской

Репутация: -  0  +


Цитата(volvo @ 10.04.2008 23:09) *


Заменяй все cout << ... на printf,, и ввод данных делай через scanf...


это я сделал.

Цитата(volvo @ 10.04.2008 23:09) *


Заменяй все cout << ... на printf, всю работу с fase - на fprintf, и ввод данных делай через scanf...


тут хочу уеснить. ты хочешь чтобы я вводил данные не через iostrem, a FILE?.
если так то в файл у меня информация записывается на непонятном языке, хотя getch. Почему?

вот кусок примера

#include <conio.h>
#define c char
#define FNAME "C:\\BORLANDC\\BIN\\file.txt"
#define FNAME1 "C:\\BORLANDC\\BIN\\file1.txt"
#define FNAME2 "C:\\BORLANDC\\BIN\\file2.txt"
#define FNAME3 "C:\\BORLANDC\\BIN\\file3.txt"
#define FIO "F.I.O.\n"
#define Date "Data rozhdeniya\n"
#define DateP "God postuplenia v instityt\n"
#define Fak "Fakultet. Kafeda\n"
#define Grup "Gruppa\n"
#define Zach "Nomer zachetnoi knigki\n"
#define Ses "Kolichestvo sessyi\n"
#define Nses "-aya sessiya\n"
#define Npr "-iy predmet"
#include <fstream.h>
#include <stdio.h>
#include <iostream.h>

FILE*file;

void Out()

{ c f[50];
c im[50];
c o[50];
c dat[11];
c datp[5];
c ffak[20];
c kaff[10];
c group[10];
c zac[8];

fprintf(file,
"%s%s%s%s\n%s%s\n%s%s\n%s%s%s\n%s%s\n%s%s\n",
FIO,&f,&im,&o,Date,&dat,DateP,&datp,
Fak,&ffak,&kaff,Grup,&group,Zach,&zac);
}

void main()
{
{
file=fopen("22.txt","w");
ofstream face(FNAME);
ofstream face1(FNAME1);
ofstream face2(FNAME2);
ofstream face3(FNAME3);
c f[50];
c im[50];
c o[50];
c dat[11];
c datp[5];
c ffak[20];
c kaff[10];
c group[10];
c zac[8];
c pr[10];
c q[10];
int y1,z1,x1,oc,s,n,k,j,i,x,s1,p1;
int b,ss;
x=1;
x1=1;
y1=1;
z1=1;
printf("Vvedite kolicestvo studentov\n");
scanf("%d",&n);
do
{
clrscr();
printf("\nDani pro %d",x++);printf("-go studenta\n");

for(i=0;i<1;i++)
{
printf(FIO);
scanf("%s%s%s",&f,&im,&o);
printf(Date);
scanf("%s",&dat);
printf(DateP);
scanf("%s",&datp);
printf(Fak);
scanf("%s%s",&ffak,&kaff);
printf(Grup);
scanf("%s",&group);
printf(Zach);
scanf("%s",zac);
}
}
while (x<n+1);
}
printf("Danie zapisani v file ");
Out();
getch();
fclose(file);
}





 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Гость






Цитата
ты хочешь чтобы я вводил данные не через iostrem, a FILE?.
А ты хочешь использовать потоки ввода С++ в программе на чистом С? Мне все равно - программа твоя, но вот plain-C компилятор, боюсь, будет против такого "смешения жанров"

Цитата
если так то в файл у меня информация записывается на непонятном языке, хотя getch. Почему?
А кто тебе сказал, что она должна записываться на понятном ТЕБЕ языке? Файл открыт НЕ как текстовый...

P.S. От ofstream тоже придется избавляться...
P.P.S. Это что:
       scanf("%s",&dat);

? В смысле, зачем адрес берешь?

Сообщение отредактировано: volvo -
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Новичок
*

Группа: Пользователи
Сообщений: 13
Пол: Мужской

Репутация: -  0  +


так как Си-шный компилятор не поймет потоки придется вводить данные через FILE и плюнуть на понятность в самом файле. Еще подумаю над выбором языка.


ofstream естествено уже и не нужен будет)

Цитата(volvo @ 11.04.2008 22:26) *

("%s",&dat);

? В смысле, зачем адрес берешь?


упс. точно не нужен. yes2.gif

но тут точно нужен smile.gif
scanf("%d",&n); 


 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Новичок
*

Группа: Пользователи
Сообщений: 13
Пол: Мужской

Репутация: -  0  +


эту прогу я почти дописал. но есть пара вопрос - что еще можно сделать чтобы было красивее)

#include <conio.h>
#define c char
#define FNAME "C:\\BORLANDC\\BIN\\file.txt"
#define FNAME1 "C:\\BORLANDC\\BIN\\file1.txt"
#define FNAME2 "C:\\BORLANDC\\BIN\\file2.txt"
#define FNAME3 "C:\\BORLANDC\\BIN\\file3.txt"
#define FIO "F.I.O.\n"
#define Date "Data rozhdeniya\n"
#define DateP "God postuplenia v instityt\n"
#define Fak "Fakultet. Kafeda\n"
#define Grup "Gruppa\n"
#define Zach "Nomer zachetnoi knigki\n"
#define Ses "Kolichestvo sessyi\n"
#define Nses "-aya sessiya\n"
#define Npr "-iy predmet"
#include <fstream.h>
#include <stdio.h>
#include <stdlib.h>
#include <iostream.h>




void main()
{
{
ofstream face(FNAME);
ofstream face1(FNAME1);
ofstream face2(FNAME2);
ofstream face3(FNAME3);
c f[50];
c im[50];
c o[50];
c dat[11];
c datp[5];
c ffak[20];
c kaff[10];
c group[10];
c zac[11];
c down;
c pr[10];
c otv;
c zac1[11];
c q[10];
c key;
c buf[81];
int x,y,x1,y1,z1,oc,s,n,k,j,i,s1,p,p1;
int b,ss;
x1=1;
y1=1;
z1=1;
x=1;
for(;;)
{
nac:
clrscr();
gotoxy(5,3);
printf("1-Добавить студента\n");
gotoxy(5,4);
printf("2-Просмотр");
gotoxy(5,5);
printf("3-Вивод");
gotoxy(5,6);
printf("4-Выход");

{
y=3;
int xx=4;
gotoxy(xx,y);
printf(">");
do
{
key=getch();
switch(key)
{
case 'ы':
gotoxy(xx,y++);
printf(" ");
gotoxy(xx,y);
printf(">");
break;
case 'ц':
gotoxy(xx,y--);
printf(" ");
gotoxy(xx,y);
printf(">");
break;
case 13:if (y==3) goto vvod;
if (y==4) goto pros;
if (y==5) goto vivod;
break;
}
}
while(1);
}


vvod:
{
clrscr();
for(i=0;i<1;i++)
{
printf("Dani o %d",x++);
printf("-om studente\n");
printf(FIO);
scanf("%s%s%s",f,im,o);
printf(Date);
scanf("%s",dat);
printf(DateP);
scanf("%s",datp);
printf(Fak);
scanf("%s%s",ffak,kaff);
printf(Grup);
scanf("%s",group);
printf(Zach);
scanf("%s",zac);

face<<"\nDani pro "<<x-1<<"-go studenta"<<endl;
face<<FIO<<f<<" "<<im<<" "<<o<<" "<<endl;
face<<Date<<dat<<endl;
face<<DateP<<datp<<endl;
face<<Fak<<ffak<<" "<<kaff<<endl;
face<<Grup<<group<<endl;
face<<Zach<<zac<<endl;
printf("Vvesti danie o sessii д/н?\n");
cin>>otv;
if (otv=='д')
{face<<"\n1-aya sessiya"<<endl;

s1=1;
ss=0;

printf(Ses);
scanf("%d",&s);
}else goto nac;

do
{
printf("\n%d%s",s1++,Nses);

for (j=0;j<1;j++)
{
printf("Vvedite kolichestvo predmetov\n");
scanf("%d",&p);
printf("Vvdite predmet i ocenky\n");

b=0;
p1=1;

do
{
printf("%d",p1++);printf(Npr"\n");
for (k=0;k<1;k++);
{
scanf("%s%d",&pr,&oc);
face<<p1-1<<Npr<<endl<<pr<<" "<<oc<<endl;

b=b+oc;
ss=ss+s;

if ((b/p)==5)
face1<<"\nOtlichnik №"<<x1++<<endl;
if ((b/p)==5)
face1<<ss/(s*p)<<" "<<"Sessiya"<<endl;
}
}
while(p1<p+1);

face<<"\n"<<s1<<Nses<<endl;

if ((b/p)==4)
face2<<"\nHoroshisty №"<<y1++<<endl;
if ((b/p)==3)
face3<<"\nTroeshniki №"<<z1++<<endl;

if ((b/p)==4)
face2<<ss/(s*p)<<" "<<"Sessiya"<<endl;
if ((b/p)==3)
face3<<ss/(s*p)<<" "<<"Sessiya"<<endl;

if ((b/p)==5)
{face1<<FIO;
face1<<f<<" "<<im<<" "<<o<<endl;
face1<<Date<<dat<<endl;
face1<<DateP<<datp<<endl;
face1<<Fak<<ffak<<" "<<kaff<<endl;
face1<<Grup<<group<<endl;
face1<<Zach<<zac<<endl;}

if ((b/p)==4)
{face2<<FIO;
face2<<f<<" "<<im<<" "<<o<<endl;
face2<<Date<<dat<<endl;
face2<<DateP<<datp<<endl;
face2<<Fak<<ffak<<" "<<kaff<<endl;
face2<<Grup<<group<<endl;
face2<<Zach<<zac<<endl;}

if ((b/p)==3)
{face3<<FIO;
face3<<f<<" "<<im<<" "<<o<<endl;
face3<<Date<<dat<<endl;
face3<<DateP<<datp<<endl;
face3<<Fak<<ffak<<" "<<kaff<<endl;
face3<<Grup<<group<<endl;
face3<<Zach<<zac<<endl;}

}
}
while(s1<s+1);


goto nac;}

vivod:
{ifstream f1(FNAME1);
ifstream f2(FNAME2);
ifstream f3(FNAME3);
clrscr();

printf("Кого вывести?\n");
gotoxy(5,3);
printf("5-Отличники\n");
gotoxy(5,4);
printf("4-Хорошисты");
gotoxy(5,5);
printf("3-Троешники");

{
y=3;
int xx=4;
gotoxy(xx,y);
printf(">");
do
{
key=getch();
switch(key)
{
case 'ы':
gotoxy(xx,y++);
printf(" ");
gotoxy(xx,y);
printf(">");
break;
case 'ц':
gotoxy(xx,y--);
printf(" ");
gotoxy(xx,y);
printf(">");
break;
case 13: clrscr();

if (y==3)
{
do
{
clrscr();
if(!f1)
{
printf("Записей нет");
}
else
{
i=0;
while(!f1.eof()&&i<15)
{f1.getline(buf,50);
cout<<buf<<endl;
i++;}
printf("\nПродожить?\n");
cin>>otv;
if (otv=='д'){}
if(!f1)
{printf("\nЗаписей нет\n");}
}
}
while(!f1.eof());
printf("Viti v glavnoe menu д/n?\n");
cin>>otv;
if (otv=='д') goto nac;}

if (y==4)
{
do
{
clrscr();
if(!f2)
{
printf("Записей нет");
}
else
{
i=0;
while(!f2.eof()&&i<15)
{f2.getline(buf,50);
cout<<buf<<endl;
i++;}
printf("\nПродожить?\n");
cin>>otv;
if (otv=='д'){}
if(!f2)
{printf("\nЗаписей нет\n");}
}
}
while(!f2.eof());
printf("Viti v glavnoe menu д/n?\n");
cin>>otv;
if (otv=='д') goto nac;}

if (y==5)
{
do
{
clrscr();
if(!f3)
{
printf("Записей нет");
}
else
{
i=0;
while(!f3.eof()&&i<15)
{f3.getline(buf,50);
cout<<buf<<endl;
i++;}
printf("\nПродожить?\n");
cin>>otv;
if (otv=='д'){}
if(!f3)
{printf("\nЗаписей нет\n");}
}
}
while(!f3.eof());
printf("Viti v glavnoe menu д/n?\n");
cin>>otv;
if (otv=='д') goto nac;}}

}while(1);
}
}

pros:
{
clrscr();
printf("Hotite prosmotret studentov д/н?\n");
cin>>otv;
if (otv=='д')
{
ifstream f(FNAME);
{
do
{
clrscr();
if(!f)
{
printf("Записей нет");
}
else
{
i=0;
while(!f.eof()&&i<15)
{f.getline(buf,50);
cout<<buf<<endl;
i++;}
printf("\nПродожить?\n");
cin>>otv;
if (otv=='д'){}
if(!f)
{printf("\nЗаписей нет\n");}
}
}
while(!f.eof());}}
printf("Viti v glavnoe menu д/n?\n");
cin>>otv;
if (otv=='д') goto nac;
}
}
}
getch();
} }


 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Гость






Цитата
что еще можно сделать чтобы было красивее)
Рассказать, какой из С-компиляторов это согласился откомпилировать...

Насколько я помню, исходный вопрос стоял так:
Цитата
полскажите как лучше и правельнее на Си переделать.
?

Где в твоем сообщении №7 присутствует Си? Может быть,
#include <fstream.h>
#include <iostream.h>
- это признак программы, написанной на С?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Новичок
*

Группа: Пользователи
Сообщений: 13
Пол: Мужской

Репутация: -  0  +


допустим я решил ее оставить на Си++ smile.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 29.03.2024 16:53
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name