infoegehelp.ru

Успешно сдать ЕГЭ по информатике
  • Главная
  • Контакты
  • Карта сайта
  • Помощь сайту
Важно
  • Демо варианты ЕГЭ
  • Учим числа: 2 в степени
  • Биты, байты, килобайты
Решение задач
  • Задачи вне основных разделов информатики
Разделы информатики
  • 2011-12-18-14-33-54Системы счисления
  • 2011-12-18-16-45-20Алгебра логики
  • 2011-12-18-16-55-26Программирование
  • 2011-12-18-16-53-40Кодирование информации
  • 2011-12-18-16-56-19Компьютерные сети и Интернет
  • -excelЭлектронные таблицы (Excel)
  • 2011-12-18-16-57-50Базы данных
  • 2011-12-18-16-58-50Графы
  • 2011-12-18-17-00-15Файловая система
  • Устройство компьютера
  • ПО компьютера

Разбор задачи C2 (демо ЕГЭ 2005)

Квадратный массив А размера NxN (где N=5) в программе сначала обнуляется, а затем производится некоторая дальнейшая обработка в соответствии с программой. Текст программы приведен ниже.
Требуется выяснить состояние массива А по окончании работы программы, а именно:
  1. Какое число будет стоять в  элементе массива А[1,2] ?
  2. Сколько всего ненулевых чисел будет в массиве А ?
  3. Ответить на следующий вопрос:
В программе после начального обнуления массив А заполняется с помощью следующих операторов

i:=1;
j:=1;
A[1,1]:=1;
k:=1;
while (i<N) OR (j<N) do
begin  
  if (i+j) mod 2 = 0   then j:=j+1
  else i:=i+1;
  k:= -k;
  A[i,j]:=k;
end;

На какой более короткий фрагмент программы можно заменить приведенную часть программы, обеспечивая такое же заполнение массива А?

Программа на языке ПаскальПрограмма на языке Бейсик
CONST N=5;
VAR i, j, k: integer;
  А: array[1..N,1..N] of integer;
BEGIN
  for i:=1 to N do
    for j:=1 to N do
      А[i,j]:=0;
  i:=1;
  j:=1;
  А[1,1]:=1;
  k:=1;

  while (i<N) OR (j<N) do
  begin
    if (i+j) mod 2 = 0  then j:=j+1
    else i:=i+1;
    k:= -k;
   А [i,j]:=k;
  end;

END.
N=5
DIM A(N, N) AS INTEGER
DIM I,J,K AS INTEGER
FOR I=1 TO N
   FOR J=1 TO N
     А(I, J)=0
   NEXT J
NEXT I
I=1
J=1
А(1, 1)=1
K=1
WHILE (I<N) OR (J<N)
   IF (I+J) MOD 2 = 0 THEN  J=J+1
   ELSE I=I+1
   ENDIF
   K=-K
   А(I,J)=K
WEND

END
Программа на АлгоритмическомПрограмма на языке Си
алг
нач
   цел N=5
   целтаб А[1:N,1:N]
   цел i, j, k;
   нц для i от 1 до N
     нц для j от 1 до N
       А[i,j]:=0
   i:=1
   j:=1
   А[1,1]:=1;
   k:=1;
   нц пока (i<N) или (j<N)
     если mod(i+j)=0
       то  j:=j+1
       иначе i:=i+1
     все
     k:=-k;
     А[i,j]:=k
   кц

кон
#include <stdio.h>
#define N 5
void main(void)
{
    int А[N][N];
    int i,j,k;
    for (i=0; i<N; i++)
      for(j=0; j<N; j++)
        А[i][j]=0;
    i=0;
    j=0;
    А[0][0]=1;
    k=1;
    while( (i<(N-1))||(j<(N-1)) ){
      if( ((i+1)+(j+1)) mod 2 = 0) j=j+1;
      else i=i+1;
      k=-k;
      А[i][j]:=k;
    }

}
Решение:

В задании розовым выделена часть программы, которую надо изменить. Определим, что происходит с массивом в этой части. В таблице ниже представлен ход выполнения программы для языков: Паскаль, Бейсик и Алгоритмический. Для Си есть некоторая особенность: индексы элементов массива начинаются с нуля, а не ед-цы. Поэтому значения i и j будут на 1 меньше.

Название
переменной
Значение переменной после выполнения
прохода цикла "пока":
0
1
2
3
4
5
6
7
8
i
1
1
2
2
3
3
4
4
5
j
1
2
2
3
3
4
4
5
5
А[i,j]
(А(i,j) для Бейсик)
1
-1
1
-1
1
-1
1
-1
1

Из таблицы видно, что когда i=j, элемент массива a[i,j]=1. Поэтому главная диагональ матрицы состоит из единиц. Под главной диагональю стоят элементы со значением -1:


i=1
i=2
i=3
i=4
i=5
j=1
1
0
0
0
0
j=2
-1
1
0
0
0
j=3
0
-1
1
0
0
j=4
0
0
-1
1
0
j=5
0
0
0
-1
1

Ответим на вопросы:

  1. A[1,2]=−1.
  2. Посчитаем количество элементов по таблице выше: 5 по главной диагонали + 4 под ней=9.
  3. Массив А можно заполнить так: элементам главной диагонали присваиваем значение 1, а элементам под данной диагональю (№ столбца > на 1) - значение -1. В таблице ниже представлены программы для 4-х языков программирования. Искомый фрагмент выделен розовым.
Программа на языке ПаскальПрограмма на языке Бейсик
CONST N=5;
VAR i, j, k: integer;
   А: array[1..N,1..N] of integer;
BEGIN
for i:=1 to N do
   for j:=1 to N do
     А[i,j]:=0;
for i:=1 to N do
begin
  А[i,i]:=1;
  if i<N then  A[i,i]:=-1;
end;

END.
N=5
DIM А(N, N) AS INTEGER
DIM I,J,K AS INTEGER
FOR I=1 TO N
   FOR J=1 TO N
     А(I, J)=0
   NEXT J
NEXT I
FOR I=1 TO N
  А(I, J)=1
  IF I<N THEN  А(I, J)=-1
NEXT I

END
Программа на АлгоритмическомПрограмма на языке СИ
алг
нач
   цел N=5
   целтаб А[1:N,1:N]
   цел i, j, k;
   нц для i от 1 до N
     нц для j от 1 до N
       А[i,j]:=0
     кц
   кц
   нц для i от 1 до N
     А[i,i]:=1
     если i<N
       то А[i,i+1]:=-1
     все 
   кц

кон
#include <stdio.h>
#define N 5
void main(void)
{
   int А[N][N];
   int i,j,k;
   for (i=0; i<N; i++)
     for(j=0; j<N; j++)
       А[i][j]=0;
   for(i=0;i<N;i+=){
     А[i][i]=1;
     if( i<(N-1) )  А[i][i+1]=-1;
   }

}

Перейти к другим задачам.

 

Rambler's Top100

© Латыпова В.А., 2012-2020. Все права защищены.
Копирование материалов сайта только с разрешения администрации сайта