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); //ввод массива структур из файла