нц пока <условие> тело внешнего цикла . . . . . . нц для i от A до B тело внутреннего цикла кц . . . . . . кц |
нц для i от A до B тело внешнего цикла . . . . . . нц пока <условие> тело внутреннего цикла кц . . . . . . кц |
|
|
||
|
|
|
|
|
|
|
|
Школьный АЯ алг Строки с нулями (арг цел N, M, арг цел таб A[1:N, 1:M], рез цел K) дано | N>0, M>0 нач цел i, j, лит Flag K := 0 нц для i от 1 до N | цикл по всем строкам j:= 1; Flag := "Нет" нц пока (j <= M) и (Flag = "Нет") | цикл до нулевого элемента строки если A[i, j] = 0 то Flag:="Да"; K:=K+1 иначе j:=j+1 все кц кц кон |
|
|
|
|
|
|
|
"Да" |
2 |
+ -(кц) |
+ |
1 |
|
|
2 3 4 |
+ + -(кц) |
- - |
|
|
"Да" |
|
-(кц) |
|
|
Turbo Pascal
Program ContainZero; Uses Crt; Var A : Array[1..10, 1..10] of Integer; N, M, i, j : Integer; K : Integer; {K - количество строк, содержащих нули} {--------------------------------------------} 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; 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 } {--------------------------------------------} Function Zero(i:Integer):Boolean; {описание функции, принимающей } Var Flag : Boolean; {значение Истина, если в строке есть } Begin {нули, и Ложь, если в строке нет нулей} j:=1; Flag:=FALSE; While (j<=M) and not Flag do If A[i, j]=0 then Flag:=TRUE else j:=j+1; Zero:=Flag {значение функции присваивается имени функции} End; {--------------------------------------------} BEGIN InputOutput; {вызов процедуры ввода-вывода} K:=0; For i := 1 to N do If Zero(i) then K:=K+1; {Zero(i) - указатель функции Zero} WriteLn('Количество строк, содержащих нули, равно ', K); ReadLn 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 : CLS PRINT "Исходная матрица :" : PRINT FOR i = 1 TO N FOR j = 1 TO M PRINT A(i, j) ; NEXT j : PRINT NEXT i : PRINT
K = 0 FOR i = 1 TO N 'цикл по всем строкам j = 1 : Flag = 0 WHILE (j <= M) AND ( Flag = 0 ) 'цикл до нулевого элемента строки IF A(i, j) = 0 THEN Flag = 1: K = K + 1 ELSE j = j + 1 WEND NEXT i
PRINT "О т в е т : строк, содержащих нули, " ; K ; "." END
Система тестов
|
|
|
|
||||
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Школьный АЯ
алг Да или Нет(арг цел N,M,K, арг цел таб A[1:N, 1:M], рез лит Otvet) дано | N, M >0 нач цел i, j, JMax, лит Flag Flag:="Нет"; j:=1 нц пока (j<=M) и (Flag="Нет") | цикл по столбцам с прерыванием JMax:=A[1,j] нц для i от 2 до N | цикл нахождения JMax если A[i,j]>JMax то JMax:=A[i, j] все кц если K=JMax | условие прерывания цикла то Flag:="Да" иначе j:=j+1 все кц если Flag="Да" то Otvet := "Встречается" иначе Otvet := "Не встречается" все кон |
|
|
|
|
|
|
|
|
|
|
|
|
|
4 |
3 |
- |
|
|
|
-(кц) |
|
3 |
- |
|
|
|
|
2 3 |
+ -(кц) |
1 2 |
2 |
+ |
- |
Turbo Pascal
Program Checking; Uses Crt; Var A : Array[1..10, 1..10] of Integer; N, M, i, j : Integer; K : Integer; {заданное число} JMax : Integer; {максимальный элемент столбца} Flag : Boolean; {---------------------------------------------------} Procedure InputOutput; {описание процедуры ввода-вывода} Begin ClrScr; Write('Введите целое K = '); ReadLn(K); WriteLn; WriteLn('Введите целочисленную матрицу А'); 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; ClrScr;
WriteLn('Исходная матрица :'); WriteLn; For i := 1 to N do begin For j := 1 to M do Write(A[i, j] : 4); WriteLn end; WriteLn; End; { of InputOutput } {--------------------------------------------} Procedure YesOrNot(Var Flag:Boolean); {описание процедуры решения задачи} Begin Flag:=FALSE; j:=1; While (j<=M) and not Flag do {цикл по столбцам с прерыванием} begin JMax:=A[1, j]; For i := 2 to N do {цикл нахождения JMax} If A[i, j]>JMax then JMax:=A[i, j]; If K=JMax then Flag:=TRUE else j:=j+1 {условие прерывания} end; End; {--------------------------------------------} BEGIN InputOutput; {вызов процедуры ввода-вывода исходных данных} YesOrNot(Flag); {вызов процедуры решения задачи}
Write('О т в е т : число ', K ); If Flag then Write(' встречается') else Write(' не встречается'); WriteLn(' среди максимальных элементов столбцов матрицы'); ReadLn END.
QBasic
CLS : INPUT "Введите целое K = ", K PRINT "Введите целочисленную матрицу А" 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
Flag = 0 : j = 1 WHILE (j <= M) AND (Flag = 0) 'цикл по столбцам с прерыванием JMax = A(1, j) FOR i = 2 TO N 'цикл нахождения JMax IF A(i, j) > JMax THEN JMax = A(i, j) NEXT i IF K = JMax THEN Flag = 1 ELSE j = j + 1 'условие прерывания WEND PRINT "О т в е т : число"; K; IF Flag = 1 THEN PRINT "встречается"; ELSE PRINT "не встречается"; END IF PRINT " среди максимальных элементов столбцов матрицы" END
Система тестов
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
алг Магический квадрат (арг цел N, арг цел таб A[1:N, 1:N], рез лит Otvet) дано | N>0
нач цел i, j, St, S, лит Flag St:=0 | вычисление суммы элементов главной диагонали нц для i от 1 до N | в качестве эталонной суммы St St:=St+A[i, i] кц
Flag:="Да"; i:=1 нц пока (i<=N) и (Flag="Да") | вычисление сумм элементов строк S:=0 нц для j от 1 до N S:=S+A[i, j] кц если 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:="Нет" все все если Flag="Да" то Otvet := "Это магический квадрат." иначе Otvet := "Это не магический квадрат." все кон
Вычисление суммы
элементов главной диагонали в качестве эталонной суммы |
|
Вычисление сумм
|
Вычисление сумм элементов столбцов
и сравнение их с
эталонной суммой
Вычисление суммы
элементов побочной
диагонали и сравнение
ее с эталонной суммой
|
теста |
|
|
|
|
|
|
|
|
|
|
1 |
|
|
2 3 1,2,3 1,2,3 1,2,3 1,2,3 |
+ + |
1,2,3 1,2,3 1 2 3 |
+
|
+ |
6 6 6 6 6 6 |
- - - - - - |
"Магический квадрат" |
|
|
"Нет" |
|
-(кц) |
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 , '] = '); 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; 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
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) 'вычисление сумм элементов столбцов 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
Тест
|
|
|
|
|
|
|
|
|
Школьный АЯ
(в этом алгоритме отражены процессы ввода исходных данных и вывода результатов ) алг Модификация(арг цел 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 = "Нет") |цикл до если 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] кц кц кон |
|
|
|
|
|
|
|
|
|
"Да" |
2 1 2 3 |
+ -(кц) |
+ |
|
A[1,1]=0 A[1,2]=0 A[1,3]=0 |
|
|
2 3 4 |
+ + -(кц) |
- - |
|
|
|
"Да" |
1 2 3 |
-(кц) |
|
|
A[3,2]=0 A[3,3]=0 |
Turbo Pascal
Program Modify; Uses Crt; Var A : Array[1..10, 1..10] of Real; 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; ClrScr;
WriteLn(’ Исходная матрица :’); 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 Line(Var i : Integer); {описание процедуры обработки} Var Flag : Boolean; {строки матрицы } Begin j := 1; Flag := FALSE; While (j<=N) and not Flag do {цикл до первого отрицательного} If A[i, j]<0 then Flag:=TRUE else j:=j+1; {элемента строки}
If Flag then {обнуление строки, содержашей} For j := 1 to N do A[i, j] := 0 {отрицательные элементы } End; {-------------------------------------------} Procedure OutRes; {описание процедуры вывода матрицы-результата} Begin WriteLn(’ Матрица-результат :’); WriteLn; For i := 1 to N do begin For j := 1 to N do Write(A[i, j]:5:1); WriteLn end; ReadLn End; { of OutRes } {-------------------------------------------} BEGIN InputOutput; {вызов процедуры ввода-вывода матрицы} For i := 1 to N do Line(i);{циклический вызов процедуры обработки строк} OutRes; {вызов процедуры вывода матрицы-результата} 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 "Исходная матрица :" : PRINT FOR i = 1 TO N ’вывод матрицы FOR j = 1 TO N PRINT A(i, j) ; NEXT j PRINT NEXT i : PRINT
FOR i = 1 TO N ’цикл по строкам матрицы j = 1 : Flag=0 WHILE (j <= N) AND (Flag = 0) ’цикл до первого отрицательного IF A(i, j) < 0 THEN Flag = 1 ELSE j = j + 1 ’элемента строки WEND
IF Flag = 1 THEN ’обнуление строки, содержащей FOR j = 1 TO N ’отрицательные элементы A(i, j) = 0 NEXT j END IF NEXT i
PRINT "Матрица-результат :" : PRINT ’вывод матрицы-результата FOR i = 1 TO N FOR j = 1 TO N PRINT A(i, j) ; NEXT j : PRINT NEXT i END
6.1. [Pascal | C | Basic] Дана матрица A(N, N) . Переменной В присвойте значение, равное количеству строк матрицы А, содержащих хотя бы одну нулевую компоненту.
6.2. [Pascal | C | Basic] Дана матрица B(N, N) . Получите вектор A(N) , компоненты которого находятся по правилу: Ai равно первому по порядку положительному элементу в i-ой строке матрицы (если таких элементов в строке нет, то примите Ai = -1).
6.3. [Pascal | C | Basic] Дана матрица B(N, N). Получите вектор A(N), компоненты которого находятся по правилу: Ai равно количеству отрицательных чисел, с которых начинается i-ая строка.
6.4. [Pascal | C | Basic] Среди строк заданной целочисленной матрицы, содержащих только нечётные элементы, найдите строку с максимальной суммой модулей элементов.
6.5. [Pascal | C | Basic] Среди столбцов заданной целочисленной матрицы, содержащих только такие элементы, которые по модулю не больше 10, найдите столбец с минимальным произведением элементов.
6.6. [Pascal | C | Basic] Задано два множества точек на плоскости. В первом множестве найдите хотя бы одну точку, сумма расстояний от которой до точек второго множества превышала бы заданную величину.
6.7. [Pascal | C | Basic] В заданной матрице A(N, M) найдите количество строк, не содержащих отрицательных чисел.
6.8. [Pascal | C | Basic] Дана целочисленная матрица А(N, N) . Сформируйте результирующий вектор B , элементами которого являются суммы элементов только тех строк матрицы А , которые начинаются с К положительных чисел подряд.
6.9. [Pascal | C | Basic] Подсчитайте количество столбцов заданной целочисленной матрицы A(N, N) , в которых имеются взаимнопротивоположные соседние числа.
6.10. [Pascal | C | Basic] Дана матрица A(N, M) . Постройте вектор B(N) , элементы Bi которого равны единице, если элементы i-ой строки образуют упорядоченную по убыванию или по возрастанию последовательность, и нулю во всех остальных случаях.
6.11. [Pascal | C | Basic] Определите, сколько строк заданной матрицы A(N, M) содержат хотя бы один элемент из заданного числового диапазона.
6.12. [Pascal | C | Basic]
Найдите номера строк заданной целочисленной матрицы A(N, M) , в которых:
а) на всех нечётных позициях стоят нули;
б) на нечетных позициях встречаются нули.
6.13. [Pascal | C | Basic] Найдите номера столбцов заданной целочисленной матрицы A(N, M), которые составлены из попарно различных чисел, и подсчитайте количество таких столбцов.
6.14. [Pascal | C | Basic] Подсчитайте количество различных (не повторяющихся) чисел, встречающихся в заданном целочисленном массиве A(N).
6.15. [Pascal | C | Basic] Подсчитайте количество различных (не повторяющихся) чисел, встречающихся в заданной целочисленной матрице A(N, M) .
6.16. [Pascal | C | Basic]
Даны сведения о количестве забитых голов каждого футболиста команды в
каждом из матчей чемпионата. Проверьте, сколько в команде есть футболистов:
а) забивших хотя бы два гола;
б) забивавших голы в каждом матче;
в) не забивших ни одного гола.
6.17. [Pascal | C | Basic] Используя сведения о ежемесячных выплатах зарплаты сотрудникам фирмы, выясните, не оказалась ли годовая зарплата кого-либо из сотрудников ниже годового минимума, оговоренного в его контракте.
6.18. [Pascal | C | Basic] Используя сведения о результатах сдачи n вступительных экзаменов m абитуриентами, определите, сколько абитуриентов сдали все экзамены на "отлично".
6.19. [Pascal | C | Basic] Используя сведения о размере обуви каждого члена баскетбольной команды, а также сведения о наличии в обувном магазине размеров спортивной обуви, определите, сколько членов команды можно обуть в этом магазине.
6.20*. [Pascal | C | Basic] Найдите максимальное из чисел, встречающихся в заданной матрице более одного раза.
6.21*. [Pascal | C | Basic] Подсчитайте количество строк заданной целочисленной матрицы А(5,5), являющихся перестановкой чисел 1, 2, ..., 5.
6.22. [Pascal | C | Basic] Из массива A(N) , состоящего из натуральных чисел, получите массив B(N) , элементами которого являются разрядности элементов массива A(N) .
6.23. [Pascal | C | Basic] Задана последовательность N вещественных чисел. Определите, можно ли так переставить ее элементы, чтобы они образовали геометрическую прогрессию.
6.24. [Pascal | C | Basic] В заданном одномерном массиве удалите каждый третий положительный элемент.
6.25. [Pascal | C | Basic] В каждой строке матрицы A(N, N) определите наибольшее простое число. Если в строке нет простых чисел, выдайте соответствующее сообщение.
6.26. [Pascal | C | Basic]
Задана квадpатная таблица А(N, N) , элементами котоpого являются
нули и единицы. Подсчитайте в ней:
а) количество квадpатов pазмеpом 3 на 3, в котоpых есть не менее пяти нулей;
б) количество стpок, в котоpых есть тpи нуля, pасположенных pядом;
в) количество столбцов, в котоpых нули и единицы чеpедуются;
г) количество единичных столбцов и количество нулевых стpок.
6.27. [Pascal | C | Basic] Пифагоровыми называются тройки натуральных чисел a, b, с , удовлетворяющие условию: a2 + b2 = c2 . Например, пифагоровой является тройка чисел 6, 8, 10. Найдите все тройки пифагоровых чисел, не превышающих 25.
6.28. [Pascal | C | Basic]
Совершенными называются числа, равные сумме своих делителей.
Например, совершенным является число 28 , равное 1 + 2 + 4 + 7 + 14.
Найдите все совершенные числа в интервале [1, 1000].