- •Практика алгоритмизации и программирования Предисловие
- •Настройки
- •Var Name: String; {Описание переменной Name строкового типа}
- •V, {объем цилиндра }
- •Input "Введите высоту цилиндра : ", h
- •Input "Введите радиус основания : ", r
- •Пример 1.3. Даны три точки на плоскости. Определить, какая из них ближе к началу координат. Система тестов
- •Демонстрация
- •Пример 1.4. Найти произведение цифр заданного целого четырехзначного числа. Система тестов
- •Демонстрация
- •Var Number, {заданное число}
- •I, j, k, l, {цифры числа}
- •Input "Введите четырехзначное число : ", Number
- •Система тестов
- •Демонстрация
- •Var a, b, c : Real; {a, b, c - коэффициенты уравнения}
- •X1, x2 : Real; {x1, x2 - корни }
- •Input "Введите количество тестов : ", nTest
- •Демонстрация
- •Var a1, b1, c1, {коэффициенты уравнения первой прямой}
- •X, y : Real; {координаты точки пересечения }
- •Результаты работы Pascal-программы:
- •Input "Введите количество тестов : ", nTest
- •Input ". Введите a1, b1, c1 : ", a1, b1, c1
- •Input " Введите a2, b2, c2 : ", a2, b2, c2
- •Задачи для самостоятельного решения
- •Алгоритмы, реализуемые с помощью циклов типа для
- •Демонстрация
- •Демонстрация
- •Пример 2.3. В баскетбольную команду могут быть приняты ученики, рост которых превышает 170 см. Составьте список кандидатов в команду из учеников класса. Система тестов
- •Демонстрация
- •Исполнение алгоритма
- •Input "Сколько всего учеников ? " , nPupil
- •Input "Рост - " , Height(I)
- •Пример 2.4. Для заданного X вычислить
- •Демонстрация
- •Пример 2.5. Дан массив X(n). Получить новый массив y(n) такой, что в нем сначала идут положительные числа, затем нулевые, и затем отрицательные из X. Тест
- •Демонстрация
- •Задачи для самостоятельного решения
- •Алгоритмы, реализуемые с помощью вложенных циклов типа для
- •Пример 3.1. Вычислить суммы элементов столбцов заданной матрицы a(n, m). Тест
- •Демонстрация
- •InputOutput; {вызов процедуры ввода-вывода исходных данных }
- •Input "Количество строк - ", n
- •Input "Количество столбцов - ", m
- •Пример 3.2. Подсчитать, сколько раз встречается в заданной целочисленной матрице a(n, m) максимальное по величине число. Тест
- •Демонстрация
- •InputOutput(a); {Вызов процедуры ввода-вывода матрицы}
- •Input "Количество столбцов - ", m
- •Демонстрация
- •InputOutput(a); {вызов процедуры ввода-вывода исходных данных}
- •Input "Количество строк - ", n
- •Input "Количество столбцов - ", m
- •Пример 3.4. Элементы заданного числового массива a1, a2, ..., aN упорядочить по возрастанию. Тест
- •Демонстрация
- •Input; {вызов процедуры ввода массива }
- •Пример 3.5. В массиве a(n, n) вычислить две суммы элементов, расположенных ниже и выше главной диагонали. Тест
- •Демонстрация
- •InputOutput; {Вызов процедуры ввода-вывода матрицы }
- •Задачи для самостоятельного решения
- •Алгоритмы, реализуемые с помощью циклов типа пока
- •Цикл типа пока с прерыванием
- •Цикл типа пока без прерывания
- •Пример 4.1. Определить, является ли заданная последовательность чисел a1 , a2 , ... , aN монотонно убывающей. Система тестов
- •Демонстрация
- •If Otvet then Write(’образует ’)
- •InputOutput; {вызов процедуры ввода-вывода}
- •Input "Количество элементов – ", n : dim a(n)
- •Система тестов
- •Демонстрация
- •Var X, y : Mas; {массивы координат точек }
- •I, nPoints : Integer; {nPoints – количество точек}
- •Пример 4.3. Определить, имеется ли среди элементов главной диагонали заданной целочисленной матрицы a(n, n) хотя бы один положительный нечётный элемент. Система тестов
- •Демонстрация
- •If Flag then WriteLn (’есть нечетные положительные.’)
- •InputOutput(a); {вызов процедуры ввода-вывода данных}
- •Демонстрация
- •Var m, {заданное число }
- •Input "Введите натуральное м : " , m
- •Пример 4.5. Включить заданное число d в массив a(n), упорядоченный по возрастанию, с сохранением упорядоченности. Система тестов
- •Демонстрация
- •Задачи для самостоятельного решения
- •Исполнение алгоритма
- •InputOutput; {вызов процедуры ввода-вывода данных }
- •If Flag then WriteLn('Есть совпадающие числа.' )
- •Пример 5.2. Дана целочисленная матрица a(n, n). Определить, имеются ли среди её элементов, лежащих ниже главной диагонали, отрицательные числа. Система тестов
- •Демонстрация
- •Исполнение алгоритма
- •If Flag then WriteLn('есть отрицательные.')
- •InputOutput(a); {вызов процедуры ввода-вывода данных }
- •Пример 5.3. Выяснить, есть ли в баскетбольных командах "Спартак" и "Зенит" игроки одинакового роста. Система тестов
- •Демонстрация
- •Исполнение алгоритма
- •Пример 5.4. Из партии шин отобрать две шины, диаметры которых отличаются не более, чем на d см, а вес — не более, чем на w грамм. Система тестов
- •Демонстрация
- •Задачи для самостоятельного решения
- •Алгоритмы, реализуемые с помощью комбинации циклов типа для и пока
- •Пример 6.1. В заданной целочисленной матрице a(n, m) найти количество строк, содержащих нули. Тест
- •Демонстрация
- •Пример 6.2. Дана целочисленная матрица a(n, m). Определить, встречается ли заданное целое k среди максимальных элементов столбцов этой матрицы. Система тестов
- •Демонстрация
- •Исполнение алгоритма
- •Демонстрация
- •Блок-схема (фрагмент)
- •Блок-схема (продолжение)
- •Исполнение алгоритма
- •InputOutput; {Вызов процедуры ввода-вывода }
- •If Flag then WriteLn('Это магический квадрат.')
- •Пример 6.4. Дана матрица a(n, n). Если хотя бы один элемент строки матрицы отрицателен, то все элементы этой строки заменить нулями. Тест
- •Демонстрация
- •Исполнение алгоритма
- •Var Flag : Boolean; {строки матрицы }
- •If Flag then {обнуление строки, содержашей}
- •InputOutput; {вызов процедуры ввода-вывода матрицы}
- •Задачи для самостоятельного решения
- •Алгоритмы обработки символьной информации
- •Типы данных, используемые для обработки символьной информации
If Flag then WriteLn('есть отрицательные.')
else WriteLn('нет отрицательных.');
ReadLn
End; { of OutResult }
{--------------------------------------------}
BEGIN
InputOutput(a); {вызов процедуры ввода-вывода данных }
Solution(A); {вызов процедуры поиска решения задачи}
OutResult {вызов процедуры вывода результата }
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 : 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. Выяснить, есть ли в баскетбольных командах "Спартак" и "Зенит" игроки одинакового роста. Система тестов
Обозначения: N - количество игроков в команде "Спартак"; M - количество игроков в команде "Зенит"; S(N) - массив ростов игроков команды "Спартак" (см); Z(N) - массив ростов игроков команды "Зенит" (см).
Номер теста |
Проверяемый случай |
Данные |
Результат |
|||||
Спартак |
Зенит |
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 <= N) и (Flag = "Нет") => (1)
(j < i) и (Flag = "Нет") => (2)
Номер теста |
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 |
|
-(кц) |
|
|
|
"Нет" |
Turbo Pascal
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.
QBasic
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
