Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/12: Рейтинг темы: голосов - 12, средняя оценка - 4.67
FIZIKK
1

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

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

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


Код
#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();}
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.04.2008, 17:18
Ответы с готовыми решениями:

Классы / Структуры и русский язык
Вобщем у меня такой баг вылазиет незнаю как побороть... Подскажите в чём грабли, и как решить....

Задача на матрицу. Язык С++
Дана матрица А(6,7). Сформировать массив В(7), каждый элемент которого есть ПРОИЗВЕДЕНИЕ...

Задача на шифрование текста, язык Cи.
Произвести шифрование текста согласно вводимому ключу , который представляет из себя...

Задача по нахождению ошибок в коде(язык с)
Есть код: #include &lt;iostream&gt; using namespace std; int main() { int i; int n = 20;

17
1 / 1 / 0
Регистрация: 04.04.2008
Сообщений: 34
06.04.2008, 18:53 2
не понял вопроса, ты писать и читать файлы не можешь?
0
FIZIKK
06.04.2008, 19:40 3
Цитата Сообщение от Shurick Посмотреть сообщение
не понял вопроса, ты писать и читать файлы не можешь?
да, у меня не получается правильно считать структуру из файла и записать в файл (после сортировки(её я выполнил)
1 / 1 / 0
Регистрация: 04.04.2008
Сообщений: 34
06.04.2008, 21:45 4
тебе посимвольно записывать в файл и считывать из файла или по байтам?
т.е. можно сразу из структуры данные записать в файл, например одна структура на одной строке и, например, через пробел считывать по слову, а можно выровнять структуру и по байтам ее записать и считывать
0
FIZIKK
07.04.2008, 04:36 5
Цитата Сообщение от 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" то следующая структура
0
FIZIKK
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
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
07.04.2008, 19:26 9
всё, пока вродевсё нормально) помоги пожалуйста с чтением из файла
1 / 1 / 0
Регистрация: 04.04.2008
Сообщений: 34
07.04.2008, 22:59 10
сегодня не смогу, ухожу сейчас, попробуй сам, используй fopen(f,"r")
а дальше я тебе описывал
0
1 / 1 / 0
Регистрация: 04.04.2008
Сообщений: 34
07.04.2008, 23:00 11
там строчек на 5 будет больше чем в сохранении
0
IZIKK
08.04.2008, 16:13 12
Цитата Сообщение от Shurick Посмотреть сообщение
сегодня не смогу, ухожу сейчас, попробуй сам, используй fopen(f,"r")
а дальше я тебе описывал
помоги пожалуйста с этой функцией, если это несложно)
Еще если сильно не затруднить, можешь правильно реализовать функции в моём коде, мне просто сдавать завтра контрольную, а у меня ппц...
P.S если не слишком сложно...
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
}
}
}

по идее должно работать, я не проверял ибо нах
0
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;
0
FIZIKK
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();}
1 / 1 / 0
Регистрация: 04.04.2008
Сообщений: 34
08.04.2008, 20:00 16
короче откомпилил, на правильность работы не проверял, чисто поисправлял баги для того чтоб запускалась, дальше сам уже делай
зы
вставь
exit(0);
туда где у тебя зацикливание идет (я думаю, что в риде, а там хз) а то ж не выйдешь
(екзит просто с любой точки проги завершит ее)
Вложения
Тип файла: rar POM.rar (1.2 Кб, 32 просмотров)
0
FIZIKK
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();}
FIZIKK
11.04.2008, 06:53 18
эх(
11.04.2008, 06:53
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.04.2008, 06:53
Помогаю со студенческими работами здесь

Задача на циклы! Язык Си++! определить количество разных чисел
Определить количество различных чисел, которые содержатся в числе N? ( это число мы вводим с...

Структуры задача
Горная вершина представлена названием, высотой в метрах, уровнем сложности восхождения на вершину....

[C++] Задача на структуры
В Европе около 35 государств. По каждому государству имеется следующая информация: название,...

Структуры в С++(Задача)
Ввести перечислимые типы вертикаль, горизонталь для обозначения клеток шахматной доски. Составить и...


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru