Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 4.94
FIZIKK
Сообщений: n/a
#1

задача на структуры (язык С) - C++

06.04.2008, 17:18. Просмотров 2016. Ответов 17
Метки нет (Все метки)

Здравствуйте) помогите , пожалуйста с задачей)
Вот задание: Напмчать функцию полного обновления файла,например, массив структур переписывается в файл после упорядочения
Продемонстрировать: разные упорядочения совокупности структур(по выбранному полю)
Вот моя программа, на данный момент ссвод данных производится с клавиатуры, происходит упорядочение по выбранному полю, но как связать всё это с файлами я не знаю) помогите пожалуйста)


Код
#include <stdio.h>
#include <conio.h>
#include <string.h>
struct film
{
char nazvanie[20];
char rejisser[20];
char strana[10];
char god_vipuska[4];
char stoimost[10];
char dohod[10];

}
 av[100];
const int M=100;

int init(void)
{
int i,j,l;
for(i=0;i<M-1;i++)
{printf("Vvedite nazvanie filma\n");
scanf("%s",av[i].nazvanie);
printf("Vvedite god vipuska filma\n");
scanf("%s",av[i].god_vipuska);
printf("Vvedite stoimost filma v tisachax rublei\n");
scanf("%s",av[i].stoimost);
printf("Vvedite rejissera avtomobilia\n");
scanf("%s",av[i].rejisser);
printf("Vvedite stranu proizvoditelya filma \n");
scanf("%s",av[i].strana);
printf("Vvedite dohod filma \n");
scanf("%s",av[i].dohod);
printf("\nEsli vi zakonchili vvodit nazmite 1, inache 0\n");
scanf("%d",&l);
printf("l ravno %i\n",l);
if(l==1){break;}
}
return i;
}
void sortirovka(int r, int w)
{int  i,j,obmen;i=0;
struct film buf;
switch (w)
{ case 1:
do
{i=i+1;
obmen=1;
for (j=r;j>=i;j--)
{if (strcmp(av[j].nazvanie,av[j-1].nazvanie)<0) {buf=av[j];av[j]=av[j-1];av[j-1]=buf; obmen=0;}}}
while ((obmen==0) || (i==r));
break;
case 2:
do
{i=i+1;
obmen=1;
for (j=r;j>=i;j--)
{if (strcmp(av[j].rejisser,av[j-1].rejisser)<0) {buf=av[j];av[j]=av[j-1];av[j-1]=buf; obmen=0;}}}
while ((obmen==0) || (i==r));
break;
case 3:
do
{i=i+1;
obmen=1;
for (j=r;j>=i;j--)
{if (strcmp(av[j].strana,av[j-1].strana)<0) {buf=av[j];av[j]=av[j-1];av[j-1]=buf; obmen=0;}}}
while ((obmen==0) || (i==r));
break;
case 4:
do
{i=i+1;
obmen=1;
for (j=r;j>=i;j--)
{if (strcmp(av[j].god_vipuska,av[j-1].god_vipuska)<0) {buf=av[j];av[j]=av[j-1];av[j-1]=buf; obmen=0;}}}
while ((obmen==0) || (i==r));
break;
case 5:
do
{i=i+1;
obmen=1;
for (j=r;j>=i;j--)
{if (strcmp(av[j].stoimost,av[j-1].stoimost)<0) {buf=av[j];av[j]=av[j-1];av[j-1]=buf; obmen=0;}}}
while ((obmen==0) || (i==r));
break;
case 6:
do
{i=i+1;
obmen= 1;
for (j=r;j>=i;j--)
{if (strcmp(av[j].dohod,av[j-1].dohod)<0) {buf=av[j];av[j]=av[j-1];av[j-1]=buf; obmen=0;}}}
while ((obmen==0) || (i==r));
break;
default: printf("Massiv ne otsortirovan\n");}}

void print(int k)
{ int i,l;
while( 1){
printf("esli vi xotite otsortirovat po:\n");
printf("nazvaniy filma nazmite 1\n");
printf("familii rejissera filma nazmite 2\n");
printf("strane proizvoditelya filma nazmite 3\n");
printf("godu vipuska filma nazmite 4\n");
printf("stoimosti filma nazmite 5\n");
printf("dohodu filma nazmite 6\n");
printf("esli vi ne xotite sortirovat nazmite 8:\n");
scanf("%i",&l);
if (l==8){break;};
sortirovka(k,l);
getch();
for(i=0;i<=k;i++)
{printf("\nFilm nomer %i\n",i+1) ;
printf("\n nazvanie_filma  \n%s",av[i].nazvanie);
printf("\n rejisser_filma\n %s",av[i].rejisser);
printf("\n strana_proizvoditel' filma \n %s",av[i].strana);
printf("\n god_vipuska_filma\n %s",av[i].god_vipuska);
printf("\n stoimost_filma\n %s",av[i].stoimost);
printf("\n dohod_filma\n %s",av[i].dohod);
 }
  }
}

void main()
{clrscr();
int i,j;
printf("Inicializacia bazi\n");
i=init();
printf("Kolichestvo filmov v baze =%i\n",i+1)  ;
printf("\nIznacalni spisok\n");
for(j=0;j<=i;j++)
{printf("\n Film nomer %i\n",j+1) ;
printf("\n nazvanie_filma \n%s",av[j].nazvanie);
printf("\n rejisser_filma %s",av[j].rejisser);
printf("\n strana_proizvoditel' filma\n %s",av[j].strana);
printf("\n god_vipuska_filma\n %s",av[j].god_vipuska);
printf("\n stoimost'_filma\n %s",av[j].stoimost);
printf("\n dohod filma\n %s",av[j].dohod);
getch();  }

printf("\nVivod s sortirovkoi\n");
print(i);
getch();}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Shurick
 Аватар для Shurick
1 / 1 / 0
Регистрация: 04.04.2008
Сообщений: 34
06.04.2008, 18:53     задача на структуры (язык С) #2
не понял вопроса, ты писать и читать файлы не можешь?
FIZIKK
Сообщений: n/a
06.04.2008, 19:40     задача на структуры (язык С) #3
Цитата Сообщение от Shurick Посмотреть сообщение
не понял вопроса, ты писать и читать файлы не можешь?
да, у меня не получается правильно считать структуру из файла и записать в файл (после сортировки(её я выполнил)
Shurick
 Аватар для Shurick
1 / 1 / 0
Регистрация: 04.04.2008
Сообщений: 34
06.04.2008, 21:45     задача на структуры (язык С) #4
тебе посимвольно записывать в файл и считывать из файла или по байтам?
т.е. можно сразу из структуры данные записать в файл, например одна структура на одной строке и, например, через пробел считывать по слову, а можно выровнять структуру и по байтам ее записать и считывать
FIZIKK
Сообщений: n/a
07.04.2008, 04:36     задача на структуры (язык С) #5
Цитата Сообщение от Shurick Посмотреть сообщение
т.е. можно сразу из структуры данные записать в файл, например одна структура на одной строке и, например, через пробел считывать по слову, а можно выровнять
сейчас вспомнил, именно так и нужно))) но как реализовать не знаю:-(
Shurick
 Аватар для Shurick
1 / 1 / 0
Регистрация: 04.04.2008
Сообщений: 34
07.04.2008, 14:05     задача на структуры (язык С) #6
Цитата Сообщение от FIZIKK Посмотреть сообщение
сейчас вспомнил, именно так и нужно))) но как реализовать не знаю:-(
Ну, короче, например в функции SaveData()-сохранение параметров, а в функции ReadData() чтение из файла, тогда имеем:

void SaveData(film *newstr)///под си давно не писал, так что, как структуру
//объявлять точно не помню , делаю как в С++, ты вродеб это знаешь как делать
{
FILE *f;
buf[256]="";//можешь сразу имя файла ввести
char *in=0;
char *s;
if((f=fopen(buf,"wt"))==NULL)//в буфе имя файла хошь с клавы вводи, хошь сам
///////создай один файл
{
printf("\n Error::Open File");
getch();//чтоб сразу не вылетало, а типа, можно было прочитать еррор
}
else
{
fputs(newstr.nazvanie,f);
fputs(" ",f);
...//сам также всю структуру сделай
fputs(newstr.dohod,f);
fputs("\n");
fclose(f);
}
}

функцию save кидаешь в цикл и все, что существуют структуры по одной дописываешь файл

Сейчас спешу, будет время продолжение по риду напишу, там легко, сам попробуй, будешь по одной строке доставать по символу in=fgets(s,2,n) проверяешь, если in=" "
то следующая переменная в структуре, а если in="\n" то следующая структура
FIZIKK
Сообщений: n/a
07.04.2008, 17:41     задача на структуры (язык С) #7
спасибо за внимание и помощь) вроде структура сохранения понятна
вот немного довершил её под свой код. Но я теперь запутался как правильно внести её в свой код и что там нужно испрпавить

