Задачи на множества паскаль

  1. Организационный момент.
  2. Работа в группах.
  3. Подведение итогов.
  4. Домашнее задание.

ТЕОРЕТИЧЕСКИЙ МАТЕРИАЛ К УРОКУ.

Наряду с числом множество является фундаментальным математическим понятием. Паскаль — один из немногих алгоритмических языков, который имеет встроенные средства для работы с множествами.

В математике под множеством понимается некоторый набор элементов. Например, множество фигур на плоскости (прямоугольник, круг, ромб, квадрат). В математике рассматриваются конечные и бесконечные множества, состоящие из произвольных элементов. В Паскале множества всегда конечные, причем состоят из небольшого числа элементов (в Турбо Паскале — до 255).

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

<1,2,3>
<'A','K','B','L'>
[1,2,3]
['A','K','B','L']
пустое множество []
[1..N]

В квадратных скобках могут находиться не только константы, но любые выражения типа элементов множества, например, [2++x,8-3].

К множествам применимы следующие операции.

объединение С=АВ
пересечение С=АВ
разность С=АВ

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

var имя множества: set of базовый элемент;

var god: set of 1880...2000; c: set of char;
type имя типа= set of базовый элемент;
var имя множества: имя типа;
set of 'a'...'z' — множество прописных английских букв;
set of 1...100 — множество целых чисел от 1 до 100;
set of (winter, spring, summer, outumn) — множество времен года
set of char — множество всех символов.

В языке паскаль имеются следующие операции над множествами:

+ - объединение множеств;
* - пересечение множеств;
— — вычитание множеств;
=,<> — проверка множеств на равенство, неравенство;
= — проверка множеств на включение;
in — проверка на принадлежность элемента множеству ( c in a).

Все значения множества представляются в памяти последовательностями битов одинаковой длины. За каждое значение базового типа «отвечает» один бит. Если множество содержит некоторый элемент, в «ответственном» за него бите хранится 1, если не содержит — хранится 0.

Пример: var x: set of 1...15;

Внутреннее представление X

x:=[]; 000000000000000>
x:=[2,3,5]; 011010000000000>
x:=[1..15]; 111111111111111>

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

x:=[2,3,5]; 011010000000000>
y:=[3,5,7,8]; 001010110000000>
z:=x+y; 011010110000000>

Поразрядные документы входят в набор команд процессора ЭВМ, поэтому выполняется быстро.
Средства работы с множествами позволяют в некоторых случаях сократить программы и сделать их более наглядными и эффективными за счет уменьшения числа проверок.

Задача №1 . Имеются три множества символьного типа, которые заданы своими конструкторами: Y1=['A','B','D','R','M']; Y2=['R','A','H','D']; Y3=['A','R']; Сформировать новое множество: X=(Y1*Y2)+(Y1Y2). Вывести на печать полученное множество x, проверить, включено ли y3 во множество x. (файл MNOG1.PAS)

program mnog1;
var y1,y2,y3,x: set of char;
c:char;
begin
y1:=['a','b','d','r','m'];
y2:=['r','a','h','d'];
y3:=['a','r'];
x:=(y1*y2)+(y1-y2);
write('множество x=');
for c:='a' to 'r' do
if c in x then write©;
writeln;
if y3

Задача №2. Из множества целых чисел 1...20 выделить: множество чисел, делящихся без остатка на 6; множество чисел, делящихся без остатка или на 2, или на 3. (файл MNOG2.PAS).

program mnog2;
const n=20;
var n2,n3,n6,n23: SET OF 1...N;
k:1...N;
begin
n2:=[ ]; n3:=[ ];
for k:=2 to n do
begin
if (k mod 2)=0 then n2:=n2+[k];
if (k mod 3)=0 then n3:=n3+[k];
end;
n6:=n2*n3;
n23:=n2+n3;
writeln('на 6 делятся числа:');
for k:=1 to n do
if k in n6 then write(k:3);
writeln;
writeln('на 2 или на 3 делятся числа:');
for k:=1 to n do
if k in n23 then write(k:3);
end.

Задача №3. Дан текст (например, 5a7233111bge2257cde.) Признаком конца текста является точка. Вывести на экран цифры, которые встречаются в тексте. (файл MNOG3.PAS).

program mnog3;
var z: SET OF 0...9;
k,i:integer;
si:char;
begin
readln;
write('=>');
z:=[ ];
repeat
read(si);
k:=ord(si) -ord('0');
if k in [0..9] then z:=z+[k]
until si='.';
if z=[ ] then writeln ('В тексте нет цифр')
else begin
write('В тексте имеются следующие цифры:');
for i:=1 to 9 do
if i in z then write (i:2);
writeln;
end;
end.

Читайте также:  Зашифрованные цифры в ребусах

Задача №4. Известен набор продуктов - хлеб, масло, сыр, молоко, имеющихся в ассортименте магазинов. В три магазина доставлены отдельные виды этих продуктов. Требуется построить множества a,b,c, которые содержат соответственно:
— продукты, имеющиеся одновременно во всех магазинах;
— продукты, имеющиеся по крайней мере в одном из магазинов;
— продукты, которых нет ни в одном из магазинов.

Решение. файл MNOG4.PAS).
program mnog4;
uses crt;
const n=3;
type
produkt=(xleb,maslo,sir,moloko);
accort=set of produkt;
magazin=array[1..n] of accort;
var m1:magazin;
x:produkt;
a,b,c,xm1:accort;
i,j,iw,m:integer;
begin clrscr;
for i:=1 to n do
begin xm1:=[ ];
writeln('Вводи номера продуктов',i:2,'-го магазина=');
repeat
read(iw);
case iw of
1: x:=xleb;
2: x:=maslo;
3: x:=sir;
4: x:=moloko;
end;
xm1:=xm1+[x];
until eoln;
m1[i]:=xm1;
end;
a:=m1[1]; b:=[]; c:=[xleb..moloko];
for i:=1 to n do
begin b:=b+m1[i];
a:=a*m1[i];
c:=c-b;
end;
for i:=1 to n do
begin
case i of
1: writeln('продукты, имеющиеся одновременно во всех магазинах');
2: writeln('ассортимент продуктов');
3: writeln('продукты, которых нет ни в одном магазине');
end;
for x:=xleb to moloko do
if x in a then
case x of
xleb: write('хлеб');
maslo:write('масло');
sir: write('сыр');
moloko:write('молоко');
end;
if i=1 then a:=b else a:=c;
writeln;
end;
end.

Задача №5. Сформировать множество, в которое входят только латинские буквы, встретившиеся во входной строке, и множество знаков препинания из входной строки. (Самостоятельно!)

program mnog5;
var LB: SET OF 'a'...'z'; PR: SET OF '!'...'?'; C,I,J:char;
begin
readln;
write('=>');
LB:=[ ]; PR:=[ ];
repeat
read©;
if C in ['a'..'z'] then LB:=LB+[C] ELSE IF C IN ['!',';',':','.',',','?']
THEN PR:=PR+[C]
until EOLN;
writeLN('Латинские буквы:');
for i:='a' to 'z' do
if i in lb then write (i:2);
writeln;
writeln('знаки препинания');
for j:='!' to '?' do
if j in pr then write(j:2);
end.

Задание для работы в группах по теме «Множества»

  1. Найдите ответ на вопрос «Какие структуированные типы данных существуют в Паскале?». Расскажите устно друг другу ответ на вопрос.
  2. Найдите ответ на вопрос «Что понимается под множеством в Паскале?» Расскажите устно друг другу ответ на вопрос.
  3. Найдите ответ на вопрос «Как объявляются множества?». Расскажите устно друг другу ответ на вопрос.
  4. Какие типы данных используются в качестве базовых при построении множественных типов. Расскажите устно друг другу ответ на вопрос.
  5. Найдите ответ на вопрос «Как в Паскале обозначаются операции над множествами?». Расскажите устно друг другу ответ на вопрос.
  6. Чем похожи и чем отличаются множества и массивы,
  7. Как представляются множества в памяти.
  8. Вычислить следующие выражения:
    a) [5]
  9. Познакомиться с условием задачи № 1.
  10. Вызвать с диска файл (c: p7mnog1.pas). Запустить программу на выполнение. Ответ примера № 1 записать в тетрадь.
  11. Найдите ответ на вопрос «Как организована в программе проверка на включение множества Y3 в множество X?». Расскажите устно друг другу ответ на вопрос.
  12. Выйти из Паскаля. Распечатать на принтере файл c: p7mnog1.pas. Распечатку вклеить в тетрадь.
  13. Познакомиться с условием задачи № 2.
  14. Вызвать с диска файл (c: p7mnog2.pas). Запустить программу на выполнение. Ответ записать в тетрадь. Ответить на вопрос «Как в программе сформировано множество чисел, делящихся без остатка на 6; множество чисел, делящихся без остатка или на 2, или на 3?»
  15. Выйти из Паскаля. Распечатать на принтере файл c: p7mnog2.pas. Распечатку вклеить в тетрадь.
  16. Познакомиться с условием задачи № 3.
  17. Вызвать с диска файл (c: p7mnog3.pas). Запустить программу на выполнение. Ответ записать в тетрадь. Разобраться как работает данная программа.
  18. Выйти из Паскаля. Распечатать на принтере файл c: p7mnog3.pas. Распечатку вклеить в тетрадь.
  19. Познакомиться с условием задачи № 4.
  20. Вызвать с диска файл (c: p7mnog4.pas). Запустить программу на выполнение. Ответ записать в тетрадь. Разобраться как работает данная программа.
  21. Выйти из Паскаля. Распечатать на принтере файл c: p7mnog4.pas. Распечатку вклеить в тетрадь.
  22. Познакомиться с условием задачи № 5.
  23. Составить программу. Сохранить ее на своем диске в каталоге MNOG.
  24. Подвести итоги, ответив на вопрос: что вами было изучено и исследовано в ходе урока?

