Getchar();//ожидание нажатия клавиши

}

printf("End of list\n");

printf("Press any key to continue...\n");

}

//формирование массива городов (города в массиве не повторяются)

void search (tvSet *tv, char goroda[][Lmax], int k, int *kg)

{

int min=LONG_MAX, i, j;

for(i=0; i<k; i++)//поиск телевизора с минимальной ценой

if (tv[i].price<min) min=tv[i].price;

//формирование массива городов

for (i=0; i<k; i++)

if (tv[i].price==min)//если цена совпадает с минимальной

{

//проверка отсутствия города в массиве городов

for(j=0; j<*kg && strcmp(tv[i].pr.gorod, goroda[j]); j++);

if (j==*kg)//если отсутствует, запишем город в массив

strcpy(goroda[(*kg)++], tv[i].pr.gorod);

}

}

Main()

{

tvSet tv[Kmax];

int k, kg=0, i;

char goroda[Kmax][Lmax];

input(tv, &k);//ввод массива телевизоров

output(tv, k);//вывод массива телевизоров на экран

search(tv, goroda, k, &kg);//формирование массива городов

printf("Result:\n%d cities with the lowest price of the TV:\n",kg);

for(i=0; i<kg; i++)

puts(goroda[i]);

return 0;

}

Задача 4.2. Модифицировать программу таким образом, чтобы она вводила структуры из текстового файла и записывала результаты в файл.

В решении данной задачи приведены те описания данных и функции, которые будут отличаться от предыдущей задачи. На месте остальных функций расположены комментарии.

 

/* подключение библиотек, шаблоны структур, объявление констант аналогично первой части */

//формирование массива городов также аналогично части 1

//замена символа '\n' на '\0'

void zamena(char *str)

{ char *s; //указатель на текущий символ

s=str;

while (*s!='\n') s++;

*s='\0';

}

void input (tvSet *tv, int *k) //чтение данных из файла

{ char s[81]; int i;

FILE *fin;

printf("Enter input-file name: "); gets(s);

fin=fopen(s, "r");

if (fin==NULL)

{ printf ("No such file\n");

getchar();

}

Else

{ //на первой строке в файле расположено число структур

fscanf(fin, "%d", k);

FCLR; //пропуск символов до конца строки файла

for(i=0; i<*k; i++)

{ //каждое поле структуры занимает в файле отдельную строку

fgets(tv[i].name, Lmax, fin); zamena(tv[i].name);

fscanf(fin, "%d", &tv[i].price);

fscanf(fin, "%d", &tv[i].diag);

FCLR;

tv[i].color=fgetc(fin);

fgets(s, Lmax, fin);

fgets(tv[i].pr.gorod, Lmax, fin); zamena(tv[i].pr.gorod);

fgets(tv[i].pr.zavod, Lmax, fin); zamena(tv[i].pr.zavod);

fgets(tv[i].pr.fam, Lmax, fin);

}

fclose(fin);

}

}

//вывод данных на экран и формирование массива городов- аналогично

//предыдущей задаче

Main()

{ tvSet tv[Kmax];

int k, kg=0, i;

char goroda[Kmax][Lmax];

FILE *fout;

input(tv, &k); //ввод массива структур из файла