Добавлен: 23.11.2023
Просмотров: 59
Скачиваний: 4
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
Задача 1
Условие
var k : integer;
c : array[1..n, 1..m] of integer;
Определить k — количество «особых» элементов массива c, считая элемент «особым», если в его строке слева от него находятся элементы, меньшие его, а справа — большие.
Указание: определите булевскую функцию f(x), которая проверяет, является ли элемент x «особым».
Решение
Анализ задачи
Элементы массива, расположенные в виде таблицы, организованной по строкам и столбцам представляют собой двумерный массив, который обрабатывается при помощи вложенных циклов. Доступ к элементам такого массива определяется индексами номера строки и номера столбца. Последовательно просматривая элементы каждой строки, исключая первый и последний, можно обнаружить «особый» элемент, удовлетворяющий условию задачи. В этом процессе будет полезно применить булевскую функцию f(x), которая принимает значения true или false в зависимости от наличия «особого» элемента в строке.
Алгоритм
Для решения задачи необходимо произвести следующие действия:
-
Задать количество строк и столбцов матрицы, с контролем числа столбцов; -
Посредством вложенных циклов заполнить массив значениями элементов; -
Организовать вложенные циклы для просмотра элементов массива на предмет соответствия условию задачи; -
Найти соответствующие элементы и выполнить их подсчёт; -
Вывод результата.
Переменные
Идентификаторы и типы:
t, s – константы, размерность матрицы;
c – двумерный массив целых чисел;
n, m – количество строк и столбцов, целые;
i, j – счётчики циклов, индекс строки и индекс столбца, целые;
k – счётчик «особых» элементов, целые;
fx – логическая (булевская) переменная.
Блок-схема алгоритма
Текст программы
const t= 100; s= 100;
var c: array[1..t, 1..s] of integer;
n, m, i, j, k :integer;
fx: boolean;
begin
write('Введите количество строк n: ');
readln(n);
repeat { количество столбцов должно быть не менее трёх }
write('Введите количество столбцов m: ');
readln(m);
until m>=3;
for i:= 1 to n do
begin
write('Введите ', m, ' элементов массива через пробел ');
for j:= 1 to m do
read(c[i,j]);
end;
fx:=false; { "особых" элементов не найдено }
k:= 0;
for i:= 1 to n do
for j:= 2 to m-1 do { просмотр элементов строки исключая первый и последний }
if (c[i,j]> c[i,j-1]) and (c[i,j] < c[i,j+1]) then { проверка условия задачи }
begin
fx:= true; { "особый" элемент обнаружен }
k:= k+1; { подсчёт количества "особых" элементов }
end;
if fx
then
writeln('Количество "особых" элементов - ', k)
else
writeln('"Особых" элементов не найдено. ');
writeln('Press
readln
end.
Тестирование
Несколько примеров работы программы:
1.
Введите количество строк n: 0
Введите количество столбцов m: 3
"Особых" элементов не найдено.
Press
2.
Введите количество строк n: 1
Введите количество столбцов m: 3
Введите 3 элементов массива через пробел 0 4 78
Количество "особых" элементов - 1
Press
3.
Введите количество строк n: 3
Введите количество столбцов m: 4
Введите 4 элементов массива через пробел 32 45 0 9
Введите 4 элементов массива через пробел 12 -23 0 9
Введите 4 элементов массива через пробел 2 6 80 5
Количество "особых" элементов - 2
Заключение
Программа корректно работает в рамках поставленной задачи.
Задача 2
Условие
Дана строка. В алфавитном порядке напечатайте (по разу) все малые латинские буквы, входящие в эту строку ровно один раз.
Указание: решение задачи простое, если вы будете использовать множества.
Решение
Анализ задачи
Следуя указанию, применяется множество всех малых латинских букв затем, чтобы в решение попали только заданные символы, а также, при сравнении с «эталонным» множеством, сравнительно просто вывести необходимые символы в алфавитном порядке.
Алгоритм
Для решения задачи необходимо произвести следующие действия:
-
Ввод строки; -
Просмотреть все символы строки -
Собрать символы, встретившиеся при просмотре впервые, в новое множество; -
Вывести полученные символы в алфавитном порядке.
Переменные
Идентификаторы и типы:
SStr – множество малых латинских букв;
s – строковая переменная;
с – символьная переменная для обмена;
ch – символьная переменная для использования в качестве счётчика цикла;
i – счётчик цикла, целое.
Блок-схема алгоритма
Текст программы
var
SStr: set of 'a'..'z'; { Множество малых латинских букв }
s: string; { строка }
c: char; { символ }
ch: char; { счётчик цикла }
i: integer; { счётчик цикла }
begin
SStr:= []; { Множество букв в рассмотренной части строки }
write('Введите строку, завершите ввод точкой: ');
readln(s);
i:= 1;
while s[i]<>'.' do
begin
if not (s[i] in SStr) then { первое вхождение }
begin
c:= s[i];
SStr:= SStr+[c] { получено множество входящих в строку букв }
end;
i:= i+1;
end;
for ch:= 'a' to 'z' do
if ch in SStr then write(ch:4);
writeln
end.
Тестирование
Несколько примеров работы программы:
1.
Введите строку, завершите ввод точкой: fsLusdUuasdf.
a d f s u
2.
Введите строку, завершите ввод точкой: .
3.
Введите строку, завершите ввод точкой: %532acb .
a b c
4.
Введите строку, завершите ввод точкой: No speed limit.
d e i l m o p s t