лабораторные работы и задачи по программированию и информатике, егэ по информатике

Записи в Паскале

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

Описание записи в Паскале

Общий вид описания типа record в Паскаль:

var = record : ; : ; . end;

Рассмотрим примеры объявления и создания записи в Паскале.

type mydate = record month: 1...12; day: 1...31; year: integer end; var d: mydate;

В примере переменная mydate — запись, состоящая из трех полей: month , day и year . Каждое поле содержит соответственно данные: целое число в пределах от 1 до 12 — номер месяца (интервальный тип), целое число от 1 до 31 — число месяца (интервальный тип), целое число — год.

Читайте также:  Веганы это секта или нет

Обращение к полям записи

type mydate = record month: 1...12; day: 1...31; year: integer end; var d: mydate; begin d.day:=1; d.month:=12; readln(d.year); writeln(d.day,'/',d.month,'/',d.year); end.

Записи в виде двумерной таблицы

Часто записи используются в виде двумерной таблицы, каждый столбец которой имеет свой тип.
Таким образом, если описана двумерная таблица, то ее начальные значения задаются как вектор, каждый компонент которого является записью.

Рассмотрим пример использования записи-таблицы:

1 2 3
Day 2 14 14
Month 1 2 12
Year 1985 1987 1989

Задать данные таблицы в виде записи. Объявить массив дней рождения и вывести дату первого дня рождения.

type zap1= record day:1...31; month: 1...12; year: 1900...2100; end; var birthdays:array[1..100] of zap1; begin birthdays[1].day:=2; birthdays[2].day:=14; birthdays[3].day:=14; birthdays[1].month:=1; birthdays[2].month:=2; birthdays[3].month:=12; birthdays[1].year:=1985; birthdays[2].year:=1987; birthdays[3].year:=1989; writeln(birthdays[1].day); end.

Использование конструкции with при работе с записями

При работе с записями есть возможность избавиться от постоянного префикса в виде обращения к названию переменной. Сравним два примера:

type zap1= record day:1...31; month: 1...12; year: 1900...2100; end; var my_birthday: zap1; begin my_birthday.day:=17; my_birthday.month:=4; my_birthday.year:=1993; . end.

type zap1= record day:1...31; month: 1...12; year: 1900...2100; end; var my_birthday: zap1; begin with my_birthday do begin day:= 17; month:= 3; year:= 2004; end; . end.

Во втором примере значительно проще обращаться к полям записи, избавившись от префикса, благодаря with

Записи при работе с файлами

type t_subscriber = record surname: string[20]; tel: LongInt; end; var subscriber: t_subscriber; f: file of t_subscriber; i: Integer; begin Assign(f,'notebook.dat'); Rewrite(f); for i:=1 to 5 do begin with subscriber do begin Write('Surname: '); ReadLn(surname); Write('Phone: '); ReadLn(tel); end; Write(f, subscriber); end; Close(f); end.

Рассмотрим пример последовательного доступа к типизированному файлу с использованием записей:

type t_subscriber = record surname: string[20]; tel: integer; end; var subscriber: t_subscriber; f: file of t_subscriber; s: string; begin Assign(f,'z:pascal.dat'); rewrite(f); subscriber.surname:='ivanov'; subscriber.tel:=36233357; write(f,subscriber); subscriber.surname:='petrov'; subscriber.tel:=236244475; write(f,subscriber); close(f); Reset(f); while not Eof(f) do begin Read(f, subscriber); with subscriber do begin Str(tel,s); if Copy(s,1,3) = '362' then tel := tel+2000000; end; Seek(f,FilePos(f) −1); // возврат указателя назад Write(f,subscriber); Writeln(subscriber.surname, ' ',subscriber.tel); end; Close(f); end.

Множества в Паскале

Множества в Паскале — это некоторое собрание элементов, одно и того же базового типа.

В качестве базового типа может выступать любой простой порядковый тип. Базовым типом не могут быть вещественные числа (real не порядковый тип) и строки (не простой и не порядковый тип).

Размер множества в Turbo Pascal всегда ограничен некоторым предельно допустимым количеством элементов. Во множествах допускаются только такие элементы, порядковые значения которых не выходят за границы 0...255. В Turbo Pascal в целочисленных множествах могут присутствовать только числа от 0 до 255.
Отрицательные элементы множеств в Turbo Pascal не допускаются. Поэтому базовыми типами не могут быть типы shortint, integer, longint.

Таким образом, если необходимо множество целочисленных объектов, то базовый тип для Turbo Pascal должен быть объявлен как диапазон типа byte . Для множеств, содержащих символы, базовым типом должен быть тип char .

type week_days = (Mon, Tue, Wed, Thu, Fri, Sat, Sun); var work_days: set of week_days; begin work_days:=[Mon, Wed, Thu]; end.

Из примера видно, что множества (тип set ) задаются путем перечисления значений, разделенных запятыми и заключенных в квадратные скобки.

Синтаксис:
name_set:=[expr1, expr2, … exprn];

type letters = set of char; var ch1,ch2:letters; .

Переменные ch1 и ch2 из примера также не могут быть выведены на экран и их значения не могут быть запрошены при помощи оператора read .

Возникает логичный вопрос: как же тогда работать с множествами в Паскале?

Чтобы ответить на данный вопрос, сначала рассмотрим операции, выполняемые над множествами.

Действия над множествами

Объединение двух множеств A и B ( A + B ) — это новое множество, состоящее из элементов, принадлежащих множеству A или B либо тому и другому одновременно

Пример:

Пересечение двух множеств A и B ( A * B ) — это множество, состоящее из элементов, одновременно принадлежащих множествам A и B .

Пример:

var ch1, ch2, ch3: set of char; begin ch1:=['a', 'b', 'd']; ch2:=['m', 'd', 'e']; ch3:=ch1 * ch2; <Результат: ch3 = ['d'] >end.

Разность двух множеств A и B ( A — B ) — это новое множество, состоящее из элементов множества A , не вошедших в множество B .

Пример:

var ch1, ch2, ch3: set of char; begin ch1 := ['a', 'e', 't']; ch2 := ch1 — ['e']; < ['a', 't'] >ch3 := ['m', 'n', 't'] — ch2; < ['m', 'n'] >end.

Множества и операция IN в Паскале

Операция in необходима для поиска определенного элемента в величине типа set , т.е. в множестве.

Так, если x есть элемент множества a , то ( x in a ) дает true .

type week_days=(Mon, Tue, Wed, Thu, Fri); var work_days: set of week_days; begin work_days:=[Mon, Wed]; if Mon in work_days then writeln ('понедельник — рабочий день') else writeln ('понедельник — не рабочий день') end.

Читайте также:  Запуск компьютера при подаче питания

