Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Занятие 5. Кольцо. Формирование кольца. Основные операции над кольцом.Содержание книги
Поиск на нашем сайте
Koльцо - это вид связанного списка, в котором указатель последнего элемента ссылается на первый элемент. Рассмотрите его графическое представление. При программировании на Паскале считается, что для кольца существует обход элементов. Доступ возможен к любому элементу структуры. Кольцо является динамической структурой – в зависимости от пользователя программы может изменяется длина и набор составляющих его элементов. Опишем кольцо на языке программирования: Type TypeCircle = ^K; K = record Data: integer; Next: TypeCircle; End; Var Circle1: TypeCircle; Формирование кольца Рассмотрите процедуру формирования кольца. Для работы этой процедуры заводятся две локальные переменные типа TypeCircle для хранения адресов промежуточного и завершающего звена списка, последним оператором преобразуемого в кольцо. Procedure FofmK(Var u: TypeCircle); Var x, y: TypeCircle; i, N: integer; Begin write('Введите количество звеньев кольца: '); readln(N); for i:= 1 to N do begin new(x); {выделяем память для хранения нового элемента кольца} write('Введите данные в звено: '); readln(i); x^.Data:= i; {заносим информацию в поле данных} if u=nil {если кольцо еще не создано} then u:= x {то указатель первого элемента ставим на новый элемент} else y^.Next:= x; {присоединяем новый элемент к последнему элементу} y:= x; {переносим указатель у на последний элемент} end; x^.Next:= u; {преобразуем получившийся список в кольцо} End; Над кольцом определены три операции: занесение элемента в кольцо, извлечение элемента из кольца и обход кольца. Задание. Составьте программу, содержащую две процедуры: процедуру занесения элемента в кольцо и процедуру извлечения элемента из кольца по какому-либо условию. (Можно воспользоваться предыдущим текстом программы.) Обход кольца Для того чтобы обойти кольцо и вывести на экран содержащуюся в нем информацию, необходимо в локальной переменной типа TypeCircle запомнить адрес первого выводимого элемента. В этом случае можно избежать повторения и зацикливания программы. Вывод данных можно начинать с любого элемента кольца; это зависит от адреса первого элемента, переданного в процедуру обхода. Рассмотрите процедуру обхода кольца. Procedure PrintК(u: TypeCircle); Var x: TypeCircle; Begin x:= u; repeat write(x^.Data,' '); x:= x^.Next; until x=u; readln; End; Задание. Дополните предыдущую программу процедурой обхода кольца. Занятие 6. Примеры решения задач с применением динамической структуры кольцо. Творческая работа. Задание. Рассмотрите приведенные примеры задач, решенные с помощью динамической структуры – кольцо. Наберите их на компьютере, проверьте их действие, вставьте комментарий. Задача 1. N ребят располагаются по кругу. Начав отсчет от первого, удаляют каждого k-го, смыкая при этом круг. Определить порядок удаления ребят из круга. Для хранения данных об участниках игры используется список. Наберите предложенный ниже текст программы, проверьте его работу, дополните комментариями. Program Schitalka; Type Children = ^Child; Child = record Data: integer; Next: Children; end; Var Circl, p, Temp: Children; i, j, NumName: integer; text: string; Function NumSlov(Var S: string): integer; Var i, d: integer; Begin d:= 0; i:= 1; while i < Length(S) do begin while S[i] = ' ' do Inc(i); while S[i] <> ' ' do Inc(i); d:= d+1; end; if S[Length(S)] = '' then d:= d-1; NumSlov:= d; End; Procedure AddName(Var Old, Young: Children); Begin Young^.Next:= Old; Young^.Prev:= Old^.Prev; Old^.Prev^.Next:= Young; Old^.Prev:= Young; End; Procedure DeleteName(Var Old: Children); Begin Old^.Next^.Prev:= Old^.Prev; Old^.Prev^.Next:= Old^.Next; End; Begin new(Circl); Circl^.Next:= Circl; Circl^.Prev:= Circl; Circl^.Name:= ''; writeln('Считалка'); writeln('Введите текст считалки >'); readln(text); writeln('Сколько человек в кругу? >'); readln(NumName); if NumName>0 then begin write('Введите ',i,'-е имя: '); new(p); readln(p^.name); temp:= head^.next; while temp <> head do temp:= temp^.next; AddName(temp, p); end; for i:= 1 to NumName-1 do begin temp:= head; for j:= 1 to NumSlov(text) do begin temp:= temp^.next; if temp^.name = '' then temp:=temp^.next; end; writeln(temp^.name, '- вышел'); deleteName(temp); end; writeln(head^.next^.name, '- остался'); End. Пример 2. Вывести на экран работающий светофор. Program GrushinK; Uses Crt, Graph; Type TypeCircle = ^K; K = record Data: char; Next: TypeCircle; end; Const XX = 80; R = 50; Var Svetofor, x: TypeCircle; FraphDriver, GraphMode, Y: integer; Procedure Picture; Begin SetViewPort(240, 1, 400, 477, ClipOff); Line(0, 1, 0, 477); Line(160, 1, 160, 477); Line(0, 1, 160, 1); Line(0, 477, 160, 477); Line(0, 150, 156, 150); Line(0, 330, 156, 330); Line(-240, 480, 0, 100); Line(400, 480, 160, 100); Line(380, 460, 160, 460); Line(160, 440, 368, 440); Line(368, 440, 380, 460); Line(-220, 460, -208, 440); SetFillStyle(1, White); FloodFill(375, 455, White); FloodFill(-215, 455, White); SetFillStyle(7, 6); FloodFill(-230, 200, White); SetColor(4); Line(-240, 150, -120, -1); Line(400, 150, 240, -1); SetColor(15); SetFillStyle(9, 4); FloodFill(-240, 0, 4); FloodFill(390, 10, 4); SetFillStyle(1, 8); FloodFill(-100, 470, White); Y:= 74; Circle(XX, Y, R); Y:= 240; Circle(XX, Y, R); Y:= 405; Circle(XX, Y, R); SetFillStyle(9, 6); FloodFill(5, 5, White); End; Procedure Yellow(Y: integer); Begin Picture; Y:= 240; SetFillStyle(1, 14); FloodFill(XX, Y, 15); Delay(850); ClearViewPort; End; Procedure Green(Y: integer); Begin Picture; Y:= 405; SetFillStyle(1, 2); FloodFill(XX, Y, 15); Delay(1500); ClearViewPort; End; Procedure Red Yellow(Y: integer); Begin Picture; Y:= 240; SetFillStyle(1, 14); FloodFill(XX, Y, 15); Delay(1500); ClearViewPort; End; Procedure Red(Y: integer); Begin Picture; Y:= 74; SetFillStyle(1, 4); FloodFill(XX, Y, 15); Delay(2000); ClearViewPort; End; Procedure Vibor; Begin case x^.Data of 'R': Red(Y); '2': Red Yellow(Y); 'G': Green(Y); 'Y': Yellow(Y); End; Begin GraphDriver:= Detect; InitGraph(GraphDriver, GraphMode, '..\BGI'); new(x); u:= x; x^.Data:= 'R'; new(x^.Next); x:= x^.Next; x^.Data:= '2'; new(x^.Next); x:= x^.Next; x^.Data:= 'G'; new(x^.Next); x:= x^.Next; x^.Data:= 'Y'; x^.Next:= u; x:= u; while not KeyPressed do begin Vibor; x:= x^.Next; end; End. Задание. Придумайте интересную задачу из жизни и решите ее с помощью динамической структуры кольцо. Список
|
||||
Последнее изменение этой страницы: 2016-08-12; просмотров: 218; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.15.34.105 (0.006 с.) |