Задача 1 Волшебники Гарри Поттера
У Эрни Макмиллана есть список тех, с кем разговаривал Долиш. Он говорил одинаковое количество времени с несколькими волшебниками. Нужно вначале в список поместить тех, у кого меньше магических способностей. Если же и магические способности у них одинаковы, то вывести их в том порядке, в котором они находятся в телефонном справочнике.
Формат входных данных
В первой строке входного файла находится натуральное число N, которое не меньше 1 и не превосходит 1000
В каждой из последующих N строк ― разделенные пробелами фамилия человека (строка из заглавных и строчных латинских букв, длиной не более 50 символов), время его разговора с Долишем и его магические способности (неотрицательные целые числа, не превосходящие 106
Формат выходных данных
Вывести список в указанном порядке, по одной фамилии на строку.
Входные данные в файле input.txt | Результат работы в файле output.txt |
6 Dumbledore 0 1000 Riddle 0 900 Grindelwald 0 900 Potter 1 950 Smith 20 500 JohnDoe 10 0 | Smith JohnDoe Potter Grindelwald Riddle Dumbledore |
Условно решение можно разделить на три части: объявление процедур и переменных, считывание входных данных и само тело программы.
1. // ОБЪЯВЛЕНИЕ ПЕРЕМЕННЫХ
2. type
3. zvonki = record {Задаем запись}
4. name: string;
5. time: integer;
6. pow: integer;
7. end;
8.
9. var
10. wizard: array [1..10000] of zvonki; {масссив записей}
11. I, n, j, tmp, ps, kod: integer;
12. tmp1, s, times: string;
13.
14. // ПРОЦЕДУРЫ
15. procedure time_sort(x: integer);{ процедуры обмена значениями двух переменных}
16. begin
17. tmp := wizard[x].time;
18. wizard[x].time := wizard[x + 1].time;
19. wizard[x + 1].time := tmp;
20. end;
21.
22. procedure power_sort(x: integer);
23. begin
24. tmp := wizard[x].pow;
25. wizard[x].pow := wizard[x + 1].pow;
26. wizard[x + 1].pow := tmp;
27. end;
28.
29. procedure names_sort(x: integer);
30. begin
31. tmp1 := wizard[x].name;
32. wizard[x].name := wizard[x + 1].name;
33. wizard[x + 1].name := tmp1;
34. end;
35.
36. begin
37.
38. // СЧИТЫВАНИЕ ИЗ ФАЙЛА
39. assign(input, 'input.txt'); reset(input); {открываем input.txt}
40. assign(output, 'output.txt'); rewrite(output);
41. readln(n); {считываем количество волшебников}
42. for I := 1 to n do
43. begin
44. readln(s); {считываем всю строку из файла.}
45. PS := Pos(' ', s); {функция pos() определяет позицию любого символа в строке. если символов несколько, выводит координату первого}
46. wizard[I].name := Copy(S, 1, PS - 1); {Копируем имя без пробела}
47. Delete(s, 1, PS); {Удаляем имя с пробелом}
48. PS := Pos(' ', S); {Определяем позицию пробела}
49. times := Copy(S, 1, PS - 1); {Копируем строку во временную переменную}
50. Val(times, wizard[I].time, kod); {Используем стандартную функцию преобразования типов.}
51. Delete(S, 1, PS); {Удаляем все лишнее}
52. Val(S, wizard[I].pow, kod); {Трансформируем оставшуюся строку в целое число.}
53. end;
54. // ТЕЛО ПРОГРАММЫ
55. for I := 1 to n - 1 do {сортируем пузырьком}
56. for j := 1 to n - i do
57. begin
58. if wizard[j + 1].time > wizard[j].time then {Если время разговора волшебника больше времени следующего волшебника}
59. begin
60. time_sort(j); {обмениваем значения времени}
61. names_sort(j); {обмениваем значения имен}
62. power_sort(j); {обмениваем значения сил. таким образом мы перемещаем волшебника с меньшим временем разговора вниз}
63. end;
64. if wizard[j + 1].time = wizard[j].time then begin{Если время разговора волшебников одинаково, то}
65. if wizard[j + 1].pow < wizard[j].pow then {Если сила одного меньше силы другого, то}
66. begin
67. power_sort(j); {обмениваем значения сил}
68. names_sort(j); {обмениваем значения имен}
69. // Время у них и так одинаковое, поэтому нет смысла производить обмен времени.
70. end
71. else
72. if wizard[j + 1].pow = wizard[j].pow then {Если же сила у них равна}
73. if wizard[j + 1].name < wizard[j].name then {Сравниваем имена.}
74. names_sort(j); {обмениваем значения имен}
75. // Время и сила у них одинаковое, поэтому мы обмениваем только имена.
76. end;
77. end;
78. // ВЫВОД
79. for i := 1 to n do writeln(output, wizard[i].name);
80. close(input);
81. close(output);
82. end.
Задача 2 " Язык TURBU "
В языке TURBU алфавит содержит 5 букв: "#", "$", "&","*","@".
Все используемые в языке слова - пятибуквенные, поэтому в словаре языка TURBU первое слово - #####, последнее - @@@@@. На каждой странице словаря напечатано N слов.
Определить:
1.Количество страниц Р, необходимое для размещения всех слов языка TURBU в словаре.
2. Номер Q страницы, на которой располагается задаваемое слово а.
3.Слова, которыми начинается и заканчивается страница, содержащая задаваемое слово b языка TURBU.
Входные данные. Входной текстовый файл input.txt содержит: в первой строке - число N, во второй - слово а, в третьей - слово b.
Выходные данные. Выходной текстовый файл output.txt должен содержать:
в первой строке - число страниц Р; во второй строке - номер Q страницы, содержащей слово а; в третьей строке - первое слово на
странице, содержащей слово b;в четвертой строке - последнее слово на странице, содержащей слово b.
input.txt | output.txt | ||
N | P | ||
a | ####$ | Q | |
b | ###$$ | ##### | |
##$$@ |
Type num5=string;
var a,b:num5;
n:integer;
p:integer;
Function To5(x:integer):num5;
{перевод числа в слово из языка TURBU} var s:num5;
r:string;
k:integer;
begin
s:='';
While x>0 do
begin
k:=x mod 5;
x:=x div 5;
case k of
0:r:='#';
1:r:='$';
2:r:='&';
3:r:='*';
4:r:='@';
else Writeln('Error!!!!!')
end;
s:=r+s;
end;
To5:=s;
end;
Procedure ReadFile;
{чтение исходных данных из файла Input.txt:
N - число слов на странице
a- первое слово
b- второе слово }
var s:string;
f:text;
begin
Assign(f,'input.txt');
Reset(f);
Readln(f,n);
Readln(f,a);
Readln(f,b);
Close(f);
end;
Function To10(x:string):integer;
k:=x mod 5;
x:=x div 5;
case k of
0:r:='#';
1:r:='$';
2:r:='&';
3:r:='*';
4:r:='@';
else Writeln('Error!!!!!')
end;
s:=r+s;
end;
To5:=s;
end;
Procedure ReadFile;
{чтение исходных данных из файла Input.txt:
N - число слов на странице
a- первое слово
b- второе слово }
var s:string;
f:text;
begin
Assign(f,'input.txt');
Reset(f);
Readln(f,n);
Readln(f,a);
Readln(f,b);
Close(f);
end;
Function To10(x:string):integer;
begin
While length(s)<5 do s:='#'+s; end;
Procedure WriteToFile;
{запись в файл Output.txt и расчет выходных данных}
var ttt,q,p:integer;
s1,s2:num5;
f:text;
begin
Assign(f,'output.txt');
Rewrite(f);
{расчет необходимого количества страниц} p:=Trunc(3125/n+0.999999); Writeln(f,p);
{расчет номера страницы, на которой находиться слово a}
q:=To10(a) div n + 1;
Writeln(f,q);
{получение первого слова на странице, на которой находиться
слово b}
ttt:=(To10(b) div n)*n;
s1:=To5(ttt);
{добавление в начало полученного слова нулевых символов языка TURBU}
DoLen5(s1);
Writeln(f,s1);
{получение последнего слова на странице, на
которой находиться
слово b}
ttt:=(To10(b) div n)*n+n-1; if ttt>3124 then ttt:=3124; s2:=To5(ttt);
{добавление в начало полученного слова нулевых символов языка TURBU}
DoLen5(s2);
Writeln(f,s2);
Close(f);
end;
{основная программа}
BEGIN
ReadFile;
WriteToFile;
END.
Задача 3. "Функция"
1. Условие задачи.
Функция F(n) для целых неотрицательных n определена так: F(0)=0, F(1)=1, F(2n) = F(n), F(2n+1)=F(n)+F(n+1).
Для данного N найти и напечатать F(n). Обязательное условие: N
столь велико, что недопустимо заводить массив из N чисел.
2. Алгоритм решения.
Основная идея алгоритма заключается в том, что при разложении f(2n+1) на f(n) и f(n+1) мы должны вычислить 2 значения функции. Либо n, либо n+1 окажется нечетным и для его вычисления понадобится опять вычислять 2 значения функции. А для четного аргумента еще одно. На первый взгляд, кажется, что теперь нам надо вычислить значения F для 3 аргументов, но на самом деле 2 из них (аргументов) всегда совпадут! То есть кол-во вычислений функции на каждом шаге не увеличивается.
Пример:
F(26) = F(13) = F(6)+F(7) = F(3)+F(3)+F(4) = 2F(3)+F(4) =
=2(F(1)+F(2))+F(2) = 2F(1)+3F(2) = 5F(1) = 5
3. Программная реализация
Program func; var
c, {Текущий четный аргумент}
nc, {Текущий нечетный аргумнт}
kc, {Коэффициент при четном аргументе}
knc, {Коэффициент при нечетном аргументе} n:LongInt;
{В переменной c всегда должен быть четный аргумент, а в nc - нечетный. Эта процедура меняет местами значения переменных c и nc, если это необходимо}
Procedure Correct; var Temp:LongInt;
Begin
if odd(c) then Begin Temp:=c; c:=nc; nc:=Temp; Temp:=kc; kc:=knc;
knc:=Temp; End;
End;
Begin
Write('Введите число '); ReadLn(N);
n:=abs(n); {Вычислим модуль n} if n=0 then Writeln('0') else
Begin
while n mod 2 = 0 do n:=n div 2; {уменьшаем n до нечетного числа}
c:=n div 2; {Разложим n на четное}
nc:=n-c; {и нечетное числа} if c=0 then kc:=0 else kc:=1;
knc:=1;
while (c>2) or (nc>2) do Begin
Correct; {поменяем c и nc, если нужно}
c:=c div 2; {получим новый аргумент}
kc:=kc+knc; {получим коэфф. при нем}
nc:=nc-c; {вычислим второй аргумент} End;
WriteLn(Kc+knc); {Выведем результат} ReadLn; {Подождем}
End; End.
Задача 4 „REBUS“.
Составить программу REBUS, которая определяет все 4-значные числа на интервале [M, N], удовлетворяющие условиям:
a) abcd - 4-цифровое число;
b) a, b, c, d - разные цифры;
c) ad - cd = a + b + c + d;
и подсчитывает общее количество этих чисел.
Во входном файле REBUS.DAT в 1-м и 2-й строчках находятся два числа M и N. В файле REBUS.SOL выводятся числа, удовлетворяющие условиям а)-с), и их количество.
файл REBUS.DAT | файл REBUS.SOL |
5128 5467 | 5139 5302 2 |
program REBUS;
var a,b,c,d,m,n,k,x,i:integer; f,f1,f2:text;
begin
assign (f,'rebus.dat');
readln(m,n);
rewrite(f);
writeln(f,m);
writeln(f,n);
close(f);
for i:=m to n do
begin
a:=i div 1000; b:=i mod 1000 div 100;
c:=i mod 100 div 10; d:=i mod 10;
if (a <> b) and (a <> c) and (a <> d) and (b <> c) and (b <> d) and (c <> d) and (a*d-c*d=a+b+c+d) then
begin k:=k+1;
assign(f1,'rebus.sol');
append(f1);
writeln(f1,i);
close(f1);
end;
end;
assign(f1,'rebus.sol');
rewrite(f1);
writeln(k);
writeln(f1,k);
close(f1)
end.
Задача 4 „Кубики. “.
Кубик с ребром N см покрасили и разрезали на кубики с ребром 1 см. При этом появились такие, у которых окрашено разное количество граней. Например, если N = 3, то после разрезания будет 8 кубиков, у которых окрашено три грани, 12 с двумя гранями, 6 с одной, а один кубик будет совсем неокрашенный. Составьте программу, которая бы определяла, сколько кубиков с каждой возможным количеством окрашенных граней.
Технические условия | |||||||
Имя программы | CUBES. | ||||||
Ввод | С клавиатуры вводится целое число N (от 1 до 1292) | ||||||
Вывод | На экран или форму выводятся различные варианты окрасок и их количества в формате: количество_окрашеных_граней/количество_кубиков в порядке возрастания первого параметра
|
program cubes;
uses crt;
var x,x1,x2,x3,x0,y,z,k,n:integer;
s:string; f,g:text;
begin
assign(f,'cubes.dat');
reset(f);
readln(f,y);
close(f) ;
x3:=8;
x1:=sqr(y-2)*6;
x0:=(sqr(y-2))*(y-2);
x2:=(y-2)*4*2+(y-2)*4;
assign(g,'cubes.sol');
rewrite(g);
writeln(g,'0/',x0,' 1/',x1,' 2/',x2,' 3/',x3);
close(g);
end.
Тема: Сортировка и поиск
Задача “Шифровка”
Мальчик Петя чрезвычайно увлекается различными шпионскими рассказами и недавно от чтения романов со стрельбой и погонями перешел к изучению серьезной литературы. Особенно его заинтересовал один из методов шифровки секретных сообщений, прочитанный им в брошюрке по криптографии из серии “Библиотечка кровавого режима”.
Метод заключается в следующем: среди большого количества чисел спрятано то, которое несет секретную информацию, причем все числа встречаются трижды (или кратное трем число раз), кроме секретного числа, которое встречается некратное трем число раз. Так как Петя был маленьким и обладал чрезвычайно живым воображением, то он представил себе сотни шифровщиков с красными глазами, сидящих под зелеными лампами и с огромной напряженностью выискивающих секретное число на распечатках, ошибающихся и рвущих на себе волосы. Однако в реальности такой шифр легко взламывается компьютерной программой, которую вам предстоит написать.
Формат входных данных
Во входном файле записано целое число N — количество чисел
(1 ≤ N ≤ 300 001). Далее записано N целых чисел Mi (1 ≤ Mi ≤ 2•109).
Формат выходных данных
В выходной файл выведите секретное число.
Ограничение
Ограничение по памяти (при решении данной задачи можно было использовать не более 1 Мб оперативной памяти) и количество чисел не дает возможности ни сохранить все числа для последующей сортировки, ни даже просто запомнить их в единственном экземпляре; кроме того, исходя из ограничения по времени и количества чисел, можно сделать вывод, что задача должна решаться за линейное время.
Алгоритм решения
Разобьем каждое двузначное число на разряд десятков и разряд единиц (однозначные числа будут иметь в качестве разряда десятков 0)
Получим две цифры
Посчитаем, сколько раз встречалось каждая цифра
Выберем то, которое встречалось некратное трем число раз, его индекс и будет ответом(один проход по массиву и подсчет остатка от деления каждого элемента на 3).
Умножим цифру десятков на 10 и прибавим к ней цифру единиц.
Решение
Program shifr;
uses crt;
var
A : array[1..10, 0..9] of longint; {объявление двухмерного массива}
i, j, k, n: longint; f1, f2: text;
begin
assign(f1,’input.txt’); reset(f1);
assign (f2,’output.txt’);rewrite (f2);
for i := 1 to 10 do
for j := 0 to 9 do
{заполняем таблицу нулями }
A[i, j] := 0;
read(f1,n);
for i := 1 to n do begin
read(f1,k);
j := 1; {номер разряда}
while k <> 0 do begin
{на месте j добавилась цифра k mod 10}
inc(A[j, k mod 10]);
{выкидываем последнюю цифру }
k := k div 10;
{переходим к следующему разряду}
inc(j);
end;
end;
k := 0; {здесь будем восстанавливать число начиная со старших разрядов}
for i := 10 downto 1 do begin
{ переходим к следующей цифре}
k := k * 10;
{перебираем все цифры}
for j := 0 to 9 do
{нашли "секретную" цифру}
if A[i, j] mod 3 <> 0 then
{и прибавляем ее к ответу}
k := k + j;
end;
writeln(f2,k);
close (f1);
close (f2);
end.
Тестирование задачи
Input.txt | Output.txt |
11 3 1 2 3 1 3 2 2 1 3 3 | |
22 12 34 22 12 22 12 34 34 25 |
Тема: Эффективные структуры данных
Задача Роботы
Сообщество роботов живет по следующим законам: один раз в год они объединяются в полностью укомплектованные группы по 3 или 5 роботов (причем число групп из 3 роботов - максимально возможное). За год группа из 3 роботов собирает 5, а группа из 5 - 9 новых собратьев. Каждый робот живет 3 года после сборки. Известно начальное количество роботов k, все они только что собраны. Определить, сколько роботов будет через n лет.
Входные данные
В первой строке исходного файла Input.txt записано начальное число роботов, во второй строке – количество лет.
Выходные данные. В файл Output.txt выведено одно число – искомое количество роботов
Input.txt | Output.txt |
Алгоритм решения
Создадим массив r[3], где r[1], r[2], r[3] - количество роботов соответствующего возраста. Т
Обозначим x - количество троек, y - количество пятерок, которое можно сформировать из общего числа роботов.
Определим возможное количество троек и пятерок роботов.
Вычислим количество создаваемых роботов 5*х+9*у в год
Тогда общее количество роботов S= r[1] + r[2]+ r[3].
Programrobotu;
vark,i,n:integer;
fi,fo:text;
p:byte;
s,x,y:longint;
r:array [1..3] oflongint;
begin
assign (fi,’input.txt’); reset (fi); read (fi,n); close (fi);
assign (fo,’output.txt’); rewrite (fo);
r[1]:=k; r[2]:=0; r[3]:=0; s:=k;
{заполним массив, исходное количество роботов-первый элемент массива}
for i:=1 to n do begin
{открываем цикл с количеством повторений,равным количеству лет}
x:=sdiv 3; {находим возможное количество троек роботов}
p:=smod 3; {находим остаток роботов}
casepof {рассматриваем варианты создания групп по три и пять роботов}
0: y:=0; {если остаток равен нулю, будут только тройки роботов}
1: beginx:=x-3; y:=2;end; {если 1, то забираем три тройки и создаем две пятерки}
2: beginx:=x-1; y:=1;end; {если остаток 2, то забираем одну тройку и создаем одну пятерку}
end;
r[3]:=r[2]; r[2]:=r[1]; r[1]:=5*x+9*y;
{добавляем в массив число вновь созданных роботов}
{формируем массив, в котором данные обновляются каждый год}
s:=r[1]+r[2]+r[3];
{роботы, прожившие более трех лет, автоматически убираются из массива}
end;
write(fo, s);
close (fo);
end.
Тестирование задачи
Начальное число роботов | Число лет | Количество роботов |
Тема: Элементы вычислительной геометрии.
Задача «Отрезок»
Условие задачи. Отрезок на плоскости задается двумя несовпадающие конечными точками A (x1; y1) и B (x2; y2). С точки С (х3; у3) к прямой, содержащей отрезок АВ, проводится перпендикуляр. Определить, попадает перпендикуляр на отрезок АВ или на его продолжение.
Во входном файле содержится три пары чисел, являющихся координатами точек А, В, С.
В выходном файле содержится ответ «На отрезок» или «На продолжение».
Пример входного и выходного файлов
S.txt | S1.txt |
4 4 7 3 9 5 | На продолжение |
Ограничения
Для успешного выполнения программы при любых значениях необходимо провести ряд тестов и выявить ограничения, т.е. такие входные данные при которые решение программы невозможно или оно является неразумным в данном контексте.
Во-первых, в данной задаче необходимо ввести ограничение на несовпадение точек A (x1; y1), B (x2; y2) и С (х3; у3). Т.е. во входных данных не должно существовать одинаковых точек.
Во-вторых, возможны случаи когда точки A (x1; y1), B (x2; y2) и С (х3; у3) лежат на одной прямой. В данном случае теряется смысл построения перпендикуляра к отрезку, целесообразным становится сообщить об этом пользователю и прекратить работу программы. Если действительно входные данные (точки) лежат на одной прямой, то по той же вышеуказанной формуле нахождения косинуса угла можно выявить такой момент, добавив условие на равенство модуля косинуса хотя бы одного угла единице. Как уже было замечено для данной проверки необходимо и достаточно проверить лишь один угол.
Алгоритм решения:
Вводим координаты трех точек A (x1; y1) , B (x2; y2) и С (х3; у3)
Проверяем точки на совпадение(((x1=x2) and (y1=y2)) or ((x2=x3) and (y2=y3)) or ((x1=x3) and (y1=y3)))
Находим длины отрезков АС, AB, BC (АС:=sqr(x1-x3)+sqr(y1-y3))
Находим косинусы углов b1:=(AB+BC-AC)/(2*sqrt(AB*BC));
Проверяем равны ли они 1(или хотя бы один из них – принадлежат ли они одной прямой) if (abs(a1)=1) then
Проверяем отрицательные или положительные косинусы углов => если >0,то«на продолжение», иначе «на отрезок»
program otrezok ;
var x1,x2,x3,y1,y2,y3,AC,AB,BC,a1,b1:real;
k,k1:text;
begin
{Считывание данных из файла}
assign (k, 'S.txt'); {привязка переменной k к файлу S}
reset(k); {открываем существующий файл S.txt}
readln(k,x1,y1); {ввод координат начала отрезка, точки А}
readln(k,x2,y2); {ввод координат конца отрезка, точки В}
readln(k,x3,y3); {ввод координат точки С}
close(k); {закрыть текстовый файл c переменной k}
{Проверка точек на совпадение}
if (((x1=x2) and (y1=y2)) or ((x2=x3) and (y2=y3)) or ((x1=x3) and (y1=y3))) then
begin
assign(k1, 'S1.txt');
rewrite(k1);
writeln('Введены неверные данные');
writeln(k1,'Введены неверные данные');
close(k1);
end else
{Поиск косинусов углов при отрезке по теореме косинусов}
begin
АС:=sqr(x1-x3)+sqr(y1-y3); { нахождение длины отрезка АС}
АВ:=sqr(x2-x1)+sqr(y2-y1); { нахождение длины отрезка АВ}
ВС:=sqr(x3-x2)+sqr(y3-y2); { нахождение длины отрезка ВС}
b1:=(AB+BC-AC)/(2*sqrt(AB*BC)); { косинус угла АВС}
a1:=(AC+AB-BC)/(2*sqrt(AC*AB)); { косинус угла ВАС}
if (abs(a1)=1) then { если косинус хотя бы одного угла равен 1}
{Проверка точек на принадлежность одной прямой}
begin
assign(k1, 'S1.txt');
rewrite(k1);
writeln('Точки лежат на одной прямой');
writeln(k1,'Точки лежат на одной прямой');
close(k1);
end else
begin
if (a1 < 0) or (b1 < 0) then {если косинусы углов отрицательные}
{Вывод результатов}
begin
assign(k1, 'S1.txt');
rewrite(k1);
writeln('на продолжение');
writeln(k1,'на продолжение');
close(k1);
end else { если косинусы углов положительные}
begin
assign(k1, 'S1.txt');
rewrite(k1);
writeln ('на отрезок');
writeln(k1,'на отрезок');
close(k1);
end;
end;
end;
end.
Тестирование задачи
Координаты точек A, B, C. | Ответ |
1 2 1 2 3 3 | Введены неверные данные |
2 2 3 4 5 8 | Точки лежат на одной прямой |
0 0 -3 2 -5 0 | На продолжение |
4 4 7 3 9 5 | На продолжение |
1 4 5 -1 -1 -1 | На отрезок |
4 8 1 2 3 3 | На отрезок |
Элементы вычислительной геометрии
Площади покрытия антенны
В настоящее время мобильная связь получила достаточно широкое распространение в мире. Но бывают случаи, когда сигнал с базовой антенны пропадает, чаще всего это происходит, если Вы находитесь в движении, т.е. например, передвигаетесь на автомобиле. Недоступность базовой антенны оператора мобильной связи связаны с рельефом местности и радиусом действия самой антенны, проще говоря, площадью покрытия антенны.
Задание. Вычислить площадь покрытия для антенны, если известен радиус действия радиопередающего устройства, не превышающий 12000 м, а круговая диаграмма направленности антенны представляет собой окружность.
Входной файл input.txt содержит число – радиус действия (в метрах).
В выходном файле output.txt формируется число, обозначающее площадь покрытия антенны.
Пример входных и выходных данных
input.txt | output.txt |
5.02654824574367E+001 |
Площадь покрытия
Решение
Необходимо найти площадь круга заданного радиуса r.
program Ploschad;
var t: text;
r, S: real; // r – радиус круга, S – площадь покрытия антенны
begin
assign (t,'input.txt'); // связываем переменную с файлом ввода данных
reset (t); // открыть файл для чтения
read (t,r); // считываем данные
close(t); // закрываем файл – данные считаны
S := Pi*r*r; // расчет пощади
assign (t,'output.txt'); // связываем переменную с файлом вывода данных
rewrite (t); // перезаписываем данные
write (t, S); // записываем данные в файл вывода данных
close(t); // закрываем файл
end.