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

> Внимание!

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

 
 Ответить  Открыть новую тему 
> прога на Си++/Си, подскажите что изменить
DocNo
сообщение 10.04.2008 16:53
Сообщение #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 
 К началу страницы 
+ Ответить 
DocNo
сообщение 10.04.2008 21:11
Сообщение #2


Новичок
*

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

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


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


Гость






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

Заменяй все cout << ... на printf, всю работу с fase - на fprintf, и ввод данных делай через scanf...
 К началу страницы 
+ Ответить 
DocNo
сообщение 11.04.2008 21:11
Сообщение #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 
 К началу страницы 
+ Ответить 
volvo
сообщение 11.04.2008 21:26
Сообщение #5


Гость






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

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

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

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

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


Новичок
*

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

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


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


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

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

("%s",&dat);

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


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

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


 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
DocNo
сообщение 4.05.2008 16:47
Сообщение #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 
 К началу страницы 
+ Ответить 
volvo
сообщение 4.05.2008 20:19
Сообщение #8


Гость






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

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

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


Новичок
*

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

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


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

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

 

- Текстовая версия 20.07.2025 10:44
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"