Razdel_13_Osn_alg_i_i_progr_ya_11_05_10
.pdfЧасть 13. Основы алгоритмизации и программирования
Procedure OutRes(Var A:Mas); {описание процедуры вы-
вода результатов} Begin
WriteLn('Матрица-результат :');
For i := 1 to N do begin
For j := 1 to M do Write(A[i, j] : 5 : 1) ; WriteLn
end; ReadLn End; { of OutRes}
{----------------------------------------------------
----} BEGIN
InputOutput(A); {вызов процедуры ввода-вывода ис-
ходных данных}
Change(P, Q); {вызов процедуры замены строк }
OutRes(A) {вызов процедуры вывода результатов}
END.
QBasic
CLS
INPUT "Количество строк - ", N
INPUT "Количество столбцов - ", M
DIM A(N, M) 'Резервирование памяти для матрицы
FOR i = 1 TO N 'Ввод матрицы
FOR j = 1 TO M
PRINT "A(" ; i ; ", " ; j ; ") = " ; : INPUT A(i,
j)
NEXT j
NEXT i : PRINT
121
Часть 13. Основы алгоритмизации и программирования
INPUT "P = " , P : INPUT "Q = " , Q
CLS : PRINT "Исходная матрица :"
FOR i = 1 TO N 'Вывод матрицы
FOR j = 1 TO M
PRINT A(i, j) ;
NEXT j
NEXT i
Результаты работы
FOR j = 1 TO M 'Замена строк
QBasic-программы
Исходная мат-
Tmp=A(P,j):A(P,j)=A(Q,j):A(Q,j)=Tmp
рица:
NEXT j
1 2 1
PRINT : PRINT "Матрица-результат :"
2 2 2
FOR i = 1 TO N 'Вывод результата
3 1 3
FOR j = 1 TO M
Матрица-
PRINT A(i, j) ;
результат:
NEXT j
3 1 3
PRINT ' переход на новую строку
2 2 2
NEXT i
1 2 1
END
Пример 4. Элементы заданного числового массива a1, a2, ..., aN упорядо-
чить по возрастанию.
Тест
|
|
|
|
|
|
|
|
Данные |
|
Результат |
|
|
|
|
|
|
|
|
|
|
|
|
|
N=4 |
|
A=(5, 2, 7, 1) |
|
A=(1, 2, 5, 7) |
|
|
|
|
|
|
|
|
|
|
|
|
|
122
Часть 13. Основы алгоритмизации и программирования
Школьный АЯ
алг Возрастание(арг цел N, арг рез
вещ таб A[1:N])
нач цел i, j, вещ Tmp
нц для i от 1 до N-1
нц для j от i+1 до N ecли A[i] > A[j]
то Tmp:=A[i];
Блок-схема (фрагмент)
A[i]:=A[j]; A[j]:=Tmp
все
кц
кц
кон
Исполнение алгоритма
|
|
|
|
|
|
|
|
|
i |
|
j |
|
A[i]>A[j] |
|
Массив A |
||
|
|
|
|
|
|
|
||
|
|
|
|
|
||||
1 |
|
|
|
+ |
|
2, 5, 7, |
||
|
|
2 |
|
- |
|
|
1 |
|
|
|
3 |
|
+ |
|
|
|
|
|
|
4 |
|
|
|
1, |
5, |
7, |
|
|
|
|
|
|
|
2 |
|
|
|
|
|
|
|
|
|
|
2 |
|
|
|
|
|
|
|
|
|
|
3 |
|
- |
|
|
|
|
|
|
|
|
|
|
1, |
2, |
7, |
|
|
4 |
|
+ |
|
|
|
|
|
|
|
|
|
|
|
5 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1, |
2, |
5, |
3 |
|
4 |
|
+ |
|
|
|
|
|
|
|
|
|
|
|
7 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Turbo Pascal
Program Regulation;
Uses Crt;
Type Mas = Array [1..10] of Real;
123
Часть 13. Основы алгоритмизации и программирования
Var A |
: Mas; |
i, j, N : Integer; |
|
Tmp |
: Real; |
{-------------------------------------------- |
} |
Procedure Input; {описание процедуры ввода массива
} |
|
|
Begin |
|
ClrScr; |
|
Write('Введите N = '); ReadLn(N); |
|
WriteLn('Введите элементы массива: '); |
|
For i := 1 to N do |
|
begin Write('A [ ' , i , ' ] = '); |
|
ReadLn(A[i]) |
|
end; |
|
End; {of Input} |
{ |
--------------------------------------------} |
Procedure |
Regulate; {описание процедуры упорядоче- |
|
ния по возрастанию} |
|
|
Begin |
|
|
For i |
:= 1 to |
N-1 do |
For |
j := i+1 to N do |
|
If A[i] > |
A[j] then |
|
|
begin Tmp:=A[i]; A[i]:=A[j]; A[j]:=Tmp |
|
|
end; |
|
End; {of Regulate} |
||
{-------------------------------------------- |
|
} |
Procedure |
Output; |
{описание процедуры вывода ре- |
зультата} Begin
WriteLn('Упорядоченный массив :');
124
Часть 13. Основы алгоритмизации и программирования
For i:=1 to N do Write( A[i] : 6 : 1);
WriteLn; ReadLn
End; {of Output} {--------------------------------------------}
BEGIN
Input; {вызов процедуры ввода массива } Regulate; {вызов процедуры упорядочения по возрас-
танию}
Output {вызов процедуры вывода результата}
END.
QBasic
CLS : INPUT "N = "; N : DIM A(N)
FOR i = 1 TO N
PRINT "A(" ; i ; ") = " ;
INPUT A(i)
NEXT i
FOR i = 1 TO N-1
FOR j = i+1 TO N
IF A(i) > A(j) THEN Tmp=A(i) : A(i)=A(j) :
A(j)=Tmp
NEXT j
NEXT i
PRINT : PRINT "Упорядоченный массив :"
FOR i = 1 TO N
PRINT A(i) ;
NEXT i : PRINT
END
125
Часть 13. Основы алгоритмизации и программирования
Пример 5. В массиве A(N, N) вычислить две суммы элементов, располо-
женных ниже и выше главной диагонали.
|
Тест |
|||
|
|
|
|
|
Данные |
|
|
Результат |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
S1=6 |
|
N=3 |
|
|
S2=9 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Школьный АЯ
алг Две суммы (арг цел N, арг вещ таб A[1:N, 1:N],
рез вещ S1, S2)
надо | S1 = сумма элементов ниже главной диагонали
| S2 = сумма элементов выше главной диагонали нач цел i, j
S1:=0; S2:=0
нц для i от 2 до N | циклы по элементам, располо-
женным
нц для j от 1 до i-1 | ниже главной диагонали
S1:=S1 + A[i, j]
кц
кц
нц для i от 1 до N-1 | циклы по элементам, располо-
женным
нц для j от i+1 до N | выше главной диагонали
S2:=S2 + A[i, j]
кц
кц
кон
Исполнение алгоритма |
Блок-схема (фрагмент) |
126
Часть 13. Основы алгоритмизации и программирования
|
|
|
|
|
|
|
|
i |
|
j |
|
S1 |
|
S2 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
0 |
|
|
|
|
|
0 |
|
|
|
2 |
|
1 |
|
0+3=3 |
|
|
|
3 |
|
1 |
|
3+2=5 |
|
|
|
|
|
2 |
|
5+1=6 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
1 |
|
2 |
|
|
|
0+2=2 |
|
|
|
3 |
|
|
|
2+4=6 |
|
2 |
|
3 |
|
|
|
6+3=9 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Turbo Pascal
Program TwoSums;
Uses Crt;
Var A : Array [1..10, 1..10] of Real;
S1, S2 : Real; {S1, S2 - суммы элементов, рас-
положенных ниже
и выше главной диагонали,
соответственно}
N, i, j : Integer; {--------------------------------------------}
Procedure InputOutput;{описание процедуры ввода-
вывода исходных данных}
Begin ClrScr;
Write('Количество строк и столбцов - '); ReadLn(N);
For i := 1 to N do {Ввод матрицы}
For j := 1 to N do
127
Часть 13. Основы алгоритмизации и программирования
begin Write('A[' , i , ', ' , j , '] = ?
');
ReadLn(A[i, j])
|
end; WriteLn; |
ClrScr; WriteLn(' Матрица А'); |
|
For |
i := 1 to N do {Вывод матрицы} |
begin |
|
|
For j := 1 to N do Write(A[i, j] : 5 : 1); |
|
WriteLn |
end; WriteLn |
|
End; { of InputOutput } |
|
{-------------------------------------------- |
} |
Procedure Under; |
|
Begin |
{описание процедуры суммирования элементов, |
} |
|
S1 := 0; {расположенных ниже главной диагонали
}
For i := 2 to N do
For j := 1 to i-1 do
|
S1 := S1 + A[i, j]; |
|
WriteLn('О т в е т :'); |
|
|
WriteLn('Сумма элементов, лежащих ниже главной |
||
диагонали |
=', S1:5:1); |
|
End; |
|
|
{-------------------------------------------- |
|
} |
Procedure Over; |
|
|
Begin |
{описание процедуры |
суммирования элемен- |
тов,} |
|
|
S2 := 0; {расположенных |
выше главной диагонали} |
|
For |
i := 1 to N-1 do |
|
128
Часть 13. Основы алгоритмизации и программирования
For j := i+1 to N do
S2 := S2 + A[i, j];
WriteLn('Сумма элементов, лежащих выше главной диагонали =', S2:5:1);
ReadLn
End;
{--------------------------------------------} BEGIN
InputOutput; {Вызов процедуры ввода-вывода матрицы
}
Under; {Вычисление суммы элементов, лежащих ниже главной диагонали}
Over ; {Вычисление суммы элементов, лежащих выше главной диагонали }
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 "Матрица А"
FOR i = 1 TO N 'Вывод массива по строкам
FOR j = 1 TO N
PRINT A(i, j) ;
NEXT j
129
Часть 13. Основы алгоритмизации и программирования
NEXT i : PRINT
S1 = 0 'Вычисление суммы элементов, лежащих ниже главной диагонали
FOR i = 2 TO N
FOR j = 1 TO i-1
S1 = S1 + A(i, j)
NEXT j
NEXT i
S2 = 0 'Вычисление суммы элементов, лежащих выше главной диагонали
FOR i = 1 TO N-1
FOR j = i+1 TO N
S2 = S2 + A(i, j)
NEXT j
NEXT i
PRINT "Сумма элементов, лежащих ниже главной диагона-
ли равна "; S1
PRINT "Сумма элементов, лежащих выше главной диагона-
ли равна "; S2
END
130