Входные данные
|
Выходные данные
|
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