void SaveData(film *newstr)
{
FILE *f;

char *in=0;
char *s;
int j;
if((f=fopen("source.txt","wt"))==NULL)

{
printf("\n Error::Open File");
getch();
}
else
{
fputs(av[j].nazvanie,f);
fputs(" ",f);
fputs(av[j].rejisser,f);
fputs(" ",f);
fputs(av[j].strana,f);
fputs(" ",f);
fputs(av[j].god_vipuska,f);
fputs(" ",f);
fputs(av[j].stoimost,f);
fputs(" ",f);
fputs(av[j].dohod,f);
fputs("\n",f);
fclose(f);
}
}
FIZIKK
Сообщений: n/a
07.04.2008, 17:54     задача на структуры (язык С) #8
Код
#include <stdio.h>
#include <conio.h>
#include <string.h>
struct film
{
char nazvanie[20];
char rejisser[20];
char strana[10];
char god_vipuska[4];
char stoimost[10];
char dohod[10];

}
 av[100];
const int M=100;

void SaveData()
{
FILE *f;

char *s;
int j;
if((f=fopen("source.txt","wt"))==NULL)

{
printf("\n Error::Open File");
getch();
}
else
{
fputs(av[j].nazvanie,f);
fputs(" ",f);
fputs(av[j].rejisser,f);
fputs(" ",f);
fputs(av[j].strana,f);
fputs(" ",f);
fputs(av[j].god_vipuska,f);
fputs(" ",f);
fputs(av[j].stoimost,f);
fputs(" ",f);
fputs(av[j].dohod,f);
fputs("\n",f);
fclose(f);
}
}
void sortirovka(int r, int w)
{int  i,j,obmen;i=0;
struct film buf;
switch (w)
{ case 1:
do
{i=i+1;
obmen=1;
for (j=r;j>=i;j--)
{if (strcmp(av[j].nazvanie,av[j-1].nazvanie)<0) {buf=av[j];av[j]=av[j-1];av[j-1]=buf; obmen=0;}}}
while ((obmen==0) || (i==r));
break;
case 2:
do
{i=i+1;
obmen=1;
for (j=r;j>=i;j--)
{if (strcmp(av[j].rejisser,av[j-1].rejisser)<0) {buf=av[j];av[j]=av[j-1];av[j-1]=buf; obmen=0;}}}
while ((obmen==0) || (i==r));
break;
case 3:
do
{i=i+1;
obmen=1;
for (j=r;j>=i;j--)
{if (strcmp(av[j].strana,av[j-1].strana)<0) {buf=av[j];av[j]=av[j-1];av[j-1]=buf; obmen=0;}}}
while ((obmen==0) || (i==r));
break;
case 4:
do
{i=i+1;
obmen=1;
for (j=r;j>=i;j--)
{if (strcmp(av[j].god_vipuska,av[j-1].god_vipuska)<0) {buf=av[j];av[j]=av[j-1];av[j-1]=buf; obmen=0;}}}
while ((obmen==0) || (i==r));
break;
case 5:
do
{i=i+1;
obmen=1;
for (j=r;j>=i;j--)
{if (strcmp(av[j].stoimost,av[j-1].stoimost)<0) {buf=av[j];av[j]=av[j-1];av[j-1]=buf; obmen=0;}}}
while ((obmen==0) || (i==r));
break;
case 6:
do
{i=i+1;
obmen= 1;
for (j=r;j>=i;j--)
{if (strcmp(av[j].dohod,av[j-1].dohod)<0) {buf=av[j];av[j]=av[j-1];av[j-1]=buf; obmen=0;}}}
while ((obmen==0) || (i==r));
break;
default: printf("Massiv ne otsortirovan\n");}}

