Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Прикладное программирование. Учебное пособие
.pdf
в теле цикла всегда происходит изменение значения параметра входящего
в выражение условия;
цикл 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
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
