Листинг 8. пример использования val для контроля вводимых с клавиатуры данных
Program month;
Var
Mon: integer; {месяц}
Buf: string [10]; {буфер для ввода строки}
Code: integer; {код ошибки преобразования строки в число}
Begin
Repeat
Write (‘Месяц- > ‘);
Readln (buf) ; {вводим номер месяца как строку}
Val (buf, mon, code);{преобразуем строку в число}
If code <>0 {введенная строка не цифра}
Then Writeln (‘Ошибка! Месяц следует задать цифрой.’);
Until code=0;
End.
Вот пример работы программы:
Месяц –> май
Ошибка! Месяц следует задать цифрой.
Месяц ->5
Практическая часть
- Напишите программу, которая по введенному символу определяет его порядковый номер, а также предыдущий и последующий символы.
- Напечатайте все буквы латинского алфавита.
- Пусть вводится последовательность символов длиной 10. Подсчитайте, сколько среди них цифр?
- Пусть вводится последовательность символов длиной не более 20. Признак конца последовательности- точка. Верно ли, что в последовательности содержится четкое количество строчных латинских букв?
- Подсчитайте, сколько раз среди последовательности символов встречается символ, задаваемый вводом. Количество вводимых символов также определяется вводом.
- Напечатайте заданную последовательность символов, заменяя каждую точку многоточием.
- Пусть входной поток литер содержит по крайней мере одну цифру. Считая первую из них началом записи числа (целого или вещественного с фиксированной точкой), по правилам языка Паскаль выполните преобразование этой записи в число, Присвойте его значение переменной и выведите результат.
- Пусть дана последовательность литер, имеющая вид d1 d2 … dn (di- цифры, n >1), за которой следует точка. Вычислите значение этой алгебраической суммы.
- Пусть даны целое число n, символы s1, s2,…sn. Выясните, имеются ли в этой последовательности такие члены, что si- это запятая, а si+1 –тире.
- Пусть даны символы s1, s2,…sn. Известно, что символ s1 отличен от восклицательного знака и что среди символов s2 ,s3,… есть по крайней мере один восклицательный знак. Пусть s1,s2,…, sn- символы данной последовательности, предшествующие первому восклицательному знаку (n-заранее неизвестно).
a) определите количество пробелов в последовательности s1, s2,…sn;
b) выясните, имеется ли среди, s1s2,…sn пара соседних символов но и он;
c) выясните, имеется ли среди s1s2,…sn пара соседних одинаковых символов.
11.Пусть даны целое число n, символы s1,s2,…, sn. Удалите из данной последовательности все группы букв, образующих запись abcd, то есть получите новую последовательность, не содержащую этих групп литер.
12.Пусть даны целое число , символы s1,s2,…, sn. Преобразуйте последовательность s1,s2,…, sn, удалив каждый символ звездочки (*) и повторив каждый символ, отличный от звездочки.
13.Пусть даны целое число n, символы s1,s2,…, sn, среди которых есть двоеточие. Получите все символы, расположенные:
a) до первого двоеточия включительно;
b) между первым и вторым двоеточием; если второго двоеточия нет, то получите все символы, расположенные после имеющегося двоеточия.
14.Напечатайте заданный непустой текст, удалив из него все буквы b, непосредственно перед которыми находится буква c.
15.Заданный текст распечатайте по строкам, понимая под строкой либо очередные 60 литер, если среди них нет запятой, либо часть текста до запятой включительно.
Контрольные вопросы
- Верно ли, что литерный (символьный) тип относится к скалярным типам данных?
- Как задается описание переменных литерного типа?
- Каково множество значений литерного типа?
- Какой объем памяти требуется для хранения переменной символьного типа?
- Приведите примеры символьных констант?
- Верно ли то, что значением литерного типа является множество ввех символов кодовой таблицы ПЭВМ?
- Что такое код символа?
- Верно ли то, что каждому символу ставится в соответствие целое число в диапазоне 0…2557
- Можно ли к данным символьного типа применять операции отношения?
- Верно ли, что в программе значения символьного типа должны быть заключены в апострофы?
- Каков результат работы функции ord(c), где с- переменная символьного типа?
- Верно ли утверждение, что ord(‘0’)=0?
- Верно ли, что ‘a’=’A’?
- Верно ли утверждение, что если c и d- литеры, то c<d тогда и только тогда, когда ord(c)<ord(d)?
- Как работает стандартная функция chr(i), где i-целочисленная переменная?
- Каковы особенности кодировки цифр, латинских и русских букв?
- Какие операции применимы к символьным данным?
- Какие встроенные функции можно применить к символьным данным?
- Верно ли, что chr(ord(c))=c, где c- переменная символьного типа?
- Верно ли, что оrd(chr(i))=I, где i- переменная целого типа?
- Как работают стандартные функции pred(c), succ(c), где c- переменная литерного типа?
- Верно ли, что pred(c)=chr(ord(c)-1), где с- переменная символьного типа?
- Верно ли, что succ(c)=chr(ord(c)+1), где с- переменная символьного типа?
- Можно ли переменные символьного типа использовать в выражениях?
- Можно ли к переменным символьного типа применять стандартные процедуры ввода- вывода?