- •Программирование на языке высокого уровня
- •1 Часть Учебное пособие Москва 2007
- •Оглавление
- •1. Основы алгоритмизации
- •1.1. Алгоритмизация и требования к алгоритму
- •1.2. Блок-схемы алгоритмов
- •1.2.1. Способы записи алгоритма
- •1.2.2. Блок-схемы
- •1.2.3. Следование, ветвление, цикл
- •1.3. Этапы разработки программы
- •1.3.1. Язык программирования. Программа
- •1.3.2. Этапы разработки
- •1.4. Ошибки
- •1.4.1. Компилятор. Синтаксис и семантика
- •1.4.2. Типы ошибок
- •2. Алфавит языка Турбо Паскаль. Программа
- •2.1. Идентификаторы
- •2.2. Разделители
- •2.3. Специальные символы
- •2.4. Структура Pascal-программы
- •Пример простейшей программы на языке Pascal
- •3. Типы данных
- •3.1. Структура типов данных
- •3.2. Простые типы
- •3.2.1. Порядковые типы
- •3.2.1.1 Целые типы.
- •3.2.1.1.1. Встроенные процедуры и функции, применимые к целым типам
- •3.2.1.2. Логический тип.
- •3.2.1.3. Символьный тип.
- •3.2.1.4. Перечисляемый тип.
- •3.2.2. Вещественные типы
- •3.3. Константы и переменные
- •3.4. Преобразование типов
- •4. Операторы
- •4.1. Ввод данных
- •4.2. Вывод данных
- •4.3. Составной оператор
- •4.4. Условный оператор
- •4.5. Операторы циклов
- •4.5.1. Оператор for
- •4.5.2. Оператор while
- •4.5.3. Оператор repeat
- •4.5.4. Стандартные функции для циклов
- •4.6. Оператор выбора case
- •5. Массивы
- •5.1 Определение массива
- •5.2. Ввод/вывод одномерного массива (вектора).
- •5.3 Типизированные константы – массивы
- •5.4. Сортировка массивов (ранжирование)
- •6. Процедуры и функции
- •6.1. Подпрограммы
- •6.2. Параметры. Глобальные и локальные описания
- •6.3. Процедуры
- •6.4. Функции
- •6.5. Процедура exit
- •6.6. Рекурсия
- •6.7. Директивы подпрограмм
- •6.8. Открытые массивы
- •7. Записи
- •7.1.Определение и правила записи
- •7.2. Оператор присоединения
- •7.3. Записи с вариантами (экономия пространства)
- •8. Множества
- •8.1. Понятие множества
- •8.2. Конструктор множества
- •8.3. Операции над множествами
- •8.4. Примеры программ, использующих множества.
- •Литература
8.4. Примеры программ, использующих множества.
Пример 1. Подсчет количества гласных букв в предложении.
Const
Glash =[‘a’,’e’,’и’,’о’,’у’,’ы’,’э’,’ю’,’я’,’А’,’Е’,’И’,’О’,’У’,’Ы’,’Э’,’Ю’,’Я’];
Var
s : string;
p,i : integer;
begin
write (‘Введите строку текста’); Readln (s);
p:=0;
for i:=1 to length(s) do
if s[i] in glash then inc(p);
writeln (‘В строке ‘,p,’ ‘гласных букв’);
end;
Пример2. В программе формируются два множества: заглавных латинских букв и знаков препинания, встретившихся во входной строке.
Program Lat;
Var
C, I, j : char;
Lb : set of ‘A’…’Z’;
Pt : set of ‘!’…’?’;
Begin
Lb:=[ ]; pt:=[ ]; {инициализация множеств}
Repeat
Read (c) ;
If c in [‘A’,…’Z’] then lb:=lb+[c] {формирование множества заглавных букв}
Else
If c in [‘:’,’,’,’;’,’-‘,’!’,’?,’.’] then pt:=pt+[c] ; {формирование множества препинания}
Until eoln; {логическая функция, если прочитана последняя литера текущей строки}
Writeln (‘латинские буквы:’ );
For i=’A’ to ‘Z’ do
If I in lb then write (i:2);
Writeln (‘знаки препинания:’ );
For i=’!’ to ‘?’ do
If I in pt then write (i:2);
End;
Пример 3. Программа подсчитывает число различных элементов в массиве.
Program Count1;
var
m:array [1…20] of integer; { массив целых чисел}
I,n : byte;
K :set of 1..50;
Begin
Randomize;
Writeln (‘Массив:’);
For i:=1 to 20 do
Begin
M[i]:=random(50);
writeln (m[i]:3)
End;
N:=0; k:=[ ];
For i:=1 to 20 do
Begin {не входит ли элемент массива в множество К}
If not (m[i] in k) then
Begin
Inc(n); k:=k+[m[i]] {включение элемента массива в множество}
End;
End;
Writeln (‘Число различных элементов массива =’,n);
End.
Достоинства множеств
-
Можно проводить анализ однотипных выборок, значений или накапливать произвольные значения.
-
Значения типа множество компактно кодируют множество из 256 элементов, занимая 32 байта.
Недостатки множеств
-
Представляют ограниченный набор значений (256 элементов).
-
Невозможность вывода на экран.
-
Операции на множествах медленно выполняются.
Пример 4. Известен набор продуктов: хлеб, масло, сыр, молоко, имеющихся в ассортименте магазинов. В 3 магазина доставлены отдельные виды продуктов. Требуется построить множества А,В,С, которые содержат соответственно:
- продукты, имеющиеся одновременно во всех магазинах;
- продукты, имеющиеся по крайней мере в одном из магазинов;
- продукты, которых нет ни в одном магазине.
Program PROD;
Const
n=3; (количество магазинов)
Type
Product = (bread, butter, cheese, milk); ( Продукты)
Assort = set of product ; (Ассортимент продуктов, множество)
Shop = array [1…n] od assort; (Информация о продуктах в магазинах)
Var
M1: shop;
x : product;
a,b,c,xm1 : assort;
I,j,iw,m : integer;
Begin
For i:=1 to n do
begin
Xm1:=[ ];
writeln (‘Введи номера продуктов’ ,i:2,’-го магазина =’);
Repeat
Read (iw);
Case iw of
1: x:= bread;
2: x:= butter;
3: x:= cheese;
4: x:= milk
Else writeln (‘Номер продуктов 1…4);
end; (case)
xm1:=xm1+[x]; (наличие товаров в одном магазине)
until eoln; (repeat)
m1[i]:=xm1
end; (конец цикла по i-ому магазину)
a:=m1[1]; (Ассортимент 1-го магазина)
b:=[ ];
c:=[ bread.. milk];
for i:=1 to n do
begin
b:=b+m1[i]; (Хотя бы в одном)
a:=a*m1[i]; (Одновременно во всех)
C:=c-b; (Нет ни в одном)
End; (for)
For i:=1 to 3 do
Begin
Case I of
1: writeln(‘ Продукты имеются во всех магазинах’);
2 : writeln(‘Ассортимент продуктов’);
3: writeln(‘Продукты, которых нет ни в одном магазине’);
End; (case)
For x:= bread to milk do
If x in a then
Case x of
bread : writel‘ Хлеб’);
butter : write(‘Масло’);
cheese : write(‘Сыр’);
milk : write(‘Молоко’);
End; (case)
If i=1 then a:=b
else
a:=c;
Writeln
End;
End.
В программе задается список объектов (продуктов), определяющих базовых тип product, на котором определен множественный тип assort. Информация о наличии продуктов во всех магазинах задается как массив множеств.
Вначале вложенные циклы обеспечивают ввод исходной информации. При этом во внутреннем цикле обеспечивается формирование множества ХМ1, характеризующее наличие товаров в одном магазине. По выходу из внутреннего цикла информация заносится в массив М1.
Затем строятся множества с использованием операций над множествами (пересечение, вычитание, объединение).
В конце программы вложенные циклы по i и x обеспечивают распечатку полученных множеств. Исполняется оператор CASE.