- •Министерство образования и науки российской федерации
- •Содержание
- •Лабораторная работа 1. "Одномерные массивы"
- •Пример решения задачи
- •Лабораторная работа 2. "Двумерные массивы (с использованием указателей)"
- •Пример решения задачи
- •Лабораторная работа 3. "Символьные строки. Подпрограммы"
- •Выбор варианта
- •Пример решения задачи
- •If(*s)//как только обнаружена русская буква,
- •Лабораторная работа 4. "Структуры. Файлы "
- •Примеры решения задач
- •Void input (tv *tv, int *k) //ввод массива телевизоров
- •Input(tv, &k);//ввод массива телевизоров
- •Void input (tv *tv, int *k)//чтение данных из файла
- •Input(tv, &k);//ввод массива структур из файла
- •Лабораторная работа 5. "Списки. Динамические переменные"
- •Выбор варианта
- •Пример решения задачи
- •Void vivod(stul* stack, char name[])//вывод списка в файл
- •Vivod(first,name2);//вывод результата в файл
- •Лабораторная работа 6. "Рекурсия"
- •Примеры решения задач
- •Void setleft(node*p, int X)//присоединение числа X к узлу p слева
- •Void setright(node*p, int X) //присоединение числа X к узлу p справа
- •Int max,min;//максимальное и минимальное число в дереве
- •Int numb;//искомое число
- •If (!der) puts("дерево пустое");
- •Пример использования рекурсии для проверки правильности записи арифметического выражения
- •If (fae () || *pf ) /* то есть в выражении есть ошибка,
- •109028 Москва, б. Трехсвятительский пер., 3/12.
- •113054 Москва, ул. М. Пионерская, 12.
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();
}
Лабораторная работа 5. "Списки. Динамические переменные"
Написать программу, которая вводит из файла структуры вида:
р
азмещает
их в
стеке;
очереди;
реализованном(ой) с помощью
линейного списка;
циклического списка;
двунаправленного линейного списка;
двунаправленного циклического списка;
и выполняет следующие действия:
удаляет из списка стулья заданного цвета;
удаляет из списка стулья из заданного материала;
удаляет из списка все стулья, расположенные между первым и последним стулом заданного цвета;
удаляет из списка стул из заданного материала с максимальной высотой;
вставляет в список новый стул после первого стула из заданного материала;
вставляет в список новый стул перед первым стулом заданного цвета;
вставляет в список новый стул перед самым низким стулом;
Результат (содержимое стека или очереди) выводится в файл.
Таблица 2
Выбор варианта

Пример решения задачи
Задача 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);//возвращается указатель на вершину стека
}
