Лабораторная работа 6


Программирование с использованием множеств

Теоретический материал Справочник по процедурам и функциям


Цель работы: познакомить с понятием "множество" в языке программирования Pascal; выработать навыки работы со структурой данных множество.

Общие сведения

Под множеством понимают ограниченный, неупорядоченный набор различных элементов одного типа. В отличие от массивов к элементам множества нет прямого доступа (по индексам этих элементов, как в массивах). Поэтому ввод-вывод множеств производится с использованием операций объединения (при вводе) и проверки принадлежности (при выводе). Под мощностью множества понимают количество элементов, содержащихся в данном множестве.
Перед выполнением работы необходимо ознакомится с правилами описания и использования переменных типа множество, типизированных констант типа множество, переменных, заданных перечислением, изучить допустимые операции над переменными этих типов.

Пример

Пример1: Дан текст. Определить каких букв больше - гласных или согласных.

Этапы решения задачи: 1. Составим блок схему программы

Опишем подробнее блок "Подсчитываем количество гласных и согласных букв"
Рассмотрим блок "Печатаем соответствующее сообщение"
Запишем блок-схему целиком

2. Переведем алгоритм на язык Паскаль
program example1; 
const 
  glasn=['а','е','и','о','у','ы','э','ю','я']; 
   soglas=['б','в','г','д','ж','з','й','л','м',
         'н','р','к','п','с','т','ф','х','ц','ч','ш','щ'];
 var
   st: string; 
     g,s,i:integer; 
begin 
  write('Введите строку> '); readln(st); 
    g:=0; s:=0; 
      for i:= 1 to length(st) do 
        if st[i] in glasn then inc(g) else if st[i] in soglas then inc(s);
        if g> s then writeln('Гласных больше')
    else if g< s then writeln('Согласных больше')
  else writeln('Согласных и гласных букв поровну');
 readln; 
end. 

Контрольные вопросы

  1. Что такое множество, как оно описывается в языке Pascal?
  2. Как определить новый тип данных с использованием перечисления?
  3. Как описываются типизированные константы типа множество?
  4. Как осуществляется ввод-вывод значений переменных типа множество?
  5. Какие типы данных используются в качестве базовых при объявлении типа множество?
  6. Какие операции определены над множествами?
  7. Какие операции допустимы над переменными, заданными перечислением?
  8. Чем похожи и чем отличаются множества и массивы?
  9. Какое значение у выражений: а) x in [x]; б) [ ] <= [x,y,z]; в) [x]<>[x,x,x]

Задания

Примечание: Гласные буквы - а,е,и,о,у,ы,э,ю,я (ё обычно не входит в литерный тип); согласные - все остальные буквы, кроме ь, ъ; звонкие согласные - б,в,г,д,ж,з,й,л,м,н,р; глухие согласные - к,п,с,т,ф,х,ц,ч,ш,щ.
  1. Дан текст из строчных латинских букв, за которым следует точка. Напечатать:
    - первые вхождения букв в текст, сохраняя их взаимный исходный порядок;
    - все буквы, входящие в текст не менее двух раз;
    - все буквы, входящие в текст по одному разу.
    Дана непустая последовательность слов из строчных русских букв; между соседними словами - запятая, за последним словом - точка. Напечатать в алфавитном порядке:
  2. все гласные буквы, которые входят в каждое слово; все согласные буквы, которые не входят ни в одно слово;
  3. все звонкие согласные буквы, которые входят хотя бы в одно слово; все глухие согласные буквы, которые не входят хотя бы в одно слово;
  4. все согласные буквы, которые входят только в одно слово; все глухие согласные буквы, которые не входят только в одно слово;
  5. все звонкие согласные буквы, которые входят более чем в одно слово; все гласные буквы, которые не входят более чем в одно слово;
  6. все звонкие согласные буквы, которые входят в каждое нечетное слово и не входят ни в одно четное слово; все глухие согласные буквы, которые входят в каждое нечетное слово и не входят хотя бы в одно четное слово.
  7. Имеются три множества символьного типа, которые заданы своими конструкторами:
    Y1=['A','B','D','R','H']
    Y2=['R','A','H','D']
    Y3=['A','R'].
    Сформировать новое множество .
    Предусмотреть формирование исходных множеств с клавиатуры.
  8. Подсчитать общее количество цифр и знаков '+', '-', и '*', входящих в строку s.
  9. Подсчитать количество различных (значащих) цифр в десятичной записи натурального числа n и напечатать в возрастающем порядке все цифры, не входящие в десятичную запись натурального числа n.
  10. Вычислить сумму тех элементов матрицы A, номера строк и столбцов которых принадлежат соответственно непустым множествам S1 и S2 типа Nom.
    
     Cons n=10; 
       Type Nomer= 1..n; 
        Матрица = Array[Nomer,Nomer] of Real; 
      Nom = Set of Номер; 
Задачи повышенной сложности
  1. Дан текст, являющийся русскими словами. Выполнить разделение каждого его слова на части для переноса.
    Далее правила переноса русских слов.
    a) Две идущие подряд гласные можно разделить, если первой из них предшествует согласная, а за второй идет хотя бы одна буква (буква й при этом рассматривается вместе с предшествующей гласной как единое целое).
    b) Две идущие подряд согласные можно разделить, если первой из них предшествует гласная, а в той части слова, которая идет за второй согласной, имеется хотя бы одна гласная (буквы ъ, ь вместе с предшествующей согласной рассматриваются как единое целое).
    c) Если не удается применить пункты a, b, то следует попытаться разбить слова так, чтобы первая часть содержала более чем одну букву и оканчивалась на гласную, а вторая содержала хотя бы одну гласную. Вероятность правильного разбиения увеличивается, если предварительно воспользоваться хотя бы неполным списком приставок, содержащих гласные, и попытаться, прежде всего, выделить из слова такую приставку.
  2. Написать программу раздачи карт при игре в дурака, количество игроков задается с клавиатуры.
  3. Для произвольного символьного множества сгенерировать все подмножества

Назад
На главную
    Учебник по языку Pascal          Лабораторные работы по программированию          Справочник

Реклама