double arrow

Площади покрытия антенны

 

В настоящее время мобильная связь получила достаточно широкое распространение в мире. Но бывают случаи, когда сигнал с базовой антенны пропадает, чаще всего это происходит, если Вы находитесь в движении, т.е. например, передвигаетесь на автомобиле. Недоступность базовой антенны оператора мобильной связи связаны с рельефом местности и радиусом действия самой антенны, проще говоря, площадью покрытия антенны.

Задание. Вычислить площадь покрытия для антенны, если известен радиус действия радиопередающего устройства, не превышающий 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.

 

Элементы лексического и синтаксического разбора

Шифровка

Группа мальчишек играла во дворе в разведчиков. Чтобы передать, друг другу шифровки, дети использовали несложный шифр. Они оставляли в секретных местах листовки с написанным текстом. Зашифрованное слово должно было содержать отсутствующие в тексте буквы латинского алфавита.

Задание. Напишите программу, которая определяет, какие именно латинские буквы отсутствуют в исходном тексте.

Входные данные. В единственной строке входного файла SHIFR.TXT находятся заглавные буквы латинского алфавита. Количество букв в строке не более 255.

Выходные данные. Выходной файл OUTSHIFT.TXT должен содержать 1 строку латинских букв. Каждая буква повторяется единожды.

Пример входных и выходных данных:

SHIFR.TXT OUTSHIFR.TXT
QJZWSXEDCFTGBYHNUMIK ALOPRV

Шифровка

Решение

Задача заключается в том, чтобы определить какие из заглавных букв латинского алфавита не встречаются в тексте.

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

Множество букв представим типом chars = set of char. Множество букв, которые встречаются в тексте, получим путём добавления каждой прочитанной буквы к множеству, а множество оставшихся букв (absend) – как разницу между множествами всех латинских букв (lats) и букв первого множества (present). Образование множества латинских букв текста оформим процедурой textLets. Перебор и печать символов, не принадлежащих множеству present, оформим процедурой writeSet.

program shifrovka;

type chars = set of char; //объявление типа множества

procedure textLets(var st: chars; const GlobSet: chars); //процедура формирования множества латинских букв текста

var f: text; c: char;

begin

assign(f,'SHIFR.txt'); //назначение входящей файловой переменной

reset(f); //открытие файла для чтения

st:=[]; //начальное значение символьного множества

while not eof(f) do begin //пока не достигнет конца входящего файла

read (f,c); //читаем содержимое входящего файла

if c in GlobSet then st:=st+[c];

end;

close(f);

end;

procedure writeSet(const st:chars); //формирование процедуры перебора и печати множества букв

var f1:text; c:char;

begin

assign(f1, 'OUTSHIFR.txt'); //назначение файловой переменной

rewrite (f1); //открываем файл в режиме замещения существующего

for c:=#0 to #255 do

if c in st then write (f1,c);

close(f1); //закрываем файл

end;

const lats:chars=['A'..'Z']; //задаём все заглавные латинские буквы

var present, absend: chars;

begin

textLets (present, lats); //вызов процедуры формирования 1-го множества

absend:=lats-present; //поиск множества букв не входящих в 1-е множество

writeSet(absend); //вызов процедуры перебора и печати символов 2-го множества

end.

Сортировка и поиск

Независимые судьи

В некоторых видах спортивных соревнований выступление каждого спортсмена оценивается независимо несколькими судьями, потом из этой совокупности оценок удаляется наибольшая и наименьшая, а для тех оценок, что остались, определяется среднее арифметическое, которое идет в зачёт спортсмену. Если наибольшую оценку выставило несколько судей, то из совокупности оценок удаляется только одна такая оценка (аналогично поступают с наименьшими оценками).

Пусть n (n ≥ 3) судей выставили одному из спортсменов соответственно оценки: а1, а2, …, аn. Определить, какая итоговая оценка пойдёт спортсмену в зачёт.

Во входном файле input.txt в первой строке дано количество судей n, во второй – баллы первого судьи, в третьей – баллы второго судьи и т. д., в n+1 строке – баллы n-го судьи. В выходном файле output.txt содержится одно число – итоговая оценка спортсмена.

 

Пример входного и выходного файлов

input.txt output.txt
  19.5

 

Независимые судьи

Решение

program sport;

var n, i, max, min, s:integer;

a:array[1..100] of integer;

sr: real;

f, g: text;

begin

assign (f,'input.txt');

assign (g,'output.txt');

reset (f);

readln (f, n); //чтение из файла количества судей

for i:=1 to n do

readln (f, a[i]); //чтение из файла оценок судей

close (f);

max:=a[1];

min:=a[1];

for i:=2 to n do

begin

if a[i]>=max then max:=a[i]; //нахождение max и min оценок

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

