Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка по С.doc
Скачиваний:
35
Добавлен:
20.05.2014
Размер:
439.81 Кб
Скачать

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

{ char *s; int i;

FILE *fin;

printf("Введите имя входного файла: "); gets(s);

fin=fopen(s, "r");

if (fin==NULL)

{ printf ("Нет такого файла\n");

getch();

}

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);

}

}

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

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

void main()

{ TV tv[Kmax];

int k, kg=0, i;

char goroda[Kmax][Lmax];

FILE *fout;

clrscr();

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

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

search(tv, goroda, k, &kg);//поиск городов

clrscr();

//вывод результата на экран и в файл

fout=fopen("result.txt", "w");

printf("Город(а), в которых производятся самые дешевые телевизоры:\n");

fprintf(fout, "Получено %d городов, в которых производятся самые дешевые телевизоры:\n",kg);

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

{

puts(goroda[i]);

fprintf(fout, "%s\n", goroda[i]);

}

fclose(fout);

puts("Результат записан в файл result.txt");

getch();

}

    1. Лабораторная работа 5. "Списки. Динамические переменные"

Написать программу, которая вводит из файла структуры вида:

размещает их в

  1. стеке;

  2. очереди;

реализованном(ой) с помощью

  1. линейного списка;

  2. циклического списка;

  3. двунаправленного линейного списка;

  4. двунаправленного циклического списка;

и выполняет следующие действия:

  1. удаляет из списка стулья заданного цвета;

  2. удаляет из списка стулья из заданного материала;

  3. удаляет из списка все стулья, расположенные между первым и последним стулом заданного цвета;

  4. удаляет из списка стул из заданного материала с максимальной высотой;

  5. вставляет в список новый стул после первого стула из заданного материала;

  6. вставляет в список новый стул перед первым стулом заданного цвета;

  7. вставляет в список новый стул перед самым низким стулом;

Результат (содержимое стека или очереди) выводится в файл.

Таблица 2

Выбор варианта

    1. Пример решения задачи

Задача 5. Сформировать стек, содержащий данные о стульях. Удалить из него все стулья, производимые в данном городе. Результат записать в файл.

#include<stdio.h>

#include<ctype.h>

#include<conio.h>

#include<string.h>

#include<alloc.h>

#define Lmax 20

#define STUL struct stu

#define CLR while(fgetc(f)!='\n')

STUL

{char cvet[Lmax]; int visota;

struct{ char city[Lmax],zavod[Lmax],fam[Lmax];}

izgot;

char mater[Lmax];

STUL *next;//поле указателя на следующую запись

};

//формирование стека стульев. На входе - имя входного файла

STUL*stack(char name[])

{ STUL *tek,*stack=NULL;//изначально список пуст

FILE *f;

if(!(f=fopen(name,"r")))

puts("Файл не найден");

else

{

while(!feof(f))

{ //выделение памяти для новой записи

tek=(STUL*)malloc(sizeof(STUL));

if(fgets(tek->cvet,Lmax,f))

{ //другой способ замены '\n' на '\0'

tek->cvet[strlen(tek->cvet)-1]='\0';

fscanf(f,"%d",&tek->visota);

CLR;

fgets(tek->izgot.city,Lmax,f);

tek->izgot.city[strlen(tek->izgot.city)-1]='\0';

fgets(tek->izgot.zavod,Lmax,f);

tek->izgot.zavod[strlen(tek->izgot.zavod)-1]='\0';

fgets(tek->izgot.fam,Lmax,f);

tek->izgot.fam[strlen(tek->izgot.fam)-1]='\0';

fgets(tek->mater,Lmax,f);

tek->mater[strlen(tek->mater)-1]='\0';

tek->next=stack;

stack=tek;

}}

free(tek);

}

return(stack);//возвращается указатель на вершину стека

}