Занятие 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.

Задание. Придумайте интересную задачу из жизни и решите ее с помощью динамической структуры кольцо.


Список

 








Дата добавления: 2015-05-16; просмотров: 1172;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.017 сек.