Язык программирования PASCAL - Александр Цветков
Шрифт:
Интервал:
Закладка:
UpCase(c)
c - char
char
возвращает символ c, преобразованный к верхнему регистру
LowCase(c)
c - char
char
возвращает символ c, преобразованный к нижнему регистру
UpperCase(s)
s - string
string
возвращает строку s, преобразованную к верхнему регистру
LowerCase(s)
s - string
string
возвращает строку s, преобразованную к нижнему регистру
Trim(s)
s - string
string
возвращает копию строки s с удаленными лидирующими и заключительными пробелами
- 43 -
Тема №16 Множества символов
В языке Pascal есть очень интересный тип данных множество. Множество представляет собой набор элементов одного порядкового типа. Элементы множества считаются неупорядоченными; каждый элемент может входить во множество не более одного раза. Тип множества описывается следующим образом: set of базовый тип;
В качестве базового может быть любой порядковый тип с элементами, для которых функция Ord возвращает значения в диапазоне от 0 до 255. К таким типам, из изученных нами, относятся тип char и byte (а также их подмножества).[16] Аналогично массивам можно определить название нового типа в секции type, например:
type ByteSet = set of byte; CharSet = set of char; Digits = set of '0'..'9'; // подмножества типа char
Сами множества задаются в виде перечисления их элементов (возможно с использованием диапазонов), заключенные в квадратные скобки:
var Vowels : CharSet; // можно было написать vowels : set of char; Good : Digits; // можно было написать good : set of '0'..'9';
…
Vowels :=['A ', 'E ', 'O', 'I', 'U']; // Элементы явно перечислены
Good:=['3'.. '5', '10']; // Диапазон и отдельный элемент
Для проверки принадлежности элемента множеству существует операция in:
var c : char;
…
if c in Vowels then inc(n); // Если с – гласная, то увеличить n на 1
На обороте страницы приведена программа, которая вводит текстовую строку с экрана и выводит ее на экран азбукой Морзе, заодно проигрывая ее. В этой программе используется много нового: работа с модулем Sound, массив из строк, индексация массива не целыми числами, а типом char, функция задержки выполнения Sleep, функция перевода буквы в верхний регистр Upcase, работа с множеством.
Задание 16
1. Внимательно изучите текст программы ABCMorse, задайте преподавателю вопросы.
2. Напишите программу, которая вводит текстовую строку, подсчитывает, сколько в ней гласных букв, согласных букв, знаков препинания. (3 балла)
3. Напишите программу, которая вводит из файла 10 текстовых строк и выводит их в другой файл, отсортированными в алфавитном порядке. Используйте алгоритм сортировки занятия №13, и операцию сравнения строк < или >. (5 баллов)
4. Основываясь на программе ABCMorse придумайте интересную задачу на использование текстовых строк и множеств. (доп. баллы)
- 44 -
Файл morse.txt
·-
-···
·--
--·
-··
·
···-
--··
··
·---
-·-
·-··
--
-·
---
·--·
·-·
···
-
··-
··-·
····
-·-·
---·
----
--·-
--·--
-·--
-··-
··-··
··--
·-·-
Program ABCMorze;
Uses Sounds,CRT;
var A : array ['А '..'Я '] of string [5];
c : char;
f : text;
s : string;
i,j : integer;
dash, dot : integer;
morze : string [5];
begin
// Читаем файл и заполняем массив строк A['А'], A['Б'], A['Я'] азбукой Морзе
assign (f,'morze.txt'); reset (f);
for c:='А' to 'Я' do readln(f,A[c]);
close(f);
// Выводим таблицу на экран
for c:='А' to 'Я' do write(c,' ',A[c]:5,' ');
// Загружаем звуки
dash:=LoadSound('dash.wav'); dot:=LoadSound('dot.wav');
// Вводим текстовую строку
writeln; write('Введите сообщение '); readln(s);
for i:=1 to length(s) do // Разбираем ее по символам
if Upcase (s[i]) in ['А '..'Я '] then // Проверка принадлежности
begin // Если это русская буква (перевод в заглавные – Upcase)
morze:=A[Upcase(s[i])]; // Читаем s[i] элемент массива A в строку morze
for j:=1 to Length(morze) do // Разбираем строку Morze и проигрываем её
begin
write (morze [j]); // Вывод на экран буквы кодом Морзе
if morze[j]='-' then
begin
PlaySound(dash); Sleep(SoundLength(dash)); // играем dash
end
else
begin
PlaySound(dot); Sleep(SoundLength(dot)); // играем dot
end;
Sleep(50);
end;
write (' '); Sleep (500); // Пауза между буквами 500 мс
end; // end к внешнему оператору if
end.
- 45 -
Тема №17 Задача о квадратном уравнении
Решение квадратного уравнения выходит за рамки курса математики 7 класса, но мы сочли возможным внести эту классическую задачу программирования в дополнение.
Квадратным уравнением называется уравнение вида
ax2 + bx + c = 0
На первом этапе его решения определяется так называемый дискриминант:
d = b2 - 4ac
Далее рассматривают три случая
1. d < 0 – в этом случае вещественных решений нет[17];
2. d = 0 – один корень, определяемый формулой -b / 2a;
3. d > 0 – два корня, вычисляемых по формуле x1,2 = (-b ± √d)/2a, где знак «+» соответствует первому корню, а знак «–» – второму корню.
Составим программу для решения этой задачи:
Program SquareEquation;
var a, b, c : real; // Коэффициенты уравнения
d : real; // Дискриминант
x1, x2 : real; // Корни уравнения
begin
write ('Введите a, b, c ');
readln (a,b,c); // Ввод исходных данных
d:=b*b-4*a*c; // Вычисление дискриминанта
if d<0 then writeln('Решений нет')
else if d=0 then begin
x1:=-b/(2*a);
write('x=',x1)
end
else begin
x1:=(-b+sqrt(d))/(2*a);
x2:=(-b-sqrt(d))/(2*a);
write('x1=',x1,' x2=',x2)
end
end.
Последнюю ветвь else можно оптимизировать, убрав повторяющиеся вычисления (особенно вычисление квадратного корня)
else begin
d:=sqrt(d); a:=2*a;
x1:=(-b+d)/a;
x2:=(-b-d)/a;
write('x1=',x1,' x2=',x2)
end
- 46 -
01.06.2013
Примечания
1
Бинарные операции – имеющие два операнда, располагающиеся слева и справа от оператора
2
Унарная операция – имеющая только один операнд.
3
Интерфейс – в данном случае способ общения человека с компьютером.
4
В системе ABC Pascal отдельное окно консоли появляется только при использовании модуля CRT.
5
От английского Cathode Ray Tube – Электронно-лучевая трубка (ЭЛЧ)
6
Дополнительную информацию можно получить в справочной системе ABC Pascal, раздел Стандартные модули – Модуль GraphABC.
7
Синтаксис оператора – правила его записи.
8
Интерпретировать – толковать.
9
Назван в честь Дж. Буля – основателя математической логики.
10
Бинарные операции – имеющие два операнда, на которые действует эта операция.
11
Унарная операция – имеющая только один операнд.
12
Для этого в MS Word при создании файла надо выбрать тип «*.txt – обычный текст», а при открытии указать, что мы открываем текстовый файл в кодировке Win-1251.
13
В ABC Pascal существуют функции FileExists(name), проверяющая, существует ли файл с таким именем, и CanCreateFile(name), проверяющая можно ли создать файл с таким именем.
14
В ABC Pascal существуют две аналогичные функции Eoln и SeekEoln, которые вместо конца файла ищут конец строки.
15
Коды с 0 по 31 являются служебными и в таблице ANSI им не соответствуют никакие печатные символы.
16
Другие возможные базовые типы – перечисления (об этом позже).
17
Решение есть только в комплексных числах