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

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


Служба Рассылок Subscribe.Ru
Олимпиадные задачи c решениями на Turbo Pascal

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


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


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

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


  В жизни рассылки произошло знаменательное событие. 11 января её включили в каталог на Subscribe.ru. В связи с этим резко возросло число подписчиков, и у меня будет теперь ещё больший стимул рассылать вам только качественные и ценные материалы.
  Информация для новичков. В каждом номере рассылки публикуются три задачи с решениями на
Turbo Pascal - для начинающих, для среднего уровня, и одна сложная олимпиадная задача. Вы можете пополнять нашу "задачную" базу, присылая свои задачи с решениями на Turbo Pascal.


Положительная сумма - [1] уровень


Условие:
Написать программу, которая по заданным трем числам определяет, является ли сумма каких-нибудь двух из них положительной.


Решение:
var
a,b,c:real;x:boolean;
begin
write('Введите три числа:');
readln(a,b,c);
if a+b>0 then begin writeln('Сумма чисел ',a:1:0,' и ',b:1:0,' положительна!');x:=true;end;
if b+c>0 then begin writeln('Сумма чисел ',b:1:0,' и ',c:1:0,' положительна!');x:=true;end;
if a+c>0 then begin writeln('Сумма чисел ',a:1:0,' и ',c:1:0,' положительна!');x:=true;end;
if x=false then writeln('Положительная сумма не найдена!');
readln;
end.

Магические квадраты - [2] уровень


Условие:
Магическим называется квадрат, в котором сумма чисел по всем горизонталям, вертикалям и диагоналям совпадает. Найти все магические квадраты 3х3 составленые из девяти цифр (1..9).


Пример:

2 7 6
9 5 1
4 3 8

Решение:
label
l1,l2,l3,l4,l5,l6,l7,l8;
var
a1,a2,a3,a4,a5,a6,a7,a8,a9,x,n:integer;
begin
writeln('Поиск магических квадратов 3*3...');
for a1:=1 to 9 do begin
for a2:=1 to 9 do begin
for a3:=1 to 9 do begin
for a4:=1 to 9 do begin
for a5:=1 to 9 do begin
for a6:=1 to 9 do begin
for a7:=1 to 9 do begin
for a8:=1 to 9 do begin
for a9:=1 to 9 do begin
if (a9=a8) or (a9=a7) or (a9=a6) or (a9=a5) or (a9=a4) or (a9=a3) or (a9=a2) or (a9=a1) then goto l1;
if (a8=a7) or (a8=a6) or (a8=a5) or (a8=a4) or (a8=a3) or (a8=a2) or (a8=a1) then goto l2;
if (a7=a6) or (a7=a5) or (a7=a4) or (a7=a3) or (a7=a2) or (a7=a1) then goto l3;
if (a6=a5) or (a6=a4) or (a6=a3) or (a6=a2) or (a6=a1) then goto l4;
if (a5=a4) or (a5=a3) or (a5=a2) or (a5=a1) then goto l5;
if (a4=a3) or (a4=a2) or (a4=a1) then goto l6;
if (a3=a2) or (a3=a1) then goto l7;
if (a2=a1) then goto l8;
x:=a1+a2+a3;
if (a4+a5+a6=x) and (a7+a8+a9=x) and (a1+a4+a7=x) and (a2+a5+a8=x) and
(a3+a6+a9=x) and (a1+a5+a9=x) and (a3+a5+a7=x)
then
begin
n:=n+1;
writeln('Квадрат ',n);
writeln(a1,' ',a2,' ',a3);
writeln(a4,' ',a5,' ',a6);
writeln(a7,' ',a8,' ',a9);
readln;
end;
l1:end;l2:end;l3:end;l4:end;l5:end;l6:end;l7:end;l8:end;end;
end.


Крестики-нолики - [3] уровень


Условие:
Игра в крестики-нолики ведётся на квадратном поле 3х3. Играют двое. Начинают "крестики". Каждый из игроков, поочерёдно, ставит свой значок, крестик или нолик, на свободную клетку. Выигрывает тот, кто первым поставит три своих значка вряд по вертикали, горизонтали или диагонали.
Задаётся последовательность ходов. Определить, кто выиграл, "крестики" или "нолики"?

Технические условия:
Последовательность ходов задаётся 9-значным числом. Цифра числа обозначает номер клетки хода, а порядковый номер цифры - номер хода. Клетки пронумерованы, как показано на рисунке:
7 8 9
4 5 6
1 2 3

В примере приведён один из вариантов. Очевидно, что последние два хода лишние, но они нужны для девятизначности кода позиции. Написать программу, которая читает файл INPUT.TXT, содержащий одну строку - последовательность ходов и выводит в текстовый файл OUTPUT.TXT символ "X" (большая латинская буква), если выиграли "крестики", символ "0" (цифра), если выиграли "нолики" или слово "DRAW" (ничья по-английски), если игра закончилась вничью. Правильность кода позиции проверять не надо.

Пример:

X 0 X
0 X 0
X 0 X

INPUT.TXT
123456789
OUTPUT.TXT
X

Решение:
var
str:string;f:text;A:array [1..9] of String;i:integer;

function winner:string;
begin
if (A[1]=A[2]) and (A[2]=A[3]) then begin Winner:=A[1];exit;end;
if (A[4]=A[5]) and (A[5]=A[6]) then begin Winner:=A[4];exit;end;
if (A[7]=A[8]) and (A[8]=A[9]) then begin Winner:=A[7];exit;end;
if (A[1]=A[4]) and (A[4]=A[7]) then begin Winner:=A[1];exit;end;
if (A[2]=A[5]) and (A[5]=A[8]) then begin Winner:=A[2];exit;end;
if (A[3]=A[6]) and (A[6]=A[9]) then begin Winner:=A[3];exit;end;
if (A[1]=A[5]) and (A[5]=A[9]) then begin Winner:=A[1];exit;end;
if (A[3]=A[5]) and (A[5]=A[7]) then begin Winner:=A[3];exit;end;
Winner:='DRAW';
end;

begin
assign(f,'input.txt');
reset(f);
readln(f,str);
close(f);
for i:=1 to 9 do begin
if (i mod 2)=0 then begin
case Str[i] of
'1':A[1]:='0';
'2':A[2]:='0';
'3':A[3]:='0';
'4':A[4]:='0';
'5':A[5]:='0';
'6':A[6]:='0';
'7':A[7]:='0';
'8':A[8]:='0';
'9':A[9]:='0';end;end else begin
case Str[i] of
'1':A[1]:='X';
'2':A[2]:='X';
'3':A[3]:='X';
'4':A[4]:='X';
'5':A[5]:='X';
'6':A[6]:='X';
'7':A[7]:='X';
'8':A[8]:='X';
'9':A[9]:='X';END;end;
if (i=9) and (Winner='DRAW') then begin
assign(f,'Output.txt');
rewrite(f);
writeln(f,'DRAW');close(f);end;
if Winner='X' then begin
assign(f,'Output.txt');
rewrite(f);
writeln(f,'X');close(f);Exit;end;
if Winner='0' then begin
assign(f,'Output.txt');
rewrite(f);
writeln(f,'0');close(f);Exit;end;
end;
end.

Внимание! Полный список всех задач с решениями на Turbo Pascal доступен только на нашем сайте: http://sapisoft.h1.ru.


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

Copyright © 2001-2002 by Shamis Alex.




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

В избранное