Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Олимпиадные задачи с решениями на Turbo Pascal


Служба Рассылок Subscribe.Ru

Олимпиадные задачи c решениями на Turbo Pascal

Олимпиадные задачи с решениями на Turbo Pascal


Рассылка проекта sapisoft.h1.ru [#005]


Главная О нас Программы Вакансии Документация Задачи FAQ по Delphi Ссылки

Здравствуйте!


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


Пассажиры - [1] уровень


Условие:
На конференцию приехало N человек. Для их перевоза выделили автомобили вместимостью K и M человек (без водителя). К гостинице автомобили подаются в таком порядке: сначала вместимостью K человек, потом - M человек, после этого опять - K человек, потом M человек и так далее. В автомобиле можно перевозить не более максимально допустимого количества пассажиров. Определить, сколько необходимо автомобилей для перевозки всех делегатов конференции.


Технические условия:
Программа должна читать исходные данные из файла input.txt, первая строка которого содержит количество делегатов, а вторая и третья - числа K и M. В файл output.txt должно выводиться количество машин, необходимых для перевозки всех делегатов.


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

Input.txt

Output.txt

20
3
4
6
12
2
2
6
25
5
5
5
100
2
1
67

Решение:
Идея решения. До тех пор, пока число делегатов не будет равно нулю (пока всех не увезут), отнимаем от числа N число K, затем число M, и так далее...

var
n,k,m:integer;i:integer;f:text;
begin
assign(f,'input.txt');
reset(f);
read(f,n);
read(f,k);
read(f,m);
close(f);
i:=0;
while N>0 do begin
i:=i+1;
if i mod 2<>0 then n:=n-k else N:=N-M;end;
assign(f,'output.txt');
rewrite(f);
writeln(F,i);
close(f);
end.


Простые числа - [2] уровень


Условие:
Определите, какая из цифр в десятичной записи всех простых чисел из заданного диапазона встречается чаще всего. Если таких цифр несколько, найдите наименьшую из них.


Технические условия:
Ваша программа должна считать исходные данные из файла "input.txt". В первой строке этого файла находится число A, во второй - число B. Числа A и B - целые, (1<A<B<10000). Ваша программа должна решить задачу для интервала A<=P<=B. Известно, что в этом интервале имеется хотя бы одно простое число. Ваша программа должна записать найденную цифру в файл "output.txt".


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

Input.txt

Output.txt

10
20
1

Решение:
var
a,b,i,max,maxn:integer;
n:array [1..10] of integer;
f:text;
procedure add(i:integer);
var s:string;p,code,x:integer;
begin
str(i,s);
for p:=1 to length(s) do begin
val(s[p],X,code);
inc(n[X+1]);
end;
end;
function prost(i:integer):boolean;
var j:integer;
begin
for j:=2 to (i-1) do if (i mod j=0) then if i<>2 then prost:=false;
end;
begin
assign(f,'input.txt');
reset(f);
readln(f,a);readln(f,b);
close(f);
for i:=a to b do if prost(i) then add(i);
max:=0;
for i:=10 downto 1 do begin if n[i]>= max then begin max:=n[i];maxn:=i-1;end;end;
assign(f,'output.txt');
rewrite(f);
write(f,maxn);
close(f);
end.


Площадь треугольника - [3] уровень


Условие:
Три непараллельные прямые заданы коэффициентами a, b и c. Коэффициенты а и b не могут быть одновременно равны нулю. Определить площадь
треугольника, образованного этими прямыми с точностью до трёх знаков после запятой.

Технические условия:
В файле "input.txt" находятся коэффициенты a,b и c для трёх прямых - потри в каждой строке. В файл "output.txt" нужно вывести единственное число - значение площади образованного треугольника.

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

Input.txt

Output.txt

0 1 1
1 0 1
4 3 19
6.000
1 0 0
0 1 0
1 1 2
2.000
1 -1 0
1 0 6
1 -2 0
9.000
-1 1 1
1 -2 -2
0 1 4
4.500
1 -1 -1
2 -1 -1
1 2 17
7.500

Решение:
var
a1,a2,a3:integer;
b1,b2,b3:integer;
c1,c2,c3:integer;
x1,x2,x3:real;
y1,y2,y3:real;
s,d1,d2,d3,p:real;
f:text;
begin
assign(f,'input.txt');
reset(f);
read(f,a1,b1,c1);
read(f,a2,b2,c2);
read(f,a3,b3,c3);
close(f);
{Находим координаты пересечения прямых 1 и 2 в общем и частных случаях}
if (a1<>0) and (b1<>0) and (a2<>0) and (b2<>0) then begin
y1:=(c2*a1-a2*c1)/(a1*b2-a2*b1);x1:=(c1-b1*y1)/a1;end;
if (a1=0) and (b1<>0) and (a2<>0) and (b2<>0) then begin
y1:=c1/b1;x1:=(c2*b1-b2*c1)/(a2*b1);end;
if (a1<>0) and (b1=0) and (a2<>0) and (b2<>0) then begin
x1:=c1/a1;y1:=(a1*c2-a2*c1)/(a1*b2);end;
if (a1<>0) and (b1<>0) and (a2=0) and (b2<>0) then begin
y1:=c2/b2;x1:=(b2*c1-b1*c2)/(a1*b2);end;
if (a1<>0) and (b1<>0) and (a2<>0) and (b2=0) then begin
x1:=c2/a2;y1:=(a2*c1-a1*c2)/(a2*b1);end;
if (a1=0) and (b1<>0) and (a2<>0) and (b2=0) then begin
y1:=c1/b1;x1:=c2/a2;end;
if (a1<>0) and (b1=0) and (a2=0) and (b2<>0) then begin
y1:=c2/b2;x1:=c1/a1;end;
{Находим координаты пересечения прямых 2 и 3 в общем и частных случаях}
if (a2<>0) and (b2<>0) and (a3<>0) and (b3<>0) then begin
y2:=(c3*a2-a3*c2)/(a2*b3-a3*b2);x2:=(c2-b2*y2)/a2;end;
if (a2=0) and (b2<>0) and (a3<>0) and (b3<>0) then begin
y2:=c2/b2;x2:=(c3*b2-b3*c2)/(a3*b2);end;
if (a2<>0) and (b2=0) and (a3<>0) and (b3<>0) then begin
x2:=c2/a2;y2:=(a2*c3-a3*c2)/(a2*b3);end;
if (a2<>0) and (b2<>0) and (a3=0) and (b3<>0) then begin
y2:=c3/b3;x2:=(b3*c2-b2*c3)/(a2*b3);end;
if (a2<>0) and (b2<>0) and (a3<>0) and (b3=0) then begin
x2:=c3/a3;y2:=(a3*c2-a2*c3)/(a3*b2);end;
if (a2=0) and (b2<>0) and (a3<>0) and (b3=0) then begin
y2:=c2/b2;x2:=c3/a3;end;
if (a2<>0) and (b2=0) and (a3=0) and (b3<>0) then begin
y2:=c3/b3;x2:=c2/a2;end;
{Находим координаты пересечения прямых 1 и 3 в общем и частных случаях}
if (a1<>0) and (b1<>0) and (a3<>0) and (b3<>0) then begin
y3:=(c1*a3-a1*c3)/(a3*b1-a1*b3);x3:=(c3-b3*y3)/a3;end;
if (a1=0) and (b1<>0) and (a3<>0) and (b3<>0) then begin
y3:=c1/b1;x3:=(c3*b1-b3*c1)/(a3*b1);end;
if (a1<>0) and (b1=0) and (a3<>0) and (b3<>0) then begin
x3:=c1/a1;y3:=(a1*c3-a3*c1)/(a1*b3);end;
if (a1<>0) and (b1<>0) and (a3=0) and (b3<>0) then begin
y3:=c3/b3;x3:=(b3*c1-b1*c3)/(a1*b3);end;
if (a1<>0) and (b1<>0) and (a3<>0) and (b3=0) then begin
x3:=c3/a3;y3:=(a3*c1-a1*c3)/(a3*b1);end;
if (a1=0) and (b1<>0) and (a3<>0) and (b3=0) then begin
y3:=c1/b1;x3:=c3/a3;end;
if (a1<>0) and (b1=0) and (a3=0) and (b3<>0) then begin
y3:=c3/b3;x3:=c1/a1;end;
{Вычисляем длины трёх сторон треугольника}
d1:=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
d2:=sqrt((x2-x3)*(x2-x3)+(y2-y3)*(y2-y3));
d3:=sqrt((x1-x3)*(x1-x3)+(y1-y3)*(y1-y3));
{Находим полупериметр}

p:=(d1+d2+d3)/2;
{По формуле Герона вычисляем площадь}

S:=sqrt(p*(p-d1)*(p-d2)*(p-d3));
assign(f,'output.txt');
rewrite(f);
writeln(f,s:0:3);
close(f);
end.


Всегда рады видеть Вас на нашем сайте. Жду ваших предложений и замечаний, Шамис Алексей

Copyright © 2001-2002 by Shamis Alex.



http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное