Pascal: строковый тип и множества

Задача 1.

Вывести в одну строку ABBCCCDDDD …. ZZ…Z.

Переменные:

i – переменная цикла; определяет, какая буква выводится;
k – количество повторений буквы;
j – переменная цикла.

Алгоритм решения задачи:

  1. цикл for i:=’A’ to ‘z’ do определяет, какую букву выводим на печать;
  2. внутренний цикл for j:=1 to k do определяет, сколько раз будет печататься буква;
  3. выводим заданную букву k раз на экран;
  4. после вывода всех букв закрываем строку оператором writeln.

Задача 2.

Дана строка символов. Удалить из нее все знаки препинания.

Переменные:

i – переменная цикла;
L – длина строки;
str – строка текста;
str1 – вспомогательная строка;
m – множество знаков препинания.

Алгоритм решения задачи:

  1. задаем значение множества m – множества знаков препинания;
  2. вводим строку str с клавиатуры;
  3. цикл for i:=1 to l do осуществляет построение вспомогательной строки без знаков препинания: берем отдельный символ строки и проверяем, не является ли он знаком препинания. Если да, то присоединяем этот символ к новой вспомогательной строке. Если нет, то переходим к следующему элементу строки;
  4. первоначальную строку заменяем на вспомогательную;
  5. выводим сроку на экран.

Задача 3.

Дана строка символов. Выделить подстроку между пер-вой и последней точкой.

Переменные:

i – номер позиции, которая соответствует точке;
j – местоположение первой точки;
m – местоположение последней точки;
str – строка текста;
s1 – вспомогательная переменная.

Алгоритм решения задачи:

  1. вводим строку str и присваиваем значение вспомогательной переменной s1:=str;
  2. определяем местоположение первой точки в тексте; если точка есть, то вырезаем из s1 текст до нее;
  3. ищем последнюю точку в цикле while i<>0 do; если она есть, то значение переменной m указывает на ее местоположение;
  4. в зависимости от присутствия точек выделяем подстроку s1:=copy(str,j+1,m–j–1) и выводим результат на экран.

Задача 4.

Дана строка символов. Определить, является ли она записью десятичного числа, кратного трем.

Необходимо удостовериться, что введенная строка состоит только из цифр, т.е. может быть преобразована в десятичное число. Само преобразование цифры в число сделать очень просто. Поскольку коды символьных переменных – цифр – следуют один за другим, то функция ord в выражении ord(s1[i])–ord(‘0’) поможет нам сделать это.
Переменные:

i – переменная цикла;
s1 – строка цифр;
m – длина строчки;
k – счетчик цифр.

Алгоритм решения задачи:

  1. вводим строку s1;
  2. организуем в строке поиск цифр до тех пор, пока не встретим конец строчки или не обнаружим наличие ошибки в арифметическом выражении;
  3. если встречается цифра, то добавляем ее к общей сумме цифр;
  4. после определения суммы цифр определяем, кратна ли она на трем;
  5. в зависимости от полученного результата выводим ответ на экран.

Задача 5.

Дана строка символов. Группы символов в ней между группами пробелов считаются словами. Посчитать, сколько слов содержит данная строка.

Переменные:

i – вспомогательная переменная;
s – строка текста;
k – счетчик слов.

Алгоритм решения задачи:

  1. вводим строку s;
  2. на каждом шаге внешнего цикла отыскиваем очередное слово в строке и увеличиваем счетчик слов;
  3. выводим результат на экран.

Задача 6.

Дана строка символов. Группы символов в ней между группами пробелов считаются словами. Определить длину самого короткого и самого длинного слова.

Переменные:

i – индекс очередного символа в строке;
s – строка текста;
beginStr и endStr – начало и конец слова;
len – длина слова;
max – длина наибольшего слова;
min – длина наименьшего слова.

Алгоритм решения задачи:

  1. вводим строку s;
  2. устанавливаем начальные значения max и min;
  3. организуем внешний цикл для поиска очередного слова в строке;
  4. найдя слово, определяем его длину и при необходимости корректируем max и min;
  5. выводим результат на экран.

Задача 8.

Присвоить литерным переменным с2, с1 и с0 соответственно левую, среднюю и правую цифры трехзначного числа k.

Задача 9.

