Строковый тип данных. Приемы решения задач

  • Презентации учебные
  • ppt
  • 29.05.2017
Публикация в СМИ для учителей

Публикация в СМИ для учителей

Бесплатное участие. Свидетельство СМИ сразу.
Мгновенные 10 документов в портфолио.

Данный методический материал вводит в тему строковый и символьный тип данных на языке программирования Паскаль. В качестве примера применения данного типа в решении задач выбрана одна из тем: длинная арифметика. Данный пример показывает как удобно использовать литерные переменные в качестве массивов.Учебная презентация на тему "Строковый и символьный тип данных"
Иконка файла материала Строковый тип данных. Приемы решений.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[dL­1]) then begin Delete(S,dl­1,2); DL:=DL­2;  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:=i­1   Until (DR=0)Or (i=0). d) После окончания цикла нужно проверить переменную DR, если  она >0, то окончательное значение числа: S:=S_cif[DR+1]+S;
ЗАДАНИЕ: Напишите программу, выполняющую округление числа  по принципу страны Замбабве. Входные данные в  файле input.txt, выходные в файле OUTPUT.TXT. Проверьте числа:  Дано:                    99999999999999999991  Ответ:                   1000000000000000000   Дано:             10000000000000000002 Ответ:                 100000000000000001