49189 (566560)

Файл №566560 49189 (Структуры и алгоритмы обработки данных)49189 (566560)2016-07-28СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла

МОСКОВСКИЙ ГОСУДАРСТВЕННЫЙ ИНСТИТУТ

РАДИОТЕХНИКИ, ЭЛЕКТРОНИКИ И АВТОМАТИКИ

(ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ)

Кафедра «Математическое обеспечение вычислительных систем»

ОТЧЕТ

по лабораторному практикуму

по дисциплине «Структуры и алгоритмы обработки данных»

(часть 1)

Группы: ВСМ-6-05

Студент: Антонов А.Е.

Руководитель: Сыромятников В.П.

Москва- 2007 год

Лабораторная работа №1

«Кольцевые односвязные списки»

Вариант № 1.18

ПОСТАНОВКА ЗАДАЧИ

Сформировать линейный односвязный список (ЛОС) с заданным указателем sag, работающий с типом данных Integer. Составить программу, которая должна из заданного списка удалить первый и последний элементы.

Составить программу, которая:

  • обеспечивает ввод данных типа Integer с клавиатуры;

  • создает линейный односвязный список из введенных данных с клавиатуры;

  • обеспечивает диалог посредством вывода информационных сообщений и вариантов выполнения дальнейших действий;

  • удаляет первый и последний элементы.

  • в данной программе будут реализованы следующие возможности работы с ЛОС:

0 - Выход из программы

1 - Создание ЛОС

2 - Добавление элемента в начало списка

3 - Добавление элемента в середину списка, перед указанным значением

4 - Добавление элемента в середину списка, после указанного значения

5 - Добавление элемента в конец списка

6 - Удаление элемента в начале списка

7 - Удаление элемента ЛОС стоящего перед указанным значением списка

8 - Удаление элемента ЛОС стоящего после указанного значения списка

9 - Удаление определенного элемента в списке

10 - Удаление элемента в конце списка

11 - Удаление первого и последнего элементов ЛОС

12 - Очистка ЛОС

13 - Поиск элемента по его значению

14 - Сортировка элементов ЛОС

15 - Подсчет количества идентичных по содержанию элементов с указанным

ОПИСАНИЕ АЛГОРИТМА РЕШЕНИЯ ЗАДАЧИ

Ввод данных осуществляется в диалоговом режиме.

Пользователь информируется о вариантах работы в данной программе, об особенностях ввода значений в программе.

Далее осуществляется ввод самого списка. Создается линейный односвязный список, с указанием на конец списка (NIL) и по мере ввода данных, ЛОС наполняется, при этом идет сортировка значений элементов по возрастанию.

После ввода необходимого количества элементов и ввода нулевого значения, созданный и отсортированный ЛОС выводиться на экран.

Далее, следуя указаниям программы, пользователь нажимает Enter, для продолжения работы программы, на экран выводиться перечень возможных вариантов работы в данной программе.

После выбора нужного номера операции, в нашем случае (11 - Удалить первый и последний элементы ЛОС) и нажатия на Enter. Происходит удаление первого и последнего элементов ЛОС, с выводом на экран итогового вида ЛОС.

ОПИСАНИЕ ИСПОЛЬЗУЕМЫХ СТРУКТУР ДАННЫХ

Для хранения данных в соответствии с постановкой задачи необходимо в программе создать Линейный Односвязный Список (ЛОС).

Описание типа используемых данных

Type

chisla = set of '0'..'9'; {множество}

TE= Integer; {описание целочисленного типа}

WE= String; {описание строкового типа}

PE= ^EL; {описание типа указателя}

EL= Record {описание типа - запись}

inf: TE; {информационная часть элемента, тип Integer}

inf2: WE; {информационная часть элемента, тип String}

next: PE {адресная часть элемента}

End;

Var

Sag, {указатель начала списка}

q, qq: PE; {переменные указателей}

oper, st, st2: TE; {переменные целочисленного типа}

w, stroka: WE; {переменные строкового типа}

ОПИСАНИЕ ПОЛЬЗОВАТЕЛЬСКОГО ИНТЕРФЕЙСА

Начальный вид окна программы.

Для начала ввода данных в ЛОС, надо определиться с каким типом данных Вы хотели бы работать. После того, как Вы решили с каким типом данных Вы будете дальше работать, Вам нужно ввести номер варианта дальнейшей работы (1 или 2).

Для выполнения условий данной лабораторной, выбираем тип Integer (тип целочисленный) предел его от -32768 до 32767.

Далее, осуществляется ввод самого списка. Создается линейный односвязный список, с указанием на конец списка (NIL) и по мере ввода данных, ЛОС наполняется, при этом идет сортировка значений элементов по возрастанию.

После ввода необходимого количества элементов и ввода нулевого значения, созданный и отсортированный ЛОС выводиться на экран. (Рис.2)