Используя только литерный ввод, т.е. процедуру readln(c), где с – литерная переменная, ввести непустую после-довательность цифр, перед которой может находиться знак » + » или » – » и за которой следует пробел, и, получив соответст-вующее число, присвоить его целой переменной k.

Задача 10.

Программа. Напечатать заданную непустую строку:
а) удалив из нее все цифры и удвоив знаки « + » и « – » :

б) удалив из нее все знаки « + » , непосредственно за которыми идет цифра:

Задача 11.

Описать функцию count(s), подсчитывающую общее коли-чество цифр и знаков ‘ + ‘, ‘ – ‘ и ‘ * ‘, входящих в строку s.

Переменные:

а) в функции count:

s – строка (формальный параметр);
i – счетчик цикла (локальная переменная);
k – общее количество цифр и знаков ‘ + ’ , ‘ * ’ , ‘ – ‘ в заданной строке (локальная переменная);

б) в основной программе:

s1 – введенная строка (локальная переменная);
k1 – общее количество цифр и знаков ‘+’, ‘*’, ‘–‘ в заданной строке s1 (фактический параметр).

Алгоритм решения задачи:

  1. создаем функцию count, подсчитывающую общее количество цифр и знаков ‘+’, ‘*’, ‘–‘ в заданной строке;
  2. вводим строку s1;
  3. вызываем функцию count и выводим значение счетчика k1 на экран;
  4. завершаем работу программы.

Задача 12.

Описать функцию card(A), подсчитывающую количество элементов множества A типа M (ноль используйте как прекращение ввода). (Например, card([5,8,23])=3.)

Переменные:

а) в функции card:

A – множество (формальный параметр);
p – счетчик цикла от 0 до 99 (локальная переменная);
k – количество элементов множества А (локальная перемен-ная);

б) в основной программе:

x – введенное число (локальная переменная);
b – созданное множество (локальная переменная);
k1 – количество элементов в созданном множестве (факти-ческий параметр).

Алгоритм решения задачи:

  1. создаем функцию card, подсчитывающую количество элементов множества;
  2. организуем пустое множество;
  3. в цикле repeat … until вводим числа до тех пор, пока не ввели 0, и дописываем их во множество;
  4. вызываем функцию card и выводим значение счетчика k1 на экран;
  5. завершаем работу программы.

Задача 13.

Программа. Дана строка из строчных латинских букв. Напечатать первые вхождения букв в текст, сохраняя их исход-ный взаимный порядок.

Переменные:

let – множество малых латинских букв;
c – очередной символ строки;
s – введенная строка;
i – переменная цикла.

Алгоритм решения задачи:

  1. организуем пустое множество let;
  2. вводим строчку s;
  3. организуем цикл, в котором просматриваем символы строки s до тех пор, пока не встретим ‘.’, и проверяем, входит ли этот символ во множество let (т.е. символ – малая латинская бук-ва);
  4. если очередной символ строки не входит во множество let, то этот символ встретился впервые, выводим ее на экран и дописываем во множество;
  5. завершаем работу программы.

Задача 14.

type series=file of real;

Описать функцию neg(s), подсчитывающую сумму отрицатель-ных элементов в файле s типа series.

Переменные:

а) основная программа:

f – файл вещественных чисел (глобальная переменная);
y – очередное число для записи в файл (глобальная пере-менная);
n – сумма отрицательных элементов файла (глобальная пе-ременная);
k – счетчик цифр.

б) функция neg:

s – файловая переменная (локальная, формальная перемен-ная);
x – очередной элемент файла (локальная переменная);
sum – сумма отрицательных элементов файла (локальная переменная).

Алгоритм решения задачи:

  1. свяжем файл proba.txt с файловой переменной f и откроем его для записи;
  2. организуем цикл, в котором вводим числа и записываем их в файл до тех пор, пока не введем 0;
  3. вызываем функцию neg, в которой открываем файл для чтения, считываем последовательно элементы файла и определяем сумму отрицательных элементов файла;
  4. выводим значение суммы на экран.

15.

Описать логическую функцию sort(r), проверяющую, упоря-дочены ли по возрастанию элементы непустого файла r типа row.

16.

Описать функцию less(f) от непустого файла f типа reals, которая подсчитывает количество элементов файла f, меньших среднего арифметического всех элементов этого файла.

Один комментарий

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *