Учебное пособие для школьников 79 классов СанктПетербург Павловск 20152016 Введение
Скачать 0.84 Mb.
|
string , index - integer вставляет подстроку subs в строку s с позиции index Pos(subs,s) s, subs - string integer возвращает позицию первой подстроки subs в строке s (или 0 если подстрока не найдена) SetLength(s,n) s - string, n - integer устанавливает длину строки s равной n Str(x,s) Str(x:n,s) Str(x:n:m,s) s - string, x - integer, real и n, m - integer преобразует x к строковому представлению (во втором и третьем случаях согласно формату вывода, устанавливаемому n и m) и записывает результат в строку s Val(s,v,code) s - string, v - integer, real, и code - integer преобразует строку s к числовому представлению и записывает результат в переменную v. Если преобразование возможно, то в переменной code возвращается 0, если невозможно, то в code возвращается ненулевое значение Concat(s1,...,sn) s1,..., sn - string string возвращает строку, являющуюся результатом слияния строк s1,..., sn. Результат тот же, что у выражения s1+s2+...+sn 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 с удаленными лидирующими и заключительными пробелами Тема №16 Множества символов А.С.Цветков, ABC Pascal - 44 - 19.09.2015 Занятие №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 придумайте интересную задачу на использование текстовых строк и множеств. (доп. баллы) 16 Другие возможные базовые типы – перечисления (об этом позже). Тема №16 Множества символов А.С.Цветков, ABC Pascal - 45 - 19.09.2015 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 Файл morse.txt ·- -··· ·-- --· -·· · ···- --·· ·· ·--- -·- ·-·· -- -· --- ·--· ·-· ··· - ··- ··-· ···· -·-· ---· ---- --·- --·-- -·-- -··- ··-·· ··-- ·-·- Тема №17 Задача о квадратном уравнении А.С.Цветков, ABC Pascal - 46 - 19.09.2015 Занятие №17 Вычислительные программы – квадратное уравнение Решение квадратного уравнения выходит за рамки курса математики 7 класса, но мы сочли возможным внести эту классическую задачу программирования в дополнение. Квадратным уравнением называ 0 d = ется уравнение вида 2 0 ax bx c + + = На первом этапе его решения определяется так называемый дискриминант: 2 4 d b ac = − Далее рассматривают три случая 1. 0 d < – в этом случае вещественных решений нет 17 ; 2. 0 d = – один корень, определяемый формулой 2 b a − ; 3. 0 d > – два корня, вычисляемых по формуле 1,2 2 b d x a − ± = , где знак «+» соответствует первому корню, а знак «–» – второму корню. Составим программу для решения этой задачи: 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 17 Решение есть только в комплексных числах |