Частное учреждение образования
Колледж бизнеса и права
ОТЧЕТ
по учебной практике по программированию
ОП Т.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 - Результаты выполнения линейного алгоритма
Входные данныеВыходные данныеABCS3,5-4,7-5,-125.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
readln;.
программирование алгоритм турбо паскаль
Рисунок 1 - Блок-схема линейного алгоритма
Результат решения задачи представлен на рисунке 1.
Рисунок 1 - Результат работы программы в TurboPascal
1.2 Процедуры и функции
Составить словесное (математическое) описание и блок-схему следующей задаче: найти периметр треугольника АВС, если его координаты A (x1,y1), B (x2,y2), C (x3,y3,) вводятся с клавиатуры. При неправильном вводе значений, вывести на экран сообщение об ошибке и предложением повторно ввести правильные данные. Результат отобразить на экране.
=AB+BC+AC
Для тестирования программы использовались данные, приведённые в таблице 2. Полученные результаты приведены там же.
Таблица 2 - Результаты выполнения процедуры и функции
Входные данныеВыходные данныеABCP3,5-4,7-5,-125.34
Результат решения задачи представлен на рисунке 2.
Рисунок 2 - Результат работы программы в TurboPascal
Листинг - Процедурыperimet_procedure;crt;
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
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
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
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; {описаниефункции}
begin0;('znachenie=',Rec (n));;
readkey; {задержка экрана}
end.
Результат решения задачи представлен на рисунке 6.
Рисунок 6 - Результат работы модульное программирование
1.6 Прямая и косвенная рекурсия
Написать программу с рекурсивной функцией, вычисляющей:
.
Листинг - Прямая и косвенная рекурсия
Programpr7;
uses crt;n: integer;Koren (n: integer): real;n=1 then Koren: =sqrt (3)Koren: =sqrt (3+Koren (n-1));;;('n=');(n);(Koren (n): 0: 5);
end.
Таблица 6 - Результаты выполнения прямой и косвенной рекурсии
Входные данныеВыходные данные32.27493
Результат решения задачи представлен на рисунке 7.
Рисунок 7 - Результат работы программы в TurboPascal
1.7 Рекурсивные алгоритмы
Написать рекурсивную процедуру, переводящую целое число из восьмеричной системы счисления в десятичную.
Для тестирования программы использовались данные, приведённые в таблице 7. Полученные результаты приведены там же.
Таблица 7 - Результаты выполнения линейного алгоритма
Входные данныеВыходные данные2420
Листинг - Рекурсивные алгоритмы;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 - Результаты выполнения линейного алгоритма
Входные данныеВыходные данные1element2element3element4element5element12533456
Листинг - Бинарный поиск
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]
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
Результат решения задачи представлен на рисунке 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]
Результат решения задачи представлен на рисунке 11.
Рисунок 11 - Результат работы программы в TurboPascal
1.11 Сортировка разделением
Задан массив К (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: =l;: =r;: =round ( (l+r) /2);: =a [m];a [i] x1 do dec (j);ij;l
Результат решения задачи представлен на рисунке 12.
Рисунок 12 - Результат работы программы в TurboPascal
1.12 Статическое и динамическая распределение памяти
.Заполнить массив В (10) случайными значениями. Организовать вывод на экран. Присвоить указателю адрес начала размещения массива в памяти. Напечатать значения четных значений элементов массива. Присвоить указателю адрес 10-го элемента, напечатать его значение, используя текущий базовый адрес сегмента и смещение с преобразованием в значение типа указатель. Заменить его содержимое на значение третьего элемента. Напечатать его новое значение.
Для тестирования программы использовались данные, приведённые в таблице 12. Полученные результаты приведены там же.
Входные данныеВыходные данные5-54-68-95-4-8-6Положительные числа4 элемент умноженный на 2548516
Листинг - Статическое и динамическое разделение памяти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ую запись}
whileCurrNildo('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);
Setcolor (c);(x1,y1,x1+d,y1+d);(1,c);(x1,y1,x1+d,y1+d);
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