Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
delphi_p5 ОЧЕРЕДЬ!!!!.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
422.91 Кб
Скачать

1) Авдеев 2) Кротов 3) Гаврилов 4) Шмелёв

Содержимое файла file5.txt: Антонова

Воротников

Егорова

Колесников

Кузнецов

Павлов

Петрова

Сафонов

Харитонов

Указание. Использовать метод фиктивного элемента.

Задача 14**. Считалочка. N ребят расположены по кругу. (Каждому присвоен номер по порядку). Начав отсчёт от первого, удаляют каждого k-ого, смыкая при этом круг. Определить номер последнего, оставшегося в круге. ( kN )

Тест 1: k=3 N=7 Ответ: 4

Тест 2: k=4 N=11 Ответ: 9

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

21

Стек

Однонаправленный список, в котором новый элемент добавляется не в конец, а в начало, впереди предыдущего элемента, называется стек. Элемент, который добавлен в стек последним, называется вершиной стека. С него и начинается обработка элементов стека. Отсюда и обозначение стека – lifo (last in first out – последним пришел, первым ушёл).

Задача 15. Создать стек, информационные поля которого содержат числа из текстового файла file1.txt. Вывести значения информационных полей стека в поле метки. Содержимое файла file1.txt:

14 -9 8 -22 39

-1 -13 0 4 -7

27 5 -2 18 3

Полный текст модуля:

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;

type

TForm1 = class(TForm)

Button1: TButton;

Button2: TButton;

Label1: TLabel;

procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

end;

type link = ^elem;

elem = record

Val : integer;

next : link

end;

var Form1: TForm1; p : link;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);

var q : link; f : textfile;

begin

assignfile(f, ' file1.txt '); reset(f);

p:=nil;

while not eof(f) do

begin new(q); read(f, q.val); q.next:=p; p:=q end;

closefile(f); showmessage('Стек создан')

end;

procedure TForm1.Button2Click(Sender: TObject);

var q : link;

begin

label1.Caption:='';

q:=p;

while q<>nil do

begin

label1.Caption:=label1.Caption + inttostr(q.val) + ' ';

q:=q.next

end;

end;

end.

Задача 16. Написать программу, проверяющую правильность расстановки круглых скобок в арифметическом выражении.

В процессе работы приложения анализируем символы строки, содержащей арифметическое выражение. Если очередной символ – открывающаяся скобка, то она записывается в стек. Если же это закрывающаяся скобка, то находящаяся в вершине стека открывающаяся скобка из стека удаляется при условии, что стек не пуст. Если же стек пуст, то это означает возникновение ошибки в расстановке скобок. Если же такая ошибка не встретилась и по окончании просмотра символов строки стек пуст, то расстановка скобок в выражении сделана правильно. type

TForm1 = class(TForm)

Edit1: TEdit;

Button1: TButton;

Label1: TLabel;

procedure Button1Click(Sender: TObject);

end;

type link = ^elem;

elem = record

val : char;

next : link

end;

var Form1: TForm1;

implementation

{$R *.dfm}

procedure in_stack(var p:link; d:char);

var r:link;

begin new(r); r^.val:=d; r^.next:=p; p:=r end;

procedure del_stack(var p:link);

var r:link;

begin r:=p; p:=p^.next; dispose(r) end;

procedure TForm1.Button1Click(Sender: TObject);

var i:integer; t:boolean; q:link; s, str : string;

begin

s:=edit1.Text; q:=nil; t:=true; i:=1;

while (i<=length(s)) and t do

begin

if s[i] = ' ( ' then in_stack(q, s[i])

else if s[i] = ' ) ' then

if q<>nil then del_stack(q) else t:=false;

inc(i)

end;

t:=t and (q=nil);

if t then str:=' Правильно ' else str:=' Ошибка '; label1.caption:=str;

end;

end.

Задачи

Задача 17. Преобразовать последовательность действительных чисел, записанных в файле file6.txt, расположив сначала отрицательные числа последовательности, а затем неотрицательные. При этом порядок как отрицательных, так и неотрицательных чисел изменяется на обратный. Для отображения содержимого файла на форме использовать компонент Memo1.

Указание. Для решения задачи создать два стека: с отрицательными и с неотрицательными числами последовательности.

Содержимое файла file6.txt: 19.5 8.06 -43.1 14.9 -35.8

-27.02 0 5.17 62.4 -4.7

Задача 18. Даны целые числа a1, a2, … an (n=20), содержащиеся в текстовом файле file7.txt. Вычислить значение выражения

p1  10 + p2  100 + p3  1000 + … ,

где p1, p2 , p3 , … – встречающиеся в последовательности положительные числа, взятые в обратном порядке (начиная с последнего встретившегося положительного числа). Содержимое файла file7.txt:

5 -26 8 -12 19

-10 -13 0 4 -7

9 1 -2 18 -63

Указание. Для решения задачи сформировать стек из положительных чисел последовательности.

Задача 19**. Написать программу для вычисления значения выражения, представленного в обратной польской записи.

Обычная запись Обратная польская запись

(b + c)  d b c + d 

a + (b + c)  d a b c + d  +

(6 + 8)/2 + 11 6 8 + 2 / 11 +

Указание. Просматривая строку, в которой записано выражение, анализируем очередной символ. Если это число, то записываем его в стек. Если это знак операции, то достаём два элемента из стека, выполняем арифметическую операцию, определяемую этим знаком, и заносим результат в стек.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]