нц пока <условие>
тело внешнего цикла
. . . . . .
нц для 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].