|
|
|
нц пока <условие
1>
тело внешнего цикла . . . . . . .
кц |
Номер теста | Проверяемый случай | Данные | Результат | |
N | Массив А | Otvet | ||
1 2 | Имеется Не имеется | 4 3 | (1,3,2,3) (1,2,3) | "Есть совпадающие числа" "Нет совпадающих чисел" |
Школьный АЯ
алг Равенство(арг цел N, арг цел таб A[1:N], рез лит Otvet) нач цел i, j, лит Flag i:=1; Flag:="Нет" нц пока (i<=N–1) и (Flag="Нет") | цикл по первому числу из пары j:=i+1 нц пока (j<=N) и (Flag="Нет") | цикл по второму числу из пары если A[i]=A[j] | проверка равенства чисел то Flag:="Да" иначе j:=j+1 все кц i:=i+1 кц если Flag="Да" то Otvet:="Есть совпадающие числа" иначе Otvet:="Нет совпадающих чисел" все кон |
Блок-схема (фрагмент)
![]() |
N теста | i | Flag | (1) | j | (2) | A[i]=A[j] | Otvet |
1 | 1 | "Нет" | + | 2 3 4 5 | + + + -(кц) | - - - | |
2 | "Да" | + | 3 4 | + + -(кц) | - + | ||
3 | -(кц) | "Есть совп.числа" | |||||
2 | 1 2 3 | "Нет" | + + -(кц) | 2 3 4 3 4 | + + -(кц) + -(кц) | - - - | "Нет совп.чисел" |
Program Equal; Uses Crt; Type Mas = Array [1..20] of Integer; Var A : Mas; i, j, N : Integer; Flag : Boolean; {------------------------------------------} Procedure InputOutput; {Описание процедуры ввода-вывода данных} Begin ClrScr; Write('N = '); ReadLn(N); For i := 1 to N do begin Write('A[' , i , '] = ') ; ReadLn(A[i]) end; WriteLn; WriteLn('Массив А'); For i := 1 to N do Write(A[i] : 4); WriteLn; WriteLn End; {------------------------------------------} Procedure Search(Var A:Mas; Var Flag:Boolean); {Описание процедуры} Begin {поиска решения } i:=1; Flag:= FALSE; While (i<=N-1) and not Flag do {цикл по первому числу из пары} begin j:=i+1; While (j<=N) and not Flag do {цикл по второму числу из пары} If A[i]=A[j] then Flag:=TRUE else j:=j+1; i:=i+1 end; End; {------------------------------------------} BEGIN InputOutput; {вызов процедуры ввода-вывода данных } Search(A, Flag); {вызов процедуры поиска решения задачи} WriteLn( 'О т в е т : '); If Flag then WriteLn('Есть совпадающие числа.' ) else WriteLn('Нет совпадающих чисел.'); ReadLn END.
CLS INPUT "N = ", N : DIM A(N) ' ввод массива А FOR i = 1 TO N PRINT "A(" ; i ; ") = " ; INPUT A(i) NEXT i PRINT : PRINT "Массив А" ' вывод массива А FOR i = 1 TO N PRINT A(i) ; NEXT i : PRINT i = 1 : Flag = 0 ' поиск совпадающих чисел WHILE (i <= N - 1) AND (Flag = 0) j = i + 1 WHILE (j <= N) AND (Flag = 0) IF A(i)=A(j) THEN Flag=1 ELSE j=j+1 WEND i = i + 1 WEND PRINT : PRINT "О т в е т :" IF Flag = 1 THEN PRINT "Есть совпадающие числа." ELSE PRINT "Нет совпадающих чисел." END IF ENDПример 5.2. Дана целочисленная матрица A(N, N). Определить, имеются ли среди её элементов, лежащих ниже главной диагонали, отрицательные числа. Система тестов
Номер теста | Проверяемый случай | Данные | Результат | |
N | Массив А | Otvet | ||
1 | Имеются | 4 | 1 -1 2 1 2 3 1 0 1 -1 2 -1 -2 1 0 1 | ''Есть отрицательные числа'' |
2 | Не имеются | 3 | 1 -1 2 1 0 1 2 1 1 | "Нет отрицательных чисел" |
Школьный АЯ
алг Ниже диагонали (арг цел N, арг цел таб A[1:N, 1:N], рез лит Otvet) нач цел i, j, лит Flag Flag:="Нет"; i:=2 нц пока (i< =N) и (Flag="Нет") | цикл по строкам j:=1 нц пока (j<i) и (Flag="Нет") | цикл по элементам строки если A[i, j]<0 | условие прерывания циклов то Flag:="Да" иначе j:=j+1 | продвижение по строке все кц i:=i+1 | переход на новую строку кц если Flag="Да" то Otvet:="Есть отрицательные ниже диагонали" иначе Otvet:="Нет отрицательных ниже диагонали" все кон |
Блок-схема (фрагмент)
![]() |
N теста | i | Flag | (1) | j | (2) | A[i]=A[j] | Otvet |
1 | 2 | "Нет" | + | 12 | +-(кц) | - | |
3 | "Да" | + | 12 3 | ++ -(кц) | -+ | ||
4 | -(кц) | "Есть отрицательные" | |||||
2 | 2 | "Нет" | + | 12 | + -(кц) | - | |
3 | + | 1 2 3 | + + -(кц) | - - | |||
4 | -(кц) | "Нет отрицательных" |
Program UnderDiagonal; 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('Количество строк и столбцов - '); 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;
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); {описание процедуры поиска решения} Begin i := 2 ; Flag := FALSE; While (i<=N) and not Flag do begin j:=1; While (j<i) and not Flag do If (A[i, j]<0) then Flag:=TRUE else j:=j+1; i:=i+1 end; End; { of Solution } {--------------------------------------------} Procedure OutResult; Begin WriteLn('О т в е т :'); Write('Среди элементов, лежащих ниже главной диагонали, '); If Flag then WriteLn('есть отрицательные.') else WriteLn('нет отрицательных.'); ReadLn End; { of OutResult } {--------------------------------------------} BEGIN InputOutput(A); {вызов процедуры ввода-вывода данных } Solution(A); {вызов процедуры поиска решения задачи} OutResult {вызов процедуры вывода результата } 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 i = 2 : Flag = 0 WHILE (i < = N) AND (Flag = 0) j = 1 WHILE (j < i ) AND (Flag = 0) IF A(i, j) < 0 THEN Flag = 1 ELSE j = j + 1 WEND i = i + 1 WEND PRINT : PRINT "О т в е т :" PRINT "Среди элементов матрицы, лежащих ниже главной диагонали, "; IF Flag = 1 THEN PRINT "есть отрицательные." ELSE PRINT "нет отрицательных." END IF ENDПример 5.3. Выяснить, есть ли в баскетбольных командах "Спартак" и "Зенит" игроки одинакового роста. Система тестов Обозначения:
Номер теста | Проверяемый случай | Данные | Результат | |||
Спартак | Зенит | Otvet | ||||
N | S(N) | M | Z(M) | |||
1 | Есть | 3 | 200 195 205 | 4 | 198 200 206 192 | "Есть игроки одинакового роста" |
2 | Нет | 2 | 200 195 | 2 | 198 201 | "Нет игроков одинакового роста" |
Школьный АЯ
алг Рост (арг цел N, M, арг целтаб S[1:N], Z[1:M], резлит Otvet) нач цел i, j, лит Flag i:=1; Flag:="Нет" нц пока (i<=N) и (Flag="Нет") |цикл по игрокам "Спартака" j:=1 нц пока (j<=M) и (Flag="Нет") |цикл по игрокам "Зенита" если S[i]=Z[j] |проверка равенства ростов то Flag:="Да" иначе j:=j+1 все кц i:=i+1 кц если Flag="Да" то Otvet:="Есть игроки одинакового роста" иначе Otvet:="Нет игроков одинакового роста" все кон |
Блок-схема (фрагмент)
![]() |
Номер
теста |
i | Flag | (1) | j | (2) | S[i]=Z[j] | Otvet |
1 | 1 | "Нет"
"Да" |
+ | 1
2 |
+ - -(кц) | - + | |
2 | -(кц) | "Есть" | |||||
2 | 1 | "Нет" | + | 1 2 3 | + + -(кц) | - - | |
2 | + | 1 2 3 | + + -(кц) | - - | |||
3 | -(кц) | "Нет" |
Program EqualHeight; Uses Crt; Type Mas = Array [1..20] of Integer; Var Spart, Zenit : Mas; {массивы ростов игроков} N, M, i, j : Integer; {N - к-во игроков "Спартака", M - "Зенита"} Flag : Boolean; Name : String; {название команды} {------------------------------------------} Procedure Input(NCommand : Integer; Var Number : Integer; Var Rost:Mas); {NCommand - номер команды (равен 1 или 2)} Begin {описание процедуры ввода данных по команде} If NCommand=1 then Name:='Спартак' else Name:='Зенит'; Write('Введите количество игроков команды ', Name, ': '); ReadLn(Number); WriteLn('Введите роста игроков:'); For i := 1 to Number do begin Write(i, ' игрок - '); ReadLn(Rost[i]) end; WriteLn End; {------------------------------------------} Procedure Search; {описание процедуры поиска решения задачи} Begin i:=1; Flag:=FALSE; While (i<=N) and not Flag do {цикл по игрокам Спартака} begin j:=1; While (j<=M) and not Flag do {цикл по игрокам Зенита} If Spart[i]=Zenit[j] then Flag:=TRUE else j:=j+1; i:=i+1 end; End; {------------------------------------------------------------} Procedure OutResult; {описание процедуры вывода результата} Begin Write('О т в е т : в командах Спартак и Зенит '); If Flag then Write('есть игроки ') else Write('нет игроков '); WriteLn('одинакового роста.'); ReadLn End; {------------------------------------------} BEGIN ClrScr; {вызов процедур} Input(1, N, Spart); {ввод данных для первой команды} Input(2, M, Zenit); {ввод данных для второй команды} Search; {поиск решения задачи} OutResult {вывод результата} END.
CLS INPUT "Введите количество игроков команды Спартак : " , N DIM Spart(N) PRINT "Введите роста игроков:" FOR i = 1 TO N PRINT i ; " игрок - " ; : INPUT Spart(i) NEXT i INPUT "Введите количество игроков команды Зенит : " , M DIM Zenit(M) PRINT "Введите роста игроков:" FOR i = 1 TO M PRINT i ; " игрок - " ; : INPUT Zenit(i) NEXT i i = 1 : Flag = 0 WHILE (i <= N) AND (Flag = 0) 'цикл по игрокам Спартака j = 1 WHILE (j <= M) AND (Flag = 0) 'цикл по игрокам Зенита IF Spart(i) = Zenit(j) THEN Flag = 1 ELSE j = j + 1 WEND i = i + 1 WEND PRINT "О т в е т : в командах Спартак и Зенит "; IF Flag = 1 THEN PRINT "есть игроки "; ELSE PRINT "нет игроков "; PRINT "одинакового роста." ENDПример 5.4. Из партии шин отобрать две шины, диаметры которых отличаются не более, чем на D см, а вес не более, чем на W грамм. Система тестов
N теста | Проверяемый случай | Данные | Результат | ||||
N шины | Диаметр | Вес | Допуски | Otvet | |||
диам. | вес | ||||||
1 | Есть такие шины | 1 2 3 4 | 103 100 99 101 | 98 100 101 99 | 1 | 1 | "2-я и 3-я шины" |
2 | Нет таких шин | 1 2 3 | 100 98 100 | 100 100 98 | 1 | 1 | "Подходящих шин нет" |
Школьный АЯ
алг МоиШины (арг цел N, арг вещ таб Диам[1 : N] , Вес[1 : N] , арг вещ ДопДиам, ДопВес, рез цел Шина1, Шина2, рез лит Otvet) нач цел i, j, лит Flag i:=1; Flag:="Нет" нц пока (i< =N-1) и (Flag="Нет") | цикл по первой шине из пары j:=i+1 нц пока (j< =N) и (Flag="Нет") | цикл по второй шине из пары если (abs(Диам[i] - Диам[j]) <= ДопДиам) | условие соче- и (abs(Вес[i] - Вес[j]) <= ДопВес ) | таемости шин то Flag:="Да"; Шина1:=i; Шина2:=j иначе j:=j+1 все кц i:=i+1 кц
если Flag="Да" то Otvet := "По параметрам подходят друг другу " + Шина1 + "-ая и " + Шина2 + "-ая шины." иначе Otvet := "Шин, подходящих друг другу, в партии нет." все кон
Исполнение алгоритма
Обозначения проверяемых условий:
(i <= N-1) и (Flag = "Нет")
=> (1)
(i < N) и (Flag = "Нет") => (2) (abs(Диам[i] - Диам[j]) <= ДопДиам) и (abs(Вес[i] - Вес[j]) <= ДопВес) => (3)
|
Блок-схема (фрагмент)
![]() |
Program MyTyres; Uses Crt; Type Mas = Array [1..100] of Real; Var Number, i, j : Integer; { Number - количество шин } Diameter, Weight : Mas; { массивы параметров шин } First, Second : Integer; { номера отобранных шин } Flag : Boolean; D, W : Real; {D, W - допуски по параметрам} {-------------------------------------------------------} Procedure InputOutput; {описание процедуры ввода-вывода данных} Begin ClrScr; Write('Количество шин : '); ReadLn(Number); WriteLn('Параметры шин : '); For i := 1 to Number do begin Write(i, '-ая шина: Диаметр - '); ReadLn(Diameter[i]); Write(' Вес - '); ReadLn(Weight[i]) end; WriteLn;
Write('Допуск по диаметру : '); ReadLn(D); Write('Допуск по весу : '); ReadLn(W); WriteLn; WriteLn(' Пapаметры шин '); WriteLn('N шины Диаметр Вес'); For i := 1 to Number do WriteLn(i:4, Diameter[i]:10:1, Weight[i]:10:1); WriteLn End; { of InputOutput } {----------------------------------------------------------} Procedure YesNo(Var First, Second : Integer; Var Flag : Boolean); Begin {описание процедуры поиска решения задачи} i:=1; Flag := FALSE; While (i<=Number-1) and not Flag do {цикл по первой шине из пары} begin j := i+1; While (j<=Number) and not Flag do {цикл по второй шине из пары} If (Abs(Diameter[i]-Diameter[j]) <= D) and (Abs(Weight[i]-Weight[j]) <= W) then begin Flag:=TRUE; First:=i; Second:=j end else j := j+1; i:=i+1 end; End; {of YesNo } {----------------------------------------------------------} BEGIN InputOutput; {Вызов процедуры ввода-вывода исходных данных} YesNo(First, Second, Flag);{Вызов процедуры поиска решения задачи} WriteLn('О т в е т :'); If Flag then WriteLn('По параметрам подходят друг другу ', First, '-ая и ', Second, '-ая шины.') else WriteLn('Шин, подходящих друг другу, в партии нет.'); ReadLn END.
CLS : INPUT "Количество шин : " , Number DIM Diam(Number), Weight(Number) PRINT "Параметры шин :" FOR i = 1 TO Number PRINT i; "-ая шина: " ; : INPUT "Диаметр - " , Diam(i) PRINT TAB(14); INPUT " Вес - ", Weight(i) NEXT i : PRINT INPUT "Допуск по диаметру : " , D INPUT "Допуск по весу : " , W PRINT : PRINT TAB(11); "Пapаметры шин" PRINT "N шины Диаметр Вес" FOR i = 1 TO Number PRINT TAB(3) ; i , Diam(i) , Weight(i) NEXT i : PRINT i = 1 : Flag = 0 WHILE (i <= Number-1) AND (Flag = 0) j = i + 1 WHILE (j <= Number) AND (Flag = 0) IF (ABS(Diam(i)-Diam(j))<=D) AND (ABS(Weight(i)-Weight(j))<=W) THEN Flag = 1 : First = i : Second = j ELSE j = j + 1 END IF WEND i = i + 1 WEND PRINT : PRINT "О т в е т :" IF Flag = 1 THEN PRINT "По параметрам подходят друг другу "; PRINT First; "-ая и "; Second; "-ая шины." ELSE PRINT "Шин, подходящих друг другу, нет." END IF ENDЗадачи для самостоятельного решения
5.1. [Pascal | C | Basic] В заданной целочисленной матрице A(N, M) выведите на печать индексы первого положительного элемента, кратного заданному числу K. Если таких элементов в матрице нет, то выведите соответствующий текст. Элементы матриц просматривайте слева направо и сверху вниз.
5.2. [Pascal | C | Basic] В заданной целочисленной матрице A(N, M) замените первый отрицательный элемент максимальным элементом матрицы. Если отрицательных элементов нет, то выведите соответствующий текст. Элементы матриц просматривайте слева направо и сверху вниз.
5.3. [Pascal | C | Basic] Из заданной матрицы A(N, N) удалите строку, в которой находится первый отрицательный элемент. Элементы матриц просматривайте слева направо и сверху вниз.
5.4. [Pascal | C | Basic] В заданной матрице A(N, N) найдите индексы первого элемента, превосходящего среднее арифметическое всех элементов. Элементы матриц просматривайте слева направо и сверху вниз.
5.5. [Pascal | C | Basic] Из заданной матрицы A(N, N) удалите строку и столбец, в которых находится первый элемент, равный нулю. Полученную матрицу уплотните. Элементы матриц просматривайте слева направо и сверху вниз.
5.6. [Pascal | C | Basic] Если в заданной матрице A(N, N) есть хотя бы один элемент, больший ста, то элементы обеих диагоналей замените нулями.
5.7. [Pascal | C | Basic] Дана целочисленная матрица А(N, N). Найдите номер первой из её строк, которые начинаются с К положительных чисел подряд.
5.8. [Pascal | C | Basic] Элементы заданной матрицы A(N, N) переписывайте построчно в одномерный массив до тех пор, пока не встретится нулевой элемент.
5.9. [Pascal | C | Basic] Заданное натуральное число M представьте в виде суммы квадратов двух неравных натуральных чисел. В случае, если это невозможно, выведите соответствующее сообщение.
5.10. [Pascal | C | Basic]
Дана целочисленная матрица А(N, N). Просматривая её элементы в заданном
порядке, найдите первый чётный элемент и поменяйте его местами с диагональным
элементом той строки, в которой он находится. Порядок просмотра:
а) сверху вниз и справа налево;
б) снизу вверх и слева направо;
в) справа налево и снизу вверх.
5.11. [Pascal | C | Basic] Проверьте, удовлетворяет ли заданная матрица A(N, N) следующему условию: для всех i >1 и для всех j >1 верно неравенство ai j >= ai-1, j + ai, j-1 .
5.12. [Pascal | C | Basic] В заданном множестве точек на плоскости найдите пару точек, удалённых друг от друга на расстояние, большее заданного D.
5.13. [Pascal | C | Basic] Для заданной матрицы A(N, N) найдите хотя бы одно k, такое, что k-ая строка матрицы совпадает с k-м столбцом.
5.14. [Pascal | C | Basic] Даны три целочисленных массива A(N), B(M) и C(L). Найдите хотя бы одно число, встречающееся во всех трех массивах. Если таких чисел нет, выдайте соответствующее сообщение.
5.15*. [Pascal | C | Basic] Выберите три различные точки из заданного множества точек на плоскости так, чтобы внутри треугольника с вершинами в выбранных точках лежала ровно одна точка.
5.16. [Pascal | C | Basic]
В школе имеется три параллельных десятых класса. Даны списки десятиклассников,
содержащие фамилию и имя каждого ученика. Выясните:
а) в каких классах имеются однофамильцы;
б) в каких классах имеются тезки;
в) имеются ли в параллельных десятых классах однофамильцы;
г) в каких классах имеются ученики, у которых совпадают и имя и фамилия;
д) есть ли в десятых классах однофамильцы первого космонавта.
5.17. [Pascal | C | Basic]
В детском саду есть N мячей. Имеются сведения о диаметре и цвете каждого
мяча. Выясните:
а) есть ли среди мячей такой, что он не пройдет
в квадратное окошко площадью 900 см2;
б) есть ли мячи одинакового цвета или диаметра;
в) есть ли среди красных мячей такой, что его диаметр
превосходит средний диаметр всех мячей.
5.18*. [Pascal | C | Basic] В заданном множестве точек на плоскости найдите три точки, которые могут служить вершинами остроугольного треугольника.
5.19*. [Pascal | C | Basic] В заданном множестве точек на плоскости найдите четыре точки, которые могут служить вершинами квадрата.
5.20*. [Pascal | C | Basic] В заданном множестве точек на плоскости найдите четыре точки, которые могут служить вершинами ромба.
5.21*. [Pascal | C | Basic] В заданном множестве точек на плоскости найдите четыре точки, которые могут служить вершинами выпуклого четырёхугольника.
5.22. [Pascal | C | Basic]
Дана целочисленная квадратная матрица A(N, N). Проверьте,
являются ли все числа, расположенные выше главной и побочной диагоналей:
а) различными;
б) одинаковыми.
5.23. [Pascal | C | Basic] Дана целочисленная квадратная матрица A(N, N). Определите, имеется ли среди элементов, расположенных ниже ее главной и побочной диагоналей хотя бы одно составное двузначное число.
5.24. [Pascal | C | Basic] На плоскости даны две точки А(1, 1) и В(8, 1), а также N точек со своими координатами. Определитe, есть ли среди этих N точек хотя бы одна пара точек, которые являлись бы вершинами трапеции с большим основанием АВ.
5.25*. [Pascal | C | Basic] Дана квадpатная таблица А(N, N), элементами котоpой являются нули и единицы. Установите наличие в ней квадpата, строны которого состоят из М единиц (M
|