Опубликован: 04.06.2007 | Уровень: для всех | Доступ: свободно | ВУЗ: Кабардино-Балкарский государственный университет
Дополнительный материал 1:

Выполнение аналога демоЕГЭ-2007

Группа заданий C

С1. Требовалось написать алгоритм (программу) подсчета всех натуральных чисел n, кратных 7 и заключенных строго между натуральными числами a и b. Входная информация вводится с клавиатуры, а на выходе должно быть получено сообщение, например, вида "искомое число равно 12" (если есть 12 таких кратных чисел) или "искомое число равно 0" (если нет кратных чисел). Некто, в спешке, написал следующий алгоритм (следующую программу):

ШАЯ:

алг С1(арг цел a, b, рез цел n)
нач
   цел c
   вывод("введите a, b:")
   ввод(a,b)
   n:=0
   если (a=b) и (mod(а,7)=0)
      то n:=n+1
      иначе нц для c от a до b
               если (mod(с,7)=0)
                   то n:=n+1
               все
            кц
   все
   вывод("искомое число равно ",n)
кон

Паскаль:

var 
   a, b, c, n: integer;
begin
   write('введите a, b:');
   read(a,b);
   n:=0;
   if (a=b) and (a mod 7=0)
      then n:=n+1
      else for c:=a to b do 
              if (с mod 7=0)
                then n:=n+1;           
   write('искомое число равно ',n);
end.

Бейсик:

dim 
   a, b, c, n as integer
   print 'введите a, b:'
   input a,b
   n = 0
   if (a = b) and (a MOD 7=0)
      then n = n + 1
      else for c = a to b 
              if (с MOD 7 = 0)
                 then n = n + 1
              end if
           next c
   end if
   print "искомое число равно ", n
end.

Для такой программы последовательно выполните три задания:

  1. Укажите набор входных чисел a, b, для которого программа работает неправильно.
  2. Укажите любой вариант доработки программы (удаления, добавления, изменения команд), чтобы не было случаев её неправильной работы.
  3. Укажите вариант доработки программы без использования логических операций ( and, or, not ).

Решение.

  1. Программа не будет работать для всех тестов, удовлетворяющих условию b<a. Например, для b = 4, a = 20.
  2. Приводим вариант доработки программы, чтобы не было случаев её неправильной работы.

    ШАЯ:

    алг С1(арг цел a, b, рез цел n)
    нач
       цел c
       вывод("введите a, b:")
       ввод(a,b)
       n:=0
       если (a=b) и (mod(а,7)=0)
          то n:=n+1
          иначе если (a?b) 
                    то если (a>b) 
                           то 
                             c:=a
                             a:=b
                             b:=a
                       все
                    нц для c от a до b
                         если (mod(с,7)=0)
                             то n:=n+1
                         все
                    кц
                все
       все
       вывод("искомое число равно ", n)
    кон

    Паскаль:

    var
       a, b, c, n: integer;
    begin
       write('введите a, b:');
       read(a,b);
       n:=0;
       if (a=b) and (a mod 7=0)
          then n:=n+1
          else if (a<>b)
                 then begin
                         if (a>b)
                            then begin 
                                    c:=a;
                                    a:=b;
                                    b:=a;
                                 end;
                         for c:=a to b do 
                            if (с mod 7=0)
                               then n:=n+1
                      end;
       write('искомое число равно ',n);
    end.

    Бейсик:

    dim 
       a, b, c, n as integer
       print "введите a, b:"
       input a,b
       n = 0
       if (a = b) and (a MOD 7=0)
          then n = n + 1
          else if (a <> b)
                  then if (a > b)
                          then c = a: a = b: b = a 
                               for c = a to b 
                                   if (с MOD 7 = 0)
                                     then n = n + 1
                                   end if
                               next c
                       end if
               end if
       end if
       print "искомое число равно ", n
    end.
  3. Вариант доработки программы без использования логических операций ( and, or, not ) можно получить из предыдущих вариантов, если заменить условие (например, на Бейсике; для остальных версий - аналогично):
    if (a = b) and (a MOD 7=0) then :
    на условие вида
    if (a = b) then if (a MOD 7=0) then : .