Реализация алгоритмов в системе программирования Turbo Pascal

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

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 07.07.2012
Размер файла 973,2 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Содержание

1. Реализация алгоритмов в системе программирования Turbo Pascal

1.1 Линейная программа

1.2 Процедуры и функции

1.3 Структура данных: массивы

1.4 Структура данных: строки

1.5 Структура данных: записи

1.6 Модульное программирование

1.7 Прямая и косвенная рекурсия

1.8 Рекурсивные алгоритмы

1.9 Бинарный поиск

1.10 Сортировка влючением

1.11 Обменная сортировка

1.12 Сортировка разделением

1.13 Статическое и динамическая распределение памяти

1.14 Организация списков

1.15 Модуль Graph

1 Программирование на языке Паскаль в среде Турбо Паскаль

1.1 Линейные алгоритмы

Условие задачи

Составить словесное (математическое) описание и блок-схему следующей задаче: найти периметр треугольника АВС, если его координаты A(x1,y1), B(x2,y2), C(x3,y3,)вводятся с клавиатуры. При неправильном вводе значений, вывести на экран сообщение об ошибке и предложением повторно ввести правильные данные. Результат отобразить на экране.

P=AB+BC+AC

Для тестирования программы использовались данные, приведённые в таблице 1. Полученные результаты приведены там же.

Таблица 1 - Результаты выполнения линейного алгоритма

Входные данные

Выходные данные

A

B

C

S

3,5

-4,7

-5,-1

25.34

Листинг программы - Линейный алгоритм

program perimetr;

uses crt;

var ab,bc,ac,x1,x2,x3,y1,y2,y3:real;

p:real;

begin

clrscr;

repeat

writeln('vvesti koordinati verhin A');

readln(x1,y1);

writeln('vvedite koordinati verhin B');

readln(x2,y2);

writeln('vvedite koordinati verhin C');

readln(x3,y3);

AB:=sqrt((sqr(x1-x2))+(sqr(y1-y2)));

BC:=sqrt((sqr(x2-x3))+(sqr(y2-y3)));

AC:=sqrt((sqr(x1-x3))+(sqr(y1-y3)));

if (AB>=BC+AC) or (AC>=AB+BC) or (BC>=AB+AC) then writeln ('eto ne treygolnik, povtorite vvod');

until (AB<BC+AC) and (AC<AB+BC) and (BC<AB+AC);

P:=AB+BC+AC;

writeln('perimetr treygolnika raven=',p:0:2);

readln;

end.

Рисунок 1 - Блок-схема линейного алгоритма

Результат решения задачи представлен на рисунке 1.

алгоритм программирование turbo pascal

Рисунок 1 - Результат работы программы в TurboPascal

1.2 Процедуры и функции

Составить словесное (математическое) описание и блок-схему следующей задаче: найти периметр треугольника АВС, если его координаты A(x1,y1), B(x2,y2), C(x3,y3,)вводятся с клавиатуры. При неправильном вводе значений, вывести на экран сообщение об ошибке и предложением повторно ввести правильные данные. Результат отобразить на экране.

P=AB+BC+AC

Для тестирования программы использовались данные, приведённые в таблице 2. Полученные результаты приведены там же.

Таблица 2 - Результаты выполнения процедуры и функции

Входные данные

Выходные данные

A

B

C

P

3,5

-4,7

-5,-1

25.34

Результат решения задачи представлен на рисунке 2.

Рисунок 2 - Результат работы программы в TurboPascal

Листинг - Процедуры

program perimet_procedure;

uses crt;

var ab,bc,ac,x1,x2,x3,y1,y2,y3:real;

p:real;

procedure perimetr(x1,y1,x2,y2:real);

begin

clrscr;

repeat

writeln('vvesti koordinati verhin A');

readln(x1,y1);

writeln('vvedite koordinati verhin B');

readln(x2,y2);

writeln('vvedite koordinati verhin C');

readln(x3,y3);

AB:=sqrt((sqr(x1-x2))+(sqr(y1-y2)));

