Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Razdel_13_Osn_alg_i_i_progr_ya_11_05_10

.pdf
Скачиваний:
22
Добавлен:
09.04.2015
Размер:
1.98 Mб
Скачать

Часть 13. Основы алгоритмизации и программирования

если 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:="Нет"

все

все

191

Часть 13. Основы алгоритмизации и программирования

если Flag="Да"

то Otvet := "Это магический квадрат."

иначе Otvet := "Это не магический квадрат."

все

кон

Блок-схема (фрагмент)

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

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

192

Часть 13. Основы алгоритмизации и программирования

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

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

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

диагонали и сравнение ее с эталонной суммой

Исполнение алгоритма

(в таблице отражен только конечный результат работы циклов типа для, в

которых вычисляются суммы)

Обозначения проверяемых условий:

(i<=N) и (Flag = "ДА" )=> (1)

(j<=N) и (Flag = "ДА" )=> (2)

Flag = "ДА" => (3)

193

Часть 13. Основы алгоритмизации и программирования

 

N

 

St

 

Flag

 

i

 

(1)

 

j

 

(2)

 

(3)

 

S

 

S<>St

 

Otvet

 

теста

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

6

 

"Да"

 

1

 

+

 

1,2,3

 

 

 

 

 

6

 

-

 

 

 

1

 

 

 

 

 

2

 

+

 

1,2,3

 

 

 

 

 

6

 

-

 

 

 

 

 

 

 

 

 

3

 

+

 

1,2,3

 

 

 

 

 

6

 

-

 

 

 

 

 

 

 

 

 

1,2,3

 

 

 

1

 

+

 

+

 

6

 

-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1,2,3

 

 

 

2

 

+

 

 

 

6

 

-

 

"Магический

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1,2,3

 

 

 

3

 

+

 

 

 

6

 

-

 

квадрат"

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1,2,3

 

 

 

 

 

 

 

 

 

6

 

-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2

 

4

 

"Да"

 

1

 

+

 

1,2

 

-

 

-

 

3

 

+

 

"Не магиче-

 

 

 

 

 

"Нет"

 

 

 

-

 

1

 

(кц)

 

 

 

 

 

 

 

ский квад-

 

 

 

 

 

 

 

 

 

(кц)

 

 

 

 

 

 

 

 

 

 

 

рат"

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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 , '] = ');

194

Часть 13. Основы алгоритмизации и программирования

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;

195

Часть 13. Основы алгоритмизации и программирования

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

196

Часть 13. Основы алгоритмизации и программирования

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) 'вычисление сумм эле-

ментов столбцов

197

Часть 13. Основы алгоритмизации и программирования

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

Пример 4. Дана матрица A(N, N). Если хотя бы один элемент строки мат-

рицы отрицателен, то все элементы этой строки заменить нулями.

198

Часть 13. Основы алгоритмизации и программирования

 

 

 

 

Тест

 

 

 

 

 

 

 

 

 

 

Данные

 

 

Результат

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

N

 

Матрица А

 

 

Матрица А

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Школьный АЯ

Блок-схема (фрагмент)

(в этом алгоритме отражены процессы ввода

 

исходных данных и вывода результатов )

 

алг Модификация(арг цел N, арг рез

вещ таб A[1:N,

1:N])

дано | N>0

надо | элементы строк, содержа-

щих отрица-

| тельные числа, заменены

на нули

нач цел i, j, лит Flag

ввод N

нц для i от 1 до N

нц для j от 1 до N

ввод A[i,j]

кц

кц

нц для i от 1 до N | цикл по строкам

j := 1; Flag := "Нет"

нц пока (j<=N) и (Flag =

"Нет") |цикл до

199

Часть 13. Основы алгоритмизации и программирования

если A[i, j]<0

|первого

отрицат.

 

то Flag := "Да" |элемента строки

иначе j:=j+1

все

кц

если Flag = "Да" |обнуление строки

то нц для j от 1 до N A[i, j]:=0

кц

все

кц

нц для i от 1 до N

нц для j от 1 до N

вывод A[i,j]

кц

кц

кон

Исполнение алгоритма

Обозначение проверяемого условия:

(j<=N) и (Flag = "Нет")=> (1)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

i

 

Flag

 

j

 

(1)

 

A[i,j]<0

 

Flag="Да"

 

A[i,j]

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

 

"Нет"

 

1

 

+

 

-

 

+

 

 

 

 

 

"Да"

 

2

 

+

 

+

 

 

 

A[1,1]=0

 

 

 

 

 

1

 

-(кц)

 

 

 

 

 

A[1,2]=0

 

 

 

 

 

2

 

 

 

 

 

 

 

A[1,3]=0

 

 

 

 

 

3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2

 

"Нет"

 

1

 

+

 

-

 

-

 

 

 

 

 

 

 

2

 

+

 

-

 

 

 

 

 

 

 

 

 

3

 

+

 

-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

200

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]