Файл: Задача 1 Условие.docx

ВУЗ: Не указан

Категория: Решение задач

Дисциплина: Не указана

Добавлен: 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 в зависимости от наличия «особого» элемента в строке.

Алгоритм



Для решения задачи необходимо произвести следующие действия:

  1. Задать количество строк и столбцов матрицы, с контролем числа столбцов;

  2. Посредством вложенных циклов заполнить массив значениями элементов;

  3. Организовать вложенные циклы для просмотра элементов массива на предмет соответствия условию задачи;

  4. Найти соответствующие элементы и выполнить их подсчёт;

  5. Вывод результата.



Переменные



Идентификаторы и типы:

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 to Exit');

readln

end.

Тестирование




Несколько примеров работы программы:
1.

Введите количество строк n: 0

Введите количество столбцов m: 3

"Особых" элементов не найдено.

Press to Exit
2.

Введите количество строк n: 1

Введите количество столбцов m: 3

Введите 3 элементов массива через пробел 0 4 78

Количество "особых" элементов - 1

Press to Exit
3.

Введите количество строк n: 3

Введите количество столбцов m: 4

Введите 4 элементов массива через пробел 32 45 0 9

Введите 4 элементов массива через пробел 12 -23 0 9

Введите 4 элементов массива через пробел 2 6 80 5

Количество "особых" элементов - 2

Заключение



Программа корректно работает в рамках поставленной задачи.


Задача 2




Условие


Дана строка. В алфавитном порядке напечатайте (по разу) все малые латинские буквы, входящие в эту строку ровно один раз.

Указание: решение задачи простое, если вы будете использовать множества.

Решение




Анализ задачи



Следуя указанию, применяется множество всех малых латинских букв затем, чтобы в решение попали только заданные символы, а также, при сравнении с «эталонным» множеством, сравнительно просто вывести необходимые символы в алфавитном порядке.

Алгоритм



Для решения задачи необходимо произвести следующие действия:


  1. Ввод строки;

  2. Просмотреть все символы строки

  3. Собрать символы, встретившиеся при просмотре впервые, в новое множество;

  4. Вывести полученные символы в алфавитном порядке.


Переменные



Идентификаторы и типы:

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