BC:=sqrt((sqr(x2-x3))+(sqr(y2-y3)));

AC:=sqrt((sqr(x1-x3))+(sqr(y1-y3)));

if (AB>=BC+AC) or (AC>=AB+BC) or (BC>=AB+AC) then writeln ('eto ne treygolnik, povtorite vvod');

until (AB<BC+AC) and (AC<AB+BC) and (BC<AB+AC);

P:=AB+BC+AC;

end;

begin

clrscr;

perimetr(x1,y1,x2,y2);

writeln('perimetr treygolnika raven=',p:0:2);

readln;

end.

Рисунок 2 - Блок-схема процедуры

Листинг - функции

Program perimetr_function;

Uses crt;

Var x1,x2,x3,y1,y2,y3:real; {объявление переменных }

p:real;

Function stor(ab,bc,ac:real):real; {функция }

Begin

Repeat

writeln('Vvesti Koordinati Verhin |A|'); {ввод координат точки А}

readln(x1,y1);

writeln('Vvedite Koordinati Verhin |B|'); {ввод координат точки B}

readln(x2,y2);

writeln('Vvedite Koordinati Verhin |C|'); {ввод координат точки C}

readln(x3,y3);

AB:=sqrt((sqr(x1-x2))+(sqr(y1-y2)));

BC:=sqrt((sqr(x2-x3))+(sqr(y2-y3)));

AC:=sqrt((sqr(x1-x3))+(sqr(y1-y3)));

if (AB>=BC+AC) or (AC>=AB+BC) or (BC>=AB+AC) then writeln ('Eto ne treygolnik, Povtorite Vvod');

until (AB<BC+AC) and (AC<AB+BC) and (BC<AB+AC);

P:=AB+BC+AC; {вычисление периметра }

End;

{основная программа}

Var ab,bc,ac:real; {объявление переменных}

Begin

clrscr; stor(ab,bc,ac

);

writeln('|Perimetr Treygolnika Raven|=',p:0:0,'(cm)'); {вывод результата}

readln;

End. {конец }

Результат решения задачи представлен на рисунке 3.

\

Рисунок 3 - Результат работы программы в TurboPascal

Рисунок 3 - Блок-схема функции

1.3 Структура данных: массивы

Дан двумерный массив 5х5. Заменить нулем элементы, расположенные над побочной диагональю.

Листинг - Структуры данных: массивы

program massiv;

Uses CRT;

Const n=5;

var a:array[1..n,1..n] of integer;

i,j:integer;

Begin

randomize;

FOR i:= 1 to n DO

begin

FOR j:= 1 to n DO

begin

A[i,j]:=random(10)-3;

write(a[i,j]:3);

end;

writeln;

end;

writeln;

FOR i:= 1 to n DO

begin

FOR j:= 1 to n DO

begin

if j<=n-i+1 then

a[i,j]:=0;

write(a[i,j]:3);

end;

writeln;

end;

Readln

End.

Результат решения задачи представлен на рисунке 3.

Рисунок 4 - Результат работы программы в TurboPascal

1.4 Структура данных: строки

Даны строки S1, S2 и символ C. Перед (после) каждого вхождения символа C в строку S1 вставить строку S2.

Листинг - Структуры данных: строки

uses crt;

var s1,s2,s:string;

c,w:char;

i:byte;

begin

clrscr;

