Слайд 1Рекурсия
Пример: Пусть задано целое положительное число, выдать цифры в обратном
порядке
PROGRAM REKURS;
VAR N:INTEGER;
PROCEDURE REVERS(M:INTEGER);
BEGIN
WRITE(M MOD 10);
IF (M DIV 10)<>0 THEN revers (M DIV 10);
END;
BEGIN
WRITE(‘Введи целое число без знака’);
READ (N);
REVERS (N);
END.
{239}
{239}
{9}
{23}
{23}
{3}
{2}
{2}
{2}
{0}
Слайд 2 Условие полного окончания работы рекурсивной процедуры должно находиться в самой
процедуре.
Рекурсия может быть прямой или косвенной. (А→ В →
А).
Опережающее описание
PROCEDURE A(J:BYTE);
BEGIN
...
B(J);
END;
PROCEDURE B; {параметры опускаются}
BEGIN
...
A(I);
END.
При повторном описании тело процедуры В начинается заголовком, в котором уже не указываются описанные ранее формальные параметры.
-
FORWARD (вперед).
PROCEDURE B(I:BYTE); FORWARD;
Слайд 3Этапы подготовки и решения задач на компьютере
Постановка задачи
Физический и математический
анализ
Этап алгоритмизации
Этап программирования
Отладка программы и тестирование
Решение задач на компьютере
Обработка результатов
решения задач.
Дополнительные этапы:
Выбор языка программирования,
описание структуры программы,
описание структур данных,
оптимизация программы,
документирование.
Слайд 4Порядок выполнения программы
Трансляция
Компиляция
Компиляция
Компоновка
Загрузка
Исходный модуль
Объектный модуль
Абсолютный
(загрузочный) модуль
Системы подготовки и выполнения
программы
Компилирующего типа
Интерпретирующего типа
-
Слайд 5Классификация языков программирования
Языки программирования
Машинные
Машино-
зависимые
Низкого уровня
Высокого уровня
Проблемно-
ориентированные
Объектно-
ориентированные
Процедурно-
ориентированные
Машино-независимые
Машинные
коды
АССЕМБЛЕР
СИМВОЛИЧЕСКОЕ
КОДИРОВАНИЕ
Фортран Фортран77
Кобол
Паскаль
Ада Си
Модула
ПЛ/1
ПРОЛОГ
СИМУЛА
CPSS
TP
C++
ЛОГО
Системы
визуальн.
прог-я
Delphi
BuilderC++
Слайд 6СИМВОЛЬНЫЙ ТИП
СИМВОЛЬНЫЙ ТИП (Сhar) – тип данных, состоящий из одного
символа (знака, буквы, кода).
VAR
словом CHAR.
Символьное значение заключается в апострофы: 'A' , ‘Ф‘.
Пример: Var c1,c2,c3:Char;
Альтернативный способ кодировки – внутренние коды
‘A’ - #65, ‘a’ - #97, ‘ ’ - #32
Код ASCII: - American Standart Code Information Interchange
Код ASCII семибитовый позволяет
кодировать 128 символов;
В ТП 8 битовый - 256 символов
от 0 до 255.
0..127 совпадают с ASCII
Остальные128.. 255 не могут
ограничиваться рамками стандарта.
Символы с кодами 0..31
относятся к служебным символам.
Табуляция (9,17,25,..)
CTRL+Z конец файла
Слайд 7
Латинские ‘A’ – код 65, ‘a’ -
код 97
Русские буквы А-128…Я-159; а-160…п-175, р-192…я-207(наиб. Распр.)
Свойство упорядоченности
1. Цифры от 0 до 9:
‘0’<‘1’<‘2’<…<‘9’
Коды 48<49<50<….<57
2. Латинские буквы
‘A’<‘B’<‘C’<…<‘Y’<‘Z’ ‘a’ < ‘b’,.., ’y’ < ‘z’
65<66<67<…<89<90 97<98<…121<122
Если ORD(c1) < ORD(c2), то и c1
3. К символам типа char применимы присваивания и все операции отношений:
<, >, <=, >=, =, <>.
VAR c: char; … c:= ‘A’
c ='A‘ =>TRUE;
'A‘ <> 'a‘ =>TRUE;
'A‘ < 'a‘ =>TRUE;
Встроенные функции ТП
1.ORD(c) - возвращает код символа; c-аргумент типа char, результат имеет тип byte.
ord(‘.’)=46; ord(‘ ’)=32
2. CHR(b) - выдает по коду b аргумента символ типа Char;
b-аргумент типа byte,
результат имеет тип char.
Эквивалентны ‘А’ - #65 – CHR(65)
3. UPCASE(c:char) :Char – переводит латинские строчные символы в верхний регистр.
4. PRED(c):Char – выдает предшествующий С символ
5. SUCC(c):Char –выдает следующий за С символ
PRED(‘z’)-> ‘y’; succ(‘c’)->’d’
PRED(#0) [SUCC(#255)] не доп.
Слайд 8PRED(С)= CHR(ORD(C)-1); SUCC (С)= CHR(ORD(C)+1);
Пример:
Var c1,c2, c: char;
Begin
c1:=UPCASE(‘s');
c2:=UPCASE(‘ф'); writeln(c1,' ',c2); {строка вывода: S ф}
for c:= ‘0’ to ‘9’ do writeln( c,' - ', ord(c));
{строка вывода: Символы 0..9 и их коды}
End.
Для преобразования символа цифры F в число
следует воспользоваться выражением ORD(F)-ORD(‘0’)
Дома. Ввести набор символов. Напечатать из него только цифры
Слайд 9Клавиши с кодами из 2-х частей
Слайд 10Массив символов эквивалентен строке типа STRING
Пример:
Определим слово из 5 букв.
Переведем в верхний регистр (str2); закодируем следующим символом по таблице
ASCII (str3)
Var i: byte;
c: char;
str1, str2, str3:string;
begin
readln(str1);
for i:=1 to 5 do str2[i]:=UPCASE(str1[i]);
for i:=1 to 5 do
begin
str3[i]:=SUCC(str2[i]);
write (str3[i]);
end
End.
Слайд 11 СТРОКОВЫЙ ТИП (String)
Напоминает одномерный массив символов ARRAY[0..N] OF CHAR
Может меняться длина строки от 1до N символов, где N
(‘abcd-абвг’, ’ ’ , ’ , ‘) writeln (‘вариант=’);
Строки-переменные:
VAR типом STRING {либо в разделе TYPE}
пример: Const N=200;
VAR st: String; {переменная длина до 255 символов}
st1: String[1];
st2: String[10];
st3: String[N]; {переменная длина до 255 символов}
Строка в ТП трактуется как цепочка символов:
st2: ARRAY[1..10] OF CHAR; st2[0] – служебный
пример: Var st:string;
Begin
St:= ‘алгоризм’;
if st[7]=‘з' then st[7]:=‘т'; {алгоритм}
. . .
End.
Слайд 12
Отдельный символ совместим со значение Char:
пример: Var st: string;
Ch:
Char;
begin
st:=‘Hello’;
ch:=st[1]; {ch=‘H’}
st[2]:=‘E’; {st=‘HEllo’}
for I=1 to5 do write (st[I]);
readln;
End.
Первый символ имеет индекс 0.
Длина строки всегда равна ORD(ST[0]) – коду нулевого символа строки. Значащие символы занимают с 1 по N байты.
st[0] - нулевой элемент строки содержит информацию о ее длине.
Слайд 13
Нулевой символ строки s[0] – это символ, код которого равен
длине строки.
Если в примере ‘Hello’ записать st[0]:=chr(5),
то такую
строку можно вывести целиком (а не поэлементно)
writeln(str3);
Длина строки может быть изменена:
1. Путем заполнения строки новым элементом;
2. Путем изменения нулевого элемента.
!!! Если строку формировали поэлементно, надо обязательно заполнить для нее нулевой элемент.
пример: Var st:string;
Begin
st:=‘Hello’; { st[1]=‘H';st[2]=‘e‘}
st[0]:=CHR(5); длина строки = 5;
writeln(st)
end.
Слайд 14Операции над строками
Операции сцепления
пример: st:='A‘
+ 'B'; {st содержит ‘AB}’
st:=st + 'C'; {st=‘ABC’}
st[1]:='A' и т.д.
пример: Var st:string[2];
begin st:='123';
writeln(st); {12}
End.
Операции отношений: >,<,=,>=,<=,<>
пример
'abcd‘ = ‘abcd‘ ->TRUE; 'abcd‘ > 'abcD'->TRUE, т.к. 'd'>'D';
‘abcd‘ <> 'abcde'->TRUE; 'abcd‘ > 'abc '-TRUE, т.к. 'd'>' ';
‘abcd‘ <' abcde'->TRUE; 'aBcd‘ < 'ab' ->TRUE, т.к. 'B'<'b';
Слайд 15Функции (процедуры) для работы со строками
1. LENGTH(s:string):byte - выдает
длину строки S;
Пример: k:=Length(st), где st :=‘ABC’ - Результат –
k=3
for I:=1 to Lingth(st) do …
2. CONCAT(s1,s2,...,sN:string):string - осуществляет сцепление строк; st:=concat(‘note’,’book’); {‘notebook’\}
s3:=concat(s1,s2); { s3:=s1+s2}
s3:=concat(s1,s2,s3); { s3:=s1+s2+s3}
3. COPY(s:string; index,len:integer):string - выдает подстроку S длиной len, начиная с символа с номером index; Если START>LENGTH(S), то функция вернет пустую строку; если START>255,то ошибка.
Пример: Значение S Выражение Результат
‘ABCDEFG’ COPY(S,2,3) ‘BCD’
‘ABCDEFG’ COPY(S,4,10) ‘DEFG’
‘ABC’ COPY(S,4,2) ‘’ (пусто)
4. DELETE(Var st:string; index,len: integer) - удаляет из строки st подстроку длиной len, начиная с символа с номером index; Если START=0 или(и) Len=0, то строка не меняется.
Пример: Delete(S,20,255);
Значение S Выражение Результат
‘абвгде’ Delete(S,4,2) ‘абвге’
‘ABCDEF’ Delete(S,1,5) ‘F’
Слайд 16
5.INSERT(subs:string; Var st:string; index:integer) - вставляет в строку S подстроку
SubS, начиная с позиции index;
Пример: Var st:string[10];
str2:string;
…
str2:=’начало-конец’
insert(‘середина-’,str2,8); {результат:str2=‘начало-середина-конец’}
st:=‘****-’;
insert(st,str2,8);
{результат:str2=‘начало-****-конец’}
st:=‘****-’;
insert(str2,st,3); {результат:str2=‘**-начало-*’}
6.POS(subs,s:string):byte - функция отыскивает вхождение подстроки SubS в строке S
Пример: S функция результат
'abcdef' POS('de',S) 4
'abcdef' POS('k',S) 0
-
Слайд 17Процедуры преобразования
7.STR(x[:w[:n]],Var s:string) - преобразует числовое значение x в
строковое s. Параметры [:w[:n]] не обязательны.
Пример: str(6.66:8:2,s); {результат s=‘
6.66’}
str(6.66:-8:2,s); {результат s=‘6.66 ’}
str(6.66:8:1,s); {результат s=‘ 6.67’}
str(6.66:8,s); {результат s=‘0.67E+01’}
const F=6; N=4;
str(1.254687:F:N,s); {результат:S=‘1.2547’}
8.VAL(s:string,Var x,Var ErrCod) - преобразует числовую строку s в числовую переменную x. Если ErrCod=0, то преобразование выполнено.
Пример:S преобразования результат
1562 VAL(S,x,ErrCod) x=1562, ErrCod=0
15.62E2 VAL(S,x,ErrCod) x=1562, ErrCod=0
15.62A2 VAL(S,x,ErrCod) x-неопр., ErrCod=6
Слайд 18
9.FILLCHAR - процедура заполнения. (Word-целое без знака (0..65535))
Fillchar(Var x,kbytes:word, b:byte)
Fillchar(Var x,kbytes:word, c:char)
Пример: Заполнить строку с ее начала (с первого элемента) 80 пробелами (‘ ’или #32)
Var
st: string;
Fillchar(st[1], 80, ’ ‘);
st[0]:=chr(80); {принудительная запись длины строки}
st[1] означает, что заполняем строку с первого элемента
При использовании ввода строк с клавиатуры процедурой Read
читается только одна строка (дo ), остальные процедуры Read
и Readln игнорируются для любых типов и типа string. Используйте
Readln в программах со строками для ввода данных любого типа, кроме символов.
Слайд 19Примеры:
Ввести строку и заменить в ней все подстроки Min на
Max
Var s:string;
k:byte;
Begin
readln(s);
For k=1 to length(S) do ss[k]:=upcase(s[k]);{в
верх.рег}
SS[0]:=s[0];
Repeat
K:=pos(‘MIN’,ss);
If (k<>0) then begin
Delete(Ss,k,3);
Insert(‘MAX,Ss,k’)
end
Unit k=0;
Writeln(‘Ss=’,Ss);
End.
Ввести 4-хзначное число.
Напечатать цифры числа в обратном порядке
1.ч/з числовой формат.
2.ч/з строковый тип.
1.Var N:word; I: byte;
begin
read(N);
for I:=1 to 4 do
begin write(N mod 10);
N:=N div10;
end;
End.
2. Var X:word;
S: string;
begin
read(X);
STR(X:4,S);
for I:=4 downto 1 do write(S[i]);
End.