Строковые переменные

Автор работы: Пользователь скрыл имя, 15 Марта 2010 в 15:23, Не определен

Описание работы

При решении задач в программировании выполняется обработка информации различного характера. Это могут быть целые и дробные величины, строки и другое. Соответственно константы и переменные должны быть описаны как целые, дробные, строковые и т.д.
Для описания множества допустимых значений величины и совокупности операций, в которых может участвовать данная величина, используется указание её типа данных. Тип данных (data type) – множество величин, объединенных определенной совокупностью допустимых операций. Каждый тип данных имеет свой диапазон значений и специальное зареверзированное слово для описания.

Файлы: 1 файл

строковые переменные.doc

— 225.00 Кб (Скачать файл)

      Введение

      Типы  данных 

      При решении задач в программировании выполняется обработка информации различного характера. Это могут быть целые и дробные величины, строки и другое. Соответственно константы и переменные должны быть описаны как целые, дробные, строковые и т.д.

      Для описания множества допустимых значений величины и совокупности операций, в которых может участвовать  данная величина, используется указание её типа данных. Тип данных (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;

Экспериментальный раздел занятия

  1. Дана строка. Считаем ее отрывком текста. Группы символов, разделенных одним или  несколькими пробелами, назовем  словами. Пробелы могут находиться как в начале текста, так и в  конце. Требуется выделить слова  из текста и каждое слово записать в соответствующий элемент массива. Приведенная ниже программа решает эту задачу.

      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).

        Продолжите эксперименты с программой.

  1. По правилам машинописи после запятой в тексте всегда ставится пробел. Следующая программа вставляет недостающие пробелы.

      Program My14_7;

Информация о работе Строковые переменные