void print(int k)
{ int i,l;
while( 1){
printf("esli vi xotite otsortirovat po:\n");
printf("nazvaniy filma nazmite 1\n");
printf("familii rejissera filma nazmite 2\n");
printf("strane proizvoditelya filma nazmite 3\n");
printf("godu vipuska filma nazmite 4\n");
printf("stoimosti filma nazmite 5\n");
printf("dohodu filma nazmite 6\n");
printf("esli vi ne xotite sortirovat nazmite 8:\n");
scanf("%i",&l);
if (l==8){break;};
sortirovka(k,l);
getch();
for(i=0;i<=k;i++)
{printf("\nFilm nomer %i\n",i+1) ;
printf("\n nazvanie_filma  \n%s",av[i].nazvanie);
printf("\n rejisser_filma\n %s",av[i].rejisser);
printf("\n strana_proizvoditel' filma \n %s",av[i].strana);
printf("\n god_vipuska_filma\n %s",av[i].god_vipuska);
printf("\n stoimost_filma\n %s",av[i].stoimost);
printf("\n dohod_filma\n %s",av[i].dohod);
 }
  }
}

void main()
{clrscr();
int i,j;
printf("Inicializacia bazi\n");
SaveData();
printf("Kolichestvo filmov v baze =%i\n",i+1)  ;
printf("\nIznacalni spisok\n");
for(j=0;j<=i;j++)
{printf("\n Film nomer %i\n",j+1) ;
printf("\n nazvanie_filma \n%s",av[j].nazvanie);
printf("\n rejisser_filma %s",av[j].rejisser);
printf("\n strana_proizvoditel' filma\n %s",av[j].strana);
printf("\n god_vipuska_filma\n %s",av[j].god_vipuska);
printf("\n stoimost'_filma\n %s",av[j].stoimost);
printf("\n dohod filma\n %s",av[j].dohod);
getch();  }

printf("\nVivod s sortirovkoi\n");
print(i);
getch();}
Вот, кажется скомпилировался, но пока немогу проверить работоспособность без функции чтения из файла) Если не очень сложно посмотри пожалуйста, ничего ли я не напутал
FIZIKK
Сообщений: n/a
07.04.2008, 19:26     задача на структуры (язык С) #9
всё, пока вродевсё нормально) помоги пожалуйста с чтением из файла
Shurick
 Аватар для Shurick
1 / 1 / 0
Регистрация: 04.04.2008
Сообщений: 34
07.04.2008, 22:59     задача на структуры (язык С) #10
сегодня не смогу, ухожу сейчас, попробуй сам, используй fopen(f,"r")
а дальше я тебе описывал
Shurick
 Аватар для Shurick
1 / 1 / 0
Регистрация: 04.04.2008
Сообщений: 34
07.04.2008, 23:00     задача на структуры (язык С) #11
там строчек на 5 будет больше чем в сохранении
IZIKK
Сообщений: n/a
08.04.2008, 16:13     задача на структуры (язык С) #12
Цитата Сообщение от Shurick Посмотреть сообщение
сегодня не смогу, ухожу сейчас, попробуй сам, используй fopen(f,"r")
а дальше я тебе описывал
помоги пожалуйста с этой функцией, если это несложно)
Еще если сильно не затруднить, можешь правильно реализовать функции в моём коде, мне просто сдавать завтра контрольную, а у меня ппц...
P.S если не слишком сложно...
Shurick
 Аватар для Shurick
