
Вопрос задан 29.07.2023 в 08:50.
Предмет Информатика.
Спрашивает Тыщенко Ксения.
Помогите,пожалуйста. Дана строка не более 50 символов. Переписать в обратном порядке все слова,
начинающиеся с заданной буквы. Определить количество предложений в строке. Написать программу в паскале

Ответы на вопрос

Отвечает Шиндерук Настя.
PascalABC.NET 3.4.0, сборка 1675 от 12.06.2018
Внимание! Если программа не работает, обновите версию!
begin
var adelim:=' .,;:!?-'.ToCharArray;
var s:=ReadlnString;
Writeln(25*'- ');
var c:=ReadlnChar('Буква для поиска слов:'); Writeln(25*'- ');
var ww:=s.ToWords(adelim).Where(w->w.First=c);
foreach var w in ww do begin
var i:=Pos(w,s);
Delete(s,i,w.Length); Insert(w.Inverse,s,i)
end;
s.Println; Writeln(25*'- ');
Writeln('Предложений всего: ',s.ToWords('.').Count)
end.
Внимание! Если программа не работает, обновите версию!
begin
var adelim:=' .,;:!?-'.ToCharArray;
var s:=ReadlnString;
Writeln(25*'- ');
var c:=ReadlnChar('Буква для поиска слов:'); Writeln(25*'- ');
var ww:=s.ToWords(adelim).Where(w->w.First=c);
foreach var w in ww do begin
var i:=Pos(w,s);
Delete(s,i,w.Length); Insert(w.Inverse,s,i)
end;
s.Println; Writeln(25*'- ');
Writeln('Предложений всего: ',s.ToWords('.').Count)
end.




Отвечает Бернацкая Виолетта.
// PascalABC.NET
// Версия 3.3.5 сборка 1662 (29.04.2018)
begin
var b := ReadlnString('Введите строку -').ToLower+' ';
var (z,r) := (',!?.:;'.ToCharArray,'!.?;'.ToCharArray);
var tt:=true; Range(1,b.Length+b.ToCharArray.Where(t->t in z).Count).ForEach(t->if (b[t] in z) and tt then begin Insert(' ', b, t); tt:=false end else tt:=true);
var a := b.ToWords;
var x := ReadlnChar('Буква -');
var (w, i) := a.Select((w, i)-> (w, i)).Where(t -> t[0].ToString.First.ToLower = x).Reverse.UnZipTuple;
i := i.Reverse;
foreach var t in w.Zip(i, (p, q)-> (p, q)) do a[t[1]] := t[0];
b := string.Join(' ', a);
tt:=true; Range(1,b.Length-b.ToCharArray.Where(t->t in z).Count+1).ForEach(t->if (b[t] in z) and tt then begin Delete(b, t - 1, 1); tt:=false end else tt:=true);
b.Println; Println('Количество предложений:',b.ToWords(r).Count);
end.
Пример в приложении.
// Версия 3.3.5 сборка 1662 (29.04.2018)
begin
var b := ReadlnString('Введите строку -').ToLower+' ';
var (z,r) := (',!?.:;'.ToCharArray,'!.?;'.ToCharArray);
var tt:=true; Range(1,b.Length+b.ToCharArray.Where(t->t in z).Count).ForEach(t->if (b[t] in z) and tt then begin Insert(' ', b, t); tt:=false end else tt:=true);
var a := b.ToWords;
var x := ReadlnChar('Буква -');
var (w, i) := a.Select((w, i)-> (w, i)).Where(t -> t[0].ToString.First.ToLower = x).Reverse.UnZipTuple;
i := i.Reverse;
foreach var t in w.Zip(i, (p, q)-> (p, q)) do a[t[1]] := t[0];
b := string.Join(' ', a);
tt:=true; Range(1,b.Length-b.ToCharArray.Where(t->t in z).Count+1).ForEach(t->if (b[t] in z) and tt then begin Delete(b, t - 1, 1); tt:=false end else tt:=true);
b.Println; Println('Количество предложений:',b.ToWords(r).Count);
end.
Пример в приложении.




Отвечает нейросеть ChatGpt. Будьте внимательны, ответы нейросети могут содержать ошибочные или выдуманные данные.
Конечно, помогу! Ниже приведена программа на языке Pascal, которая выполняет задачи, описанные в вашем запросе.
pascalprogram ReverseWords; const MaxStringLength = 50; type TStringArray = array of string; function ReverseWordsStartingWithLetter(inputStr: string; letter: char): string; var words: TStringArray; word: string; i, j, startPos: integer; begin // Разбиваем строку на слова SetLength(words, 0); i := 1; while i <= Length(inputStr) do begin while (i <= Length(inputStr)) and (inputStr[i] = ' ') do Inc(i); startPos := i; while (i <= Length(inputStr)) and (inputStr[i] <> ' ') do Inc(i); SetLength(word, i - startPos); for j := 1 to Length(word) do word[j] := inputStr[startPos + j - 1]; SetLength(words, Length(words) + 1); words[Length(words) - 1] := word; end; // Переписываем в обратном порядке слова, начинающиеся с заданной буквы for i := 0 to Length(words) - 1 do begin if words[i] <> '' then begin if words[i][1] = letter then begin word := ''; for j := Length(words[i]) downto 1 do word := word + words[i][j]; words[i] := word; end; end; end; // Формируем итоговую строку result := ''; for i := 0 to Length(words) - 1 do result := result + words[i] + ' '; end; function CountSentences(inputStr: string): integer; var i: integer; begin result := 0; for i := 1 to Length(inputStr) do begin if (inputStr[i] = '.') or (inputStr[i] = '!') or (inputStr[i] = '?') then Inc(result); end; end; var inputString, letter: string; numSentences: integer; begin WriteLn('Введите строку (не более 50 символов): '); ReadLn(inputString); WriteLn('Введите букву для поиска слов: '); ReadLn(letter); WriteLn('Исходная строка:'); WriteLn(inputString); WriteLn('Результат:'); WriteLn(ReverseWordsStartingWithLetter(inputString, letter)); numSentences := CountSentences(inputString); WriteLn('Количество предложений в строке: ', numSentences); ReadLn; end.
Программа сначала получает строку и букву от пользователя, а затем использует две функции - ReverseWordsStartingWithLetter
для переписывания слов и CountSentences
для подсчета предложений. Она затем выводит исходную строку и результат, а также количество предложений в исходной строке.


Похожие вопросы

Информатика 75

Информатика 92

Информатика 132

Информатика 11

Информатика 85

Информатика 114

Информатика 32
Топ вопросов за вчера в категории Информатика
Последние заданные вопросы в категории Информатика
Предметы
-
Математика
-
Литература
-
Алгебра
-
Русский язык
-
Геометрия
-
Английский язык
-
Химия
-
Физика
-
Биология
-
Другие предметы
-
История
-
Обществознание
-
Окружающий мир
-
География
-
Українська мова
-
Информатика
-
Українська література
-
Қазақ тiлi
-
Экономика
-
Музыка
-
Право
-
Беларуская мова
-
Французский язык
-
Немецкий язык
-
МХК
-
ОБЖ
-
Психология
-
Физкультура и спорт
-
Астрономия
-
Кыргыз тили
-
Оʻzbek tili