
- •Сборник задач по структурному программированию
- •Оглавление
- •Аннотация
- •Введение
- •Раздел 1
- •Работа с простыми типами данных
- •I a b c результат (можно/ нельзя)
- •Пример 1.1.1
- •Var hour,minute,n:longint;
- •Пример 1.1.2.
- •Var X,s,p:real;
- •I,n:integer;
- •Работа с символами, строками и текстом.
- •3 Слова длины 8 букв и т. Д.
- •Пример 1.2.1
- •Var s:string[80];
- •I,k:integer;
- •Разработка структурированных программ с использованием процедур и функций.
- •Пример 1.3.
- •Var I:word;
- •Var I:word;
- •X:integer;
- •I,m:word;
- •Работа с файлами разных типов.
- •Пример 1.4.
- •I: word;
- •Var X:integer;
- •Var I:word;
- •Var X:integer;
- •Inc(X);{Количество слов будет на 1 меньше!!}
- •Var p:boolean;
- •If p then
- •Var j:integer;
- •Var k,l:byte;
- •Динамические структуры данных. Списки.
- •Пример 1.5.
- •Var lp,pList,pStart : pEl_list;
- •I,oi,kol: integer; {переменные для работы с меню}
- •Insert_list(li);
- •Var I:integer;
- •Var I:integer;p:boolean;
- •Var k:char;
- •1: Begin dialog;
- •2: Begin dialog;
- •3: Begin dialog;
- •4: Begin
- •If noswap then begin
- •5: Begin
- •Var I:integer;
- •Vivod(2,2,25);
- •Решение графических задач
- •Пример 1_6.
- •Var dr,md:integer;
- •X,y,x1,y1,x2,x3,y2,y3,r:integer;
- •Var a:real;
- •Раздел 2
- •Работа с графическими объектами
- •Пример 2.1
- •X,y: real;
- •Var f1,f2:real;
- •Var gd,gm:integer;
- •Xb,xe,I,j:integer;
- •Работа с объектами- векторами
- •Пример 2.2
- •Var t:tPerson;
- •Interface
- •Implementation
- •I:integer;
- •I:integer;
- •I,j:integer;
- •Var m:integer;
- •Init(m);
- •Insert;
- •Работа с объектами - списками.
- •Пример 2.3
- •Interface
- •Implementation
- •Var Pcur1:t_el;
- •Var fname:ss;
- •Var s1:ss; p:byte; I:byte;
- •Var I:integer;
- •Interface
- •Implementation
- •Var Mylt:my_list;
- •Разработка объектов- таблиц.
- •Работа со структурами данных типа дерево.
- •Inf: integer;
- •Пример 2.5.
- •Interface
- •Implementation
- •Var newnode:pnode;
- •X,nl,nr:integer;
- •Var I: word;
- •Var q:pnode;
- •Разработка многомодульных задач.
- •Приложение.
- •Interface
- •Ik:word;{количество записей}
- •IEl:elmnt;
- •Var init_Ok:boolean;
- •Implementation
- •Var I:word;
- •Var m:word;
- •Var I:word;
- •If n then begin
- •Var I:word;
- •Var I: word;
- •Var I:word;{при выходе уничтожаем все списки}
- •Interface
- •Implementation
- •1: Begin
- •2: Begin
- •3: Begin
- •1: Begin
- •2: Begin
- •I:byte;
- •1: Begin
- •2: Begin
- •3: Begin
- •4: Begin
- •Var stop:boolean;
Приложение.
Program Number_2_10;
uses menu1;
{Библиотечные данные хранятся в файле неупорядоченными по номерам разделов. Описание библиотеки предполагает перечисление следующих данных: номер библиотечного раздела, количество записей в этом разделе и наименование раздела. Если в разделе нет записей, то считается, что раздел пуст. Вывести информацию по всем разделам библиотеки, определить пустые разделы, ввести инфорацию в любые разделы, в том числе и в пустые. Всю информацию представить в виде хеш-таблицы, где номера разделов позволяют вычислить ключи хеш-функции. Количество записей в каждой строке таблицы - произвольное и представляется списком.}
begin
menu_;
end.
unit utable;{этот модуль нужен для описания всех методов, обеспечивающих обработку заданной структуры данных - таблицы }
Interface
const
lenstr=40;
type
st1=string[lenstr];
elmnt=record
st:st1; {Наименование раздела из неболее чем 40 символов}
Ik:word;{количество записей}
nn:word; {номер раздела}
end;
Tpzap=^zap; {элемент строки таблицы – это элемент списка}
zap=record
el:elmnt;
pnext:Tpzap;
end;
ff=file of elmnt; {сохраняемые в файле данные}
Tabl=^tst;
tst= array [0..0] of Tpzap;{индексы элементов- это ключи хеш-функции.Количество индексов-ключей можно выбрать любое. В данном решении возьмем количество ключей, равное 10}
OTabl=object
tbl:Tabl;{Объект- таблица включает в себя табличные переменные}
T,P,Q,PQ:Tpzap;{Элементы для формирования списков в строках таблицы}
IEl:elmnt;
f:ff;
constructor init(var Ok:boolean);
destructor done(var Ok:boolean);
procedure new_el_tb(nEl:elmnt);{запись элемента в хеш-таблицу}
procedure vvod_tb;{ввод таблицы}
procedure dopoln;{поиск пустых разделов таблицы}
procedure read_f;{читать из файла}
procedure save_f;{записать элементы таблицы в файл}
procedure show_tb;{вывести таблицу}
end;
Var init_Ok:boolean;
Implementation
uses crt,utils;
constructor Otabl.init(var Ok:boolean);
Var I:word;
begin
getmem(Tbl,10*sizeof(Tpzap));{}
{резервируем память для сохранения вектора указателей на строки с описанием разделов}
for i:=0 to 9 do
Tbl^[i]:=nil;
{Указатели делаем пустыми, чтобы работать только с имеющимися в данном тексте длинами слов}
Ok:=true;
end;
procedure Otabl.new_el_tb(nEl:elmnt);
Var m:word;
stop:boolean;
begin
m:=nEl.nn mod 10;
T:=Tbl^[m];{ключ найден в соотвествии с номером раздела}
if (T=nil) then
begin
new(p);
P^.el:=nEl;
P^.pnext:=nil;{этот оператор работает только для создания первого элемента списка типа стека}
Tbl^[m]:=P;
end else
begin
new(PQ);
PQ^.el:=nEl;
PQ^.pnext:=Tbl^[m];
Tbl^[m]:=PQ;
end;
end;{Конец метода включения нового элемента в таблицу }
procedure OTabl.vvod_tb;
var
stop:boolean;
L,iL:byte;
s:st1;
d,code:word;
ch:char;
begin
assign(f,'tab.dat');
rewrite(f);
repeat
window(40,12,79,18); clrscr;
textcolor(yellow);
gotoxy(1,1); {stop:=false;}
writeln(' Введите данные картотеки');
write(' Раздел номер ');
readln(iEl.nn);
write(' Количество записей в разделе ');
readln(iEl.ik);
write(' Название раздела ');
readln(iEl.st);
write(f,iEl);
new_el_tb(iEl);
writeln(' Есть еще данные?');
readln(ch);
until ch='n';
window(1,1,80,24);
end;
procedure OTabl.dopoln;