Цикл for .. to .. do
В Turbo pascal при выводе информации на экран можно изменять цвет выводимых символов. Для отображения символов в цвете есть 16 цветовых констант с 0 по 15. Цвет с номером 0 - чёный, 1 - синий и так далее. Процедура, изменяющая цвет вывода называется textcolor(n), где n - номер цвета. Попробуем вывести на экран строки, раскрашенные во все возможные цвета:
Textcolor(0);
Wtrteln('Color = 0');
Textcolor(1);
Wtrteln('Color = 1');
: Textcolor(15);
Wtrteln('Color = 15');
Согласитесь, что писать программу таким способом очень утомительно, ведь нужно написать 32 строки, практически с одинаковым содержимым. В строках меняется только номер цвета. Разумным решением такой проблемы было бы создать цикл, повторяющий заданные действия 16 раз. Для организации повторяющихся действий в Паскале существует несколько видов циклов. В нашем случае нужен цикл, который повторил бы определённые действия заданное число раз. Запись такого цикла выглядит следующим образом:
For начальное значение to конечное значение do действие; - в случае одного действия и
For начальное значение to конечное значение do
Begin
Действие 1;
Действие 2;
...
Действие Х;
End; - в случае нескольких действий.
В цикле должна быть задействована переменная целого типа - счётчик повторений цикла, именно этой переменной задаётся начальное значение, а конечное значение задаётся просто числом.
Зададим в разделе var переменную, например n, целого типа Integer. В программе напишем цикл в котором n будет изменяться от 0 до 15 Изменяющееся значение n будет изменять цвет выводимых символов:
uses crt;
var
n: integer;
begin
clrscr;
for n:= 0 to 15 do
begin
textcolor(n);
writeln('Color N= ',n);
end;
readln;
end.
Полученная таким простым образом программа на экране будет давать такой результат:
Строку с номером 0 мы не видим, так как она чёрного цвета.
Цикл for может работать "в обратную сторону", то есть начальное значение может быть больше конечного, а вместо оператора to, следует записать downto.
Символьные и строковые переменные.
В предыдущих разделах мы упоминали о символьных и строковых переменных, рассмотрим их более подробно.
Символьные переменные - тип char, это набор отображаемых и неотображаемых символов. Неотображаемые символы, это символы, предназначенные для каких-нибудь действий, например перевода строки (нажатие клавиши Enter). За каждым символом закреплён определённый уникальный номер из таблицы символов.
Для получения символа по его номеру n, в языке Паскаль есть функция chr(n), которая возвращает символ. Обратная ей функция, которая возвращает код n символа ch - функция ord(ch).
Напишем небольшую программу, которая будет выводить на экран символы по их номеру в таблице кодов. Следует учесть, что некоторые символы в таблице кодов являются управляющими, например, такие как 13 - Enter, 32 - Пробел и так далее. Такие символы на экране не отображаются, а выполняют свои прямые "обязанности", так например символ с кодом 13 переводит текст на новую строку.
В нашей программе, мы будем выводить символы в 20 строк по 8 штук в строке. Начнём с символа 33 и по 193. Используем цикл for в котором переменная n будет счётчиком числа выводимых символов. Нужна будет ещё одна переменная, назовём её, например m, она будет счётчиком числа символов в строке и, наконец, нужна будет символьная переменная, назовём её sym. Программа вывода части таблицы символов будет выглядеть так:
uses crt;
var
{Объявляем переменные}
sym : char;
n, m: integer;
begin
clrscr;
m:= 1; ; {Задаём положение первого символа в строке}
for n:= 33 to 193 do
begin
if m < 8 then write(n,'= ',chr(n),' '); {Выводим 7 символов в строку}
if m = 8 then writeln(n,'= ',chr(n),' '); {Выводим 8-й символ и переводим строку}
inc(m); {увеличиваем счётчик символов в строке на 1}
if m = 9 then m:= 1; {Если счётчик равен 9, то начинаем опять с 1-го символа в строке}
end;
readln;
end.
Работа программы будет выглядеть следующим образом:
В этой программе можно произвольно задавать диапазон выводимых символов. Например for n:=1 to 50 .... При запуске программы можно посмотреть первые 50 символов.
В Turbo Pascal есть ещё один тип символьных данных, это тип String - строка символов. Строка символов в Pascal может содержать до 255 символов. Фактически, строка это линейный массив из символов. Забегая вперёд (о массивах подробно в следующих разделах), можно сказать, что у каждого символа в строке есть порядковый номер - индекс. По индексу можно обратиться к любому символу в строке. Строковые переменные, так же как и символьные, при вызове должны заключаться в апострофы.
Операции с символами и строками.
Рассмотрим все возможные действия, которые можно производить символами и строками.
Строковые переменные объявляются так же, как и любые другие переменные, и имеют тип String. Например:
Var
S1, mystr: string;
Sym1, ch100 : char;
При присваивании переменной определённых значений, значения берутся в апострофы, например:
Sym1:= 'G';
Mystr := 'Hello Word';
S1:= '!!!';
Символы и строки можно складывать:
S:= Mystr + S1; { в результате строка S будет 'Hello Word!!!'; }
Можно получить любой символ из строки по индексу символа в строке, например:
Ch := Mystr[7]; {В квадратных скобках указывается порядковый номер символа в строке. Символ Ch в данном случае будет равен 'W' }
В Turbo Pascal есть встроенные процедуры и функции для работы со строками:
Length(s:string):integer; - функция возвращает число символов в строке. Например: ns:= Length('Hello'); числовой переменной ns будет присвоено значение 5.
Copy(s:string; index:integer; count:integer):string; - Функция возвращает подстроку, выделенную из исходной строки s, длиной count символов, начиная с символа под номером index. Например:
s := 'Turbo Pascal';
s1 := copy(s, 1, 5); {s3 будет равно 'Turbo'}
s2 := copy(s, 7, 6); {s4 будет равно 'Pascal'}
Delete(var s:string; index,count:integer); Процедура удаляет из строки-параметра s подстроку длиной count символов, начиная с символа под номером index. Например:
s := 'Turbo Pascal';
delete(s,1,6); {s будет равно 'Pascal'}
Insert(source:string; var s:string;index:integer);
Процедура предназначена для вставки строки source в строку s, начиная с символа index этой строки. Например:
s := 'Pascal Version 7';
insert('Turbo ',s,1); {s будет равно 'Turbo Pascal Version 7'}
Pos(substr,s:string):byte;
Функция производит поиск в строке s подстроки substr. Результатом функции является номер первой позиции подстроки в исходной строке. Если подстрока не найдена, то функция возвращает 0. Например:
s := 'Turbo Pascal';
x1 := pos('Pascal', s); {x1 будет равно 6}
x2 := pos('Basic', s); {x2 будет равно 0}
Str(X: арифметическое числовое выражение; var st: string);
Процедура преобразует численное выражение X в его строковое представление и помещает результат в st.
Val(st: string; x: числовая переменная; var code: integer);
Процедура преобразует строковую запись числа, содержащуюся в st, в числовое представление, помещая результат в x. x - может быть как целой, так и действительной переменной. Если в st встречается недопустимый (с точки зрения правил записи чисел) символ, то преобразование не происходит, а в code записывается позиция первого недопустимого символа. Выполнение программы при этом не прерывается, диагностика не выдается. Если после выполнения процедуры code равно 0, то это свидетельствует об успешно произошедшем преобразовании.
В заключение этой темы напишем программу подсчёта числа заданных символов в строке:
uses crt;
var
n: integer; {переменная для цикла}
z: integer; {переменная для подсчёта числа символов}
s: string; {вводимая строка}
c: char; {вводимый символ}
cx: char; {символ, который будет браться из строки}
begin
clrscr;
z:= 0;
write('Wwedi stroku: ');readln(s); {вводим строку для исследования}
write('Wwedi symwol: '); readln(c); {вводим символ для поиска в строке}
for n:= 1 to length(s) do
begin
cx:= s[n]; {{берём из строки очередной символ с индексом n}
if cx = c then inc(z); {если введённый и взятый символ совпадают, то увеличиваем счётчик z на 1}
end;
writeln('Chislo simwolow ',c, '=', z); {Выводим результат на экран}
readln;
end.
Результат работы программы будет выглядеть так:
|