)напишите программу, определяющую, сколько слов в данной строке текста.(pascal) на вход программы поступает строка текста, в которой могут встречаться: — прописные и строчные (т.е. большие и маленькие) латинские буквы; — пробелы; — знаки препинания: точка, запятая, восклицательный и вопросительный знак; — символ –, обозначающий в некоторых случаях тире, а в некоторых — дефис. слово — это последовательность подряд идущих латинских букв и знаков дефис, ограниченная с обоих концов. в качестве ограничителей могут выступать начало строки, конец строки, пробел, знак препинания, тире. тире отличается от дефиса тем, что слева и справа от знака дефис пишутся буквы, а хотя бы с одной стороны от тире идет либо начало строки, либо конец строки, либо пробел, либо какой-либо знак препинания, либо еще одно тире.
228
410
Ответы на вопрос:
Получилась громоздкая конструкция из логический условий, но по-другому никак не придумалось var t: string; n: integer; i,x,y: byte; begin writeln ('введите строку'); readln (t); n: =length(t); t: =t+'.'; //пририсовываем к строке лишний символ "не буква", иначе программа может не посчитать последнее слово в случае, если строка кончается буквой. x: =0; // переменная для обозначения конца каждой группы из букв, идущих подряд y: =0; // переменная для подсчета количества групп из букв, идущих подряд for i: =1 to n do begin // определяем, является ли текущий символ буквой: if ((ord(t[i])> 64) and (ord(t[i])< 91)) or ((ord(t[i])> 96) and (ord(t[i])< 123)) or ((ord(t[i])> 191) and (ord(t[i])< 256)) then x: =1 //если да, то х=1 else begin if x=1 then begin y: =y+1; x: =0 end; // если текущий символ не буква, то проверяем "х" - если х=1, значит слово кончилось и "у" увеличиваем на 1, а "х" соответственно снова обнуляем. теперь при следующем символе "небуква" наш "у" не увеличится //в следующем длинном условии проверяем исключение - является ли текущий символ тире или дефисом. если дефис, то количество уже посчитанных слов уменьшим на 1, т.к. дефис стоит в середине слова и значит предыдущее прибавление 1 было неправильным. if (t[i]='-') and (t[i-1])> 64) and (ord(t[i-1])< 91)) or ((ord(t[i-1])> 96) and (ord(t[i-1])< 123)) or ((ord(t[i-1])> 191) and (ord(t[i-1])< and (t[i+1])> 64) and (ord(t[i+1])< 91)) or ((ord(t[i+1])> 96) and (ord(t[i+1])< 123)) or ((ord(t[i+1])> 191) and (ord(t[i+1])< then y: =y-1 end end; writeln('в данной строке ',y,' слов') end. результат работы программы: введите строку ali-baba,- это не имя атамана разбойников, это китайский магазин. в данной строке 9 слов
Реши свою проблему, спроси otvet5GPT
-
Быстро
Мгновенный ответ на твой вопрос -
Точно
Бот обладает знаниями во всех сферах -
Бесплатно
Задай вопрос и получи ответ бесплатно
Популярно: Информатика
-
SabZero5530.06.2021 23:45
-
misterkaha18.05.2022 02:50
-
ka93122.08.2022 17:53
-
wondermang02.04.2022 21:11
-
Patsanchik99901.05.2023 20:49
-
YuliaVaskiv11.11.2020 06:56
-
Ra21M19.01.2020 23:42
-
Androchshuk1517.10.2021 08:51
-
Bogdasha0610201502.03.2021 19:10
-
данил195601.01.2021 06:37
Есть вопросы?
-
Как otvet5GPT работает?
otvet5GPT использует большую языковую модель вместе с базой данных GPT для обеспечения высококачественных образовательных результатов. otvet5GPT действует как доступный академический ресурс вне класса. -
Сколько это стоит?
Проект находиться на стадии тестирования и все услуги бесплатны. -
Могу ли я использовать otvet5GPT в школе?
Конечно! Нейросеть может помочь вам делать конспекты лекций, придумывать идеи в классе и многое другое! -
В чем отличия от ChatGPT?
otvet5GPT черпает академические источники из собственной базы данных и предназначен специально для студентов. otvet5GPT также адаптируется к вашему стилю письма, предоставляя ряд образовательных инструментов, предназначенных для улучшения обучения.