Страницы

Уроки 23, 24 Использование строкового и символьного типов для решения задач целочисленной арифметики

Использование строкового и символьного типов для решения задач целочисленной арифметики


Для решения задач целочисленной арифметики, иногда проще использовать не целые типы, а строковые.


Процедуры и функции обработки строковых переменных


Тип
Вызов
Параметры
Действие
Процедура
Str(v,s)
v:Integer или Real; Var s:String;
Число v преобразовывается строку s
Процедура
Val(s,v,w)
s:String; Var v:Integer или Real; Var w:Integer;
Строка s преобразовывается в число v, если строка состоит только из цифр, при этом значение переменной w будет 0. В противном случае - преобразование не выполняется, 0 - признак ошибки.
Функция
Length(s)
s:String
Длина строки s, т.е. количество символов строки s
Функция
Pos(w,s)
w,s:String
Номер первого вхождения строки w в строку s. Если вхождения нет, то выдается 0
Процедура
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. Если результат превысит 255 символов, строка обрезается
Функция
Concat(s1,s2,...,sm) 
или s1+s2+...+sm 
Значение функции типа String
s1,s2,...,sm:String;
Строки s1,s2, ...sm склеиваются. Если результат превысит 255 символов, строка обрезается
Функция
Copy(s,p,n) Значение функции типа String
s:String; p,n:Integer;
Из строки s, начиная с позиции p, выбирается n символов


Задача 1. Задано число. Найти сумму его цифр.
Анализ: Преобразуем число в строку.  Выделяя каждый символ строки, преобразуем его в цифру и добавим к сумме.

program z1;
var s:string; n,i,sum,c,k:integer;
begin
readln(n);
sum:=0;
str(n,s);
for i:=1 to length(s) do
begin
val(s[i],k,c);
sum:=sum+k;
end;
writeln(sum);
end.




Задача 2. Для заданной строки любых символов определить сумму всех входящих в неё цифр.

      Тесты         Посмотреть решение     


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

1. Дано число. Найти произведение цифр числа.

2. Дано число. Найти сумму цифр числа, где все числа на нечетных местах прибавляются, а на нечетных – вычитаются.

3. Задано число, проверить является ли оно палиндромом.




Задача 3. (Второй этап республиканской олимпиады по информатике, 2013)
Коле нравится смотреть на числа. Он часами может глядеть на оценки в своём дневнике, потому что больше он ничего с ними не может сделать - ведь Коля весьма ленивый. Но теперь он решил что-то поменять в своей жизни! Теперь он не просто смотрит на числа, но пытается их изменить.
Число, которое попадается на глаза Коле, немного меняется. Он пронумеровал его разряды (начиная от самого старшего разряда, который, получает номер 1) и считает сумму цифр на местах, начиная с первого, затем для каждого третьего после него.


Например, для числа 702364:
Места 
Число
7
0
2
3
6
4
Результат 7 + 3 = 10. Помогите Коле проверить себя.

Формат ввода
Одно целое, неотрицательное число N (N <= 10100)
Формат вывода
Единственное число - итоговая сумма.

        Тесты             Посмотреть решение     



Задача 4. Дана строка, изображающая арифметическое выражение вида ‘цифра ± цифра ±…± цифра’, где на месте знака операции ‘±’ находится символ ‘+’ или ‘–‘ (например, ‘4+7–2–8’). Вывести значение данного выражения (целое число).

        Тесты             Посмотреть решение     


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

1. Дана строка, изображающая арифметическое выражение вида ‘число ± число ±…±число’, где на месте знака операции ‘±’ находится символ ‘+’ или ‘–‘ (например, ‘2144+729–28’). Вывести значение данного выражения (целое число).

2. Найти сумму цифр числа, которые стоят на нечетных местах.
3. Дано число. Получить новое число выписыванием сначала всех цифр на нечетных местах, а затем на четных (например, дано 25698241, получим 26845921).

4. Задано число, проверить является ли число счастливым, т.е. сумма цифр первой половины числа равна сумме цифр второй половины числа (например, 256805 – счастливое, т.к. 2+5+6=8+0+5).





Задача 5. Для заданной строки символов проверить, является ли она симметричной или нет. (Симметричной считается строка, которая одинаково читается слева направо и справа налево).

Анализ: строка будет симметричной, если ее первый символ равен последнему, второй – предпоследнему и т.д. Сравнение будем производить до половины строки. Для слежения возьмем переменную k, которая будет равна 0, если сравниваемые символы равны и 1 - в противном случае.

Если номер символа 1, то рассматриваем с ним символ с номером n – длина строки (i=1, то рассматриваемый – (n-i+1)=n);
Если 2, то n-1; (i=2, то рассматриваемый (n-i+1)=n-1)
Если 3, то n-2 (i=3, то рассматриваемый (n-i+1)=n-2)…

     Тесты         Посмотреть решение    


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

Для заданной строки символов проверить, является ли она палиндромом (симметричной с точностью до пробелов) или нет.
Например, палиндромами являются цепочки:
А РОЗА УПАЛА НА ЛАПУ АЗОРА
(Предполагается, что все буквы строки - прописные).




Задача 6. Дано слово, записываемое через дефис. Поменять местами части слова до и после дефиса.

Анализ: найдем позицию k дефиса в слове, сформируем новое слово, первая часть которого от (k+1) символа до длины слова, а вторая от 1 символа до (k-1) символа.

      Тесты         Посмотреть решение      


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

1. Интервал целых чисел задан строкой вида: ‘[a;b]’, где a и b – целые числа.
Найти количество целых чисел на этом промежутке.

Указания: 
1) Найдем позицию k символа ‘;’
2) В переменную строкового типа поместим а (от 2-го до k-1).
3) В переменную строкового типа поместим b (от (k+1) до длины строки -1).
4) Преобразуем строки a и b в числа. Найдем количество целых чисел на промежутке (b-a+1).

2. Рассмотреть предыдущую задачу, если интервал может быть задан следующим образом: [a;b], [a;b), (a;b], (a;b).


Задания для самостоятельного решения

1. (Второй этап республиканской олимпиады по информатике, 2013 г) 
Математики – весьма ленивый народ. Каждый, наверное, заметил, что они подозрительно умело сокращают определенные записи какими-то странными обозначениями. Например, в математике существует понятие интервала. Каждый интервал задается двумя числами и двумя скобками: открывающейся и закрывающейся. Скобки могут быть двух типов: квадратные и круглые. Если скобка квадратная, то число в ней включено в интервал, иначе - нет. Например, интервал [3, 21/2] включает числа от 3 до 21/2, причем и 3, и 21/2 принадлежит этому интервалу, но интервал (3, 21/2] не содержит 3, а интервал (3, 21/2) не содержит ни 3, ни 21/2, а только числа между ними.
Вам дается интервал. Определите сколько целых чисел в него входят.

Формат ввода
Одна строка. Первый символ – открывающаяся скобка (круглая или квадратная). Далее записано либо число х, либо дробь в формате х/у. Числа х и у – целые (|x|≤109, 0<y≤109). Далее идут два символа: запятая и пробел. Затем снова число в том же формате и закрывающаяся скобка.

На вводе все интервалы корректны.

Формат вывода
Единственное число – количество целых чисел в интервале.

Примеры
Ввод: [3, 21/2] Вывод: 8.
Ввод: (-3, 3] Вывод: 6

2. Замените в строке каждое вхождение символа c на символ h.

3. Удвоить вхождение некоторой буквы в текст. Например, текст "мама папа" должен иметь вид - "маамаа паапаа", если удваивалась буква а.