Далее, следуя указаниям программы, пользователь нажимает Enter для продолжения работы программы, и на экран выводиться перечень возможных вариантов работы в данной программе.(Рис.3)

После выбора нужного номера операции, для выполнения условий нашей задачи, выбираем (11 - Удалить первый и последний элементы ЛОС) и нажимаем на Enter. Происходит удаление первого и последнего элементов ЛОС, с выводом на экран итогового вида ЛОС.(Рис.4)

Видно, что с поставленной задачей наша программа справилась. Были удалены первый и последний элементы ЛОС, а потом был выведен итоговый вид ЛОС.

ЛИСТИНГ ПРОГРАММЫ

Type

chisla = set of '0'..'9'; //множество

TE= Integer; //описание целочисленного типа

WE= String; //описание строкового типа

PE= ^EL; //тип указателя

EL= Record //описание типа - запись

inf: TE; //информационная часть элемента, тип Integer

inf2: WE; //информационная часть элемента, тип String

next: PE //адресная часть элемента

End;

Var

Sag, //указатель, на начало списка

q, qq: PE; //переменные указателей

oper, st, st2: TE; //переменные целочисленного типа

w, stroka: WE; //переменные строкового типа

Procedure Print(sag: PE); {вывод ЛОС}

Var

q: PE; //адресная переменная

Begin

q:= sag^.next; //запоминаем адрес первого элемента ЛОС

if q= Nil then {проверяем ЛОС на пустоту и если он пустой

выводим сообщение о том, что ЛОС пустой

и выводим варианты дальнейшей работы

программы}

begin

WriteLn(rus('ЛОС пустой, выводить нечего!'));

WriteLn('');

WriteLn(rus('___________________________________________'));

WriteLn(rus('Что Вы хотите сделать?'));

WriteLn(rus(''));

WriteLn(rus('1 - Создать ЛОС'));

WriteLn(rus(''));

WriteLn(rus('0 - Выйти'));

WriteLn(rus(''));

WriteLn(rus('Введите номер требуемой операции '));

WriteLn(rus('___________________________________________'));

WriteLn('');

end

Else {если ЛОС не пустой продолжаем выполнение

процедуры}

Begin {проверяем, с каким типом данных происходит

работа программы}

If st = 1 then {если пользователь выбрал вариант работы, работа с типом Integer}

//st = 1 – работа с типом данных, Integer

Begin

While q<>Nil do {проходим по всему ЛОС пока не дойдем до указателя конца списка (Nil)}

Begin

Write('[',q^.inf,'] '); {выводим на экран значение элемента ЛОС – тип

Integer}

q:=q^.next; //запоминаем адрес следующего элемента

End;

WriteLn;

end

else

Begin

While q<>Nil do {проходим по всему ЛОС пока не дойдем до

указателя конца списка (Nil)}

Begin

Write('[',q^.inf2,'] '); {выводим на экран значение элемента ЛОС - тип

String}

q:=q^.next; //запоминаем адрес следующего элемента

End;

WriteLn(' ');

end;

End;

End;

Procedure Proverka (var w: WE); {проверка превышения

значения типа Integer}

Var

a, i: TE;

c: char;

b: chisla;

Begin

w:= '';

ReadLn(w); //ввод числа с клавиатуры – тип String

While (w = '') or (w='-')do {проверяем, если пользователь не ввел данные или ввел только знак минуса выводим на экран сообщения о не корректные вводе}

Begin

WriteLn(Rus('Вы не ввели данные или они не корректны, попробуйте еще раз')); WriteLn(' ');

Proverka(w); //выполняем рекурсивный вход в процедуру

End;

for i:= 1 to length(w) do {запускаем цикл проверки числа на корректность ввода, число введено, как строка. По этому мы можем поэлементно проверить каждую цифру}

begin

b:= ['0','1','2','3','4','5','6','7','8','9']; //множество состоящее из цифр

c:=w[i]; {берем каждую цифру из числа проходя от первой до последней}

if (c in b) or (c='-') and (i=1) then {сравниваем есть ли цифра из введенного числа во множестве заданных цифр и проверяем какое число было введено, отрицательное или положительное и не стоит ли знак минус в середине числа}

else

a:= 1; {если число не корректно делаем пометку для дальнейшей проверки}

end;

if a = 1 then {если число не прошло проверку выводим

сообщение о не корректном вводе числа}

begin

WriteLn(rus('Вы ввели не корректные данные !'));

WriteLn(' ');

Proverka(w); {выполняем рекурсивный вход в

процедуру}

end;

if (length(w)<5) then {если длина числа меньше 5 знаков заканчиваем проверку, так как число не превышает максимального значения типа Integer, а корректность ввода мы уже проверили}

else {если число больше то проверяем его

дальше}

begin

if (length(w)>5) and (w[1]<> '-') then {если длина числа больше пяти

знаков, и при этом первый знак, не знак

минуса то выводим сообщение о

превышении максимального

значения типа Integer}