1 / 1 / 0
Регистрация: 04.04.2008
Сообщений: 34
08.04.2008, 17:08     задача на структуры (язык С) #13
ну сделай че-нибудь типа такого:


ReadDate()
{
FILE *f;

char *s;
char buff[100];
int j;
if((f=fopen("source.txt","rt"))==NULL)

{
printf("\n Error::Open File");
getch();
}
else
{
char *in=0,i=0,k=0;
while(*in!='\x0')
{
while(*in!='\n')
{
while(*in!=' ')
{
in=fgets(s,2,f);
buff[i]=*in;
i++;
}///\' '
buff[i+1]=0;
strcpy(av[k].nazvanie,buff);
i=0;
////дальше для всей структуры тоже ....
while(*in!=' ')
{
in=fgets(s,2,f);
buff[i]=*in;
i++;
}///\' '
buf[i+1]=0;
strcpy(av[k].dohod,buff) ;
}///\n
k++;
}///\x0
}
}
}

по идее должно работать, я не проверял ибо нах
Shurick
 Аватар для Shurick
1 / 1 / 0
Регистрация: 04.04.2008
Сообщений: 34
08.04.2008, 17:12     задача на структуры (язык С) #14
////дальше для всей структуры тоже ....
while(*in!=' ')
{
in=fgets(s,2,f);
buff[i]=*in;
i++;
}///\' '
buf[i+1]=0;
strcpy(av[k].dohod,buff) ;
//////здесь же не забудь вставить
i=0;
FIZIKK
Сообщений: n/a
08.04.2008, 18:45     задача на структуры (язык С) #15
Спасибо за помощь и внимание) Вот код, только почему то он не работает:-( пока не могу понять почему) если будет немного свободного времени, помоги отрегулировать её пожалуйста) извиняюсь, что я такой глупый в программировании(но просто я в безвыходном положении...
Код
#include <stdio.h>
#include <conio.h>
#include <string.h>
struct film
{
char nazvanie[20];
char rejisser[20];
char strana[10];
char god_vipuska[4];
char stoimost[10];
char dohod[10];

}
 av[100];
const int M=100;
ReadDate()
{
FILE *f;
char *s;
char buff[100];
int j;
if((f=fopen("source.txt","rt"))==NULL)

{
printf("\n Error::Open File");
getch();
}
else
{
char *in=0,i=0,k=0;
while(*in!='\x0')
{
while(*in!='\n')
{
while(*in!=' ')
{
in=fgets(s,2,f);
buff[i]=*in;
i++;
}
buff[i+1]=0;
strcpy(av[k].nazvanie,buff);
i=0;

while(*in!=' ')
{
in=fgets(s,2,f);
buff[i]=*in;
i++;
}
buff[i+1]=0;
strcpy(av[k].rejisser,buff);
i=0;
while(*in!=' ')
{
in=fgets(s,2,f);
buff[i]=*in;
i++;
}
buff[i+1]=0;
strcpy(av[k].strana,buff);
i=0;
while(*in!=' ')
{
in=fgets(s,2,f);
buff[i]=*in;
i++;
}
buff[i+1]=0;
strcpy(av[k].god_vipuska,buff);
i=0;
while(*in!=' ')
{
in=fgets(s,2,f);
buff[i]=*in;
i++;
}
buff[i+1]=0;
strcpy(av[k].stoimost,buff);
i=0;
while(*in!=' ')
{
in=fgets(s,2,f);
buff[i]=*in;
i++;
}
buff[i+1]=0;
strcpy(av[k].dohod,buff) ;
i=0;
}
k++;
}
}

}

void SaveData()
{
FILE *f;

char *s;
int j;
if((f=fopen("source.txt","wt"))==NULL)

{
printf("\n Error::Open File");
getch();
}
else
{
fputs(av[j].nazvanie,f);
fputs(" ",f);
fputs(av[j].rejisser,f);
fputs(" ",f);
fputs(av[j].strana,f);
fputs(" ",f);
fputs(av[j].god_vipuska,f);
fputs(" ",f);
fputs(av[j].stoimost,f);
fputs(" ",f);
fputs(av[j].dohod,f);
fputs("\n",f);
fclose(f);
}
}
void sortirovka(int r, int w)
{int  i,j,obmen;i=0;
struct film buf;
switch (w)
{ case 1:
do
{i=i+1;
obmen=1;
for (j=r;j>=i;j--)
{if (strcmp(av[j].nazvanie,av[j-1].nazvanie)<0) {buf=av[j];av[j]=av[j-1];av[j-1]=buf; obmen=0;}}}
while ((obmen==0) || (i==r));
break;
case 2:
do
{i=i+1;
obmen=1;
for (j=r;j>=i;j--)
{if (strcmp(av[j].rejisser,av[j-1].rejisser)<0) {buf=av[j];av[j]=av[j-1];av[j-1]=buf; obmen=0;}}}
while ((obmen==0) || (i==r));
break;
case 3:
do
{i=i+1;
obmen=1;
for (j=r;j>=i;j--)
{if (strcmp(av[j].strana,av[j-1].strana)<0) {buf=av[j];av[j]=av[j-1];av[j-1]=buf; obmen=0;}}}
while ((obmen==0) || (i==r));
break;
case 4:
do
{i=i+1;
obmen=1;
for (j=r;j>=i;j--)
{if (strcmp(av[j].god_vipuska,av[j-1].god_vipuska)<0) {buf=av[j];av[j]=av[j-1];av[j-1]=buf; obmen=0;}}}
while ((obmen==0) || (i==r));
break;
case 5:
do
{i=i+1;
obmen=1;
for (j=r;j>=i;j--)
{if (strcmp(av[j].stoimost,av[j-1].stoimost)<0) {buf=av[j];av[j]=av[j-1];av[j-1]=buf; obmen=0;}}}
while ((obmen==0) || (i==r));
break;
case 6:
do
{i=i+1;
obmen= 1;
for (j=r;j>=i;j--)
{if (strcmp(av[j].dohod,av[j-1].dohod)<0) {buf=av[j];av[j]=av[j-1];av[j-1]=buf; obmen=0;}}}
while ((obmen==0) || (i==r));
break;
default: printf("Massiv ne otsortirovan\n");}}

void print(int k)
{ int i,l;
while( 1){
printf("esli vi xotite otsortirovat po:\n");
printf("nazvaniy filma nazmite 1\n");
printf("familii rejissera filma nazmite 2\n");
printf("strane proizvoditelya filma nazmite 3\n");
printf("godu vipuska filma nazmite 4\n");
printf("stoimosti filma nazmite 5\n");
printf("dohodu filma nazmite 6\n");
printf("esli vi ne xotite sortirovat nazmite 8:\n");
scanf("%i",&l);
if (l==8){break;};
sortirovka(k,l);
getch();
for(i=0;i<=k;i++)
{printf("\nFilm nomer %i\n",i+1) ;
printf("\n nazvanie_filma  \n%s",av[i].nazvanie);
printf("\n rejisser_filma\n %s",av[i].rejisser);
printf("\n strana_proizvoditel' filma \n %s",av[i].strana);
printf("\n god_vipuska_filma\n %s",av[i].god_vipuska);
printf("\n stoimost_filma\n %s",av[i].stoimost);
printf("\n dohod_filma\n %s",av[i].dohod);
 }
  }
}

void main()
{clrscr();
int i,j;
ReadDate()// chtenie iz faila
printf("Inicializacia bazi\n");
printf("Kolichestvo filmov v baze =%i\n",i+1)  ;
printf("\nIznacalni spisok\n");
for(j=0;j<=i;j++)
{printf("\n Film nomer %i\n",j+1) ;
printf("\n nazvanie_filma \n%s",av[j].nazvanie);
printf("\n rejisser_filma %s",av[j].rejisser);
printf("\n strana_proizvoditel' filma\n %s",av[j].strana);
printf("\n god_vipuska_filma\n %s",av[j].god_vipuska);
printf("\n stoimost'_filma\n %s",av[j].stoimost);
printf("\n dohod filma\n %s",av[j].dohod);
getch();  }

printf("\nVivod s sortirovkoi\n");
print(i);
while (!feof(f))
{
SaveData();
}
getch();}
Shurick
 Аватар для Shurick
1 / 1 / 0
Регистрация: 04.04.2008
Сообщений: 34
08.04.2008, 20:00     задача на структуры (язык С) #16
короче откомпилил, на правильность работы не проверял, чисто поисправлял баги для того чтоб запускалась, дальше сам уже делай
зы
вставь
exit(0);
туда где у тебя зацикливание идет (я думаю, что в риде, а там хз) а то ж не выйдешь
(екзит просто с любой точки проги завершит ее)
Вложения
Тип файла: rar POM.rar (1.2 Кб, 31 просмотров)
FIZIKK
Сообщений: n/a
09.04.2008, 21:28     задача на структуры (язык С) #17
Тож поисправлял, но программа все равно не работает:-(не могу понять в чем дело) просто без файлов вроде все работало... если можно, посмотрите пожалуйста....
Код
#include <stdio.h>
#include <conio.h>
#include <string.h>
struct film
{
char nazvanie[20];
char rejisser[20];
char strana[10];
char god_vipuska[4];
char stoimost[10];
char dohod[10];

}
 av[100];
const int M=100;
ReadDate()
{
FILE *f;
char *s;
char buff[100];
int j;
if((f=fopen("source.txt","rt"))==NULL)

{
printf("\n Error::Open File");
getch();
}
else
{
char *in=0,i=0,k=0;
while(*in!='\x0')
{
while(*in!='\n')
{
while(*in!=' ')
{
in=fgets(s,2,f);
buff[i]=*in;
i++;
}
buff[i+1]=0;
strcpy(av[k].nazvanie,buff);
i=0;

while(*in!=' ')
{
in=fgets(s,2,f);
buff[i]=*in;
i++;
}
buff[i+1]=0;
strcpy(av[k].rejisser,buff);
i=0;
while(*in!=' ')
{
in=fgets(s,2,f);
buff[i]=*in;
i++;
}
buff[i+1]=0;
strcpy(av[k].strana,buff);
i=0;
while(*in!=' ')
{
in=fgets(s,2,f);
buff[i]=*in;
i++;
}
buff[i+1]=0;
strcpy(av[k].god_vipuska,buff);
i=0;
while(*in!=' ')
{
in=fgets(s,2,f);
buff[i]=*in;
i++;
}
buff[i+1]=0;
strcpy(av[k].stoimost,buff);
i=0;
while(*in!=' ')
{
in=fgets(s,2,f);
buff[i]=*in;
i++;
}
buff[i+1]=0;
strcpy(av[k].dohod,buff) ;
i=0;
}
k++;
}
}
}

void SaveData()
{
FILE *f;

char *s;
int j;
if((f=fopen("source.txt","wt"))==NULL)

{
printf("\n Error::Open File");
getch();
}
else
{
fputs(av[j].nazvanie,f);
fputs(" ",f);
fputs(av[j].rejisser,f);
fputs(" ",f);
fputs(av[j].strana,f);
fputs(" ",f);
fputs(av[j].god_vipuska,f);
fputs(" ",f);
fputs(av[j].stoimost,f);
fputs(" ",f);
fputs(av[j].dohod,f);
fputs("\n",f);
fclose(f);
}
}


void sortirovka(int r, int w)
{int  i,j,obmen;i=0;
struct film buf;
switch (w)
{ case 1:
do
{i=i+1;
obmen=1;
for (j=r;j>=i;j--)
{if (strcmp(av[j].nazvanie,av[j-1].nazvanie)<0) {buf=av[j];av[j]=av[j-1];av[j-1]=buf; obmen=0;}}}
while ((obmen==0) || (i==r));
break;
case 2:
do
{i=i+1;
obmen=1;
for (j=r;j>=i;j--)
{if (strcmp(av[j].rejisser,av[j-1].rejisser)<0) {buf=av[j];av[j]=av[j-1];av[j-1]=buf; obmen=0;}}}
while ((obmen==0) || (i==r));
break;
case 3:
do
{i=i+1;
obmen=1;
for (j=r;j>=i;j--)
{if (strcmp(av[j].strana,av[j-1].strana)<0) {buf=av[j];av[j]=av[j-1];av[j-1]=buf; obmen=0;}}}
while ((obmen==0) || (i==r));
break;
case 4:
do
{i=i+1;
obmen=1;
for (j=r;j>=i;j--)
{if (strcmp(av[j].god_vipuska,av[j-1].god_vipuska)<0) {buf=av[j];av[j]=av[j-1];av[j-1]=buf; obmen=0;}}}
while ((obmen==0) || (i==r));
break;
case 5:
do
{i=i+1;
obmen=1;
for (j=r;j>=i;j--)
{if (strcmp(av[j].stoimost,av[j-1].stoimost)<0) {buf=av[j];av[j]=av[j-1];av[j-1]=buf; obmen=0;}}}
while ((obmen==0) || (i==r));
break;
case 6:
do
{i=i+1;
obmen= 1;
for (j=r;j>=i;j--)
{if (strcmp(av[j].dohod,av[j-1].dohod)<0) {buf=av[j];av[j]=av[j-1];av[j-1]=buf; obmen=0;}}}
while ((obmen==0) || (i==r));
break;
default: printf("Massiv ne otsortirovan\n");}}

void print(int k)
{ int i,l;
while( 1){
printf("esli vi xotite otsortirovat po:\n");
printf("nazvaniy filma nazmite 1\n");
printf("familii rejissera filma nazmite 2\n");
printf("strane proizvoditelya filma nazmite 3\n");
printf("godu vipuska filma nazmite 4\n");
printf("stoimosti filma nazmite 5\n");
printf("dohodu filma nazmite 6\n");
printf("esli vi ne xotite sortirovat nazmite 8:\n");
scanf("%i",&l);
if (l==8){break;};
sortirovka(k,l);
getch();
for(i=0;i<=k;i++)
{printf("\nFilm nomer %i\n",i+1) ;
printf("\n nazvanie_filma  \n%s",av[i].nazvanie);
printf("\n rejisser_filma\n %s",av[i].rejisser);
printf("\n strana_proizvoditel' filma \n %s",av[i].strana);
printf("\n god_vipuska_filma\n %s",av[i].god_vipuska);
printf("\n stoimost_filma\n %s",av[i].stoimost);
printf("\n dohod_filma\n %s",av[i].dohod);
 }
  }
}

void main()
{clrscr();
int i,j;
FILE *f;
printf("Inicializacia bazi\n");
ReadDate();
printf("Kolichestvo filmov v baze =%i\n",i+1)  ;
printf("\nIznacalni spisok\n");
for(j=0;j<=i;j++)
{printf("\n Film nomer %i\n",j+1) ;
printf("\n nazvanie_filma \n%s",av[j].nazvanie);
printf("\n rejisser_filma %s",av[j].rejisser);
printf("\n strana_proizvoditel' filma\n %s",av[j].strana);
printf("\n god_vipuska_filma\n %s",av[j].god_vipuska);
printf("\n stoimost'_filma\n %s",av[j].stoimost);
printf("\n dohod filma\n %s",av[j].dohod);
getch();  }
while (!feof(f))
{
SaveData();
j=j+1;
}
getch();}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.04.2008, 06:53     задача на структуры (язык С)
Еще ссылки по теме:

C++ Классы / Структуры и русский язык
C++ задача на структуры
Задача на циклы! Язык Си++! определить количество разных чисел C++
C++ Задача на структуры
C++ Задача на структуры

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
FIZIKK
Сообщений: n/a
11.04.2008, 06:53     задача на структуры (язык С) #18
эх(
Yandex
Объявления
11.04.2008, 06:53     задача на структуры (язык С)
Ответ Создать тему
Опции темы

Текущее время: 02:42. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru