Програмування 2012

На даній сторінці публікуються задачі районної олімпіади з інформатики у Косівському районі.

1. Задані день і місяць народження (dn, mn), а також поточний день, місяць і рік (dd, mm, yy). Напишіть програму, яка визначатиме, скільки днів залишилось до дня народження. Зауваження: Високосні роки - це ті, номер яких ділиться на 400, а також ті, номер яких ділиться на 4, але не ділиться на 100.
Обмеження: рік від 1920 до 3000, місяць - від 1 до 12, день - від 1 до числа днів у місяці, час виконання програми - 1 с.

Вхідні дані: ви вводите з клавіатури п’ять чисел dn, mn, dd, mm, yy.
Вихідні дані: ви виводите на екран одне число - кількість днів, що залишщилося до дня народження.
Приклад вхідних і вихідних даних
Вхід 15 8 15 12 2012        Вихід: 243

Для розв’язання даної задачі змоделюємо ситуацію, коли ми до поточної дати будемо додавати по одному дню і, одночасно, будемо рахувати кількість днів які ми додали. Для одержання правильного результату потрібно забезпечити коректний перехід між місяцями і додати один день якщо рік високосний.


program den_narod;
var
  dn,mn,dd,mm,yy,k,l:integer;
  begin
writeln('Введіть данні ');
read(dn,mn,dd,mm,yy);
 if (dn=dd) and (mn=mm) then writeln(0)
  else if (mn=mm) and (dd<dn) then writeln(l)
  else
    begin
      while mm<>mn do
        begin
        if mm>12 then begin mm:=1; yy:=yy+1; if((yy mod 4=0) or (yy mod 400=0)) and (yy mod 100>0) then k:=k+1 else k:=k-1 end;
          case mm of
          1:k:=k+31;                 //тут можна код скоротити
          2:k:=k+29;
          3:k:=k+31;
          4:k:=k+30;
          5:k:=k+31;
          6:k:=k+30;
          7:k:=k+31;
          8:k:=k+31;
          9:k:=k+30;
          10:k:=k+31;
          11:k:=k+30;
          12:k:=k+31;
          end;
          mm:=mm+1;
        end;
        writeln(k);
    end;
end.

2. На координатній площині нарисоване кільце із зовнішнім радіусом R, внутрішнім радіусом r (0<r<R<50) і центром у початку координат. Напишіть програму, що вираховуватиме кількість точок із цілочисельними координатами, які лежать в середині кільця (граничні значення не враховувати).
Вхідні дані: ви воодите з клавіатури два числа R i r.
Вихідні дані: ви виводите на екран одне число - кількість точок.


Приклад вхідних і вихідних даних
Вхід 5 3.                Вихід: 40.

Для роз’вязання цієї задачі потрібно нагадати рівняння кола. Зрозуміло, що коло буде знаходитися в квадраті із стороною 2R. З допомогою подвійного циклу перебираємо всі пари значень x i y, але рахуємо тільки ті з них, які знаходяться всередині кільця (тобто задовільняють певні умови).

program kolo;
var
  rz, rv, n, x, y: integer;
begin
  readln(rz, rv);
  for x := -rz to rz do
    for y := -rz to rz do
      if (sqr(x) + sqr(y) < sqr(rz)) and (sqr(x) + sqr(y) > sqr(rv)) then n := n + 1;
  writeln(n);
end.

Немає коментарів:

Дописати коментар