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

Олимпиады на Turbo Pascal'е

  Все выпуски  

Turbo Pascal для школьников Выпуск N16


Информационный Канал Subscribe.Ru


Turbo Pascal для школьников

Выпуск №16
Перейти в архив>>

   Здравствуйте, уважаемые подписчики!!!
Этот выпуск я хочу начать не с разбора домашней задачи (как обычно), а с опубликования правил проведения мною турнира по решению задач (помните, в 14 выпуске я уже упоминал об этом великом событии?). Итак, Турнир. Первоначально у всех подписчиков рассылки "Turbo Pascal для школьников" на "счету" 0 очков. В конце каждого выпуска я публикую условие домашней задачи (а после него - турнирную таблицу, более подробней о ней мы поговорим позже). Далее, люди, которые хотят принимать участие в этом турнире, высылают мне свои решения данной задачи или просьбу объяснить, как её решать (в рассылке публиковать решение задачи я не буду!!!). Все решения можно присылать лишь до следующего выпуска. Каждый новый выпуск обычно выходит в 00:00 часов в среду и в воскресенье. Как только человек присылает мне своё решение, информация о нём автоматически заносится в базу данных участников турнира, но если он не учавствует в турнире более 2-х недель, то он оттуда удаляется и все его очки обнуляются. За каждую задачу вообще будет даваться по 10 очков, но человек, который пришлёт её раньше всех (т. е. первый) получит 20 очков, а второй - очков в результате, у нас уже после первой же задачи появятся лидеры. Итак, в конце рассылки, после прочтения условия очередной домашней задачи, Вы сможете увидеть турнирную таблицу. Она будет представлять собой таблицу, состоящую из 3-х строк (не считаю заголовка) - первое, второе, третье место на данный момент. Столбцы данной таблицы будут включать в себя информацию об игровом нике человека, кол-ве набранных очков, кол-ве решённых задач и его e-mail. В конце каждого месяца, помимо публикования ежевыпускной турнирной таблицы, я буду публиковать отдельно информацию о победителе. Сюда могут входить номера ICQ, адрес web-сайта, различная информация, которую придумает сам победитель. Для того, чтобы получить от него эту информацию, я, буду посылать ему запрос в конце месяца на эту информацию (он может написать о себе что угодно) и в первом выпуске месяца она будет публиковаться. Ну вот в принципе об условиях турнира и всё. Теперь осталось упомянуть о формате писем. Если Вы присылаете мне решение задачи, то оно должно быть набрано в файле с расширением .pas и вложено (прикреплено) к сообщению. Текст самого сообщения может содержать Ваши пояснее по поводу вашего решения. Интересные решения также будут поощряться пятью очками. Если же Вам не понятно, как решается данная задача, то напишите, что именно у Вас вызывает затруднение и тогда в личной переписке (если писем будет очень много, то я опубликую в рассылке своё решение, но это будет уж очень, как я надеюсь, редко) я отвечу на Ваш вопрос и может быть пришлю Вам моё решение с подробным пояснение, но это будет очень редко. Вы должны сами пытаться решать задачи, чтобы научиться чему-нибудь, а я буду лишь помогать, но не решать за Вас. Теперь, я надеюсь, Вам стало понятно, в чём смысл в этом турнире и Вы буду принимать активное участие в нём.

   Теперь приведу Вам решение домашней задачи (последний раз) - Шифра Цезаря:

{"Шифр Цезаря"}
const
 sr1:string = ('АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ');
 sr2:string = ('абвгдежзийклмнопрстуфхцчшщъыьэюя');
 se1:string = ('ABCDEFGHIJKLMNOPQRSTUVWXYZ');
 se2:string = ('abcdefghijklmnopqrstuvwxyz');
var
 i,k,n : integer;
 s1,s2:string;
begin
 write ('Введите ключ шифра: ');
 readln (i);
 writeln ('Введите строку, которую необходимо закодировать:');
 readln (s1);
 writeln ('Введите строку, которую необходимо декодировать:');
 readln (s2);
 n:=1;
 while n <= length (s1) do
  begin
   k:=0;
   k:= pos (s1[n],sr1);
   if k>0 then begin
    k:=k+i;
    while k>32 do k:= k-32;
    s1[n]:=sr1[k];  end
   else begin
    k := pos (s1[n],sr2);
   if k > 0 then begin
    k:=k+i;
    while k>32 do k:=k-32;
    s1[n]:=sr2[k]; end
   else
    begin
     k := pos (s1[n],se1);
     if k > 0 then begin
      k:=k+i;
      while k>26 do k:=k-26;
      s1[n]:=se1[k]; end
   else
    begin
     k := pos (s1[n],se2);
     if k > 0 then begin
      k:=k+i;
      while k>26 do k:=k-26;
      s1[n]:=se2[k];
     end; end; end; end;
 n:=n+1;
 end;
 n:=1;
 while n <= length (s2) do begin
  k:=0;
  k:= pos (s2[n],sr1);
  if k>0 then begin
   k:=k-i;
   while k<=0 do k:=32+k;
   s2[n]:=sr1[k]; end
  else begin
   k := pos (s2[n],sr2);
   if k > 0 then begin
    k:=k-i;
    while k<=0 do k:=32+k;
    s2[n]:=sr2[k]; end
   else
  begin
   k := pos (s2[n],se1);
   if k > 0 then begin
    k:=k-i;
    while k<=0 do k:=26+k;
    s2[n]:=se1[k]; end
  else
  begin
   k := pos (s2[n],se2);
   if k > 0 then begin
    k:=k-i;
    while k<=0 do k:=26+k;
    s2[n]:=se2[k];
   end;  end; end; end;
 n:=n+1;
 end;
 writeln (s1);
 writeln (s2);
 readln;
end.
Решение получилось длинноватым, но ничего, зато работем правильно и быстро. Будут вопросы, пишите.

   Сегодня вообще выпуск получился несколько длинноватым и из-за описания турнира и из-за этой домашней задачи, так что обещанную работу с файлами я откладываю до следующего выпуска, а сейчас только опубликую условие новой домашней задачи, с которой и начинается наш с Вами турнир:
Некоторое количество клеток на клетчатой доске размером M*N занято фишками. Создать программу поиска одного из квадратов максимальной площади, целиком состоящего из незанятых клеток, и получить размер и координаты вершин. На входе подаётся размер матрицы и её значения (0 - клетка пуста; 1 - занята фишкой). На выходе выводится длина стороны квадрата и координаты его вершин. Пример:
input:
4 5
1 1 0 0 0
1 0 0 0 0
1 1 0 1 0
1 1 1 1 0

Output:
2
1,3
1,4
2,3
2,4

   Ну вот и всё. Желаю удачи и ещё раз призываю Вас, уважаемые подписчики, принять участие в нашем турнире.

На сегодня это всё. Пожелания и предложения пишите мне на e-mail: qsman1987@mail.ru

Рассылки Subscribe.Ru
Turbo Pascal для школьников    
   Рассылка 'Turbo Pascal для школьников'


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

В избранное