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

  • Вид работы:
    Отчет по практике
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    629,61 Кб
  • Опубликовано:
    2012-07-20
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

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

Частное учреждение образования

Колледж бизнеса и права










ОТЧЕТ

по учебной практике по программированию

ОП Т.117013


Проверил (Н.И. Савченкова)

Выполнил (В.А. Макрак)








Содержание

 

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

1.14 Модуль Graph

 

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


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


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

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

=AB+BC+AC

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

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

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

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

A

B

C


S


3,5

-4,7

-5,-1


25.34


 

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

program perimetr;crt;

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

p: real;;('vvesti koordinati verhin A');(x1,y1);('vvedite koordinati verhin B');(x2,y2);

writeln ('vvedite koordinati verhin C');

readln (x3,y3);: =sqrt ( (sqr (x1-x2)) + (sqr (y1-y2)));: =sqrt ( (sqr (x2-x3)) + (sqr (y2-y3)));: =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');(AB<BC+AC) and (AC<AB+BC) and (BC<AB+AC);: =AB+BC+AC;('perimetr treygolnika raven=',p: 0: 2);

readln;.

программирование алгоритм турбо паскаль

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

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

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

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


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

=AB+BC+AC

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

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

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

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

A

B

C


P


3,5

-4,7

-5,-1


25.34



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

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

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

p: real;perimetr (x1,y1,x2,y2: real);;('vvesti koordinati verhin A');(x1,y1);('vvedite koordinati verhin B');(x2,y2);

writeln ('vvedite koordinati verhin C');

readln (x3,y3);: =sqrt ( (sqr (x1-x2)) + (sqr (y1-y2)));: =sqrt ( (sqr (x2-x3)) + (sqr (y2-y3)));: =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');(AB<BC+AC) and (AC<AB+BC) and (BC<AB+AC);: =AB+BC+AC;;;(x1,y1,x2,y2);('perimetr treygolnika raven=',p: 0: 2);;

end.

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

Листинг - функцииperimetr_function; crt;

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

p: real;stor (ab,bc,ac: real): real; {функция }('Vvesti Koordinati Verhin |A|'); {ввод координат точки А}(x1,y1);('Vvedite Koordinati Verhin |B|'); {ввод координат точки B}(x2,y2);('Vvedite Koordinati Verhin |C|'); {ввод координат точки C}

readln (x3,y3);: =sqrt ( (sqr (x1-x2)) + (sqr (y1-y2)));: =sqrt ( (sqr (x2-x3)) + (sqr (y2-y3)));: =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');(AB<BC+AC) and (AC<AB+BC) and (BC<AB+AC);: =AB+BC+AC; {вычисление периметра }

End;

{îñíîâíàÿ ïðîãðàììà}

Var ab,bc,ac: real; {îáúÿâëåíèå ïåðåìåííûõ}

Begin; stor (ab,bc,ac

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

End. {конец }

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

\

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

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

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


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

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

program massiv;

Uses CRT;n=5;a: array [1. n,1. n] of integer;,j: integer;;i: = 1 to n DOj: = 1 to n DO[i,j]: =random (10) - 3;(a [i,j]: 3);;;;;i: = 1 to n DOj: = 1 to n DOj<=n-i+1 then[i,j]: =0;(a [i,j]: 3);;;

end;

Readln

End.

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

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

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


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

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

uses crt;

var s1,s2,s: string;,w: char;: byte;

clrscr;

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

readln (s1);

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

readln (s2);(');(c);pos (c,s1) =0 then writeln ();pos (c,s1) >0;;(? ');();();();(w);w of

'1': begin: =s1;i: =length (s) downto 1 dos1 [i] =c then insert (s2,s, i);(s);;;

'2': begin: =s1;i: =length (s) downto 1 dos1 [i] =c then insert (s2,s, i+1);(s);;;exit;;not (w in ['1'. '2']);.

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

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

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


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

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

uses crt;

type tov=record: string;: integer;: string;: char;;=10;: integer;: char;: array [1. Nmax] of tov;: integer;: boolean;enter;: string;;: =1;c<>'í' do begin;: =i+1;();(m [i]. n);() ');(m [i]. t);();(m [i]. k);();(m [i]. c);(');(c);;;find;: string;,k: integer;: =2;c<>'í' do begin: =i+1;(? ');(tip);(: ');(kol);i: =2 to Nmax do begin(m [i]. t=tip) and (m [i]. k=kol) then begin(c);: =true;;;o=false then writeln ();(? ');(c);;;c<>'3' do begin(: ');('1.);('2.);('3. ');(c);c of

'1': enter;

'2': find;;;.

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

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

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


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

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

programpract6;

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

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

