П`ятниця, 19.04.2024, 23:52
Головна Реєстрація RSS
Вітаю Вас, Гість
Наше опитування
Оцініть мій сайт
Всього відповідей: 68

13 жовтня 2010-2011 н.р. в кабінеті інформатики нашої школи відбулася шкільна олімпіада з інформатики.

Завдання для 9 класу

1. Два прямокутники (10 балів). Задано два прямокутники. Написати програму two_rec.*, яка визначить, чи вони співпадають.

Вхідні дані. Вхідний текстовий файл two_rec.dat містить в єдиному рядку чотири цілих числа (розділених один від одного одним пропуском), спочатку довжина a і ширина b першого прямокутника, а потім довжина с і ширина d другого прямокутника (1≤a,b,c,d≤100).

Вихідні дані. Вихідний текстовий файл two_rec.sol містить в єдиному рядку повідомлення «yes», якщо дані прямокутники співпадають, або «not», якщо дані прямокутники не співпадають.

Приклади файлів

two_rec.dat
4 2 2 4

two_rec.sol
yes

Рішення: програма на мові програмування Turbo Pascal 7.0
var f: text;
    a,b,c,d: integer;
begin
  assign(f,'two_rec.dat');
  reset(f);
  read(f,a,b,c,d);
  close(f);
  assign(f,'two_rec.sol');
  rewrite(f);
  if ((a=c)and(b=d))or((b=c)and(a=d)) then write(f,'yes')
                                      else write(f,'not');
  close(f);
end.
Завантажити умову задачі, рішення та тести (14,1 Кб)

2. Квадрати (30 балів). На листу паперу зображено прямокутник розміром a x b квадратів. Деякі квадрати прямокутника зафарбували. Написати програму squares.*, яка обчислить кількість не зафарбованих квадратів.

Вхідні дані. Вхідний текстовий файл squares.dat містить у першому рядку через пропуск два цілих числа a – кількість рядків та b – кількість стовпців (1≤a,b≤10). Наступні а рядків містять b цілих чисел 0 і 1 через пропуск, де 0 – не зафарбований квадрат, 1 – зафарбований квадрат.

Вихідні дані. Вихідний текстовий файл squares.sol містить одне число, кількість не зафарбованих квадратів.



Приклади файлів

squares.dat
4 5
0 1 0 0 1
0 0 1 0 0
0 1 0 0 0
0 0 0 0 1

squares.sol
15

Рішення: програма на мові програмування Turbo Pascal 7.0
 
var f: text;
    a,b,i,j,s: byte;
    x: array[1..10,1..10] of byte;
begin
    assign(f,'squares.dat');
     reset(f);
     readln(f,a,b);
     s:=0;
     for i:=1 to a do
     begin
     for j:=1 to b do
     begin
         read(f,x[i,j]);
         if x[i,j]=0 then inc(s);
     end;
     readln(f);
     end;
     close(f);
     assign(f,'squares.sol');
     rewrite(f);
     write(f,s);
     close(f);
end.
Завантажити умову задачі, рішення та тести (14,1 Кб)

3. Двійкові числа (40 балів). Написати програму binary.*, яка в заданому двійковому числі, в якому кількість цифр більше 1 і менше 78, і хоча б одна цифра 0, замінює всі цифри 0 на 1 і навпаки. Якщо старшими цифрами отриманого двійкового числа стануть цифри 0, то ними знехтувати.

Вхідні дані. Вхідний файл binary.dat в єдиному рядку містить двійкове число.

Вихідні дані. Вихідний файл binary.sol в єдиному рядку містить отримане за вказаним правилом нове двійкове число.

Приклади файлів

binary.dat
11001011

binary.sol
110100

Рішення: програма на мові програмування Turbo Pascal 7.0
var f: text;
 i,n,k: integer;
 x: string;
label 1;
begin
 assign(f,'binary.dat');
 reset(f);
 read(f,x);
 close(f);
 assign(f,'binary.sol');
 rewrite(f);
 n:=length(x);
 for i:=1 to n do
 begin
 if x[i]='1' then begin
 x[i]:='0';
 goto 1;
 end;
 if x[i]='0' then begin
 x[i]:='1';
 goto 1;
 end;
1:
 end;
 k:=0;
 for i:=1 to n-1 do
 if x[i]='0' then k:=k+1
 else break;
 delete(x,1,k);
 write(f,x);
 close(f);
end.
Завантажити умову задачі, рішення та тести (12,5 Кб)


Завдання для 10 класу

1. Три прямокутники (10 балів). Задано три прямокутники. Написати програму three.*, яка визначить, чи можна з двох перших прямокутників скласти третій прямокутник.

Вхідні дані. Вхідний текстовий файл three.dat містить в єдиному рядку шість цілих числа (розділених один від одного одним пропуском), спочатку довжина a і ширина b першого прямокутника, потім довжина с і ширина d другого прямокутника і наостанок - довжина x і ширина y третього прямокутника (1 ≤ a,b,c,d,x,y ≤ 100).

Вихідні дані. Вихідний текстовий файл three.sol містить в єдиному рядку повідомлення «yes», якщо з перших двох прямокутників можна скласти третій прямокутник, або «not», якщо з перших двох прямокутників не можна скласти третій прямокутник.

Приклади файлів
three.dat three.sol
1 5 3 5 4 5 yes
Рішення: програма на мові програмування Turbo Pascal 7.0
var f: text;
 a,b,c,d,x,y: integer;
begin
 assign(f,'three.dat');
 reset(f);
 read(f,a,b,c,d,x,y);
 close(f);
 assign(f,'three.sol');
 rewrite(f);
 if ((a+c=x)and(b=d)and(d=y))or
 ((b+c=x)and(a=d)and(d=y))or
 ((a+d=x)and(b=c)and(c=y))or
 ((a+c=y)and(b=d)and(d=x))or
 ((b+d=x)and(a=c)and(c=y))or
 ((a+d=y)and(b=c)and(c=x))or
 ((b+c=y)and(a=d)and(d=x))or
 ((b+d=y)and(a=c)and(c=x))
 then write(f,'yes')
 else write(f,'not');
 close(f);
end.
Завантажити умову задачі, рішення та тести (15,6 Кб)

2. Шифрувальник (30 балів). Написати програму code.*, що замінює в заданому тексті кожну його літеру наступною по порядку в абетці. Останню літеру абетки необхідно замінити першою. У даному тексті використовуються тільки малі латинські літери (довжина тексту більша 0 і менша 78).

Вхідні дані: Вхідний файл code.dat містить в єдиному рядку даний текст.

Вихідні дані: Вихідний файл code.sol містить в єдиному рядку зашифрований текст.

Приклад:
code.dat code.sol
abbad bccbe
Рішення: програма на мові програмування Turbo Pascal 7.0
var f: text;
 n,i,j,c: integer;
 z: char;
 x,y: string;
begin
 assign(f,'code.dat');
 reset(f);
 read(f,x);
 close(f);
 assign(f,'code.sol');
 rewrite(f);
 y:='';
 n:=length(x);
 for i:=1 to n do
 if x[i]<>'z' then begin
 c:=ord(x[i]);
 z:=chr(c+1);
 y:=y+z;
 end
 else y:=y+'a';
 write(f,y);
 close(f);
end.

Завантажити умову задачі, рішення та тести (12,8 Кб)

3. Цифри (40 балів). Петрик задумав деяке натуральне трицифрове число N (100 ≤ N ≤ 999). Він склав цифри цього числа та помножив отриману суму на задане натуральне число K (2 ≤ K ≤ 100). Число, що утворилося в результаті, дорівнює початковому. Написати програму digits.*, яка визначить, яке число задумав Петрик.

Вхідні дані. Вхідний файл digits.dat містить в єдиному рядку число K.

Вихідні дані. У вихідний файл digits.sol вивести число N, яке задумав Петрик. Якщо умові відповідає більш ніж одне число, вивести усі можливі варіанти: впорядковані за зростанням, кожен у своєму рядку.

Приклади файлів
digits.dat digits.sol
12 108
Рішення: програма на мові програмування Turbo Pascal 7.0
var f: text;
 k,a,b,c: integer;
begin
 assign(f,'digits.dat');
 reset(f);
 read(f,k);
 close(f);
 assign(f,'digits.sol');
 rewrite(f);
 for a:=1 to 9 do
 for b:=0 to 9 do
 for c:=0 to 9 do
 if (a+b+c)*k=100*a+10*b+c
 then writeln(f,a,b,c);
 close(f);
end.

Завантажити умову задачі, рішення та тести (12,9 Кб)


Завдання для 11 класу
1. Прямокутний трикутник (10 балів). Трикутник задано координатами (цілі числа з інтервалу [-50;50]) своїх вершин. Написати програму triangl.*, яка визначить чи є він прямокутним.

Вхідні дані. Вхідний файл triangl.dat в трьох рядках містить через пропуск по два числа – координати вершин трикутника (спочатку абсцису, а потім ординату).

Вихідні дані. У вихідний файл triangl.sol вивести цифру 1, якщо трикутник є прямокутним, а в протилежному випадку - вивести цифру 0.

Приклади файлів
triangl.dat triangl.sol
0 0 0
2 2
7 1
Рішення: програма на мові програмування Turbo Pascal 7.0
var f: text;
 xa,ya,xb,yb,xc,yc,a,b,c: integer;
begin
 assign(f,'triangl.dat');
 reset(f);
 readln(f,xa,ya);
 readln(f,xb,yb);
 read(f,xc,yc);
 close(f);
 assign(f,'triangl.sol');
 rewrite(f);
 a:=sqr(xc-xb)+sqr(yc-yb);
 b:=sqr(xa-xc)+sqr(ya-yc);
 c:=sqr(xa-xb)+sqr(ya-yb);
 if (a+b=c)or(a+c=b)or(c+b=a)
 then write(f,1)
 else write(f,0);
 close(f);
end.

Завантажити умову задачі, рішення та тести (14,4 Кб)

2. Точки кола (30 балів). На декартовій системі координат дано коло з центром у точці (x;y) та радіусом R, де x, y, R – дійсні числа, які належать інтервалу [-50,50]. Написати програму dekart.*, яка визначить кількість N точок з цілочисловими координатами, що потрапили в середину кола (враховуючи точки, які лежать на колі).
Вхідні дані. Вхідний файл dekart.dat в єдиному рядку містить через пропуск три числа x, y, R.

Вихідні дані. У вихідний dekart.sol файл вивести в єдиний рядок число N.

Приклади файлів
dekart.dat dekart.sol
0 0 1 5
Рішення: програма на мові програмування Turbo Pascal 7.0
var f: text;
 i,j,N: integer;
 x,y,R: real;
label 1;
begin
 assign(f,'dekart.dat');
 reset(f);
 read(f,x,y,R);
 close(f);
 assign(f,'dekart.sol');
 rewrite(f);
 N:=0;
 for i:=-100 to 100 do
 for j:=-100 to 100 do
 if sqr(x-i)+sqr(y-j)<=sqr(R)
 then inc(N);
 write(f,N);
 close(f);
end.
Завантажити умову задачі, рішення та тести (14,4 Кб)

3. Спільні літери (40 балів). Дано два слова (слово – це текст, що не містить пропусків). В обох словах використовуються тільки малі латинські літери і кількість літер в обох словах більше 0 і менше 78. Написати програму general.*, яка визначить літери, які є спільними для обох слів.

Вхідні дані. Вхідний файл general.dat в двох рядках містить по одному слову.

Вихідні дані. У вихідний файл general.sol вивести в єдиний рядок літери, які є спільними для обох слів. Якщо таких немає, то вивести повідомлення «general liter is not».

Приклади файлів
general.dat general.sol
sawerad ae
eaklae 
Рішення: програма на мові програмування Turbo Pascal 7.0
var f: text;
 i,j,n: integer;
 x,y,z: string;
 p: boolean;
label 1;
begin
 assign(f,'general.dat');
 reset(f);
 readln(f,x);
 read(f,y);
 close(f);
 assign(f,'general.sol');
 rewrite(f);
 z:='';
 for i:=1 to length(x) do
 begin
 for j:=1 to length(y) do
 if x[i]=y[j] then
 begin
 p:=false;
 for n:=1 to length(z) do
 if x[i]=z[n] then p:=true;
 if p=false then z:=z+x[i];
 goto 1;
 end;
1:end;
 if length(z)=0
 then write(f,'general liter is not')
 else write(f,z);
 close(f);
end.
Завантажити умову задачі, рішення та тести (12,9 Кб)

Наверх