var work_days,days_off: set of byte; begin work_days:=[1, 2]; days_off:=[6, 7]; if 1 in work_days then writeln ('понедельник — рабочий день') else writeln ('понедельник — не рабочий день'); if 6 in days_off then writeln ('суббота — выходной день') else writeln ('суббота — не выходной день'); end.

  • 1 — на ветке 1 ворона
  • 2 — на ветке 2 вороны
  • 10 — на ветке 10 ворон
  • var voron, vorona, voroni: set of byte; number:integer; begin voron:=[5,6,7,8,9,10]; vorona:=[1]; voroni:=[2,3,4]; writeln ('введите количество ворон'); readln(number); if number in voron then writeln ('на ветке ', number,' ворон'); if number in vorona then writeln ('на ветке ', number,' ворона'); if number in voroni then writeln ('на ветке ', number,' вороны') end.

    var m : set of char; s : string; i : byte; begin write('строка: '); readln(s); m :=[]; i := 1; while i Поделитесь уроком с коллегами и друзьями:

    <Для любого количества ворон:>
    var
    vorona, voroni: set of byte;
    number: integer;
    x: string;

    begin
    vorona := [1];
    voroni := [2, 3, 4];
    x := »;
    writeln(‘введите количество ворон’);
    readln(number);
    if (number mod 100 14) then
    if number mod 10 in vorona then
    x := ‘а’
    else if number mod 10 in voroni then
    x := ‘ы’;
    writeln(‘на ветке ‘, number, ‘ ворон’ + x)
    end.

    Читайте также:

    1. A) Структура общего решения однородного уравнения.
    2. I. Задачи сопоставительного изучения общения детей со взрослыми и сверстниками
    3. I. Цели и задачи учебной дисциплины.
    4. I. Цели и задачи.
    5. I. ЦЕЛИ И ЗАДАЧИ.
    6. I.Целеустремленность характеризуется ясностью перспективной и промежуточных целей, ясностью частных задач, планомерностью действий для достижения цели.
    7. II. ЗАДАЧИ ДЛЯ РЕШЕНИЯ В АУДИТОРИИ
    8. II. Задачи КУТВ в отношении колониальных и зависимых стран Востока
    9. II. Задачи.
    10. II. Очередные задачи коммунистических партий капиталистических стран
    11. II. Сборник ситуационных задач
    12. III. Задачи

    Лабораторная работа 21.

    Программирование в графическом режиме.

    Лабораторная работа №20.

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

    Программа изображает график функции. Для того чтобы можно было быстро настроить программу на любой вид функциональной зависимости, используем отдельную функцию для задания функциональной зависимости, в которой легко можно изменить одну строку. Сам график строим в виде отрезков прямых. Для многих функций такой график получается лучше, чем при прорисовке по отдельным точкам, к тому же это прекрасная возможность продемонстрировать действие процедур moveto и lineto, которые работают с текущим графическим указателем. Использование масштабных коэффициентов придает универсальность процедуре построения графика. При этом считаем, что график занимает все экранное пространство (ровно 640 точек) вне зависимости от введенного интервала изменения аргумента.

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

    for k:=1 to 640 do

    if f(x)>max then max:=f(x);

    4) Защитите лабораторную работу.

    . Повторите материал по теме «Множества».

    Задача 1. В произвольном тексте А: string определить, какие цифры встречаются, вывести их.

    Подсказка: Пусть DI — тип множества всех встретившихся символов — цифр. Сначала DI=[]. Затем, просматривая текст, все цифры добавляются во множество DI. Они будут встречаться там в одном экземпляре, сколько бы одинаковых цифр не встретилось бы в тексте ( по свойствам множества).(Наберите программу и объясните приведенное решение).

    Type XX=set of ‘0’...’9’;

    Var s:char ; a:string; DI:XX; n,i:byte;

    Begin write(‘Введите текст’);

    If a[i] in [‘0’..’9’] then DI:=DI+[a[i]];

    If DI=[] then writeln (‘В тексте цифр нет’) else writeln (‘В тексте следующие цифры’);

    If s in DI then write(s:3);

    Задача 2. Сформировать множества А и В, базовый тип которых 0...50, по заданному числу элементов для каждого множества. Найти число и сумму элементов, принадлежащих одновременно и А и В; выведите на экран все элементы множества А, не принадлежащие В.

    Подсказка. Допустим n — количество элементов для множества А. Тогда при формировании А можно использовать цикл k:=0; Repeat… until k>= n, где k — это счетчик для множества.

    Задача 3. Решить Задачу 2, если известно, что рассматриваются множества А и В, базовый тип которых — буквы русского и латинского алфавитов.

    Подсказка. Для формирования множества из букв воспользуемся кодовой таблицей и все необходимые диапазоны кодов букв поместим в дополнительное множество М. Тогда при формировании В (или А) можно использовать тот же способ, что и в предыдущей задаче, например:

    type mnog=set of char;

    writeln('Vvedite kol-vo elementov mn-va B);

    if x in M then B:=B+[chr(x)];

    for y:=0 to 255 do

    if chr(y) in b then k:=k+1;

    for x:=0 to 255 do

    if chr(x) in B then write (chr(x):5);

    Дата добавления: 2015−06−26 ; Просмотров: 745 ; Нарушение авторских прав? ;

    Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет

    Оцените статью
    Adblock detector