Данный методический материал вводит в тему строковый и символьный тип данных на языке программирования Паскаль. В качестве примера применения данного типа в решении задач выбрана одна из тем: длинная арифметика. Данный пример показывает как удобно использовать литерные переменные в качестве массивов.Учебная презентация на тему "Строковый и символьный тип данных"
Строковый тип данных. Приемы решений.ppt
Строковый тип данных. Приемы решения задач
Строковый и символьный
типы данных.
Основные операции.
Многоразрядная арифметика: приемы строковых
решений.
Основы программирования
Черевичкина И.Н.
Строковый тип данных. Приемы решения задач
Строковый тип данных
Строка символов – это упорядоченная
последовательность любого, в том числе и
равного нулю, количества символов из набора
ASCII, расположенных в одной строке и
заключенных в апострофы (<=255 символов)
Если необходимо в строку записать символ апостроф, то его следует
записать дважды.
Например: ‘Язык ‘’Турбо Паскаль’’’
Результат: Язык ‘Турбо Паскаль’
Описание:
Var S:STRING; C:STRING[120];
Строковый тип данных. Приемы решения задач
Символьный тип данных
Символьная константа – строка из одного
символа.
Например:
var Z:char;
Begin
Z:=‘7’;
end.
Строковый тип данных. Приемы решения задач
Операции с переменными строкового и
символьного типа данных
1. VAL(S,N,AA) преобразование переменной
строкового типа в числовой (S в N).
Где S –строка, N –число в которое преобразуется S.
AA – код – переменная типа integer;
Например: VAL(’25’, D, AA);
Результат: D=25.
2. STR(N,S) перевод числа в строковую
переменную
Например:
N:=23; STR(N, S);
Результат: S=’23’.
Строковый тип данных. Приемы решения задач
3. Copy(S,n1,Count) копирование символа
начиная с N1 количеством Count.
Например: d:=COPY(‘AZBUKA’,3,4) скопируй из
строки ‘AZBUKA’, начиная с 3го символа
количеством 4.
Результат: D=‘BUKA’.
4. Length(S) определение длины переменной
Пример: S:=‘Dog’; DL:=length(S)
DL1:=length(‘Winter’);
Результат: DL=3; DL1=6
Строковый тип данных. Приемы решения задач
5. DELETE(S,2,3) удалит из переменной S
три символа, начиная со 2го.
Пример: S:’Name’, DELETE(S,2,3)
Результат: S=‘N’
6. INSERT(S,Z,P) поместить S в Z, начиная с P
Пример: S:=‘Алиса ’; Z:=‘в стране чудес’;
INSERT(S,Z,1)
Результат: Z=‘Алиса в стране чудес’
7.Concat(S1,S2,S3) сцепление строк S1,S2,S3
Пример: S1:=‘Травка ‘; S2:=‘зеленеет, ’;
S3:=‘солнышко блестит’; s4:=Concat(s1,s2,s3);
Результат: s4=‘Травка зеленеет, солнышко блестит’
Строковый тип данных. Приемы решения задач
8. Обращение к символам строковой переменной
как к элементу массива, каждый элемент которого
типа Char:
s:=‘Погода’
S[3]=‘г’
П о г о д а
1
2
3
4
5
6
9. d:=POS(ps,s) номер позиции
вхождения подстроки PS в строку S
D:=POS(‘kot’,’nash kot Vasjka’);
D равно 6.
Строковый тип данных. Приемы решения задач
Прием замены значения элемента на другой
символ типа String.
1. Создать литерную константу:
CONST S=‘0123456789’
2. Например дано длинное число, которое возможно прочитать только
типом STRING.
Ch_1:=‘12345267190001’
3. Нужно прибавить к заданному числу другое число Ch_2;
4. Можно брать символы по очереди начиная с самого маленького
разряда, переводить в тип целых чисел (Val(Ch_1[i], Ch_INT,d) и
складывать по правилам позиционной системы счисления.
5. После того как будет определено какая именно цифра должна
стоять на месте Ch_1[i], нужно сделать присвоение символа константы,
стоящего на позиции Cif+1, так как на первой позиции стоит 0.
Например:
Dobavka_Razryada:=0;
{_____________________Тело цикла____________________}
Ch_1:=‘12345267190001’, Сh_2:=9, Val(Ch_1[i], Ch_INT,d),
Sum_Cif:=Ch_INT+Ch_2+Dobavka_Razryada;
Dobavka_Razryada:=Sum_Cif DIV 10;
OST:=Sum_Cif MOD 10;
Ch_1[i]:=S[OST+1]; {Замена символа из соответствующим из
константы}
Строковый тип данных. Приемы решения задач
1) В предыдущем примере мы разобрали, только как нужно прибавить к
одному разряду, данный набор действий нужно оформить в цикле
Пока: с постусловием или предусловием.
Условия окончания работы:
Условие продолжения работы:
добавка =0 или i=0.
i>0 и Dоbavka_Razryada<>0
2) После прохождения по всему длинному числу (либо
раньше) цикл закончит свою работу, если после работы
цикла в переменной Dobavka_Razryada<>0, то это
означает, что число должно увеличиться на один разряд,
поэтому после цикла нужно проверить состояние
переменной Dobavka_Razryada при необходимости
изменить результирующее число:
Ch_1:= S[Dobavka_Razryada+1]+Ch_1;
Например:
‘99’+5 1)9+5=14, Dobavka_Razryada=1, Сh_1=’94’
2) 9+1=10, Dobavka_Razryada=1, Ch_1=’04’
После цикла: Ср1=‘1’+’04’=‘104’
Строковый тип данных. Приемы решения задач
Задание №1:
Напишите программу складывающую
многозначное число с однозначным в
десятичной системе счисления:
А) При помощи цикла с постусловием.
Б) При помощи цикла с предусловием.
В) При помощи цикла «Повтори N раз».
Г) Без цикла. (при помощи возврата на
метку)
Ко всем алгоритмам нарисовать блоксхемы и
представить копии экранов со значениями:
1)9111019+7, 2)9999999998+5,
3)7000000008+2, 4)10063+8.
Строковый тип данных. Приемы решения задач
Задача «Финансы»
• «Курс валюты Зимбабве опустился накануне до рекордно низкого уровня 1,2
млрд. зимбабвийских долларов за один доллар США»
(Новости от 7.06.2009)
В некоторой стране инфляция достигла таких размеров, что доходы граждан
стали выражаться числами, количество знаков в десятичной записи которых доходит
до 200. Это сильно усложнило задачу взимания налогов.
Один из налогов на доходы составляет 1%. Напишите программу, которая по
введенному числу D (величине дохода гражданина) вычислит этот налог.
При этом применяются следующие правила округления:
•Если налог выражается целым числом, то он не округляется.
•Если налог выражается дробным числом, то он округляется в сторону большего
целого (в пользу государства).
Формат входных данных
Вводится одно число D (натуральное, 105 ≤ D < 10200) – величина дохода
гражданина.
Формат выходных данных
Выведите одно натуральное число – величину налога.
Примеры
Входные данные Выходные данные
1000001
12345600
10001
123456
Строковый тип данных. Приемы решения задач
Рассмотрим алгоритм решения задачи «Финансы» часть 1:
1. Для решения этой задачи нужно предусмотреть работу с
длинным числом, так как ни один числовой тип не поддерживает
работу с 200т с знаками. Поэтому можно представить число как
строковую переменную (одномерный массив литер) или массив
целых чисел (отдельная цифра).
1. Считываем заданное число в литерную переменную S.
2. Находим длину литерной переменной: DL:=length(S);
2. Для того, чтобы найти один % от числа его нужно поделить на
100. Таким образом два последних знака нашей переменной
являются дробной частью числа равного 1% от заданного числа.
Поэтому наша задача проверить эти два символа: если хотя бы
один из них не равен символу ‘0’, то по правилам Зимбабве нужно
округлить налог в пользу государства, т.е. прибавить 1 к целой
части.
3. Например: дано число 99999901, ответ: 1000000
7800 78
Строковый тип данных. Приемы решения задач
Алгоритм решения задачи «Финансы» часть 2:
1. If (S[dL]<>’0’) OR (S[dL1]) then begin Delete(S,dl1,2); DL:=DL2;
end;
отрезали два последних символа и изменили переменную длины на 2.
2. С измененной переменной S пройти алгоритм прибавления 1 в
десятичной системе счисления:
a) Заведем переменную DR:=1 (добавление разряда); заведем
константу S_cif=‘0123456789’;
b) Начиная с последней цифры:
1) Переводим символ в цифру (VAL(S[i],cif,AA)).
2) Находим сумму цифры и переменной DR. (Sum:=cif+DR).
3) Находим остаток от деления SUM на 10 (OST:=sum mod 10).
4) Находим целое количество раз вхождения 10ки в SUM и
полученное число сохраняем в DR (DR:=SUM div 10).
6) Заменяем iй символ на символ из константы S[i]:=S_Cif[ost].
c) Весь процесс пункта B нужно повторить, если DR>0. Поэтому
выгодно организовать цикл с постусловием: i:=1; Repeat
действия; i:=i1 Until (DR=0)Or (i=0).
d) После окончания цикла нужно проверить переменную DR, если
она >0, то окончательное значение числа: S:=S_cif[DR+1]+S;
Строковый тип данных. Приемы решения задач
ЗАДАНИЕ:
Напишите программу, выполняющую округление числа
по принципу страны Замбабве. Входные данные в
файле input.txt, выходные в файле OUTPUT.TXT.
Проверьте числа:
Дано: 99999999999999999991
Ответ: 1000000000000000000
Дано: 10000000000000000002
Ответ: 100000000000000001
Материалы на данной страницы взяты из открытых истончиков либо размещены пользователем в соответствии с договором-офертой сайта. Вы можете сообщить о нарушении.