Razdel_13_Osn_alg_i_i_progr_ya_11_05_10
.pdfЧасть 13. Основы алгоритмизации и программирования
DIM X(NPoints), Y(NPoints) 'описание массивов коорди-
нат точек
FOR i = 1 TO NPoints
PRINT i; "-ая точка "
INPUT "x = ", X(i)
INPUT "y = ", Y(i) : PRINT
NEXT i
Flag = 0 : i = 1
WHILE i <= NPoints AND Flag = 0
IF (X(i)–a)^2 + (Y(i)–b)^2 < Radius^2 THEN Flag=1 ELSE i=i+1
WEND
PRINT "О т в е т : в множестве точек ";
IF Flag = 1 THEN PRINT "cодержатся" ELSE PRINT "не содержатся"
PRINT " точки, принадлежащие заданной области."
END
Пример 3. Определить, имеется ли среди элементов главной диагонали
заданной целочисленной матрицы A(N, N) хотя бы один положительный
нечётный элемент.
141
Часть 13. Основы алгоритмизации и программирования
Система тестов
|
|
|
|
|
|
|
|
|
|
Номер |
|
Проверяемый слу- |
|
|
Данные |
|
Результат |
|
теста |
|
чай |
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
N |
|
Матрица А |
|
Текст |
||
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
|
Имеется |
3 |
|
|
|
"Есть такие" |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2 |
|
Не имеется |
2 |
|
|
|
"Нет таких" |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Школьный АЯ
алг Диагональ (арг цел N, арг цел таб А[1:N, 1:N],
рез лит Teкст)
нач |
цел |
i, лит Flag |
|
i:=1; |
Flag:="Нет" |
|
|
нц пока (i<=N) и (Flag="Нет") |
| условие продолже- |
||
ния |
цикла |
|
если (A[i, i]>0) и (mod(A[i, i], 2)=1) | условие завершения цикла
то Flag := "Да"
иначе i:=i+1
все
кц
если Flag = "Да"
то Текст := "Есть такие"
иначе Текст := "Нет таких"
все
кон
142
Часть 13. Основы алгоритмизации и программирования
Исполнение алгоритма
Обозначения проверяемых условий:
(i <= N) и (Flag = "Нет") => (1)
(A[i, i] > 0) и (mod(A[i, i], 2) = 1) => (2)
N те- |
|
i |
|
Flag |
|
(1) |
|
(2) |
|
Текст |
|
ста |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
1 |
|
1 |
|
"Нет" |
|
+ |
|
- |
|
"Есть |
|
|
|
2 |
|
"Да" |
|
+ |
|
+ |
|
такие" |
|
|
|
|
|
|
|
- |
|
|
|
|
|
|
|
|
|
|
|
(кц) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
2 |
|
1 |
|
"Нет" |
|
+ |
|
- |
|
"Нет та- |
|
|
|
2 |
|
|
|
+ |
|
- |
|
ких" |
|
|
|
3 |
|
|
|
- |
|
|
|
|
|
|
|
|
|
|
|
(кц) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
143
Часть 13. Основы алгоритмизации и программирования
Turbo Pascal |
|
|
|
|
Program Diagonal; |
|
|
||
Uses |
Crt; |
|
|
|
Type |
Mas = Array [1..10, 1..10] of Integer; |
|||
Var |
A |
|
: Mas; |
|
|
N, i, j |
: Integer; |
|
|
|
Flag |
|
: Boolean; |
|
{-----------------------------------} |
|
|||
Procedure InputOutput(Var A : Mas); |
{описание про- |
|||
цедуры |
ввода-} |
|
|
|
Begin |
|
|
|
{вывода исход- |
ных данных |
} |
|
|
ClrScr;
Write(’Количество строк и столбцов – ’); Read(N);
144
Часть 13. Основы алгоритмизации и программирования
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); {описание процедуры поиска решения}
Var Flag : Boolean;
Begin |
|
|
Flag:=FALSE; |
i:=1; |
|
While (i<=N) |
and not Flag do |
|
If (A[i, i]>0) and (A[i, i] mod 2 = 1) |
||
|
then Flag:=TRUE |
|
|
else i:=i+1; |
|
WriteLn(’О т |
в е т :’); |
|
Write(’Среди |
элементов главной диагонали ’); |
|
If Flag then |
WriteLn (’есть нечетные положитель- |
|
ные.’) |
|
|
|
else |
WriteLn(’нет нечетных положитель- |
ных.’); |
|
|
ReadLn; |
|
|
End; |
{ of |
Solution } |
145
Часть 13. Основы алгоритмизации и программирования
{------------------------------------ |
} |
BEGIN |
|
InputOutput(A); {вызов процедуры ввода-вывода дан- |
|
ных} |
|
Solution(A); |
{вызов процедуры поиска решения за- |
дачи} |
|
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
EXT i
PRINT : PRINT "Матрица А"
FOR i = 1 TO N
FOR j = 1 TO N
PRINT A(i, j) ;
NEXT j : PRINT
NEXT i
’Цикл "пока" по элементам главной диагонали A(i,i) i = 1 : Flag = 0
WHILE (i <= N) AND (Flag = 0)
IF (A(i, i)>0) AND (A(i, i) MOD 2 = 1) THEN Flag=1 ELSE i=i+1
WEND
146
Часть 13. Основы алгоритмизации и программирования
PRINT : PRINT "О т в е т :"
PRINT "Среди элементов главной диагонали ";
IF Flag = 1 THEN
PRINT "есть положительные нечетные."
ELSE
PRINT "нет положительных нечетных."
END IF
END
Пример 4. Числа Фибоначчи ( Fi ) определяются по формулам F0 = F1 = 1; Fi = Fi –1 + Fi –2 при i = 2, 3, ... (каждое очередное число равно сумме двух предыдущих). Вычислить сумму всех чисел Фибоначчи, которые не превос-
ходят заданного натурального числа М.
Тест
Номер теста |
|
Данные |
|
Результат |
|
|
|
|
|
|
|
|
|
|
1 |
|
M=10 |
|
S=1+1+2+3+5+8=20 |
|
|
|
|
|
|
|
|
|
|
2 |
|
M=1 |
|
S=1+1=2 |
|
|
|
|
|
|
|
|
|
|
Школьный АЯ
алг Фибоначчи (арг цел М, рез цел S)
дано |
|
| M>0 |
|
нач цел F0, |
F1, |
F2 |
|
F0:=1; F1:=1; |
F2:=2 |
||
S:=4 |
| 4 – сумма первых трех чисел Фибоначчи |
||
нц пока F2<=M |
|
||
F0:=F1; |
F1:=F2; F2:=F0+F1 | серия переприсваива- |
||
ний |
|
|
|
S:=S+F2; |
|
|
147
Часть 13. Основы алгоритмизации и программирования
кц
S:=S–F2 | из S вычитается последнее значение F2,
превосходящее M
кон
Блок-схема
Исполнение алгоритма
|
|
|
|
|
|
|
|
|
|
F0 |
|
F1 |
|
F2 |
|
S |
|
F2<M |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
1 |
|
1 |
|
2 |
|
4 |
|
+ |
|
1 |
|
2 |
|
3 |
|
4+3=7 |
|
+ |
|
2 |
|
3 |
|
5 |
|
7+5=12 |
|
+ |
|
3 |
|
5 |
|
8 |
|
12+8=20 |
|
+ |
|
5 |
|
8 |
|
13 |
|
20+13=33 |
|
-(кц) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
33-13=20 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Turbo Pascal |
|
Program SummaFib; |
|
Uses Crt; |
|
Var M, |
{заданное число } |
F0, F1, F2, |
{три последовательных числа |
Фибоначчи} |
|
S : Integer; |
{сумма чисел Фибоначчи} |
148
Часть 13. Основы алгоритмизации и программирования
BEGIN
ClrScr;
Write(’Введите натуральное М : ’);
ReadLn(M);
F0:=1; F1:=1; F2:=2;
S:=4; {4 – сумма первых трех чисел Фибо-
наччи}
Write(’Числа Фибоначчи, не превосходящие ’, M, ’ :’, F0:4, F1:4);
While F2<=M do begin
F0:=F1; F1:=F2; Write(F1 : 4);
F2:=F0+F1; S:=S+F2;
end;
S:=S–F2; {вычитание из суммы последнего числа, ко-
торое превосходит М}
WriteLn; WriteLn;
WriteLn(’О т в е т : Сумма этих чисел равна ’, S);
ReadLn
END.
Результаты работы Pascal-программы
|
|
|
|
|
Введите |
натуральное |
M>0 : 10 <Enter> |
||
Числа |
Фибоначчи, не |
превосходящие 10 : 1 1 2 3 |
||
5 |
8 |
|
|
|
О |
т в |
е |
т : Сумма этих чисел равна 20 |
|
|
|
|
|
|
|
|
|
|
|
QBasic
CLS
INPUT "Введите натуральное М : " , M
149
Часть 13. Основы алгоритмизации и программирования
F0 = 1 : F1 = 1 : F2 = 2
S = 4 ’4 – сумма первых трех чисел Фибоначчи
PRINT "Числа Фибоначчи, не превосходящие "; M ; " : "
; F0 ; F1 ; WHILE F2 <= M
F0=F1 : F1=F2 : PRINT F1;
F2=F0+F1 : S=S+F2
WEND
S=S–F2 ’вычитание из суммы последнего числа, кото-
рое превосходит М
PRINT : PRINT : PRINT "О т в е т : Сумма этих чисел равна "; S
END
Пример 5. Включить заданное число D в массив A(N), упорядоченный по возрастанию, с сохранением упорядоченности.
Система тестов
Номер |
|
Проверяемый |
|
|
|
Данные |
|
Результат |
|
теста |
|
случай |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
D |
|
Массив А |
|
|
|
||
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
|
D <= a1 |
|
0 |
|
A=(1, 3, 5) |
|
A=(0, 1, 3, 5) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2 |
|
a1< D <= aN |
|
4 |
|
A=(1, 3, 5) |
|
A=(1, 3, 4, 5) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3 |
|
aN < D |
|
6 |
|
A=(1, 3, 5) |
|
A=(1, 3, 5, 6) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Школьный АЯ
алг Включение (арг цел N, арг вещ D, арг рез вещ таб
A[1:N+1])
150