Автор работы: Пользователь скрыл имя, 15 Марта 2010 в 15:23, Не определен
При решении задач в программировании выполняется обработка информации различного характера. Это могут быть целые и дробные величины, строки и другое. Соответственно константы и переменные должны быть описаны как целые, дробные, строковые и т.д.
Для описания множества допустимых значений величины и совокупности операций, в которых может участвовать данная величина, используется указание её типа данных. Тип данных (data type) – множество величин, объединенных определенной совокупностью допустимых операций. Каждый тип данных имеет свой диапазон значений и специальное зареверзированное слово для описания.
Введение
Типы
данных
При решении задач в программировании выполняется обработка информации различного характера. Это могут быть целые и дробные величины, строки и другое. Соответственно константы и переменные должны быть описаны как целые, дробные, строковые и т.д.
Для
описания множества допустимых значений
величины и совокупности операций,
в которых может участвовать
данная величина, используется указание
её типа данных. Тип
данных (data type)
– множество величин, объединенных определенной
совокупностью допустимых операций. Каждый
тип данных имеет свой диапазон значений
и специальное зареверзированное слово
для описания.
Строковый тип данных
Строка представляет собой последовательность символов кодовой таблицы персонального компьютера. При использовании в выражениях строка заключается в апострофы. Количество символов в строке (длина строки) может динамически изменяться от 0 до 255. Идентификатор стро-кового типа данных – слово String. Примеры описания переменных типа String:
Var Str1: String [10];
Var Str2: String;
Var Str3: String [13];
В квадратных скобках указывается максимальный размер (длина) строки. Если он не указан (как в описании переменной Str2), то длина строки считается равной 255 символам. Заметим, что строку можно рассматривать как одномерный массив символов – к любому символу строки можно обращаться по его номеру. Первый символ строки (с индексом 0) содержит фактическую длину строки. Для ввода и вывода переменных типа String используются процедуры Read (Readln) и Write (Writeln).Строки вводятся и выводятся не поэлементно, как массивы, а сразу целиком. Следующий простой пример иллюстрирует сказанное.
Program My14_5;
Var s: String; w: String [10]; v: String [5]; i, j:Integer;
Begin
Readln (v); Writeln (v);
Writeln (Integer (v [0]));
Readln (w); Writeln (w); Writeln (Ord (w [0]));
Readln(s); Writeln(s);
Writeln (Integer(s [0]));
For i: =1 to Ord(s [0]) do Begin
For j: = to i-1 do Write (‘ ‘);
Writeln(s [i]);
End;
Readln;
End.
Если ввести строки v и w большей длины, чем указано в описании, они «обрезаются». Операторы Writeln(Integer(v[0])) и Writeln(Ord(w[0])) обеспечивают вывод значения длины строки. Если изменить первый оператор на Writeln(v[0]), то вместо цифрового значения на экран выводится «непонятный» символ. Попробуйте объяснить этот результат и понять смысл преобразования Integer(v[0]). Последние операторы этого примера демонстрируют обращение к элементам строки. Вывод символов строки s на экран осуществляется «лесенкой».
Сравнение строк
Сравнение
строк производится посимвольно
слева направо: сравниваются коды соответствующих
символов до тех пор, пока не нарушится
равенство, при этом сразу делается вывод
о знаке неравенства. Две строки называются
равными, если они равны по длине и совпадают
посимвольно.
Примеры
‘Balkon’ < ‘balkon’ (Ord (‘B’) < Ord (‘b’));
‘balkon’ > ‘balken’ (Ord (‘o’) > Ord (‘e’));
‘balkon’ > ‘balk’ (длина первой строки больше);
‘кошка’ > ‘кошка’ (длина первой строки больше);
‘Кот’» = ‘Кот’ (строки равны по длине и совпадают посимвольно).
Строковые константы, так же, как и отдельные символы, заключаются в апострофы. Например,
Str1:
= 'У Егорки’; Str2: = ‘всегда отговорки’;
Процедуры
и функции для работы с данными
строкового типа данных приведены в
таблице.
Тип | Вызов | Параметры | Действие |
Процедура | Delete(s, p, n) | Var s: String;
P, n: Integer; |
Удаляются n символов из строки s, начиная с позиции p |
Процедура | Insert (w, s, p) | W: String;
Var S: String; P: Integer; |
В строку S, начиная с позиции p, вставляется строка w |
Процедура | Str (v, s) | V: Integer или
V: real; Var s: string; |
Число v преобразуется в строку s |
Процедура | Val(s, v, w) | S: String;
Var v: Integer или Var v: Real; Var w: Integer; |
Если строка s представляет собой правильную запись числа, то это число записывается в переменную v, при этом значение w = 0. В противном случае строка состоит не только из цифр – преобразование не выполняется, w<>0 – признак ошибки |
Функция | Concat (s1, s2,…, sm), функция возвращает значение типа String | S1, s2, … sm: String; | Строки s1, s2, …, sm записываются одна за другой. Результат не превышает 255 символов. Можно просто складывать строки s1+s2+…+sm |
Функция | Copy(s, p, n)
функция возвращает значение типа String |
S: String;
P, n: Integer; |
Из строки S, начиная с позиции P, выбираются n символов. |
Функция | Length(s)
функция возвращает значение типа Integer |
S: String; | Определяется длина s, т.е. число символов, из которых она состоит |
Функция | Pos (w, s)
функция возвращает значение типа Integer |
W, s: String; | В строке s отыскивается первое вхождение строки w (номер позиции). Если вхождения нет, то функция возвращает значение 0. |
Примеры.
В приведенных примерах переменные s1,s2,s3 имеют тип String, p,g – тип Integer.
s1: =’ У Егорки всегда отговорки ’;
Delete (s1, 9,7);
Результат: s1=’У Егора отговорки’.
s1: =’ У Егорки всегда отговорки ’;
s2:=’Матрены и’;
Insert (s2, s1, 3);
Результат:
S1=’У Матрены и Егорки всегда отговорки’.
p:=1234; q:=34.5;
Str (p, s1); Str (q, s2);
Результат: s1=’1234’, s2= =’34.5’.
s1: = ‘555’; s2:=’23.345’; s3:=’34rr2’;
Val (s1, p, w); Val (s2, q, w); Val (s3, p, w);
Результат: в первом случае p=555, w=0; во втором случае q=23,345, w=0; в третьем случае w<>0, значение p не определено.
s1: =’У Егорки всегда отговорки, ’;
s2: =’У Миладки всегда шоколадки’;
s3: =Concat (s1, s2); (или s3: =s1+s2);
Результат: s3=’У Егорки всегда отговорки, у Миладки всегда шоколадки’;
s1=’У Егорки всегда отговорки, у Миладки всегда шоколадки’
s2: =Copy (s, 27, 26);
Результат: s2:=’У Миладки всегда шоколадки’.
s1: =’У Егорки всегда отговорки ’;
p: =Length (s1);
Результат: p=25.
s1:=’У Егорки всегда отговорки ’;
p: =Pos (‘0’, s);
Результат:
p=5.
Продолжите примеры. Напишите программу для исследования работы перечисленных процедур и функций. Обратите особое внимание на граничные условия (например, выясните, что получается, если длина результата больше 255). В этой работе можно использовать приведенные ниже короткие примеры.
Подсчет
количества вхождений данного символа
(параметр q) в строку (параметр st).
Function QChar (q: Char; st: String): Byte;
Var I, k: Byte;
Begin
k: =0;
For i: =1 To Length (st) Do If st [i]=q Then Inc (k);
Qchar: =k
End;
Удалить среднюю букву при нечетной длине строки и две средние буквы при четной длине строки.
Procedure MiDel (Var st: String);
Var k: Byte;
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;
Заменить все вхождения подстроки w в строке st на подстроку v.
Procedure Ins (w, v: String; Var st: String);
Var k: Byte;
Begin
While Pos (w, st)<>0 Do Begin
k: = Pos (w, st);
Delete (st, k, Length (w));
Insert (v, st, k)
End
End;
Подсчитать сумму цифр, встречающихся в строке.
Function Sum (st: String): Integer;
Var i, k, d, s:Integer;
Begin
s: =0;
For i: =1 To Length (st) Do Begin
Val (st [i], d, k);
If k=0 Then s: =s+d
Sum: =s
End;
Экспериментальный раздел занятия
Program My14_6;
Const n=20; m=10; {Количество слов в тексте и количество букв в слове. Естественно, что эти параметры программы можно изменять}
Type TString=String [m];
Var A: Array [1..n] Of Tstring;
s: String;
k, i:Integer;
Procedure DelPr (Var s: String);
{Удаляем пробелы в начале текста.}
Begin
While (s [1]=’ ‘) And (s<>’ ‘) Do Delete (s, 1, 1)
End;
Function GetWord (Var s: String): Tstring;
{Выделяем слово, удаляем его из текста и убираем пробелы после слова.}
Begin
GetWord: =Copy (s, 1, Pos (‘ ‘, s)-1);
Delete (s, 1, Pos (‘ ‘, s));
DelPr (s)
End;
Begin
Writeln (‘Введите текст’);
Readln (s);
S: =s+’ ‘;
{Добавляем символ пробела в конец текста. Зачем?}
DelPr (s); {Удаляем пробелы в начале текста.}
k: =0;
While s<>’ ‘ Do Begin {Пока текст не пустой.}
Inc (k);
A [k]: =GetWord (s) {Берём слово из текста.}
End;
For i: =1 To k Do Writeln (A [i]);
Readln
End.
Удалите вызов процедуры DelPr(s) из основной программы, а функции GetWord переставьте этот вызов в ее начало. Что изменится в работе программы? На каких исходных данных она не будет правильно работать? Что произойдет, если в конец текста не добавлять символ пробела? В процедуре DelPr измените цикл
While (s[1]=’ ‘) And (s<>’ ‘) Do Delete (s, 1, 1)
на
While (s[1]=’ ‘) Do Delete (s, 1, 1).
Продолжите эксперименты с программой.
Program My14_7;