Пользователь

Добро пожаловать,

Регистрация или входРегистрация или вход
Потеряли пароль?Потеряли пароль?

Ник:
Пароль:

Меню сайта




Ваше мнение
Каким поисковиком вы пользуетесь ?

Google.ru
Google.com
Rambler
Mail.ru
WebAlta
Яндекс
Апорт
Yahoo
Gogo.ru
Другим


Результаты
Другие опросы

Всего голосов: 1716
Комментарии: 4


Наши партнеры



Статистика




Programming books  Download software  Documentation  Scripts  Content Managment Systems(CMS)  Templates  Icon Sets  Articles  Contacts  Voting  Site Search




Книги-online



Практикум — Глава 6. Алгоритмы, реализуемые с помощью комбинации циклов типа ДЛЯ и ПОКА
[ домой ] [ следующий ] [ начало главы ] [ предыдущий ] [ содержание ]

Пример 6.3. Проверить, является ли заданная целочисленная матрица A(N, N) "магическим квадратом" (это значит, что суммы чисел во всех её строках, всех столбцах и двух диагоналях одинаковы).

Система тестов  
Номер теста Проверяемый случай Данные Результат
N Матрица А Otvet
1 Является 3 ''Магический квадрат''
2 Не является 2 ''Не магический квадрат ''
  Демонстрация Школьный АЯ

алг Магический квадрат (арг цел N, арг цел таб A[1:N, 1:N], рез лит Otvet)
    дано | N>0
нач цел i, j, St, S, лит Flag 
  St:=0              | вычисление суммы элементов главной диагонали 
  нц для i от 1 до N | в качестве эталонной суммы St 
    St:=St+A[i, i] 
  кц
  Flag:="Да"; i:=1 
  нц пока (i<=N) и (Flag="Да") | вычисление сумм элементов строк 
    S:=0 
    нц для j от 1 до N 
      S:=S+A[i, j] 
    кц 
    если S<>St | сравнение суммы элементов текущей строки с эталонной 
      то Flag:="Нет" 
      иначе i:=i+1 
    все 
  кц
  j:=1 
  нц пока (j<=N) и (Flag="Да") | вычисление сумм элементов столбцов 
    S:=0 
    нц для i от 1 до N 
      S:=S+A[i, j] 
    кц 
    если S<>St                 |сравнение суммы элементов текущего 
      то Flag:="Нет"           |столбца с эталонной суммой 
      иначе j:=j+1 
    все 
  кц
  если Flag="Да" 
    то S:=0 | вычисление суммы элементов побочной диагонали 
      нц для i от 1 до N 
        S:=S+A[i, N+1-i] 
      кц 
      если S<>St | сравнение суммы с эталонной 
        то Flag:="Нет" 
      все 
  все 
  если Flag="Да" 
    то Otvet := "Это магический квадрат." 
    иначе Otvet := "Это не магический квадрат." 
  все 
кон
Блок-схема (фрагмент)
Вычисление суммы 
элементов главной 
диагонали в качестве 
эталонной суммы

Вычисление сумм 
элементов строк и 
сравнение их с 
эталонной суммой 
 
 
 

 

Блок-схема (продолжение)

 

Вычисление сумм 

элементов столбцов
и сравнение их с 
эталонной суммой 

 

 

 

 

Вычисление суммы 
элементов побочной 
диагонали и сравнение 
ее с эталонной суммой
Исполнение алгоритма   (в таблице отражен только конечный результат работы циклов типа для, в которых вычисляются суммы)
Обозначения проверяемых условий:
(i<=N) и (Flag = "ДА" )=> (1)
(j<=N) и (Flag = "ДА" )=> (2)
 Flag = "ДА"  => (3)
 

теста
St Flag i (1) j (2) (3) S S<>St Otvet

1
6 "Да" 1
2
3
1,2,3
1,2,3
1,2,3
1,2,3
+
+
+
1,2,3
1,2,3
1,2,3
1
2
3
 
 

+
+
+

 
 

+

6
6
6
6
6
6
6
-
-
-
-
-
-
-

 
 

"Магический квадрат"

2 4 "Да"
"Нет"
1 +
-(кц)
1,2
1
-(кц) - 3 + "Не магический квадрат"

Turbo Pascal

