Язык | Схемы вложенных циклов типа для |
Школьный АЯ | нц для
i от A1 до B1
тело внешнего цикла . . . . . . нц для j от A2 до B2 тело внутреннего цикла . . . . . . кц . . . . . . кц |
Pascal | For
i := A1 to B1 do
begin . . . . . . For j := A2 to B2 do begin . . . . . . end; . . . . . . end; |
Basic | FOR I = A1 TO
B1 STEP H1
. . . . . . FOR J = A2 TO B2 STEP H2 . . . . . . NEXT J . . . . . . NEXT I |
|
|
|
|
|
|
Школьный АЯ
алг Суммы столбцов (арг цел N, M, арг вещ таб A[1:N, 1:M], рез вещ таб S[1:M]) дано | N>0, M>0 нач цел i, j нц для j от 1 до M | цикл по столбцам S[j]:=0 нц для i от 1 до N | цикл по элементам S[j]:=S[j] + A[i, j] |текущего столбца кц кц конИсполнение алгоритма
|
|
Program SumColumn; Uses Crt; Var A : Array [1..10, 1..10] of Real; N, M, i, j : Integer; S : Array [1..10] of Real; {--------------------------------------------} Procedure InputOutput; Begin {описание процедуры ввода-вывода исходных данных} ClrScr; Write('Количество строк - '); ReadLn(N); Write('Количество столбцов - '); ReadLn(M); For i := 1 to N do {Ввод элементов матрицы} For j := 1 to M do begin Write('A[' , i , ', ' , j , ']= ? '); {вывод запроса} ReadLn(A[i, j]) {ввод значения} end; WriteLn;
ClrScr; WriteLn(' Матрица А'); For i := 1 to N do {Вывод матрицы по строкам} begin For j := 1 to M do Write(A[i, j] : 5 : 1); {вывод i-ой строки} WriteLn {перенос курсора на начало следующей строки} end; WriteLn End; { of InputOutput } {--------------------------------------------} Procedure SumCol; Begin {описание процедуры вычисления сумм элементов столбцов} For j := 1 to M do {цикл по столбцам матрицы} begin S[j] := 0; {обнуление суммы элементов j-го столбца} For i := 1 to n do S[j] := S[j] + A[i, j] {накопление суммы} end; End; { of SumCol } {--------------------------------------------} Procedure OutResult; {описание процедуры вывода результатов} Begin Write( 'О т в е т : Суммы элементов столбцов равны '); For j := 1 to M do Write(S[j] : 5 : 1); WriteLn; ReadLn End; { of OutResult } {--------------------------------------------} BEGIN InputOutput; {вызов процедуры ввода-вывода исходных данных } SumCol; {вызов процедуры вычисления сумм } OutResult; {вызов процедуры вывода результатов} END.
CLS INPUT "Количество строк - ", N INPUT "Количество столбцов - ", M DIM A(N, M), S(M) 'Резервирование памяти для матрицы A и вектора S FOR i = 1 TO N 'Ввод матрицы FOR j = 1 TO M PRINT "A(" ; i ; ", " ; j ; ") = "; INPUT A(i, j) NEXT j NEXT i
FOR j = 1 TO M 'Вычисление сумм элементов столбцов S(j) = 0 FOR i = 1 TO N S(j) = S(j) + A(i, j) NEXT i NEXT j
PRINT "О т в е т : Суммы элементов столбцов равны "; FOR j = 1 TO M PRINT S(j); NEXT j : PRINT END
|
|
|
|
|
|
алг Количество максимумов(арг цел N,M, арг цел таб А[1:N,1:M], рез цел K) нач цел i, j, Amax Amax := A[1, 1] | Поиск максимального элемента матрицы нц для i от 1 до N нц для j от 1 до M если A[i, j] > Amax то Amax := A[i, j] все кц кц K := 0 | подсчет количества вхождений Amax нц для i от 1 до N нц для j от 1 до M если A[i, j] = Amax то K := K+1 все кц кц кон
|
|
Program NumberOfMaximums; Uses Crt; Type Mas = Array [1..10, 1..10] of Integer; Var A : Mas; N, M, K, Amax, i, j : Integer; {K - искомый результат} {--------------------------------------------} Procedure InputOutput(Var A : Mas); Begin {описание процедуры ввода-вывода матрицы} ClrScr; Write('Количество строк - '); ReadLn(N); Write('Количество столбцов - '); ReadLn(M); For i := 1 to N do {Ввод матрицы} For j := 1 to M do begin Write('A[' , i , ', ' , j , ']= ? '); ReadLn(A[i, j]) end; WriteLn;
ClrScr; WriteLn(' Матрица А'); For i := 1 to N do {Вывод матрицы} begin For j := 1 to M do Write(A[i, j] : 5 ); WriteLn end; WriteLn End; { of InputOutput } {--------------------------------------------} Procedure MaxElement(Var A : Mas; Var Amax : Integer); Begin {описание процедуры поиска Amax} Amax := A[1, 1]; For i := 1 to N do For j := 1 to M do If A[i, j] > Amax then Amax := A[i, j]; End; {of MaxElement} {--------------------------------------------} Procedure HowMuch(Var A : Mas; K : Integer); Begin {описание процедуры подсчета числа вхождений Amax} K:=0; For i := 1 to N do For j := 1 to M do if A[i, j] = Amax then K := K+1; WriteLn('Максимальное число ', Amax : 3 , ' встречается ', K, ' раз(a)'); ReadLn; End; {of HowMuch} {--------------------------------------------} BEGIN InputOutput(A); {Вызов процедуры ввода-вывода матрицы} MaxElement(A, Amax); {Вызов процедуры поиска макс. элемента} HowMuch(A, K) {Вызов процедуры подсчета числа вхождений максимального элемента } END.
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
CLS : PRINT "Матрица А" FOR i = 1 TO N 'Вывод матрицы FOR j = 1 TO M PRINT A(i, j) ; NEXT j PRINT NEXT i : PRINT
Amax = A(1, 1) 'Поиск максимального элемента FOR i = 1 TO N FOR j = 1 TO M IF A(i, j) > Amax THEN Amax = A(i, j) NEXT j NEXT i
K = 0 'Подсчет числа вхождений Amax FOR i = 1 TO N FOR j = 1 TO M IF A(i, j) = Amax THEN K = K + 1 NEXT j NEXT i
PRINT "Максимальное число " ; Amax ; PRINT " встречается " ; K ; " раз(a)" END
|
|
|
|
алг Поменять местами строки (арг цел N, M, арг цел P, Q, арг рез вещ таб А[1:N, 1:M] ) нач цел j, вещ Tmp нц для j от 1 до M | цикл по элементам строк матрицы Tmp:=A[P, j]; A[P, j]:=A[Q, j]; A[Q, j]:=Tmp кц кон
|
|
Program Exchange; Uses Crt; Type Mas = Array [1..10, 1..10] of Real; Var A : Mas; N, M, P, Q, i, j : Integer; Tmp : Real; {--------------------------------------------------------------} Procedure InputOutput(Var A:Mas); {описание процедуры ввода-вывода} Begin ClrScr; Write('Количество строк - '); ReadLn(N); Write('Количество столбцов - '); ReadLn(M); For i := 1 to N do For j := 1 to M do begin Write('A[' , i , ', ' , j , '] = ? '); Read(A[i, j]) end; WriteLn; WriteLn('Номера строк, которые нужно поменять местами :'); Write('P = '); ReadLn(P); Write('Q = '); ReadLn(Q); WriteLn; ClrScr; WriteLn('Исходная матрица : ' ) ; For i := 1 to N do begin For j := 1 to M do Write(A[i, j] : 5 : 1); WriteLn end; WriteLn End; { of InputOutput} {--------------------------------------------------------} Procedure Change(P, Q: Integer); {описание процедуры замены строк } Begin For j := 1 to M do begin Tmp:=A[P, j]; A[P, j]:=A[Q, j]; A[Q, j]:=Tmp end; End; { of Change} {--------------------------------------------------------} 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.
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
INPUT "P = " , P : INPUT "Q = " , Q
CLS : PRINT "Исходная матрица :" FOR i = 1 TO N 'Вывод матрицы FOR j = 1 TO M PRINT A(i, j) ; NEXT j PRINT NEXT i
FOR j = 1 TO M 'Замена строк Tmp=A(P,j):A(P,j)=A(Q,j):A(Q,j)=Tmp NEXT j PRINT : PRINT "Матрица-результат :" FOR i = 1 TO N 'Вывод результата FOR j = 1 TO M PRINT A(i, j) ; NEXT j PRINT ' переход на новую строку NEXT i END |
Результаты работы QBasic-программы
|
|
|
|
|
|
|
Школьный АЯ
алг Возрастание(арг цел 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 все кц кц конИсполнение алгоритма
|
|
Program Regulation; Uses Crt; Type Mas = Array [1..10] of Real; 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('Упорядоченный массив :'); For i:=1 to N do Write( A[i] : 6 : 1); WriteLn; ReadLn End; {of Output} {--------------------------------------------} BEGIN Input; {вызов процедуры ввода массива } Regulate; {вызов процедуры упорядочения по возрастанию} Output {вызов процедуры вывода результата} END.
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
|
|
N=3 |
|
алг Две суммы (арг цел 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] кц кц кон
Исполнение алгоритма
|
|
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 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 For j := i+1 to N do S2 := S2 + A[i, j]; WriteLn('Сумма элементов, лежащих выше главной диагонали =', S2:5:1); ReadLn End; {--------------------------------------------} BEGIN InputOutput; {Вызов процедуры ввода-вывода матрицы } Under; {Вычисление суммы элементов, лежащих ниже главной диагонали} Over ; {Вычисление суммы элементов, лежащих выше главной диагонали } END.
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 PRINT 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
3.1. [Pascal | C | Basic] Дана матрица A(N, M). Найдите её наибольший элемент и номера строки и столбца, на пересечении которых он находится.
3.2. [Pascal | C | Basic] В каждой строке заданной матрицы A(N, M) вычислите сумму, количество и среднее арифметическое положительных элементов.
3.3. [Pascal | C | Basic] Для заданной целочисленной матрицы A(N, M) определите, является ли сумма её элементов чётным числом, и выведите на печать соответствующий текст.
3.4. [Pascal | C | Basic] Дана матрица A(N, M). Найдите количество элементов этой матрицы, больших среднего арифметического всех её элементов.
3.5. [Pascal | C | Basic] Дана целочисленная матрица A(N, M). Вычислите сумму и произведение тех её элементов, которые при делении на два дают нечётное число.
3.6. [Pascal | C | Basic] В заданной матрице A(N, M) поменяйте местами столбцы с номерами P и Q.
3.7. [Pascal | C | Basic] Дана матрица A(N, M). Вычислите вектор X(M), где значение Xj равно сумме положительных элементов j-го столбца матрицы A.
3.8. [Pascal | C | Basic] Дана матрица A(N, M). Получите вектор X(M), равный P-й строке матрицы, и вектор Y(N), равный Q-му столбцу матрицы.
3.9. [Pascal | C | Basic] Дана матрица A(N, M). Поменяйте местами её наибольший и наименьший элементы.
3.10. [Pascal | C | Basic]
По заданному n постройте матрицы размером (n,n) вида
а) 1 0 ... 0
0 1 ... 0 . . . . 0 0 ... 1 |
б) n n-1 n-2 ... 1
0 n n-1 ... 2 . . . . . 0 0 0 ... n |
в) 0 0 ... 0 1
0 0 ... 1 2 . . . . . 1 2 ... n-1 n |
3.12. [Pascal | C | Basic] Дана матрица A(N, N). Перепишите элементы её главной диагонали в одномерный массив Y(N) и разделите их на максимальный элемент главной диагонали.
3.13. [Pascal | C | Basic] Дана матрица A(N, M). Получите Y = X1 . XN + X2 . XN-1 + ... + XN . X1 , где Xi - наибольший элемент в строке с номером i матрицы A.
3.14. [Pascal | C | Basic] Постройте матрицу A(N, N) , элементы которой определяются равенствами ai j = i + 2 . j , а также найдите произведение чётных элементов этой матрицы, удовлетворяющих условию ai j < P (0 < P < 3N).
3.15. [Pascal | C | Basic] Найдите наибольший элемент побочной диагонали заданной матрицы A(N, N) и выведите на печать всю строку, в которой он находится.
3.16. [Pascal | C | Basic] Дана целочисленная матрица A(N, M). Вычислите сумму и произведение нечётных отрицательных элементов матрицы, удовлетворяющих условию | ai j | < i.
3.17. [Pascal | C | Basic]
Для заданной матрицы А(N, N) найдите:
а) сумму всех элементов;
б) сумму элементов главной диагонали;
в) значения наибольшего и наименьшего из элементов главной диагонали.
3.18. [Pascal | C | Basic] По трём заданным матрицам А(N, N), В(N, N) и С(N, N) постройте матрицу Х того же размера, каждый элемент которой вычисляется по формуле xi j = max { ai j , bi j , ci j } .
3.19. [Pascal | C | Basic] Дана матрица А(N, N) и целое P. Преобразуйте матрицу по правилу: строку с номером P сделайте столбцом с номером P, а столбец с номером P сделайте строкой с номером P.
3.20. [Pascal | C | Basic] Для заданной матрицы A(N, N) найдите сумму элементов, расположенных в строках с отрицательным элементом на главной диагонали.
3.21. [Pascal | C | Basic]
Дана матрица A(N, M). Определите:
а) число ненулевых элементов в каждой строке матрицы;
б) общее число ненулевых элементов в матрице;
в) отношение числа ненулевых элементов в каждой строке матрицы
к общему числу ненулевых элементов в матрице.
3.22. [Pascal | C | Basic] Вычислите матрицу С(N, N), являющуюся суммой матриц А(N, N) и В(N, N). Матрица А задана, а элементы матрицы B вычисляются по формуле
3.23. [Pascal | C | Basic] Из заданной матрицы A(N, M) удалите строку с номером K и столбцы с номерами P и Q. Полученную матрицу уплотните.
3.24. [Pascal | C | Basic] В заданном массиве X(N, M) все числа различны. В каждой строке выбирается минимальный элемент, затем среди этих чисел выбирается максимальное. Напечатайте номер строки массива Х, в которой расположено выбранное число.
3.25. [Pascal | C | Basic] В заданном массиве A(N, M) переставьте строки так, чтобы суммы их элементов возрастали.
3.26. [Pascal | C | Basic] В заданном массиве A(N, N) вычислите две суммы элементов, расположенных выше и ниже побочной диагонали.
3.27. [Pascal | C | Basic] Дана матрица A(N, M). Переставляя её строки и столбцы, добейтесь того, чтобы наибольший элемент (один из них) оказался в верхнем левом углу.
3.28. [Pascal | C | Basic] Расстояние между двумя множествами точек это расстояние между наиболее близко расположенными точками этих множеств. Найдите расстояние между двумя заданными множествами точек на плоскости.
3.29. [Pascal | C | Basic] В заданном множестве точек на плоскости найдите пару точек с максимальным расстоянием между ними.
3.30. [Pascal | C | Basic] Задан список участников соревнований по плаванию и их результаты. Расположите результаты и фамилии участников в соответствии с занятым местом.
3.31. [Pascal | C | Basic] На основе сведений о ежедневном пробеге на тренировке спортсменов команды рассчитате среднесуточный и общий пробег каждого спортсмена за 20 дней.
3.32. [Pascal | C | Basic] Известен расход по N видам горючего в каждом из M автохозяйств. Определите для каждого хозяйства вид горючего с наибольшим и с наименьшим расходом.
3.33. [Pascal | C | Basic]
На основе сведений об отметках учеников класса в последней четверти
а) вычислите средние баллы по каждому предмету;
б) определите группу из пяти лучших учеников;
в) определите группу из пяти самых слабых учеников.
3.34. [Pascal | C | Basic]
Заданы запасы по N видам топлива в каждом из М районов города
и нормы минимально допустимого запаса по каждому виду топлива. Определите:
а) запасы каждого вида топлива на все районы;
б) запасы всех видов топлива для каждого района;
в) в каких районах запас того или иного вида топлива меньше
минимально допустимого и каких видов топлива запасено недостаточно в каждом
районе.
3.35. [Pascal | C | Basic] Последовательно (в лексикографическом порядке) напечатайте всевозможные перестановки целых чисел 1, 2, ..., n. Значение n задано.
3.36*. [Pascal | C | Basic] Напечатать элементы заданной матрицы А(N, N) в следующем порядке:
3.37*. [Pascal | C | Basic] Дана матрица A(N, N), где N нечётное число. Вычислите сумму её элементов из заштрихованной области.
3.38. [Pascal | C | Basic] Шестизначный номер автобусного билета называют "счастливым", если равны суммы его первых трёх и последних трёх цифр. Подсчитате количество "счастливых" билетов.
3.39. [Pascal | C | Basic] Дана последовательность целых чисел a1, a2, ..., am . Постройте на ее основе новую последовательность, содержащую только те числа, которые в исходную последоватеьность входят по одному разу.
3.40. [Pascal | C | Basic]
Даны два множества целых чисел:
a1,
a2, ...,
an и
b1,
b2, ...,
bm. Среди
a1,
a2, ...,
an нет повторяющихся чисел, нет их и среди
b1,
b2, ...,
bm. Постройте:
а) пересечение и объединение этих множеств;
б) множество, содержащее все члены множества b1,
b2, ...,
bm,
которые не входят в множество a
1, a2, ...,
an.
3.41. [Pascal | C | Basic] Вычислите P = 1 . 2 + 2 . 3 . 4 + 3 . 4 . 5 . 6 + ...+ N . (N+1) . ... . 2N.
3.42. [Pascal | C | Basic] Дана квадpатная таблица А(N, N), элементами котоpой являются нули и единицы. Подсчитайте, сколько в ней содержится квадpатов, состоящих из единиц, со стоpоной из двух элементов таблицы и pазвеpнутых по отношению к таблице на 45 гpадусов.
3.43. [Pascal | C | Basic] Дана квадpатная таблица А(N, N), элементами котоpой являются нули и единицы. Не проверяя значений элементов таблицы, замените каждый из нулей на единицу, а каждую из единиц на ноль.
3.44. [Pascal | C | Basic] Имеется N партий микросхем одного вида. Из каждой партии для контроля отобрали M микросхем. Тестовый контроль определил годность или негодность каждой микросхемы. Для того, чтобы вся партия была забракована, достаточно обнаружить в этих M выбранных микросхемах K негодных. По данным тестового контроля определите количество негодных микросхем в каждой партии и число забракованных партий.
3.45. [Pascal | C | Basic]
Числом Армстронга называется целое n-значное число, сумма n-х степеней цифр
которого равна самому этому числу. Например, числом Армстронга является число
407, так как 407 = 43 + 03 + 73. Найдите все числа Армстронга
для заданного n <= 10.