Название
Односвязный списокЦель работы
Изучение способов организации и описания динамических
структур, приобретение навыков работы с ними.
Лабораторное задание
Данная работа подразумевает создание односвязного
динамического списка с неограниченным количеством элементов. После ввода
очередного элемента списка на экран должен выдаваться запрос об окончании
ввода. Об окончании списка также может свидетельствовать ввод специального
символа в 1-ое поле элемента, например
‘*’. Перестановка элементов списка может
быть произведена двумя способами: изменением содержимого полей связей и
изменением содержимого информационных полей в соответствующих элементах списка.
Для выполнения лабораторной работы рекомендуется осуществлять замену первым
способом.
2) Оформить
структуру данных в виде динамического
списка.
3) Разработать
программу, осуществляющую:
а) ввод
исходных данных в список, завершение ввода должно отмечаться специальным
символом (в список должно быть введено
не менее пяти записей);
б) вывод исходных
данных на экран в виде таблицы;
в)
перестановку местами первого и последнего элементов динамического списка;
г) вывод на
экран модифицированного списка в виде таблицы;
4) Выполнить
программу на компьютере и оценить правильность ее работы.
Вариант
№1: одежда.
Листинг
#include <stdio.h>
#include <conio.h>
#include <locale.h>
#include <windows.h>
#include <iostream>
struct ODEJDA
{
char name
[30];
struct RAZM
{
char Min[30], Max[30];
} razm;
char price[30];
};
struct DYN
{
ODEJDA str;
DYN *n;
}*fs,*p,*q;
int i=0;
void vvodivivod()
{
system("cls");
setlocale (LC_ALL, "Russian");
int f=0,j;
char specchar='n';
int cp
= GetConsoleCP();
const char
header[] =
"+---+-----------------+-------------------------+-----------------+\n"
"| | | Размер | |\n"
"| № | Название
+------------+------------+ Цена
|\n"
"| | | мин
| макс
| |\n"
"+---+-----------------+------------+------------+-----------------+\n";
q=new(DYN);
printf("Введите
название 1-го типа одежды: \n");
scanf("%s",&q->str.name);
printf("Введите минимальный размер
1-го типа одежды: \n");
scanf("%s",&q->str.razm.Min);
printf("Введите максимальный
размер 1-го типа одежды: \n");
scanf("%s",&q->str.razm.Max);
printf("Введите цену на 1-й тип
одежды: \n");
scanf("%s",&q->str.price);
fs=q;
p=q;
i=1;
printf("Хотите
продолжить список? (y/n)\n");
scanf(" %c",&specchar);
if (specchar=='y')
f=1;
while (f==1)
{
q=new(DYN);
f=0;
printf("Введите
название %d-го типа одежды: \n", i
+ 1);
scanf("%s",&q->str.name);
printf("Введите минимальный размер
%d-го типа одежды: \n", i + 1);
scanf("%s",&q->str.razm.Min);
printf("Введите максимальный
размер %d-го типа одежды: \n", i
+ 1);
scanf("%s",&q->str.razm.Max);
printf("Введите цену на %d-й тип
одежды: \n", i + 1);
scanf("%s",&q->str.price);
printf("Хотите продолжить список?
(y/n)\n");
scanf("
%c",&specchar);
if (specchar=='y')
f=1;
i++;
p->n=q;
p=q;
};
p->n=NULL;
system("cls");
printf("%s", header);
j=1;
p=fs;
SetConsoleCP(1251);
while(j<=i)
{
printf("| %2d| %-15s | %10s | %10s | %15s |\n",j, p->str.name, p->str.razm.Min, p->str.razm.Max, p->str.price);
p=p->n;
j++;
}
printf("+---+-----------------+------------+------------+-----------------+\n\n\n");
SetConsoleCP(cp);
}
void pomen()
{
int cp
= GetConsoleCP();
if (i!=0){
int j;
const char header[] =
"+---+-----------------+-------------------------+-----------------+\n"
"| | | Размер | |\n"
"| № | Название
+------------+------------+ Цена
|\n"
"| | | мин
| макс
| |\n"
"+---+-----------------+------------+------------+-----------------+\n";
ODEJDA str1;
DYN *p2;
p2=new(DYN);
p=fs;
p2=q;
p2->n=q;
str1=p->str;
p->str=p2->str;
p2->str=str1;
printf("Обработка выполнена\n");
SetConsoleCP(cp);
printf("%s", header);
j=1;
p=fs;
SetConsoleCP(1251);
while(j<=i)
{
printf("| %2d| %-15s | %10s | %10s | %15s |\n",j, p->str.name, p->str.razm.Min, p->str.razm.Max, p->str.price);
p=p->n;
j++;
}
printf("+---+-----------------+------------+------------+-----------------+\n\n\n");
};
}
void main
()
{
setlocale (LC_ALL, "Russian");
int cp
= GetConsoleCP();
int a;
a=1;
while (a!=5)
{
SetConsoleCP (cp);
printf("Нажмите одну из кнопок\n");
printf("Ввод и вывод данных -
1\n");
printf("Перемена
мест и вывод изменённой таблицы - 2\n");
printf("Выход - 3\n");
a=getch();
switch(a)
{
case '1':vvodivivod();
break;
case '2':pomen(); break;
default: a=3; exit(0);
}
}
}
Пояснительный
текст к программе
Переменные name, price, Min и Max отвечают
соответственно за введенные данные
названия, цены, минимально и максимально доступного размера.
Комментариев нет:
Отправить комментарий