end;

s:=0;

for i:=1 to n do

begin

s:=s+a[i]; //нахождение суммы всех оценок

end;

s:=s-max-min; //изымание max и min оценок из общей суммы

sr:=s/(n-2); //нахождение среднего арифметического оценок

rewrite (g);

writeln (g, sr);

close (g);

end.

 

 

Длинная арифметика

 

Сувениры

 

Два брата-путешественника независимо друг от друга совершили кругосветное путешествие. Они посетили не менее 10 и не более 500 населенных пунктов, и в каждом населенном пункте могли купить сувениры (не более 9). Встретившись, каждый из братьев записал в файл data.txt строку со своим числом, каждая цифра которого означала количество сувениров, купленных в отдельном населенном пункте.

Задание. Помогите братьям найти сумму полученных таким образом чисел и записать ее в выходной файл sum.txt.

 

Примеры входного и выходного файлов

data.txt sum.txt
   

 

Сувениры

Решение

program files1;

type mass=array [1..500] of integer;

var f1, f2: text; s, q, t, d, y: string; a, b, c: mass; i, n, k, r, max, p: integer;

begin

assign (f1,'data.txt'); //связь файловой переменной с входным файлом

reset (f1);

readln (f1, s); // считывание первого слагаемого в виде строки символов

readln (f1, q); // считывание второго слагаемого в виде строки символов

n:=length (s); //длина первого числа

// каждый символ первого числа превращается в цифру (числовой формат) и записывается в массив а, причем самый правый символ – младший разряд числа
for i:= n downto 1 do

begin

t:=copy (s, i, 1);

val (t, r);

a[n-i+1]:= r;

end;

// каждый символ второго числа превращается в цифру (числовой формат) и записывается в массив b, причем самый правый символ – младший разряд числа
k:=length (q); // длина второго числа

for i:=k downto 1 do

begin

t:=copy (q, i, 1);

val (t, r);

b[k-i+1]:=r;

end;

close (f1); // закрываем файловую переменную

// определяем размер массива, в котором будет храниться сумма чисел
if n>k then max:=n else max:=k;

 

 

// р – сумма цифр соответствующих разрядов

p:=0;

for i:=1 to max do

// формирование цифр в числе-сумме с учетом перехода через десяток
begin

p:=a[i]+b[i]+p div 10;

c[i]:=p mod 10;

end;

// //массив с результатом преобразуется в строковую переменную у и посимвольно накапливается в строке d таким образом, чтобы слева начинались старшие разряды суммы
if p>=10 then c[max]:=c[max]+10; // учитывается, что сумма старших разрядов может быть больше 9, поэтому первая цифра в результате – 1.

for i:=max downto 1 do

begin str(c[i],y); d:=d+y end;

 

 

assign (f2,'sum.txt'); // файловая переменная связывается с выходным файлом

rewrite (f2); // подготовка выходного файла для записи

write (f2,d); // запись результата в выходной файл

close (f2); // закрытие выходного файла

end.

Метод перебора вариантов

Треугольник

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

На плоскости даны n точек и их координаты: x1, y1, x2,y2, ….. xn, yn.

Найти наибольшую площадь треугольника по координатам трех произвольных точек плоскости. Во входном файле input.txt в первой строке дано количество точек n (натуральное число n ≤ 1000), во второй – координаты первой точки x1, y1, в третьей – x2, y2, и т. д. в n+1 строке координаты n-й точки xn, yn (координаты – действительные числа). В выходном файле output.txt содержится одно число (действительное) – площадь треугольника.

Примеры входного и выходного файлов

input.txt output.txt
1 1 2 2 4 1 1 4 2 3 4.5000000000E+00

 

 

Треугольник

Решение

s – искомая площадь, s 1 – площадь треугольника образованного тремя произвольными точками из данного множества

Массивы х и у содержат координаты точек

program ploschad;

var n, i, j, k: integer;

x: array [1..1000] of real;

y: array [1..1000] of real;

s, s1: real;

f, g: text;

Begin

assign (f,’input.txt’);

assign (g,’output.txt’);

reset (f);

readln (f, n); // чтение из файла количества точек

for i:=1 to n do

readln (f, x[i], y[i]); //чтение координат точек, запись их в массив

s:=0; close (f);

for i:=1 to n do //перебор всех точек по три

for j:=2 to n do

for k:=3 to n do

begin

s1:=0.5*abs(x[i]*(y[j]-y[k])+x[j]*(y[k]-y[i])+x[k]*(y[i]-y[j])); //вычисление площади по координатам его вершин

if s1>s then s:=s1; //выбор наибольшей площади

end;

rewrite(g);

writeln(g,s); //запись в файл

close(g);

End.

 


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



Сейчас читают про: