profile
Опубликовано 5 лет назад по предмету Информатика от lukinykhv

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

  1. Ответ
    Ответ дан Giammy
    // 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.

    Пример в приложении.
    1. Ответ
      Ответ дан Giammy
      Я думал последнее - первое
    2. Ответ
      Ответ дан Аккаунт удален
      Я думаю развернуть - это да, "оволс"
    3. Ответ
      Ответ дан Аккаунт удален
      Хотя, кто знает... может "переписать в обратном порядке" - это у автора обозначает "создать массив слов и вывести его списком от последнего слова к первому"
    4. Ответ
      Ответ дан Аккаунт удален
      Но раз на мои вопросы не отвечено, наверно, каждый понимает, как хочет.
    5. Ответ
      Ответ дан Giammy
      Оставлю пока так, если автор одумается и отпишет - изменю, пока так)
  2. Ответ
    Ответ дан Аккаунт удален
    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.
Самые новые вопросы