Главная » Просмотр файлов » Основы программирования

Основы программирования (947332), страница 40

Файл №947332 Основы программирования (Иванова Г.С. Основы программирования) 40 страницаОсновы программирования (947332) страница 402013-09-15СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 40)

Разработать программу, которая строит список, сортиро­ванный по возрастанию элементов, из целых чисел, вводимых с клавиатуры.Количество чисел не известно, но отлично от нуля. Конец ввода ~ по комби­нации CTRL-Z (конец файла на устройстве ввода).Список сортирован, соответственно, добавляя элемент, необходимо со­хранить закон сортировки: элемент должен вставляться перед первым эле­ментом, который больше, чем добавляемый. В зависимости от конкретныхданных он может вставляться в начало, середину и конец списка.new(first);{запрашиваем память под первый элемент}ReadLn(first \nuin); {заносим число в информационное поле}first\p:=nil;while not EOF dobeginnew(q);{создаем элемент}ReadLn(q\num); {заносим значение}if q\num<first\num then {если элемент меньше первогоэлемента списка, то}2327.

Программирование с использованием динамической памятиbegin{вставляем перед первым}q\p:=first;firsU-q;endelse(иначе вставляем в середину или конец}beginn:-first;{указатель на текущий элемент}f:-first;{указатель на предыдущий элемент}flag:^false;{"элемент не вставлен"}{цикл поиска места вставки}while (n\ponil)and (not flag) dobeginn:=n\p; {переходим к следующему элементу}if q^,num<n\num then {место найдено}begin{вставляем в середину}q\p:^f\p;f''>p:^q;y7ag;=/rwe; {"элемент вставлен"}endelsef:-n;{сохраняем адрес текущего элемента}end;if not flag then {если элемент не вставлен, то}begin{вставляем после последнего}q\p:-nil;f\p:^q;end;end;end;Просмотр и обработка элементов списка.

Просмотр и обработка эле­ментов списка выполняется последовательно с использованием дополни­тельного указателя:f:-=first;while fonil dobegin<обработка элемента по адресу f>end;...В качестве примера рассмотрим вывод на экран элементов списка:233Часть I. Основы алгоритмизации и процедурное программированиеf:=first;while fonil dobeginWriteLn(f\num, * *);end; ...Поиск элемента в списке. Поиск элементов в списке также выполня­ется последовательно, но при этом, как это и положено в поисковом цикле,обычно организуют выход из цикла, если нужный элемент найден, и осуще­ствляют проверку после цикла, был ли найден элемент:fi^flrst;flag:--false;while (fonil) and (not flag) dobeginiff \num=k then flag:^notflagelsef:^f\p;end;if flag then <элемент найден >else <элемент не найден>; ...Удаление элемента из списка.

При выполнении операции удалениятакже возможно четыре случая:• удаление единственного элемента;• удаление первого (не единственного) элемента списка;• удаление элемента, следующего за данным;• удаление последнего элемента.Удаление единственного элемента. После удаления единственного эле­мента список становится пустым, следовательно при выполнении этой опе­рации необходимо не только освободить память, выделенную для размеще­ния элемента, но и занести nil в указатель списка first (рис. 7.14):first^234firstЩ''first[1]Dispose(first);first:^nil; ...*Удаление первого (не единстDisposefflrst); first: ^пН; венного) элемента списка. Удалеабв"^® первого элемента состоит из со­хранения адреса следующего элеРис.

7.14. Удалениемента в рабочей переменной f, осединственного элемента списка:вобождения памяти элемента и за­л-исходное состояние; б-освобождениеписи В указатель списка сохраненпамяти; в - занесение константы nil вного адреса следующего элементауказатель списка(рис. 7.15):7. Программирование с использованием динамической памятиfirstЛЕйrJL^^f:^firsi\p;firstiiiMД- ,1г—firstTT0lDispose(first):eпТТ0first: =/•гРис. 7.15. Удаление первого (не единственного)элемента списка:а - исходное состояние; б - сохранение адреса следующего элемента вспециальном указателе; в - освобождение памяти; г - запись в указа­тель списка адреса следующего элементаf:='first\p;(сохраняем адрес следующего элемента}Dispose(first); {освобождаем память}first:"=/; ...(заносим в указатель списка адрес следующегоэлемента}Удаление единственного элемента и первого элемента в программе мож­но объединить:q—first;first :=first\p;Dispose(q);...Удаление элемента, следующего за данным (не последнего).

Удалениеэлемента, следующего за данным, требует запоминания адреса удаляемогоэлемента, изменения адресной части данного элемента и освобождения па­мяти (рис. 7.16).n:=f^,p;f^,p:=n\p;(сохраняем адрес удаляемого элемента}(заносим в адресное поле предыдущего элемента ад­рес следующего элемента}Dispose(n); ... (освобождаем память}235Часть L Основы алгоритмизации и процедурное программированиеfirstIизчшэчхшfirstfnсиэчзпзч ЕГЭЧХШУдаление последнего элемен­та.

Удаление последнего элемен­та отличается только тем, что вполе «адрес следующего» задан­ного элемента записывается кон­станта nil:n:=f^p;f\p:=nil;Dispose(п); ...n-.^f'^.p;Удаление последнего эле­мента можно свести к удалениюэлемента, следующего за дан­firstfnным, так как адресная часть уда­ляемого элемента равна nil.9"ТЯ;?Г8Т0]Комбинируя приемы удале­ния,мы также можем организо­f\p:=n\p;вать любую дисциплину удале­ния.Пример 7.5.

Разработатьfirstfпрограмму, которая удаляет изсписка все элементы меньше за­7TT]Д"8Т01 данного значения к.Удаляемые значения могутDispose(n);располагаться в списке на любомместе, следовательно, возможнывсе четыре варианта удаленияРис. 7.16. Удаление элемента, следую­элемента, которые сводятся кщего за данным (не последнего):двум случаям:а - исходное состояние; б - сохранение адреса• удаление единственногоудаляемого элемента; в - исключение удаляемогоэлемента и удаление записей изэлемента из списка; г - освобождение памятиначала списка-удаление из нача­ла списка;• удаление средних и последнего элементов - удаление не из началасписка. Для разделения этих двух случаев введем специальный признак«удаление из начала», который в начале установим равным true, а затем, кактолько в списке будет оставлен хотя бы один элемент - изменим на false.пизчn.-'^Jirst;nft:=true;{признак «удаление из начала списка»}repeatifn^.num<kthenbegin2367.

Программирование с использованием динамической памятиifnft then {если «удаление из начала списка»}begin {удаление из начала списка}q:^firsi;first:=first^.p;Dispose(q);n:-first; {переходим к следующему элементу}endelse{иначе}begin{удаление из середины и конца}q:^n;п:-п\р; {переходим к следующему элементу}В18ро8е(ф;f\p:^n;endendelse {оставляем элемент в списке}beginf:-n;{устанавливаем адрес предыдущего элемента}п:-п\р;{переходим к следующему элементу}nft:='not nft {«удаление не из начала списка»}end;until n-nil;...{до завершения списка}Задания для самопроверкиЗадание 1. Разработайте профамму, которая вводит с клавиатуры последова­тельность чисел до символа «#», а затем удаляет из нее все числа, превышающиесреднее арифметическое чисел введенной последовательности.

Оставшиеся значе­ния выведите в обратном порядке.Задание 2. Разработайте программу, которая вводит с клавиатуры последова­тельность чисел до символа «#», а затем определяет следующие суммы:XI + х^; Х2 + Xj,.,; хз + Хп.2; ... х^ + х,.Указание, Используйте двусвязный список.Задание 3. Разработайте профамму, которая определяет «водящего» в детскойифе. Водящий определяется с помощью «считалки» следующим образом. Все ифающие встают в круг и начинают «считаться». Каждый раз тот, на ком закончиласьсчиталка, выбывает из круга.

Водит оставшийся. Исходное количество ифающих п.Количество слов считалки т .Указание, Используйте кольцевой список.237Часть L Основы алгоритмизации и процедурное программирование7.5. Бинарные деревьяВ математике бинарным (двоичным) деревом называют конечное множе­ство вершин, которое либо пусто, либо состоит из корня и не более чем двухнепересекающихся бинарных деревьев, называемых левым и правым подде­ревьями данного корня.Таким образом, каждая вершина бинарного дерева может включать одноили два поддерева или не включать поддеревьев вовсе.

Первое поддеревообычно называют левым, а второе - правым. Соответственно ветвь, исходя­щую из вершины и ведущую в корень левого поддерева, называют левой, аветвь, ведущую в корень правого поддерева - правой. Вершины, из которыхне выходит ни одной ветви, называют листьями (рис. 7.17).В программах для реализации бинарных деревьев используют п-связныесписки. С вершинами бинарного дерева обычно связывают записи, хранящиенекоторую информацию.Построение дерева выполняется следующим образом. Если дерево пус­то, то первая же вершина становится корнем дерева.

Добавление остальныхвершин регламентируется в зависимости от условия задачи: в соответствии сзаданной дисциплиной построения дерева отыскивается подходящая верши­на, к которой й подсоединяется новая вершина.Достаточно часто используют регулярные бинарные деревья с разнымизаконами построения.

Примером могут служить сортированные бинарныедеревья, построение которых осуществляется по правилу: ключевое поле ле­вого поддерева всегда долэюно содерэюать значение меньше, чем в корне, аключевое поле правого поддерева - значение больше или равное значению вкорне.Рассмотрим основные операции с сортированными бинарными деревь­ями.Корень дереваЛевая ветвьКорень левогоподдереваПравая ветвьКорень правогоподдереваРис. 7.17.

Пример бинарного дерева2387. Программирование с использованием динамической памятиИсходные установки. В начале программы необходимо описать эле­мент и его тип:Туре topjptr-^top;{тип «указатель на вершину»}top=recorcivalue:integer; {число}left,{указатель на левое поддерево}right:top_ptr; {указатель на правое поддерево}end;В статической памяти описываем указатель корня дерева и несколькоуказателей, используемых при выполнении операций со списком:Var root,{указатель структуры - адрес корня дерева}pass, next, q:topjptr; {вспомогательные указатели}Исходное состояние - «пустое дерево»:root:=nil;Построение дерева.

Дерево строится в соответствии с главным прави­лом. Например, пусть дана последовательность целых чисел {5, 2, 8, 7, 2, 9,1, 5}. Первое число 5 будет записано в корень дерева (рис. 7.18, а). Второечисло 2 меньше значения в корне дерева, следовательно, оно будет записанов левое поддерево (рис. 7.18, б).

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

Тип файла
PDF-файл
Размер
13,06 Mb
Тип материала
Учебное заведение
Неизвестно

Список файлов книги

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