begin

Write(rus('Вы ввели не число или число превышающее диапазон '));

WriteLn(rus('типа Integer (-32768..32767) '));

WriteLn('');

WriteLn(rus('Введите другое число'));

Proverka(w); {выполняем рекурсивный вход в

процедуру}

end;

if (w[1]= '-') and (length(w)>4) and (w>'-32768') then {если первый знак числа, знак минуса, а число по длине меньше или равно четырем знакам или число больше чем четыре знака и в ходе сравнения строка со значением введенного числа, меньше или равна строке по значению с максимальным пределом типа Integer, то идем дальше. Иначе, выводим сообщение о превышении максимального значения типа Integer}

begin

Write(rus('Вы ввели не число или число превышающее диапазон '));

WriteLn(rus('типа Integer (-32768..32767) '));

WriteLn('');

WriteLn(rus('Введите другое число'));

Proverka(w); {выполняем рекурсивный вход в

процедуру}

end;

if (length(w)>4) and (w>'32767') then {если число по длине меньше или равно четырем знакам или число больше чем четыре знака и в ходе сравнения строка со значением введенного числа, меньше или равна строке по значению с максимальным пределом типа Integer, то идем дальше. Иначе выводим сообщение о превышении максимального значения типа Integer}

begin

Write(rus('Вы ввели не число или число превышающее диапазон '));

WriteLn(rus('типа Integer (-32768..32767) '));

WriteLn('');

WriteLn(rus('Введите другое число'));

Proverka(w); {выполняем рекурсивный вход в

процедуру}

end;

end;

End;

Procedure Gou(w: WE); forward; //Опережающее описание процедуры

Procedure Create2(var sag: PE); {Процедура ввода элементов в ЛОС с сортировкой по возрастанию}

Var

q, qq, s: PE; //адресные переменные

a: TE; //переменная для ввода данных

Begin

writeln(' ');

WriteLn(rus('Введите элементы в ЛОС: '));

WriteLn(rus('Ввод завершите 0'));

if st2<>1 then //если ЛОС еще не был создан

begin

New(sag); //создаем указатель начала списка

q:=sag^.next; //запоминаем адрес первого элемента ЛОС

end;

If st = 1 then {если пользователь выбрал вариант работы, с типом Integer}

//st = 1 – работа с типом данных, Integer

begin

Proverka(w); {вход в процедуру проверки корректности

ввода данных}

a:= StrToInt(w); {перевод числа из строкового типа данных в целочисленный}

end

else {если пользователь выбрал вариант работы, работа с типом String}

//st = 2 – работа с типом данных, String

ReadLn(stroka); //ввод данных типа String

if (q= nil) or (st2=1) then {если ЛОС был пустым или ЛОС уже создавался}

Begin

New(q); {создаем адресную переменную для

первого элемента}

If st = 1 then {если пользователь выбрал вариант работы, работа с типом Integer}

//st = 1 – работа с типом данных, Integer

q^.inf:= a {заносим в информационную часть, значение данных}

else

q^.inf2:= stroka; {заносим в информационную часть, значение данных}

q^.next:= sag^.next; {в адресную часть второго элемента

заносим адресную часть первого

элемента}

sag^.next:= q; {в адресную часть первого элемента заносим адрес созданного указателя}

If st = 1 then {если пользователь выбрал вариант работы, работа с типом Integer}

//st = 1 – работа с типом данных, Integer

begin

Характеристики

Тип файла
Документ
Размер
410,46 Kb
Тип материала
Учебное заведение
Неизвестно

Тип файла документ

Документы такого типа открываются такими программами, как Microsoft Office Word на компьютерах Windows, Apple Pages на компьютерах Mac, Open Office - бесплатная альтернатива на различных платформах, в том числе Linux. Наиболее простым и современным решением будут Google документы, так как открываются онлайн без скачивания прямо в браузере на любой платформе. Существуют российские качественные аналоги, например от Яндекса.

Будьте внимательны на мобильных устройствах, так как там используются упрощённый функционал даже в официальном приложении от Microsoft, поэтому для просмотра скачивайте PDF-версию. А если нужно редактировать файл, то используйте оригинальный файл.

Файлы такого типа обычно разбиты на страницы, а текст может быть форматированным (жирный, курсив, выбор шрифта, таблицы и т.п.), а также в него можно добавлять изображения. Формат идеально подходит для рефератов, докладов и РПЗ курсовых проектов, которые необходимо распечатать. Кстати перед печатью также сохраняйте файл в PDF, так как принтер может начудить со шрифтами.

Список файлов лабораторной работы

Свежие статьи
Популярно сейчас
Как Вы думаете, сколько людей до Вас делали точно такое же задание? 99% студентов выполняют точно такие же задания, как и их предшественники год назад. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6859
Авторов
на СтудИзбе
272
Средний доход
с одного платного файла
Обучение Подробнее