Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Прикладное программирование. Учебное пособие

.pdf
Скачиваний:
0
Добавлен:
07.09.2026
Размер:
1 Мб
Скачать
☆
в теле цикла всегда происходит изменение значения параметра входящего в выражение условия;
цикл While может, не выполнится ни разу, поскольку проверка условия в продолжение цикла выполняется до тела цикла.
Формат оператора оператора:
WHILE <условие> DO P;
где P — простой или составной оператор.
Контрольные вопросы
1. Перечислите основные этапы процесса решения задач на ЭВМ
2. Дайте определение линейного алгоритма. Схема представления линей-
ного алгоритма
3. Дайте определение разветвляющегося алгоритма. Схема представления
разветвляющегося алгоритма
4. Дайте определение циклического алгоритма. Схема представления цик-
лического алгоритма.
5. Переменная. Тип переменной. Классификация типов переменных в язы-
ке TurboPascal
6. Целые типы данных и их характеристика
7. Вещественные типы данных и их характеристика
8. Символьные типы данных и их характеристика
9. Тип-диапазон
10. Основные операторы языка TurboPascal.
11. Операторы условия и перехода (GOTO, IF)
12. Оператор выбора CASE
13. Циклические вычислительные процессы. Цикл с параметром (FOR)
14. Оператор цикла с постусловием REPEAT, его особенности
15. Оператор цикла с предусловием WHILE, его особенности
21
Работа с символьными переменными в Паскаль
Данные символьного типа
Данные типа CHAR и STRING позволяют представлять в программах тек­сты и производить над ними некоторые операции, например, исправлять орфо­графические ошибки, вставлять и удалять отдельные буквы и слова. Кроме то­го, они дают возможность обрабатывать различные ведомости, документы и т.д. Значением строковой величины может быть любая цепочка символов.
Строка – это последовательность символов кодовой таблицы персонально­го компьютера.
Количество символов в строке (длина строки) может изменяться от 0 до
255.
Константа строкового типа – это любая цепочка символов языка Паскаль,
заключенная в апострофы.
Описание строковых переменных var <идентификатор>: string [максимальная длина строки]; ПРИМЕР:
const adres=’ул.Королева, 5’; var s:string; d : char; st1, st2 : string [30];
Значения строковым переменным задаются либо оператором присваива-
ния, либо оператором readln с клавиатуры.
Операции над строковыми переменными а) Сравнения (<>,<,>, >=,<=,=) d:=’мама’; p:=’папа’
d>p
б) конкатенация (сложение) s:=’Д’+’Артаньян’;
writeln(s); Задание: определить правильность написания операторов:
22
var A,B,C,D,G,Z: STRING; v : integer; begin
A:= «Информатика»; ошибка B:=Формат; ошибка С:=’’; пустая строка D:=25 ; ошибка G:=’25’; Z:=’формат; ошибка V:=’пример’; ошибка в) функции обработки
1. Delete(str,poz,n) — удаление из строки str, начиная с позиции poz, n символов. Пример: str:=’оператор’;
Delete(str,2,2) результат ‘оратор’
2. Insert(str1,str2,poz) — вставка строки str1 в строку str2, начиная с пози-
ции poz.
Пример : str1:=’ка’;
str2:=’Тропинка’; Insert(str1,str2,6) результат ‘Тропиканка’
3. Length(st) — вычисляет текущую длину (количество символов)
строки. Пример : str:=’оператор’;
Length(str) результат 8
23
4. Copy(st,poz,n) — из строки st, начиная с позиции poz, берутся n симво-
лов;
Пример : str:=’стройка’;
Copy(str,2,6) результат ‘тройка’
5. Pos(str1,str2) — поиск подстроки str2 в строке str1 и возвращает
номер позиции, с которой начинается строка str2, если подстрока не найдена, то возвращается 0. Пример: str1:=’абракадабра’; str2:=’брак’;
pos(str1,str2) результат 2
6. Str(v,s) — заданное число v преобразуется в строку s;
7. Val(s,v,c) — если строка s состоит из цифр, они преобразуются в некоторое числовое значение и передаются переменной v.
8. Concat(s1,s2,....,sn) -строки s1,s2,....,sn записываются одна за другой.
Задание 1: Установить, какие типы должны иметь переменные в приведен-
ном фрагменте программы и какие значения они примут
после выполнения операций. s:=’ситуация’; st:=’уа’; a:=Length(s+’’+st);
n:=Pos(st,s); insert(st,s,6); delete(s,4,2); st:=copy(s,1,3)+copy(s,7,1);
Задание 2. Написать программу, которая из двух строковых констант «КЛАССШКОЛА» и «АБВГД№0123456789» выводит на экран 2 строки, содержащие номер школы и литеру класса, определяет
24
длину полученных строк. НАПРИМЕР: ШКОЛА №7 КЛАСС 9Б
program z2; const
a=’КЛАССШКОЛА’; b=’АБВГД№0123456789’;
var s1,s2: string; begin
s1:=copy(a,6,5)+’’+ copy(b,6,1)+ copy(b,14,1); s2:= copy(a,1,5)+’’+ copy(b,length(b),1)+ copy(b,2,1);
writeln(s1,s2); end. Символы имеют коды от 0 до 255. ORD(w) — возвращает код символа w. CHR(i) — определяет символ с кодом i.
Задание 3. Дана строка символов. Вывести символы строки в столбец.
Program xx; var st:string; i:integer; begin for i:=1 to length(st) do writeln(st[i]); end.
Задание 4. Вывести символы и соответствующие им коды. Переменная k используется в качестве счетчика для организации последовательного вывода по 15 символов.
Program kod; var i, k : integer; begin
25
writeln(‘Вывод порядковых номеров (кодов) символов — значение переменной i и самих символов’);
for i:=1 to 255 do begin write(i:4,’ символ’,chr(i)); inc(k); if k=15 then begin writeln; k:=0; end; end; end. Задание 5: Вывести символы в виде: A BB CCC WWW...WWW (23 раза) program vv; var i:char; j:integer; begin for i:=’A’ to ‘W’ do begin for j:=1 to Ord(i)-Ord(‘A’)+1 do write(i); writeln; end; end.
Задание 6. Удалить среднюю букву строки при нечетной длине и две средние буквы при четной длине строки.
26
Program rr; var st:string; k:integer; begin k:=length(st); if k mod 2=1 then delete(st, k div 2+1,1) else delete(st, k div 2,2) end. Задание 7. Найти сумму цифр введенного натурального числа. Program Str5; Var S : String; I,X,A,C : Integer; Begin
Writeln('Введите натуральное число'); Readln(S); {Число вводится в строковую переменную}
A:=0 For I:=1 To Length(S) Do Begin
Val(S[I],X,C); {Цифровой символ превращается в число} A:=A+X {Цифры суммируются}
End; Writeln('Сумма цифр равна ',A) End.
Задание 8. Во введенной строке заменить все вхождения подстроки 'ABC'
на подстроки 'KLMNO'.
Program Str6; Var S : String; A : Byte; Begin
27
Writeln('Введите строку');
Program example1;
c: char;
{организация символьной пере­менной}
n: integer;
{переменная для хранения количе­ства "!"}
begin
read(c);
{чтение первого символа с клавиа­туры}
n:=0;
{обнуление счетчика "!"}
while c<>'.' do begin
{окончание работы - ввод символа '.' }
if c='!' then
n:=n+1;{подсчёт символов "!"}
read(c);
{чтение следующего символа}
end; writeln(n);
Readln(S); While Pos('ABC',S)<>0 D Begin A:= Pos('ABC',S); Delete(S,A,3); Insert('KLMNO',S,A) End; Writeln(S) End.
28
Задание 9. Преобразовать всю строку, например, из нижнего регистра в
верхний
program upc; var sent: string [6]; i:byte; begin sent:='pascal'; for i:=1 to length(sent) do sent[i]:=upcase(sent[i]); writeln(sent); end.
Задание 10. Дана последовательность символов, заканчивающаяся симво-
лом ".". Необходимо подсчитать количество восклицательных знаков в данной последовательности.
end.
Задание 11. Написать программу, которая подсчитывает количество цифр,
входящих в исходный текст. Текст — это последовательность символов, ввод которой заканчивается нажатием клавиши [Enter].
Так как признаком конца ввода последовательности символов служит
нажатие клавиши [Enter] (ей соответствует символ с кодом 13), то будем вво­дить символы до тех пор, пока значение очередного символа не совпадет со значением #13. Анализируя каждый символ, будем увеличивать счетчик, если символ является цифрой:
Program Example_60;
Var ch: Char;
k: Integer; Begin k:=0; While ch<>#13 Do {пока не нажата клавиша <Enter>}
29
Begin
If (ch>='0') and (ch<='9') Then Inc(k);
Read(ch); End; Writeln(^G,' Количество цифр равно ',k); End.
Переменные символьного типа удобны для организации простейшего
диалога с пользователем во время выполнения программы. Приведем пример такого диалога:
Repeat
Writeln('Хотите продолжить работу (у/n)?');
Readln(ch); Until Upcase (ch)='N';
Задание 12. Написать программу вывода последовательности символов
ААВАВС...АВ...YZ.
Последовательность символов строится по следующему правилу: После-
довательно выводятся начальные отрезки латинского алфавита, состоящие из 1 символа, из 2 символов и так далее, до тех пор, пока не будет выведен весь ал­фавит. Количество таких отрезков равно количеству букв в алфавите. Так как символьный тип данных является порядковым типом, то можно использовать цикл с параметром символьного типа:
Program Example_59; Var i, j: Char;
Begin
For i:='a' To 'z' Do {количество начальных отрезков алфавита} For j:='а' То i Do {количество символов в данном начальном отрезке}
Write(j);
Readln;
30