Razdel_13_Osn_alg_i_i_progr_ya_11_05_10
.pdfЧасть 13. Основы алгоритмизации и программирования
Школьный АЯ
алг Ниже диагонали (арг цел N,
арг цел таб
A[1:N, 1:N],
рез лит Otvet)
нач цел i, j, лит Flag
Flag:="Нет"; i:=2
нц пока (i< =N) и (Flag="Нет") | цикл по строкам
j:=1
нц пока (j<i) и (Flag="Нет") | цикл по элементам
строки
если A[i, j]<0 | условие прерывания циклов
то Flag:="Да"
иначе j:=j+1 | продви-
жение по строке все
кц
i:=i+1 | переход на новую строку
кц
если Flag="Да"
то Otvet:="Есть отрицательные ниже диагонали"
иначе Otvet:="Нет отрицательных ниже диагонали"
все
кон
Исполнение алгоритма
Обозначения проверяемых условий:
(i <= N) и (Flag = "Нет") => (1)
(j < i) и (Flag = "Нет") |
=> (2) |
161
Часть 13. Основы алгоритмизации и программирования
|
|
|
|
|
|
|
|
|
|
N те- |
|
i |
Flag |
(1) |
j |
(2) |
|
A[i]=A[j] |
Otvet |
ста |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
1 |
|
2 |
"Нет" |
+ |
1 |
+ |
|
- |
|
|
|
|
|
|
2 |
- |
|
|
|
|
|
|
|
|
|
(кц) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
+ |
|
|
|
|
|
|
|
|
1 |
|
|
|
|
|
|
|
|
|
|
+ |
|
- |
|
|
|
3 |
"Да" |
+ |
2 |
|
|
|
|
|
|
|
|
|
|
- |
|
+ |
|
|
|
|
|
|
3 |
|
|
|
|
|
|
|
|
|
|
(кц) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4 |
|
- |
|
|
|
|
"Есть отрицатель- |
|
|
|
|
(кц) |
|
|
|
|
ные" |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
2 |
|
2 |
"Нет" |
+ |
1 |
+ |
|
- |
|
|
|
|
|
|
2 |
- |
|
|
|
|
|
|
|
|
|
(кц) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
+ |
|
|
|
|
|
|
|
|
1 |
|
|
|
|
|
|
|
|
|
|
+ |
|
- |
|
|
|
3 |
|
+ |
2 |
|
|
|
|
|
|
|
|
|
|
- |
|
- |
|
|
|
|
|
|
3 |
|
|
|
|
|
|
|
|
|
|
(кц) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4 |
|
-(кц) |
|
|
|
|
"Нет отрицатель- |
|
|
|
|
|
|
|
|
|
ных" |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Turbo Pascal
Program UnderDiagonal;
Uses Crt;
Type Mas = Array [1..10, 1..10] of Integer;
Var A |
: Mas; |
N, i, j : Integer; |
|
Flag |
: Boolean; |
{----------------------------------- |
} |
162
Часть 13. Основы алгоритмизации и программирования
Procedure InputOutput(Var A : Mas); |
{описание проце- |
дуры } |
|
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; 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 Solution(Var A : Mas); {описание процедуры поиска решения}
Begin
i := 2 ; Flag := FALSE; While (i<=N) and not Flag do
begin j:=1;
While (j<i) and not Flag do
If (A[i, j]<0)
then Flag:=TRUE
163
Часть 13. Основы алгоритмизации и программирования
|
else j:=j+1; |
i:=i+1 |
|
end; |
|
End; { of |
Solution } |
{-------------------------------------------- |
} |
Procedure |
OutResult; |
Begin |
|
WriteLn('О т в е т :');
Write('Среди элементов, лежащих ниже главной диаго-
нали, '); |
|
If Flag |
then WriteLn('есть отрицательные.') |
|
else WriteLn('нет отрицательных.'); |
ReadLn |
|
End; { of |
OutResult } |
{-------------------------------------------- |
} |
BEGIN |
|
InputOutput(A); {вызов процедуры ввода-вывода дан-
ных }
Solution(A); {вызов процедуры поиска решения зада-
чи}
OutResult {вызов процедуры вывода результата }
END.
QBasic
CLS : INPUT "Количество строк и столбцов матрицы = ",
N
DIM A(N, N)
FOR i = 1 TO N
FOR j = 1 TO N
PRINT "A(" ; i ; ", " ; j ; ") = " ;
164
Часть 13. Основы алгоритмизации и программирования
INPUT A(i, j)
NEXT j
NEXT i
CLS : PRINT "Матрица А"
FOR i = 1 TO N
FOR j = 1 TO N
PRINT A(i, j);
NEXT j : PRINT
NEXT i
i = 2 : Flag = 0
WHILE (i < = N) AND (Flag = 0) j = 1
WHILE (j < i ) AND (Flag = 0)
IF A(i, j) < 0 THEN Flag = 1 ELSE j = j + 1 WEND
i = i + 1 WEND
PRINT : PRINT "О т в е т :"
PRINT "Среди элементов матрицы, лежащих ниже главной диагонали, ";
IF Flag = 1 THEN
PRINT "есть отрицательные."
ELSE PRINT "нет отрицательных."
END IF
END
Пример 3. Выяснить, есть ли в баскетбольных командах "Спартак" и "Зе-
нит" игроки одинакового роста.
Система тестов
165
Часть 13. Основы алгоритмизации и программирования
Обозначения:
N - количество игроков в команде "Спартак";
M - количество игроков в команде "Зенит";
S(N) - массив ростов игроков команды "Спартак" (см);
Z(N) - массив ростов игроков команды "Зенит" (см).
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Данные |
|
|
|
Результат |
||
Номер |
|
Проверяемый |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
Спартак |
|
|
Зенит |
|
|
|||||
|
|
|
|
|
|
|
|
|
|||||
теста |
|
случай |
|
|
|
|
|
|
|
|
|
|
Otvet |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
N |
|
|
S(N) |
|
M |
|
Z(M) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||
|
|
|
|
3 |
|
|
200 |
|
4 |
|
198 |
|
"Есть игро- |
|
|
|
|
|
|
|
195 |
|
|
|
200 |
|
ки одинако- |
1 |
|
Есть |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
205 |
|
|
|
206 |
|
вого роста" |
|
|
|
|
|
|
|
|
|
|
|
192 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||
|
|
|
|
2 |
|
|
200 |
|
2 |
|
198 |
|
"Нет игро- |
|
|
|
|
|
|
|
195 |
|
|
|
201 |
|
ков одина- |
2 |
|
Нет |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
кового ро- |
|
|
|
|
|
|
|
|
|
|
|
|
|
ста" |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
166
Часть 13. Основы алгоритмизации и программирования
Школьный АЯ
алг Рост (арг цел N, M, арг целтаб
S[1:N],
Z[1:M], резлит Otvet)
нач цел i, j, лит Flag i:=1; Flag:="Нет"
нц пока (i<=N) и (Flag="Нет") |цикл по игрокам "Спарта-
ка"
j:=1
нц пока (j<=M) и (Flag="Нет") |цикл по игрокам "Зени-
та"
если S[i]=Z[j] |проверка ра-
венства ростов
то Flag:="Да"
иначе j:=j+1
все
кц
i:=i+1
кц
если Flag="Да"
то Otvet:="Есть игроки одина-
кового роста"
иначе Otvet:="Нет игроков оди-
накового роста"
все
кон
Исполнение алгоритма
167
Часть 13. Основы алгоритмизации и программирования
|
|
|
|
|
Обозначения проверяемых условий: |
|||||||||||
|
|
|
(i <= N) и (Flag = "Нет") |
=> (1) |
|
|
|
|||||||||
|
|
|
(j < i) и (Flag = "Нет") => (2) |
|||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Номер |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
i |
|
Flag |
|
(1) |
|
j |
|
(2) |
|
S[i]=Z[j] |
|
Otvet |
|
|
теста |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
|
|
1 |
|
"Нет" |
|
+ |
|
1 |
|
+ |
|
- |
|
|
|
|
|
|
|
|
"Да" |
|
|
|
2 |
|
- |
|
+ |
|
|
|
|
1 |
|
|
|
|
|
|
|
|
|
-(кц) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
2 |
|
|
|
- |
|
|
|
|
|
|
|
"Есть" |
|
|
|
|
|
|
|
|
(кц) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
|
|
1 |
|
"Нет" |
|
+ |
|
1 |
|
+ |
|
- |
|
|
|
|
|
|
|
|
|
|
|
|
2 |
|
+ |
|
- |
|
|
|
|
|
|
|
|
|
|
|
|
3 |
|
-(кц) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
2 |
|
2 |
|
|
|
+ |
|
1 |
|
+ |
|
- |
|
|
|
|
|
|
|
|
|
|
|
|
2 |
|
+ |
|
- |
|
|
|
|
|
|
|
|
|
|
|
|
3 |
|
-(кц) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
3 |
|
|
|
-(кц) |
|
|
|
|
|
|
|
"Нет" |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Turbo Pascal |
|
|
|
Program EqualHeight; |
|
||
Uses |
Crt; |
|
|
Type |
Mas = Array [1..20] of Integer; |
||
Var |
|
|
|
Spart, Zenit : Mas; |
{массивы ростов игроков} |
||
N, |
M, i, j |
: Integer; {N - к-во игроков "Спар- |
|
така", |
M - "Зенита"} |
|
|
Flag |
: Boolean; |
|
|
Name |
: String; |
{название команды} |
|
{------------------------------------------} |
|||
Procedure Input(NCommand : Integer; Var Number : In- |
|||
teger; |
Var Rost:Mas); |
|
168
Часть 13. Основы алгоритмизации и программирования
{NCommand - номер команды (равен 1 или
2)}
Begin {описание процедуры ввода данных по команде}
If NCommand=1 then Name:='Спартак' else Name:='Зенит';
Write('Введите количество игроков команды ',
Name, ': ');
ReadLn(Number);
WriteLn('Введите роста игроков:');
For i := 1 to Number do
begin Write(i, ' игрок - '); ReadLn(Rost[i])
end;
WriteLn
End;
{------------------------------------------}
Procedure Search; {описание процедуры поиска решения задачи}
Begin
i:=1; Flag:=FALSE;
While (i<=N) and not Flag do {цикл по игрокам Спартака}
begin j:=1;
While (j<=M) and not Flag do {цикл по игрокам
Зенита}
If Spart[i]=Zenit[j] then Flag:=TRUE else
j:=j+1;
i:=i+1
end;
End;
169
Часть 13. Основы алгоритмизации и программирования
{----------------------------------------------------
--------}
Procedure OutResult; {описание процедуры вывода ре-
зультата}
Begin
Write('О т в е т : в командах Спартак и Зенит ');
If Flag then Write('есть игроки ') else
Write('нет игроков ');
|
WriteLn('одинакового роста.'); |
|
ReadLn |
|
End; |
{ |
------------------------------------------} |
BEGIN ClrScr; {вызов процедур}
Input(1, N, Spart); {ввод данных для первой коман-
ды}
Input(2, M, Zenit); {ввод данных для второй коман-
ды} |
|
|
Search; |
{поиск |
решения задачи} |
OutResult |
{вывод |
результата} |
END. |
|
|
QBasic
CLS
INPUT "Введите количество игроков команды Спартак : "
, N
DIM Spart(N)
PRINT "Введите роста игроков:"
FOR i = 1 TO N
PRINT i ; " игрок - " ; : INPUT Spart(i) NEXT i
170