begin<4 then Rec: =1{началоцикла}Rec: =Rec (k-3) +Rec (k-2) +Rec (k-1);; {конеццикла}: integer; {описаниепеременных}; {очисткаэкрана}{цикл}('vvedite nomer chlena posledovatelnosti, nat chislo n=');(n);n>0;('znachenie=',Rec (n));;

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

end.

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

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

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


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

.

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

Programpr7;

end.

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

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

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

3

2.27493


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

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

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


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

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

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

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

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

24

20


Листинг - Рекурсивные алгоритмы;Oct2Num (const aSOct: String; const aWeight, aI: Integer): Integer;: Integer;: = 0;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;;aI > 1 then begin: = Num + Oct2Num (aSOct, aWeight * 8, aI - 1);;Num: = Num;;, S: String;: Integer;('zadaite celoe neotricatelnoe chislo: ');(SOct);: = Oct2Num (SOct, 1, Length (SOct));

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

Writeln (Num);(S);S <> '';.

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

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

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


Задан массив 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;: array [1. n] of integer; {описаниемассива}clrscr; {очисткаэкрана}i: = 1 To n Do {заполнениемассива}('Vvedite ', i,' element: ');(K [i]);: = k [1];i: = 2 To n Do {поискминимального}k [i] < min Then min: = k [i];i: = 1 To n Do {кратностьэлементов}(k [i] mod min) = 0 Then Writeln (i);;

End.

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

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

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


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