writeln(`Ввести строку в которую будем вставлять:');

readln(s1);

writeln('Ввести строку которую будем вставлять:');

readln(s2);

repeat

write('Ввести символ строки перед(после)которого вставлять c=');

readln(c);

if pos(c,s1)=0 then writeln('Такого символа нет, повторите ввод');

until pos(c,s1)>0;

repeat

clrscr;

writeln('Куда вставлять?');

writeln('1-перед');

writeln('2-после');

writeln('другое-выход');

readln(w);

case w of

'1':begin

s:=s1;

for i:=length(s)downto 1 do

if s1[i]=c then insert(s2,s,i);

write(s);

readln;

end;

'2':begin

s:=s1;

for i:=length(s)downto 1 do

if s1[i]=c then insert(s2,s,i+1);

write(s);

readln;

end;

else exit;

end;

until not(w in ['1'..'2']);

end.

Результат решения задачи представлен на рисунке 4.

Рисунок 4 - Результат работы программы в TurboPascal

1.5 Структура данных: записи

Запись содержит данные о продовольственных и промышленных товарах со следующими реквизитами: наименование товара (тип string), тип товара (тип string), количество (тип integer), цена за единицу (тип integer). Составить программу, выполняющую поиск по типу товара и количеству товара.

Листинг - Структуры данных: записи

uses crt;

type tov=record

t:string;

k:integer;

n:string;

c:char;

end;

const

Nmax=10;

var

i:integer;

c:char;

m:array [1..Nmax] of tov;

k:integer;

o:boolean;

procedure enter;

var

c:string;

begin

clrscr;

i:=1;

while c<>'н' do begin

clrscr;

i:=i+1;

writeln('Введите название товара');

readln(m[i].n);

writeln('Введите тип товара(прод/пром)');

readln(m[i].t);

writeln('Введите кол-во товара');

readln(m[i].k);

writeln('Введите цену товара');

readln(m[i].c);

writeln('Повторить ввод?(д/н)');

readln(c);

end;

end;

procedure find;

var

tip:string;

kol,k:integer;

begin

i:=2;

while c<>'н' do begin

i:=i+1;

write('Типо товара:пром или прод? ');

readln(tip);

write('Кол-во товара: ');

readln(kol);

for i:=2 to Nmax do begin

if (m[i].t=tip)and(m[i].k=kol)then begin

writeln('Название: ',m[i].n,' Тип: ',m[i].t,' Кол-во ',m[i].k,' Цена: ',m[i].c);

o:=true;

end;

end;

if o=false then writeln('Записи не найдены');

writeln('Повторить поиск(д/н)?');

readln(c);

end;

end;

begin

while c<>'3' do begin

writeln('выберите действие:');

writeln('1.Создать запись');

writeln('2.Найти запись');

writeln('3.Выход');

readln (c);

case c of

'1':enter;

'2':find;

end;

end;

end.

Результат решения задачи представлен на рисунке 5.

Рисунок 5 - Результат работы программы в TurboPascal

1.6 Модульное программирование

В заданном массиве К(N) найти индексы элементов, которые кратны минимальному значению элемента массива.

Листинг - Модульное программирование

programpract6;

usescrt;{подключениебиблиотеки}

functionRec(k:integer):longint;{описаниефункции}

begin

ifk<4 then Rec:=1{началоцикла}

else Rec:=Rec(k-3)+Rec(k-2)+Rec(k-1);

end;{конеццикла}

varn:integer;{описаниепеременных}

beginclrscr;{очисткаэкрана}

repeat{цикл}

write('vvedite nomer chlena posledovatelnosti, nat chislo n=');

readln(n);

until n>0;

write('znachenie=',Rec(n));

readln;

readkey;{задержкаэкрана}

end.

Результат решения задачи представлен на рисунке 6.

Рисунок 6 - Результат работы модульное программирование

1.7 Прямая и косвенная рекурсия

Написать программу с рекурсивной функцией, вычисляющей:

.

Листинг - Прямая и косвенная рекурсия

Programpr7;

uses crt;

var n:integer;

function Koren(n:integer):real;

begin

if n=1 then Koren:=sqrt(3)

else Koren:=sqrt(3+Koren(n-1));

end;

begin

clrscr;

write('n=');

readln(n);

write(Koren(n):0:5);

readln

end.

Таблица 6 - Результаты выполнения прямой и косвенной рекурсии

Входные данные

Выходные данные

3

2.27493

Результат решения задачи представлен на рисунке 7.

Рисунок 7 - Результат работы программы в TurboPascal

1.8 Рекурсивные алгоритмы

Написать рекурсивную процедуру, переводящую целое число из восьмеричной системы счисления в десятичную.

Для тестирования программы использовались данные, приведённые в таблице 7. Полученные результаты приведены там же.

Таблица 7 - Результаты выполнения линейного алгоритма

Входные данные

Выходные данные

24

20

Листинг - Рекурсивные алгоритмы

programProject1;

function Oct2Num(const aSOct : String; const aWeight, aI : Integer) : Integer;

var

Num : Integer;

begin

Num := 0;

case aSOct[aI] of

'0' : Num := 0 * aWeight;

'1' : Num := 1 * aWeight;

'2' : Num := 2 * aWeight;

'3' : Num := 3 * aWeight;

'4' : Num := 4 * aWeight;

'5' : Num := 5 * aWeight;

'6' : Num := 6 * aWeight;

'7' : Num := 7 * aWeight;

end;

if aI > 1 then begin

Num := Num + Oct2Num(aSOct, aWeight * 8, aI - 1);

end;

Oct2Num := Num;

end;

var

SOct, S : String;

Num : Integer;

Begin

repeat

Writeln('zadaite celoe neotricatelnoe chislo:');

Readln(SOct);

Num := Oct2Num(SOct, 1, Length(SOct));

Writeln('Chislo v 10oi sisteme:');

Writeln(Num);

Readln(S);

until S <> '';

End.

Результат решения задачи представлен на рисунке 8.

Рисунок 8 - Результат работы программы в TurboPascal

1.9 Бинарный поиск

Задан массив AX (N). Добавить массив С(К). Выполнить сортировку включением. В полученном массиве положительные элементы уменьшите вдвое, а отрицательные замените на значения их индексов.

Для тестирования программы использовались данные, приведённые в таблице 8. Полученные результаты приведены там же.

Таблица 8 - Результаты выполнения линейного алгоритма

Входные данные

Выходные данные

1element

2element

3element

4element

5element

1

2

5

3

3

4

5

6

Листинг - Бинарный поиск

Programpr7;

usescrt;{подключениебиблиотеки}

Constn = 5;{постоянная}

Var{описание переменных}

i,min : integer;

k : array[1..n] of integer;{описаниемассива}

Begin clrscr;{очисткаэкрана}

For i := 1 To n Do {заполнениемассива}

Begin

Writeln('Vvedite ',i,' element:');

Readln(K[i])

End;

min := k[1];

For i := 2 To n Do {поискминимального}

if k[i] < min Then min := k[i];

For i := 1 To n Do {кратностьэлементов}

If (k[i] mod min) = 0 Then Writeln(i);

readkey;

End.

Результат решения задачи представлен на рисунке 9.

Рисунок 9 - Результат работы программы в TurboPascal

1.10 Сортировка влючением

Задан массив AX (N). Добавить массив С(К). Выполнить сортировку включением. В полученном массиве положительные элементы уменьшите вдвое, а отрицательные замените на значения их индексов

Листинг - Сортировкавключением

programl;

type mas=array[0..100] of integer;

var i,min,n,m,imn:integer; a,c:mas;

Procedure Straight_Insertion(n:integer; Var a:mas);

Var

i,j:integer;

x:integer;

Begin

For i:=2 To n Do

begin

x:=a[i]; a[0]:=x; j:=i-1;

While x<a[j] Do

begin

a[j+1]:=a[j]; j:=j-1;

end;

a[j+1]:=x

end;

End;{Straight_Insertion}

begin

randomize;

writeln('Размер массива А: ');

readln(n);

for i:=1 to n do begin

a[i]:=random(10)+random(5);

end;

writeln('Полученный массив А:');

for i:=1 to n do begin

write(a[i],' ');

end;

writeln;

writeln('Ввести размер массива С C: ');

readln(m);

for i:=1 to m do begin

c[i]:=random(15)+random(5);

end;

writeln;

writeln('Полученный массив С: ');

for i:=1 to n do begin

write(c[i],' ')

end;

writeln;

writeln;

for i:=1 to m do begin

n:=n+1;

a[n]:=c[i];

end;

writeln('Объединённые масивы А и C: ');

for i:=1 to n do

write(a[i],' ');

writeln;

writeln;

Straight_Insertion(n,a);

writeln('Отсортированный массив: ');

for i:=1 to n do

write(a[i],' ');

writeln;

writeln;

min:=a[1];

for i:=1 to n do begin

if a[i]<min then min:=a[i];

end;

write('Минимальный элемент= ',min);

writeln;

imn:=0;

for i:=1 to n do begin

if a[i] mod a[min]=0 then

imn:=i;

end;

begin

min:=a[1];

writeln('индексы элементов кратных минимальному: ');

for i:=1 to n do

if (a[i] mod min = 0) then

write(i:3);

writeln;

end;

end.

Результат решения задачи представлен на рисунке 10.

Рисунок 10 - Результат работы программы в TurboPascal

1.11 Обменная сортировка

Задан массив AX (N). Добавить массив С(К). Выполнить сортировку включением. В полученном массиве положительные элементы уменьшите вдвое, а отрицательные замените на значения их индексов.

Листинг - Сортировка обменная

type mas=array[0..100] of integer;

var i,min,n,m,imn:integer; a,c:mas;

Procedure Shaker_Sort(n:word;Var a:mas);

Var j,k,l,r:integer;

x:integer;

Begin

l:=2; r:=n; k:=n;

Repeat

For j:=r DownTo l Do

If a[j-1]>a[j] Then

begin

x:=a[j-1];

a[j-1]:=a[j];

a[j]:=x;

k:=j;

end;

l:=k+1;

For j:=l To r Do

If a[j-1]>a[j] Then

begin

x:=a[j-1];

a[j-1]:=a[j];

a[j]:=x;

k:=j;

end;

r:=k-1;

Until l>r

End;{Shaker_Sort}

begin

randomize;

writeln('Размер массива А: ');

readln(n);

for i:=1 to n do begin

a[i]:=random(10)+random(5);

end;

writeln('Полученный массив А:');

for i:=1 to n do begin

write(a[i],' ');

end;

writeln;

writeln('Ввести размер массива С C: ');

readln(m);

for i:=1 to m do begin

c[i]:=random(15)+random(5);

end;

writeln;

writeln('Полученный массив С: ');

for i:=1 to n do begin

write(c[i],' ')

end;

writeln;

writeln;

for i:=1 to m do begin

n:=n+1;

a[n]:=c[i];

end;

writeln('Объединённые масивы А и C: ');

for i:=1 to n do

write(a[i],' ');

writeln;

writeln;

Shaker_Sort(n,a);

writeln('Отсортированный массив: ');

for i:=1 to n do

write(a[i],' ');

writeln;

writeln;

min:=a[1];

for i:=1 to n do begin

if a[i]<min then min:=a[i];

end;

write('Минимальный элемент= ',min);

writeln;

imn:=0;

for i:=1 to n do begin

if a[i] mod a[min]=0 then

imn:=i;

end;

begin

min:=a[1];

writeln('индексы элементов кратных минимальному: ');

for i:=1 to n do

if (a[i] mod min = 0) then

write(i:3);

writeln;

end;

end.

Результат решения задачи представлен на рисунке 11.

Рисунок 11 - Результат работы программы в TurboPascal

1.12 Сортировка разделением

Задан массив К(N). Добавить массив С(В). Выполнить сортировку разделением. В полученном массиве найти индексы элементов, которые кратны минимальному значению элемента массива.

Листинг - Сортировка разделением

type mas=array[1..20] of integer;

var i,min,n,m,imn:integer; a,c:mas;

procedure sort(l,r:integer);

var

i,j,x1,y1,m: integer;

begin

i:=l;

j:=r;

m:=round ((l+r)/2);

x1:=a[m];

repeat

while a[i]<x1 do inc(i);

while a[j]>x1 do dec(j);

if i<=j then

begin

y1:=a[i];

a[i]:=a[j];

a[j]:=y1;

inc(i);

dec(j);

end;

until i>j;

if l<j then sort(l,j);

if i<r then sort(i,r);

end;

begin

randomize;

writeln('Размер массива А: ');

readln(n);

for i:=1 to n do begin

a[i]:=random(10)+random(5);

end;

writeln('Полученный массив А:');

for i:=1 to n do begin

write(a[i],' ');

end;

writeln;

writeln('Ввести размер массива С C: ');

readln(m);

for i:=1 to m do begin

c[i]:=random(15)+random(5);

end;

writeln;

writeln('Полученный массив С: ');

for i:=1 to n do begin

write(c[i],' ')

end;

writeln;

writeln;

for i:=1 to m do begin

n:=n+1;

a[n]:=c[i];

end;

writeln('Объединённые масивы А и C: ');

for i:=1 to n do

write(a[i],' ');

writeln;

writeln;

sort(1,n);

writeln('Отсортированный массив: ');

for i:=1 to n do

write(a[i],' ');

writeln;

writeln;

min:=a[1];

for i:=1 to n do begin

if a[i]<min then min:=a[i];

end;

write('Минимальный элемент= ',min);

writeln;

imn:=0;

for i:=1 to n do begin

if a[i] mod a[min]=0 then

imn:=i;

end;

begin

min:=a[1];

writeln('индексы элементов кратных минимальному: ');

for i:=1 to n do

if (a[i] mod min = 0) then

write(i:3);

writeln;

end;

end.

Результат решения задачи представлен на рисунке 12.

Рисунок 12 - Результат работы программы в TurboPascal

1.13 Статическое и динамическая распределение памяти

1. Заполнить массив В(10) случайными значениями. Организовать вывод на экран. Присвоить указателю адрес начала размещения массива в памяти. Напечатать значения четных значений элементов массива. Присвоить указателю адрес 10-го элемента, напечатать его значение, используя текущий базовый адрес сегмента и смещение с преобразованием в значение типа указатель. Заменить его содержимое на значение третьего элемента. Напечатать его новое значение.

Для тестирования программы использовались данные, приведённые в таблице 12. Полученные результаты приведены там же.

Входные данные

Выходные данные

5

-5

4

-6

8

-9

5

-4

-8

-6

Положительные числа

4 элемент умноженный на 2

5

4

8

5

16

Листинг - Статическое и динамическое разделение памяти

program yp14; {название программы}

uses crt; {подключение библиотеки}

type {описание типов}

massiv=array[1..10] of integer; {описание массива}

var {раздел описания переменных}

i,z:integer;

a:massiv;

PtrMas:^massiv; {указатель на массив}

begin clrscr; {очистка экрана}

writeln ('Vvedite elementy massiva: '); {выводнаэкран}

for i:=1 to 10 do {выводэлементовмассива}

begin

read (a[i]);

end;

writeln ('Vveden massiv: ');

for i:=1 to 10 do {выводэлементамассива}

begin

write(a[i]:3);

end;

writeln;

PtrMas:=@a; {присвоение указателю адрес начала массива в памяти}

writeln ('-------------------------------------------');

writeln ('Polozitelnie 4isla: ');

for i:=1 to 10 do

begin

if PtrMas^[i] mod 2 =0 then

writeln (PtrMas^[i]);

end;

PtrMas:=Ptr(Seg(a[9]),Ofs(a[9])+SizeOf(integer)); {присвоениеадреса 4 элемента}

writeln ('-------------------------------------------');

write ('10 element: ');

writeln (PtrMas^[1]); {вывод значения 4 лемента}

write ('novoe zna4enie 10 : ');

writeln (ptrmas^[1]); {вывод умноженного массива}

ptrMas^[1]:=a[3];

write ('novoe zna4enie 10 : ');

writeln (ptrmas^[1]);

readkey; {задержкаэкрана}

end. {конец программы}

Результат решения задачи представлен на рисунке 13.

Рисунок 13 - Результат работы программы в TurboPascal

1.14 Организация списков

Создать связанный список из записей, содержащих сведения о товаре (код товара, наименование товара, цена), реализовать операции со связанным списком: запись первым в список, удаление первого объекта из списка, просмотр всего списка, удаление объекта, следующего за указанным.

Листинг - Организациясписков

Programyp15;

UsesCrt;

Type

NameStr = String [20];

SNameStr = string[20];

Link = ^Auto;

Auto = record

Name : NameStr; {названиетовара}

Kod:integer; {кодтовара}

cena: integer; {ценатовара}

Next : Link; {связьсоследующимобъектом}

end;

VarP,First : Link; {указательнатекущуюзапись}

NamFind : NameStr; {поискпоназванию}

V : 0..4; {меню}

EndMenu : boolean; {завершениеменю}

FunctionFindName(FN:NameStr) : Link; {поискпофамилии}

VarCurr : Link;

begin

Curr:=First; {установканапервый}

whileCurr<>Nildo{доконцасписка}

if Curr^.Name=FN then {нашли}

begin

FindName:=Curr; {возвращаемуказатель}

Exit; {завершениефункции}

end

elseCurr:=Curr^ .Next; {следующий}

FindName:=Nil; {еслиненашло}

end; {end FindName}

procedure AddFirst(A:Link); {добавление 1 записи}

begin

A^. Next:=First; {новыйобъект 1}

First:=A; {ссылканановыйобъект}

end; {конецпроцедуры}

procedure DelFirst(var A:Link); {удаление 1 }

begin

A:=First;

First:=First^. Next;

end; {end DelFirst}

procedure DelAfter(Old:Link; var A:Link); {удаленияобъектазастарый}

begin

A:=Old^.Next; {присвоенияуказателя}

Old^.Next:=Old^.Next^.Next;

end; {конецпроцедуры}

procedure InpAvto; {ввод}

begin

P:=New(Link); {новыйобъект}

Write('Ha3BaHuE:');

Readln(P^.Name) ;

Write('Kog:');

Readln(P^.kod);

write('Cena: ');

readln(P^.cena);

AddFirst(P); {вызов процедуры добавления }

end; {конец процедуры}

procedureMyList; {вывод записей}

varCurr : Link; {указатель на след. запись}

begin

Curr:=First; {установка на 1ую запись}

whileCurr<>Nildo

begin

Writeln( 'Na3BaToBapa: ' , Curr^. Name,' Kod ToBaPa: ', Curr^. kod,' Kol-vo: ',Curr^.cena:3) ;

Curr:=Curr^.Next; {переход к следующей}

end ;

readkey;

Readln;

end; {end MyList}

{********************************}

Begin {Osnova}

New(P); {новаядинамическаяпеременная}

EndMenu:=False ;

repeat

clrscr;

Writeln('Vi6irite punktick: ');

Writeln('1. Zapisat pervblm');

Writeln('2. Ydalit pervyl0 zapis');

WriteLn('3. Prosmotr vsego spiska') ;

Writeln('4. ydalenie ') ;

WriteLn('0. EXIT');

Readln(V) ;

Case V of {вызовнужнего}

1 : InpAvto; {выводданных}

2 : DelFirst(P); {удаление 1}

3 : MyList; {вывод}

4 : begin{удалениеследующего}

Write('VvodHa3BaHu9 poslekotorogodelete :');

Readln(NamFind) ;

DelAfter(Findname(NamFind),P); {вызовудаления}

end

elseEndMenu:=True; {конецменю}

end;

until EndMenu;

Dispose(P); {освобождениекучи}

end.

Результат решения задачи представлен на рисунке 14.

Рисунок 14 - Результат работы программы в TurboPascal

Рисунок 15 - Результат работы программы в TurboPascal

Рисунок 16 - Результат работы программы в TurboPascal

1.15 Модуль Graph

Написать программу, которая выводит на экран изображение шахматной доски. Используйте желтый и коричневый цвета для закрашивания квадратов. Прорисовка каждой детали выполняется с задержкой 1000 мс. После полной прорисовки стирать изображение и повторно выводить узор до нажатия Esc

Листинг - МодульGraph

uses crt,graph;

procedure Kletka(x1,y1,c:integer;d:integer);

begin

Setcolor(c);

rectangle(x1,y1,x1+d,y1+d);

Setfillstyle(1,c);

Bar(x1,y1,x1+d,y1+d);

end;

var gd,gm,x1,y1,x2,y2,d1,i,j:integer;

c:char;

begin

initgraph(gd,gm,'');

d1:=round((getmaxY-60)/8);

x1:=100;y1:=50;

outtextXY(getmaxX div 2-40,20,'Vyhod-Esc');

repeat

for i:=0 to 7 do

begin

for j:=0 to 7 do

begin

if odd(i+j) then Kletka(x1+d1*i,y1+d1*j,14,d1)

else Kletka(x1+d1*i,y1+d1*j,6,d1);

delay(1000);

end;

end;

delay(1000);

setfillstyle(1,0);

bar(x1,y1,x1+d1*8,y1+d1*8);

if keypressed then c:=readkey;

if c=#27 then exit;

until c=#27;

end.

Результат решения задачи представлен на рисунке 17.

Рисунок 17 - Результат работы программы в TurboPascal

Размещено на Allbest.ru


Подобные документы

  • Особенности программирования на языке Паскаль в среде Турбо Паскаль. Линейные алгоритмы, процедуры и функции. Структура данных: массивы, строки, записи. Модульное программирование, прямая и косвенная рекурсия. Бинарный поиск, организация списков.

    отчет по практике [913,8 K], добавлен 21.07.2012

  • История создания и развитие Pascal. Особенности пакета программирования Turbo. его возможности редактора текстов, компилятора и отладчика. Построения программы на языке Turbo Pascal, ее структура, типы алгоритмов, одномерные и многомерные массивы.

    курсовая работа [519,3 K], добавлен 25.06.2011

  • Структура и основные элементы языка Turbo Pascal. Алгоритм составления простейших программ на Turbo Pascal. Применение условного оператора и сильноветвящихся алгоритмов. Циклы с предусловием и постусловием, сочетание циклических и условных операторов.

    реферат [64,0 K], добавлен 20.03.2016

  • Краткая характеристика интегрированной среды Turbo Pascal. Принципы программирования разветвляющихся алгоритмов, циклических структур, задач обработки символьных данных, множеств. Правила записи данных в текстовый файл. Понятие явной и косвенной рекурсии.

    учебное пособие [1,5 M], добавлен 10.12.2010

  • Анализ эффективности методов сортировки данных в языке Turbo Pascal. Разработка эскизного и технического проекта программы. Сортировка без и с использованием дополнительной памяти, за исключением небольшого стека (массива). Сортировка связанных списков.

    курсовая работа [359,0 K], добавлен 23.05.2012

  • Строгая типизация и наличие средств структурного (процедурного) программирования императивного языка Pascal. Структура программы, выражения, строки. Правила и описание типов, процедур и функций, операторов ввода - вывода, модулей и подпрограмм.

    курсовая работа [37,3 K], добавлен 28.06.2008

  • Основы работы на языке высокого уровня Turbo Pascal. Основное оборудование и программное обеспечение. Операторы, необходимы для работы в графической среде Turbo Pascal. Запуск графического режима. Текст программы в графической среде Turbo Pascal.

    лабораторная работа [12,7 K], добавлен 14.05.2011

  • Разработка эскизного и технического проектов программы "Helpopr" (ввод, хранение и вывод данных на дисплей по запросу пользователя). Язык программирования Turbo Pascal. Описание алгоритма программы. Требования к компьютеру и программному обеспечению.

    курсовая работа [198,1 K], добавлен 03.02.2010

  • История появления и распространения Turbo Pascal - среды разработки для языка программирования Паскаль. Общий вид объявления файлового типа. Входная, выходная и промежуточная информация. Алгоритм решения задачи: словесный алгоритм, блок-схема, программа.

    курсовая работа [359,4 K], добавлен 05.01.2010

  • Разработка программ с помощью Turbo Pascal для решения задач, входящих в камеральные работы маркшейдера: решение обратной геодезической задачи и системы линейных уравнений методом Гаусса, определение координат прямой угловой засечки и теодолитного хода.

    курсовая работа [1,5 M], добавлен 05.03.2013

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.