Страницы

Уроки 25, 26 Решение задач с использованием символьного и строкового типов


Пример 1. Задана строка, составленная из латинских букв и знаков препинания, слова в строке разделены одним пробелом, строка заканчивается точкой. Подсчитать количество слов в строке.
Анализ: Слова в тексте отделяются либо пробелами, либо знаками препинания. У нас должны быть следующие переменные: s- вводимая строка,  k - счетчик слов. Задаем начальные значения:  k:=0; . Просматриваем строку с первого символа, если встретим пробел, то слово закончилось и счетчик увеличиваем на 1. Слов в тексте на одно больше, чем количество пробелов.
program z1;
var s:string;
n,k,i:integer;
BEGIN
readln(s); n:=length(s);
k:=0;
for i:=1 to n do
if (s[i]='  ') then k:=k+1;
 writeln(k+1);
END.

Экспериментальная часть

1. Задана строка, составленная из латинских букв и знаков препинания. Подсчитать количество слов в строке, если число пробелов между словами может быть любым.

Указание: Введем переменную Flag логического типа, если символ - пробел, то она будет принимать значение True, в противном случае False.

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

2. Для заданной строки символов, состоящей из строчных букв и пробелов, определить слово наибольшей длины.

Указание: Пусть s - заданная строка. Для решения данной задачи определим длину строки n и организуем цикл по номеру символа i. Символ строки является первым символом некоторого слова в том случае, когда он сам не является пробелом, и либо он - первый символ строки, либо слева от него стоит пробел. Если мы нашли первый символ некоторого слова, то запомним его номер и организуем цикл, в котором найдем номер последнего символа этого слова (символ будет последним в слове либо тогда, когда после него стоит пробел, либо когда он последний символ строки). Если длина слова наибольшая из всех найденных, запомним эту длину и номер первого символа этого слова.
Обозначения:
max - переменная, в которой запоминается текущая максимальная длина найденного слова; k - переменная, в которой поочередно запоминается номер первого символа каждого слова; d - переменная, в которой хранится номер первого символа слова с максимальной длиной.


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

Указания. Если последний символ слова совпадает с первым символом этого слова, и длина слова наибольшая из всех найденных, запомним эту длину и номер первого символа этого слова.




Задание 1. Проверить корректность расстановки скобок в арифметическом выражении.
Выражение может содержать произвольное количество круглых скобок.
Программа должна выдать одну строчку: "правильно" или "неправильно".


Например, при вводе выражения (())() программа должна сообщить о правильности расстановки скобок, а при вводе выражения ((()) или (()))( – о неправильности.

Указания.
Сначала разберемся, что считать правильной расстановкой скобок:
1) количество открытых скобок всегда больше либо равно количеству закрытых.
2) в конце выражения количество закрытых скобок равно количеству открытых.
Создадим счетчик скобок, первоначально равный 0. Тогда:
1) при появлении символа "(" - увеличить счетчик на 1;
2) при появлении символа ")" - уменьшить счетчик на 1;

Посмотрим на счетчик: он содержит количество открытых, но еще не закрытых скобок. Если счетчик стал меньше нуля, значит, появилась лишняя закрывающая скобка, т.е. выражение неверно (нарушение пункта 1).

Если после завершения работы конечного автомата счетчик не равен нулю (т.е. не все скобки закрыты) то выражение неверно (нарушение пункта 2).



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




Задание 2. Подсчитать, количество гласных латинских букв в строке.


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


Экспериментальная часть

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

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


2.        Дан текст. Вывести все слова, начинающиеся с согласных букв латинского алфавита.

3.        Для заданной строки определить все входящие в неё символы. Например: строка "abccbbbabba" состоит из символов "a","b" и "с".

Алгоритм решения:
1)        Опишем множество m, первоначально пустое, куда запишем все символы слова по одному разу.
2)        Выведем на экран те символы строки, которые есть в множестве, одновременно удаляя их из множества.

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

4.        Даны две строки. Вывести буквы, встречающиеся и в той и в другой строках.


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

1.         Составить программу, которая выводит True, если в строке буква "А" встречается чаще, чем буква "В", и False в противном случае.

2.         Подсчитать стоимость телеграммы, если стоимость одного слова 5 руб. 50 коп.

3.         Дан текст. Определите:
o   длину самого короткого и самого длинного слова;
o   количество слов, начинающихся и оканчивающихся одной и той же буквой;
o   количество слов, являющихся палиндромами.