Листинг - Сортировка включением;mas=array [0.100] of integer;i,min,n,m, imn: integer; a,c: mas;Straight_Insertion (n: integer; Var a: mas);,j: integer;: integer;i: =2 To n Do: =a [i]; a [0]: =x; j: =i-1;x<a [j] Do[j+1]: =a [j]; j: =j-1;;[j+1]: =x;; {Straight_Insertion};(');(n);i: =1 to n do begin[i]: =random (10) +random (5);;(');i: =1 to n do begin(a [i],' ');;;(');(m);i: =1 to m do begin[i]: =random (15) +random (5);;;();i: =1 to n do begin(c [i],' ');;;i: =1 to m do begin: =n+1;[n]: =c [i];;(');i: =1 to n do(a [i],' ');;;_Insertion (n,a);(');i: =1 to n do(a [i],' ');;;: =a [1];i: =1 to n do begina [i] <min then min: =a [i];;(=',min);;: =0;i: =1 to n do begina [i] mod a [min] =0 then: =i;;: =a [1];(');i: =1 to n do(a [i] mod min = 0) then(i: 3);;;.

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

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

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


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

Листинг - Сортировка обменнаяmas=array [0.100] of integer;i,min,n,m, imn: integer; a,c: mas;Shaker_Sort (n: word; Var a: mas);j,k,l,r: integer;: integer;: =2; r: =n; k: =n;j: =r DownTo l Doa [j-1] >a [j] Then: =a [j-1];[j-1]: =a [j];[j]: =x;: =j;;: =k+1;j: =l To r Doa [j-1] >a [j] Then: =a [j-1];[j-1]: =a [j];[j]: =x;: =j;;: =k-1;l>r; {Shaker_Sort};(');(n);i: =1 to n do begin[i]: =random (10) +random (5);;(');i: =1 to n do begin(a [i],' ');;;(');(m);i: =1 to m do begin[i]: =random (15) +random (5);;;(');i: =1 to n do begin(c [i],' ');;;i: =1 to m do begin: =n+1;[n]: =c [i];;(');i: =1 to n do(a [i],' ');;;_Sort (n,a);(');i: =1 to n do(a [i],' ');;;: =a [1];i: =1 to n do begina [i] <min then min: =a [i];;(= ',min);;: =0;i: =1 to n do begina [i] mod a [min] =0 then: =i;;: =a [1];(');i: =1 to n do(a [i] mod min = 0) then(i: 3);;;.

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

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

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


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

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

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

procedure sort (l,r: integer);

var

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

begin: =l;: =r;: =round ( (l+r) /2);: =a [m];a [i] <x1 do inc (i);a [j] >x1 do dec (j);i<=j then: =a [i];[i]: =a [j];[j]: =y1;(i);(j);;i>j;l<j then sort (l,j);i<r then sort (i,r);;;(');(n);i: =1 to n do begin[i]: =random (10) +random (5);;(');i: =1 to n do begin(a [i],' ');;;('');(m);i: =1 to m do begin[i]: =random (15) +random (5);;;(');i: =1 to n do begin(c [i],' ');;;i: =1 to m do begin: =n+1;[n]: =c [i];;(');i: =1 to n do(a [i],' ');;;(1,n);(');i: =1 to n do(a [i],' ');;;: =a [1];i: =1 to n do begina [i] <min then min: =a [i];;(= ',min);;: =0;i: =1 to n do begina [i] mod a [min] =0 then: =i;;: =a [1];(');i: =1 to n do(a [i] mod min = 0) then(i: 3);;;.

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

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

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


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

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

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

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

5

-5

4

-6

8

-9

5

-4

-8

-6

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

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











5

4

8

5

16


Листинг - Статическое и динамическое разделение памятиyp14; {название программы}crt; {подключение библиотеки}{описание типов}=array [1.10] of integer; {описание массива}{раздел описания переменных},z: integer;: massiv;: ^massiv; {указатель на массив}clrscr; {очистка экрана}

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

for i: =1 to 10 do {выводэлементовмассива}(a [i]);;('Vveden massiv: ');i: =1 to 10 do {выводэлементамассива}(a [i]: 3);;;: =@a; {присвоение указателю адрес начала массива в памяти}

writeln ('-------------------------------------------');('Polozitelnie 4isla: ');i: =1 to 10 doPtrMas^ [i] mod 2 =0 then(PtrMas^ [i]);;: =Ptr (Seg (a [9]),Ofs (a [9]) +SizeOf (integer)); {присвоениеадреса 4 элемента}('-------------------------------------------');('10 element: ');

writeln (PtrMas^ [1]); {вывод значения 4 лемента}('novoe zna4enie 10: ');(ptrmas^ [1]); {вывод умноженного массива}

ptrMas^ [1]: =a [3];('novoe zna4enie 10: ');(ptrmas^ [1]);; {задержкаэкрана}. {конец программы}

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

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

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


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

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

Programyp15;

UsesCrt;

Type

NameStr = String [20];

SNameStr = string [20];= ^Auto;= record: NameStr; {названиетовара}: integer; {кодтовара}: integer; {ценатовара}: Link; {связьсоследующимобъектом};,First: Link; {указательнатекущуюзапись}: NameStr; {поискпоназванию}: 0.4; {меню}: boolean; {завершениеменю}(FN: NameStr): Link; {поискпофамилии}: Link;: =First; {установканапервый}<>Nildo{доконцасписка}Curr^. Name=FN then {нашли}: =Curr; {возвращаемуказатель}; {завершениефункции}: =Curr^. Next; {следующий}: =Nil; {еслиненашло}; {end FindName}AddFirst (A: Link); {добавление 1 записи}^. Next: =First; {новыйобъект 1}: =A; {ссылканановыйобъект}; {конецпроцедуры}DelFirst (var A: Link); {удаление 1 }: =First;: =First^. Next;; {end DelFirst}DelAfter (Old: Link; var A: Link); {удаленияобъектазастарый}: =Old^. Next; {присвоенияуказателя}^. Next: =Old^. Next^. Next;; {конецпроцедуры}InpAvto; {ввод}: =New (Link); {новыйобъект}('Ha3BaHuE: ');(P^. Name);('Kog: ');(P^. kod);

write ('Cena: ');(P^. cena);

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

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

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

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

begin

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

whileCurr<>Nildo('Na3BaToBapa: ', Curr^. Name,' Kod ToBaPa: ', Curr^. kod,' Kol-vo: ',Curr^. cena: 3);: =Curr^. Next; {переход к следующей}

end;;;; {end MyList}

{********************************}{Osnova}(P); {новаядинамическаяпеременная}: =False;;('Vi6irite punktick: ');('1. Zapisat pervblm');('2. Ydalit pervyl0 zapis');('3. Prosmotr vsego spiska');('4. ydalenie ');('0. EXIT');(V);V of {вызовнужнего}

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

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

: MyList; {вывод}

: begin{удалениеследующего}('VvodHa3BaHu9 poslekotorogodelete: ');(NamFind);(Findname (NamFind),P); {вызовудаления}: =True; {конецменю};EndMenu;(P); {освобождениекучи}.

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

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

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

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

1.14 Модуль Graph


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

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

uses crt,graph;

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

end;gd,gm,x1,y1,x2,y2,d1, i,j: integer;: char;(gd,gm,'');: =round ( (getmaxY-60) /8);: =100; y1: =50;(getmaxX div 2-40, 20,'Vyhod-Esc');i: =0 to 7 doj: =0 to 7 doodd (i+j) then Kletka (x1+d1*i,y1+d1*j,14,d1)Kletka (x1+d1*i,y1+d1*j,6,d1);(1000);;;(1000);(1,0);(x1,y1,x1+d1*8,y1+d1*8);keypressed then c: =readkey;c=#27 then exit;c=#27;.

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

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

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

 

Не нашел материал для своей работы?
Поможем написать качественную работу
Без плагиата!