Надеюсь, что мои уроки помогают вам в освоении
трудной, но увлекательной науки
программирования. Итак, продолжим.
Урок 12
Вычислительные машины имеют дело не
только с числами. Едва ли не больше времени они
бывают заняты обработкой текста. В Паскале для
этого есть специальный тип данных, который
называется CHAR (от слова character - символ).
12.1.Тип CHAR
(символьный или строковый или литерный).
Его значениями являются отдельные символы:
буквы, цифры, знаки. Символьные константы
заключаются в кавычки, например, 'A', 'B', 'C', '4', '7', '
'(пробел).
Символьные переменные описываются
предложением:
Var имя переменной: char;
Символьные значения можно вводить и
выводить, присваивать, сравнивать. Ниже приведен
пример, где выполняются все эти действия.
Var x,y:char;
Begin
Write('Введите символ');
Readln(x);
Y:='A';
If x<y then write ('X') else write ('y');
{на экран буде выдан символ хранящийся в
переменной
Х или Y в зависимости от проверки условия}
Readln;
End.
Сравнивать символы можно благодаря тому, что
в машинной памяти они хранятся в виде целых чисел
(кодов символов). Из двух символов большим
считается тот, код которого больше. Символы
упорядочены следующим образом:
Для символов допустимы все шесть операций
сравнения: =, <=,>=,<,>,<>.
12.2.Стандартные
символьные функции.
В Паскале имеются стандартные символьные
функции:
CHR(N) - возвращает в программу символ с кодом N,
ORD(S) - возвращает код символа S,
PRED(S) -возвращает предыдущий символ
SUCC(S) - возвращает следующий символ
Примеры:
CHR(128) = Б
ORD(':') = 58
PRED('Б') = А
SUCC('Г') = Д
Каждый символ имеет свой уникальный
двоичный код. Коды всех символов сведены в
таблицу. Первая половина таблицы стала
международным стандартом, который называется ASCII
- American Standard Code Information Interchange ( читается "аски
код") в ней кроме прочего содержится латинский
алфавит, вторая имеет разные варианты для разных
языков. Кириллица (русский алфавит) имеет
несколько стандартов. В Паскале используется
стандарт КОИ-8.
Пример
использования переменной символьного типа.
Составить программу, по которой компьютер
многократно вычисляет сумму А+В при различных
значениях А и В. в конце каждого этапа появляется
запрос о продолжении или прекращении вычислений:
"Завершить программу?(Д/Н)".
Var A,B:real; { PROGRAM имя; не обязательное
предложение}
C : char;
Begin
repeat
Write('Введите два числа'); Readln(a,b);
Writeln(a+b:0:2);
Writeln('Завершить программу?(Д/Н)');
Readln(с);
Until с='Д'; {программа завершит работу если
будет введено Д}
Readln
End.
Тренировочные
задания.
1. Что вернет функция CHR(ORD(X))?
2. Определить значения следующих функций (как
правило таблица аски кодов есть в любом
справочнике по программированию):
CHR(68)
ORD('d')
PRED(1)
SUCC('Я')
3. С клавиатуры вводится два числа. Составить
программу сравнивающую эти числа и в зависимости
от результата сравнения выводящую на экран
нужный знак. Например: 3<5 или 3=3 или 3>2.
Процедуру WRITE для вывода результата разрешается
использовать только один раз.
4. Составить программу, по которой компьютер
находит произведение нечетных чисел, начиная с
единицы, и до тех пор, пока на вопрос, задаваемый
после каждого шага вычислений: "Продолжить
вычисления? (Д/Н)", отвечают 'Д'.
Разбор заданий
урока 11.
2. Напишите программу, которая вводит целые числа
с клавиатуры и складывает их, пока не будет
введено число 0.
Program sum;
Var N,s: integer;
Begin
S:=0;
repeat
Write('Введите число'); Readln(n);
S:=s+n;
Until n=0;
Writeln('S=',s);
Readln
End.
3. Напечатайте 20 первых степеней числа 2.
Var N,s:longint;
Begin
S:=1; n:=1; {Начальное значение S присваиваем 1, при
нулевом
начальном значении
умножение всегда даст в результате 0}
repeat
s:=s*2;
Write(s,' ');
N:=n+1;
Until n>20;
Readln
End.
5. Дано натуральное число. Выяснить, является ли
оно простым, т.е. делится только на 1 и на само
себя.
Для решения этой задачи надо исходное число
делить последовательно на 2, 3,4 и т.д. до тех пор,
пока исходное число не разделится без остатка.
После выхода из цикла мы проверим, чему равен
делитель, на который разделилось число. Если
исходное число простое, то оно разделится без
остатка только само на себя (единицу исключаем
сразу).
Program pr_11_5;
Var N, k: word;
Begin
Write('Введите число');
Readln(n);
k:=1;
repeat
K:=k+1;
Until n mod k = 0;
If k=n then Writeln('число простое') else write('число не
простое');
Readln
End.
Желаю успехов!
Ганилова Татьяна Евгеньевна school6@rikt.ru