Program MagicSquare; 
Uses Crt; 
Var A : Array [1..20, 1..20] of Integer; 
    i, j, N : Integer; 
    Standard, S : Integer; {Standard - сумма-эталон, S - текущая сумма} 
    Flag : Boolean; 
{-------------------------------------} 
Procedure InputOutput; {описание процедуры ввода-вывода матрицы} 
Begin 
  ClrScr; 
  Write('Количество строк и столбцов - '); 
  ReadLn(N); 
  For i := 1 to N do 
    For j := 1 to N do 
      begin Write('A[' , i , ', ' , j , '] = '); 
            ReadLn(A[i, j]) 
      end;
  ClrScr; 
  WriteLn('Исходная матрица :'); WriteLn; 
  For i := 1 to N do 
    begin 
      For j := 1 to N do Write(A[i, j] : 5); 
      WriteLn 
    end; WriteLn 
End; { of InputOutput } 
{-------------------------------------------} 
Procedure MagicOrNot(Var Flag : Boolean);          {описание процедуры, }
                 {в которой выясняется, является ли квадрат "магическим"} 
 Begin   {вычисление суммы элементов главной диагонали} 
         {в качестве эталонной суммы} 
  Standard:=0; 
  For i := 1 to N do Standard := Standard + A[i,i];
  Flag:=TRUE; i:=1; 
  While (i<=N) and Flag do {вычисление сумм элементов строк} 
    begin 
      S:=0; 
      For j := 1 to N do S := S+A[i, j]; 
      If S<>Standard then Flag := FALSE else i:=i+1 
    end;
  j:=1; 
  While (j<=N) and Flag do {вычисление сумм элементов столбцов} 
    begin 
      S:=0; 
      For i := 1 to N do S:=S+A[i, j]; 
      If S<>Standard then Flag := FALSE else j := j+1 
    end;
  If Flag then 
    begin 
      S:=0; {вычисление суммы элементов побочной диагонали} 
      For i := 1 to N do S := S+A[i, N+1-i]; 
      If S<>Standard then Flag := FALSE; 
    end; 
End; 
{--------------------------------------------------------} 
BEGIN 
  InputOutput; {Вызов процедуры ввода-вывода } 
  MagicOrNot(Flag); {Вызов процедуры решения задачи } 
  If Flag then WriteLn('Это магический квадрат.') 
          else WriteLn('Это не магический квадрат.'); 
  ReadLn 
END.


QBasic

CLS : INPUT "Количество строк и столбцов - ", N : DIM A(N, N)
FOR i = 1 TO N 
  FOR j = 1 TO N 
    PRINT "A(" ; i ; ", " ; j ; ") = "; : INPUT A(i, j) 
  NEXT j 
NEXT i : CLS
PRINT "Исходная матрица: " : PRINT 
FOR i = 1 TO N 
  FOR j = 1 TO N 
    PRINT A(i, j); 
  NEXT j : PRINT 
NEXT i : PRINT
Standard = 0 'вычисление суммы-эталона Standard 
FOR i = 1 TO N 
   Standard = Standard + A(i, i) 
NEXT i
Flag = 1 : i = 1 
WHILE (i <= N) AND (Flag = 1) 'вычисление сумм элементов строк 
  S = 0 
  FOR j = 1 TO N 
    S = S + A(i, j) 
  NEXT j 
  IF S <> Standard THEN Flag = 0 ELSE i = i + 1 
WEND
j = 1 
WHILE (j <= N) AND (Flag = 1) 'вычисление сумм элементов столбцов 
  S = 0 
  FOR i = 1 TO N 
    S = S + A(i, j) 
  NEXT i 
  IF S <> Standard THEN Flag = 0 ELSE j = j + 1 
WEND
IF Flag = 1 THEN 
  S = 0 'вычисление суммы элементов побочной диагонали 
  FOR i = 1 TO N 
    S = S + A(i, N + 1 - i) 
  NEXT i 
END IF  
IF S <> Standard THEN Flag = 0
IF Flag = 1 THEN PRINT "Это магический квадрат." 
  ELSE PRINT "Это не магический квадрат." 
END IF : PRINT 
END

[ домой ] [ следующий ] [ начало главы ] [ предыдущий ] [ содержание ]


Внимание! Если у вас не получилось найти нужную информацию, используйте рубрикатор или воспользуйтесь поиском


.



книги по программированию исходники компоненты шаблоны сайтов C++ PHP Delphi скачать