26.02.2022

Множества в языке Паскаль (описание, хранение, операции, вывод, использование)

Множества в языке Паскаль: описание, хранение, операции, вывод, использование

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

  • множество целых чисел,
  • множество латинских букв,
  • множество слов.

В этой публикации расскажем, как использовать множества в языке Паскаль.

Множество - это набор уникальных неупорядоченных значений одного типа.

Описание (объявление) множества

var m:set of базовый тип;

 Примеры 

Целые числа

Символы

Строки


Множество

[0,2,4,6,8,10,12]

[’a’,’b’,’c’,’d’,’e’]

[’Mazda’,’BMW’,’Audi’]

Описание
 в блоке var

m:set of integer;

p:set of char;

s:set of string;


Хранение данных в множестве

m:=[3,4,6,8,9];  элементы множества заключаются в квадратные скобки и перечисляются через запятую

m:=[0..9]; диапазон значений через две точки


Операции над множествами

  • пересечение
  • объединение
  • вычитание


Применение операций над множествами

m:=[3,4,6,8,9];

m1:=[3,4,9,15,20];

m2:=m*m1; пересечение [3,4,9]

m2:=m+m1; объединение [3,4,6,8,9,15,20]

m2:=m1-m;  разность [15,20]


Пустое множество

m:=[];


Как добавить значение в множество

m:=m+[x];  значение переменной x добавили в множество m

inlude(m, x); в среде PascalABC.NET


Операция вхождения in

Обратиться к элементу множества непосредственно нельзя. Но можно использовать операцию вхождения in.


Вывод множества на экран

m:=[10,12,14,15,16,18,20,21,22,24];

for k:=10 to 24 do

 if k in m then write(k);//если значение k принадлежит множеству m, то вывести k

В версии PascalABC.NET 3.8.2 множество можно вывести целиком:

write(m);

Результат будет таким:

{10,12,14,15,16,18,20,21,22,24}

Использование множеств в задачах

Задача 1. Дано натуральное число. Сформировать множество его цифр (найти различные цифры числа)

В цикле while будем разбивать число на цифры и добавлять цифру в множество. 

Исходные данные: n – натуральное число (тип integer)

Промежуточные данные: d – цифра числа (тип integer) 

Выходные данные: m – множество цифр числа 

Программа решения на языке Паскаль

var m:set of integer;

    d,n:integer;

begin

 m:=[]; //пустое множество

 writeln('Введите натуральное число');

 readln(n);

 while n<>0 do

   begin

    d:=n mod 10;

    m:=m+[d];

    n:=n div 10;

   end;

 writeln('Множество цифр числа');

 write(m);

End.

Результат выполнения программы

Множество цифр числа

Задача 2. Дан алфавит строчных русских букв, получить множество согласных букв вычитанием множества гласных букв.

Воспользуемся тем, что char является порядковым типом данных, в качестве букв алфавита возьмем множество b:=['а'..'я'].

Множество гласных букв получим перечислением: g:=['у','е','ы','а','о','э','я','и','ю']

Множество согласных букв получим вычитанием  s:=b-g;

Исходные данные:

b – множество строчных русских букв

g – множество строчных гласных букв

Выходные данные: s – множество строчных согласных букв 

Программа решения на языке Паскаль

var b,g,s:set of char;k:char;

begin

  b:=['а'..'я'];

  g:=['у','е','ы','а','о','э','я','и','ю'];

  s:=b-g;

  for k:='а' to 'я' do

    if k in s then write(k,' '); 

 {либо вывод сразу всего множества write(s), цикл for k:='а' to 'я' do тогда не нужен}

end.

Задача 3. Дана строка символов. Сколько в этой строке символов цифр?

Будем проверять принадлежность символа строки множеству символов цифр ['0'..'9'] и копить счетчик.

Программа решения на языке Паскаль

var s:string;

    c:char;

    m:set of char;

    k,t:integer;

begin

  writeln('Введите строку');

  readln(s);

  m:=['0'..'9'];

  for k:=1 to length(s) do

    if s[k] in m then t:=t+1;

  writeln('Символов цифр в строке: ',t);

end.

Еще одна задача на применение операции вхождения in. Как проверить, есть ли в строке заданная подстрока.

Результат выполнения программы

Символы цифры в строке

Задача 4. Как найти все уникальные (неповторяющиеся) значения в массиве чисел?

Мы знаем, что множество хранит уникальные значения. Возьмем пустое множество.

Добавим значение элемента в множество. В множестве сохранятся значения элементов массива, и они будут уникальными.

Программа решения на языке Паскаль

var a:array[1..100] of integer;

    k,n:integer;

    m:set of integer;

begin

  writeln('Введите количество элементов массива');

  readln(n);

  m:=[]; //пустое множество

  writeln('Массив чисел');

  for k:=1 to n do 

  begin

    a[k]:=random(1,10);//случайные числа из промежутка [1;10]  

    write(a[k],' ');

    include(m,a[k]);//или m:=m+[a[k]]; добавить значения элемента a[k] в множество m

    end;

  end;

  writeln;

  writeln('Уникальные элементы массива');

  for k:=1 to 10 do //цикл по числам из промежутка от 1 до 10

  begin

    if k in m then write(k,' '); //если число k принадлежит множеству, вывести число k

  end;

//либо вывод сразу всего множества write(m), цикл for k:=1 to 10 do тогда не нужен

end.

Результат выполнения программы

Уникальные элементы массива

Вопросы:

  • Можно ли в множестве сохранить вещественное число?
  • Как узнать длину множества?

21.02.2022

Как найти расстояние между двумя точками (язык Паскаль)

Задача. Необходимо вычислить расстояние между двумя точками, заданными своими целочисленными координатами.

Формула расстояния между двумя точками:

формула расстояния между двумя точками

Исходные данные:

x1, y1 – координаты первой точки (тип integer);

x2, y2 – координаты второй точки (тип integer).

Выходные данные:

d – расстояние между двумя точками (тип real).

Необходимые функции:

sqr() – возведение в квадрат

sqrt() - извлечение квадратного корня (выдает значение типа

Опишем переменные в блоке Var

18.02.2022

Зачем нужны массивы (язык Паскаль)

Зачем нужны массивы (язык Паскаль)

На уроках информатики при изучении темы «Массив», ученики нередко задают вопрос: «Зачем? Неужели нельзя вводить данные с клавиатуры и обрабатывать их по пути?»

Действительно, когда речь идет об определении понятия массив, мы даем, например, такое:

Массив – это упорядоченный и хранимый в памяти набор данных одного типа.

13.02.2022

Линейные программы на языке Паскаль

С помощью языков программирования описываются алгоритмы. Алгоритмы по своей структуре делят на следующие типы:

  • линейный
  • разветвляющийся
  • циклический

Линейные программы - описания на языке программирования линейных алгоритмов.

В линейном алгоритме действия выполняются последовательно, шаг за шагом, в таком алгоритме отсутствуют условные переходы и повторения. В линейной программе на языке программирования присутствуют только простые операторы, такие как, операторы ввода/вывода, присваивания. В линейных программах не используются операторы ветвления или цикла.

Ветвление в языке программирования Паскаль

В этой статье расскажем о ветвлениях в языке программирования Паскаль:

  • условный оператор if
  • оператор безусловного перехода goto
  • оператор выбора case

Условный оператор if

В решении задач ветвление позволяет выполнять цепочку действий в зависимости от поставленного условия. 

Конструкция условного оператора в полной форме

if условие then оператор1 else оператор2;

Перевод служебных слов с англ. яз.:

  • if - если
  • then - тогда
  • else - иначе

Как работает условный оператор

Если условие принимает значение ИСТИНА (TRUE), то выполняется оператор1, иначе (условие принимает значение ЛОЖЬ - FALSE) выполняется оператор2.

Конструкция условного оператора в краткой форме

if условие then оператор;

Оператор ветвления в краткой форме имеет только ветвь ИСТИНА.

Задача. С клавиатуры вводится целое число. Если оно четно, то увеличить его в три раза, иначе уменьшить на 5.

Исходные данные: целое число N (тип integer)

Выходные данные: измененное число N (тип integer)

Как будем решать задачу

  1. Поставим условие проверки на четность: вычислим остаток от деления на 2 операцией mod: N mod 2.
  2. Если остаток от деления на 2 равен 0, то число N увеличим в три раза N:=N*3, иначе уменьшим число на 5: N:=N-5.

Программа решения на языке Паскаль

var N:integer;

begin

    write('Введите целое число N=');

    readln(N);

    if N mod 2 = 0 then N:=N*3 else N:=N-5;

    writeln('Измененное число N=',N);

end.

Результат выполнения программы

Ветвление в Паскаль


Оператор безусловного перехода goto

goto метка;

Пример использования: проверка формата введенного числа.

Задача. Ввести натуральное число не более 100.

Исходные данные: n - число (тип integer)

Выходные данные: сообщение "Введено корректное число" или "Неверное число. Повторите ввод"

Программа решения на языке Паскаль

label vvod;

var n:integer;

begin

vvod:readln(n);

   if (n<1) or (n>100) then 

     begin

       writeln('Неверное число. Повторите ввод');

       goto vvod;

     end

   else 

     writeln('Введено корректное число');

end.

Для описания меток используется раздел label.

Примеры правильных меток:

  • 10 (число)
  • t2 (строка)
  • ch (строка)

Как работает оператор безусловного перехода

Когда выполняется оператор goto, происходит безусловный переход к оператору, обозначенному меткой (через знак двоеточие)

метка: оператор;

Например:

vvod: readln(n);

Переход к метке vvod вызывает выполнение оператора readln(n), а затем следующих за ним операторов.

Таким образом, оператор goto меняет порядок выполнения операторов в программе.

Оператор выбора case

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

Задача. Пользователь вводит свой год рождения. Программа сообщает, сколько полных лет пользователю.

Разберемся с окончаниями и русским языком.

1 год, 2 года, 3 года, 4 года, 5-20 лет, 21 год, 22-24 года, 25-30 лет

Исходные данные:

n - год рождения пользователя (тип integer)

t - текущий год (тип integer)

Выходные данные:

сообщение о возрасте с окончанием год, года, лет

Как будем решать задачу

  1. вычислим последнюю цифру числа (возраста)
  2. организуем выбор значения последней цифры из вариантов 1, 2-4, прочих

Если последняя цифра числа:

1: программа должна вывести окончание год

2-4: года

иначе: лет

Программа решения на языке Паскаль

var n,t:integer;

begin

   writeln('Введи свой год рождения');

   readln(n);

   t:=2022;

   case (t-n) mod 10 of

   1: writeln('Тебе в этом году ',t-n,' год');

   2..4: writeln('Тебе в этом году ',t-n,' года');

   else

      writeln('Тебе в этом году ',t-n,' лет'); 

   end;

end.

Формат оператора выбора

case выражение of

константа 1: оператор 1; 

константа 2: оператор 2; 

константа 3: оператор 3;

 ... 

константа N: оператор N

else оператор 

end;  

Как работает оператор выбора

Если значение выражения равно значению Константы N, то выполняется Оператор N, в противном случае выполняется Оператор после слова else, если же ветка else отсутствует, то действие переходит к следующему оператору в программе. В качестве выражения и константы должны выступать значения порядкового типа (например, integer, char). В качестве константы можно использовать список (например, 1,2,3) или диапазон (например, 10..99).

А что, если пользователь введет не положительное число?

Задан проходной балл. Запрашиваются оценки абитуриента на трех экзаменах и сообщается о результате приема в институт.

Читать

Определить, делителем каких целых чисел из А, В и С является целое число N.

Читать

Дано трехзначное число. Определить, является ли сумма его цифр двузначным числом

Читать

Является ли число двузначным

Читать

Известен рост трех человек. Определить, одинаков ли их рост?

Читать