- •Оглавление
- •Лабораторная работа №1
- •Лабораторная работа №2 Форматный ввод-вывод
- •Лабораторная работа №3 Составление алгоритма решения задачи и его реализация
- •1. Изучить:
- •1. Изучить:
- •Пример выполнения работы
- •Контрольные вопросы
- •Лабораторная работа №4 Программирование алгоритмов циклической структуры
- •1. Изучить:
- •Пример выполнения работы
- •Контрольные вопросы
- •Лабораторная работа №5 Обработка одномерных массивов
- •1. Изучить:
- •Пример выполнения работы
- •Контрольные вопросы
- •Лабораторная работа №6 Обработка двумерных массивов
- •1. Изучить:
- •Пример выполнения работы
- •Контрольные вопросы
- •Лабораторная работа №7 Типовые приемы алогитмизации
- •1. Изучить:
- •Пример выполнения работы
- •Контрольные вопросы
- •Лабораторная работа №8 Обработка символьных данных
- •1. Изучить:
- •Пример выполнения работы
- •1. Изучить:
- •Пример выполнения работы
- •Пример выполнения работы
- •1. Изучить:
- •Пример выполнения работы
- •Контрольные вопросы
- •Лабораторная работа №12 Работа с файлами на верхнем уровне
- •1. Изучить:
- •Пример выполнения работы
- •Контрольные вопросы
- •Лабораторная работа №13 Организация работы в графическом режиме
- •1. Изучить:
- •Пример выполнения работы
- •Контрольные вопросы
- •Лабораторная работа №14 Создание графика
- •1. Изучить:
- •Пример выполнения работы
- •Контрольные вопросы
- •Лабораторная работа №15 Организация перемещения объекта по заданной траектории
- •1. Изучить:
- •Пример выполнения работы
- •Лабораторная работа №16 Организация работы в текстовом режиме
- •1. Изучить:
- •Пример выполнения работы
- •Контрольные вопросы
- •Лабораторная работа №17 Создание светового меню
- •1. Изучить:
- •Контрольные вопросы
- •Лабораторная работа №18 Динамическое распределение памяти, создание списка
- •1. Изучить:
- •Пример выполнения работы
- •Контрольные вопросы
Пример выполнения работы
Задание А.
Разместить в динамической памяти список элементами которого являются структуры, состоящие из полей:
- название книги;
- автор;
- год выпуска.
Вывести информацию из ДП на экран.
Программа решения задачи имеет вид:
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<alloc.h>
#include<string.h>
void main()
{
char b,q[20]; // b – для считывания символа, нажатого на клавиатуре,
//q – вспомогательная строка
struct sv { char a[20]; int year; char naz[20]; struct sv* p; }
*nov, *pred; //указатели на структуру sv, состоящую из полей a – автор,
//year – год издания, naz – название книги, p – адрес предыдущего элемента списка
clrscr();
pred=NULL; //адрес предыдущего элемента списка
for(;;)
{
if( (nov= (sv*) malloc( sizeof(sv)) ) ==NULL) //выделение динамической памяти
{
printf("Empety memory!"); //не хватает памяти
return;
}
//Ввод
printf("Название книги:");
gets(nov->naz);
printf("Автор:");
gets(nov->a);
printf("Год выпуска:");
gets(q);
nov->year=atoi(q);
nov->p=pred; //адрес предыдущего элемента списка
pred=nov; //запоминание адреса предыдущего элемента списка
printf("Продолжить? (y/n):");
b=getc(stdin); //считывание символа
if(b=='n' || b=='N')
break; //выход из цикла for
b=getc(stdin); //считывание символа
}
//Вывод
clrscr();
printf("Список из DS:\n");
pred=nov; //встать в начало списка
do
{
printf("***Книга: %-15s ***Автор: %-15s ***Год: %d\n",pred->naz,pred->a,pred->year);
pred=pred->p;
}
while(pred!=NULL); //пока не достигли конца списка
getch();
return; //завершение программы
}
Задание Б.
Модернизировать программу размещения в ДП списка, таким образом, чтобы список размещался с одновременным упорядочиванием по наименованию в обратном алфавитному порядке. Организовать возможность удаления элементов списка по вводимому с клавиатуры значению поля, по которому производилось упорядочивание.
Программа решения задачи имеет вид:
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<alloc.h>
#include<string.h>
void main()
{
char b,q[20]; // b – для считывания символа, нажатого на клавиатуре,
//q – вспомогательная строка
struct sv { char a[20]; int year; char naz[20]; struct sv* p; }
*nov, *nac, *tec; //указатели на структуру sv, состоящую из полей a – автор,
//year – год издания, naz – название книги, p – адрес предыдущего элемента списка
clrscr();
if( (nac= (sv*) malloc( sizeof(sv)) ) ==NULL)
{
printf("Empety memory!");
return;
}
//Ввод в первый элемент списка
printf("Название книги:");
gets(nac->naz);
printf("Автор:");
gets(nac->a);
printf("Год выпуска:");
gets(q);
printf("\n");
nac->year=atoi(q);
nac->p=NULL;
for(;;)
{
if((nov=(sv*) malloc( sizeof(sv)) ) ==NULL) //выделение динамической памяти
{
printf("Empety memory!"); //на хватает памяти
return;
}
//Ввод во все следующие элементы списка
printf("Название книги:");
gets(nov->naz);
printf("Автор:");
gets(nov->a);
printf("Год выпуска:");
gets(q);
nov->year=atoi(q);
//определение места для вставки нового элемента списка согласно упорядочиванию
if(strcmp(nac->naz,nov->naz)<0)
{ //вставка в начало списка
nov->p=nac;
nac=nov;
}
else
{
tec=nac;
while(strcmp(tec->naz,nov->naz)>0 && tec->p!=NULL)
tec=tec->p;
//вставка в середину или конец списка
nov->p=tec->p;
tec->p=nov;
}
printf("Продолжить? (y/n):");
b=getc(stdin); //считывание символа, нажатого на клавиатуре
if(b=='n' || b=='N')
break; //
b=getc(stdin);
}
//вывод
clrscr();
printf("Список из DS:\n");
tec=nac; //встать в начало списка
do
{
printf("***Книга:%-15s ***Автор:%-15s ***Год:%-4d\n",tec->naz,tec->a,tec->year);
tec=tec->p;
}
while(tec!=NULL); //пока не конец списка
//Удаление
b=getc(stdin);
for(;;)
{
printf("Удалить ? (y/n)");
b=getc(stdin);
if(b=='n' || b=='N')
break; // выход из цикла
b=getc(stdin);
printf("Удалить книгу: ");
gets(q); //чтение названия удаляемой книги
tec=nac; //встать в начало списка
if(strcmp(tec->naz,q)==0) //если названия совпадают
{
nac=nac->p; //удаление в начале списка
}
else
{
tec=nac; //встать в начало списка
//поиск
while( tec->p!=NULL && strcmp(tec->p->naz,q)= =0)
tec=tec->p;
tec->p=tec->p->p; //удаление
}
if(!nac) //список пуст
{
clrscr();
printf("Список пуст\n");
break;
}
//вывод
clrscr();
printf("Список из DS:\n");
tec=nac; //встать в начало
do
{
printf("***Книга:%-15s ***Автор:%-15s ***Год:%-4d\n",tec->naz,tec->a,tec->year);
tec=tec->p;
}
while(tec!=NULL); //пока не конец списка
}
getch();
return; //завершение программы
}
