Форум программистов и сисадминов CyberForum.ru
Вернуться   Форум программистов и сисадминов CyberForum.ru > Форум Форум программистов > Форум Pascal (Паскаль) > Форум Turbo Pascal
Восстановить пароль Регистрация

Ответ Создать новую тему
 
Старый 13.07.2011, 01:33   #1
XEHK
Форумчанин
 
Регистрация: 23.03.2011
Сообщений: 69
Репутация: 4 (4)
Найти в тексте слова, в которых вторая буква справа встречается более одного раза. / Turbo Pascal

Здраствуйте, нужна помощь в такой задачке: вводитса строка в строке слова разделяющиеся пробелом в конце стоит точка надо вивести на екран слова в каторих предпоследнея буква входит в нево ищераз. Например ввели папа брат вивело тока папа
 Комментарий модератора Mawrat
Название темы изменено модератором. Новое название отражает содержание задачи.
Старый 13.07.2011, 02:15   #2
Mawrat
Форумчанин
 
Регистрация: 19.09.2009
Сообщений: 7,332
Репутация: 11443 (4828)
Лучшие ответы: 177
Код Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
program Project1;
 
const
  //Множество разделителей слов.
  D = ['.', ',', ':', ';', '!', '?', '-', ' ', #9, #10, #13];
var
  S, sW : String;
  i, j, Len : Integer;
  Ch : Char;
  Da : set of Char;
begin
  repeat
    Writeln('Задайте строку:');
    Readln(S);
 
    Writeln('Перечень слов, в которых вторая буква справа присутствует более одного раза:');
    Len := Length(S);
    Ch := '*';
    sW := '';
    Da := [];
    j := 0;
    //Перебор символов строки в направлении справа-налево.
    for i := Len downto 1 do begin
      //Пропускаем разделители.
      if S[i] in D then Continue;
      //Номер буквы в слове, отсчитывая справа.
      Inc(j);
      if j = 2 then
        Ch := S[i] //Запоминаем букву, которая является второй справа в слове.
      else
        Da := Da + [ S[i] ]; //Добавляем во множество все буквы слова, кроме второй справа.
      //Составляем само слово.
      sW := S[i] + sW;
      //Отслеживаем начало слова.
      if (i = 1) or (S[i - 1] in D) then begin
        //Распечатываем слова, в которых вторая буква справа присутствует более одного раза.
        if (j > 1) and (Ch in Da) then Writeln(sW);
        sW := '';
        Da := [];
        j := 0;
      end;
    end;
 
    Writeln('Повторить - Enter, выход - любой символ + Enter.');
    Readln(S);
  until S <> '';
end.
В алгоритме заглавный и строчный варианты одной и той же буквы считаются различными.
Другие темы раздела Форум программистов Turbo Pascal. Программирование на языке Turbo Pascal. Помощь в решении задач, ответы на вопросы.
Turbo Pascal Помогите составить блок схему к алгоритму обработки строки.
очень нужна блок-схема Название темы изменено модератором. Причина: содержание темы должно отражать суть задачи.
Перевести с Дельфи на Паскаль Turbo Pascal
program Project1; //Возвращает заглавную версию буквы для кодовой страницы CP866. function UpCase866(const aChar : Char) : Char; begin case aChar of #$A0..#$AF : UpCase866 := Char( Ord(aChar) - $20 ); //Буквы: а..п. #$E0..#$EF : UpCase866 := Char( Ord(aChar) - $50 ); //Буквы:...
Старый 13.07.2011, 02:23  [ТС]   #3
XEHK
Форумчанин
 
Регистрация: 23.03.2011
Сообщений: 69
Репутация: 4 (4)
Цитата Сообщение от Mawrat Посмотреть сообщение
Код Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
program Project1;
 
const
  //Множество разделителей слов.
  D = ['.', ',', ':', ';', '!', '?', '-', ' ', #9, #10, #13];
var
  S, sW : String;
  i, j, Len : Integer;
  Ch : Char;
  Da : set of Char;
begin
  repeat
    Writeln('Задайте строку:');
    Readln(S);
 
    Writeln('Перечень слов, в которых вторая буква справа присутствует более одного раза:');
    Len := Length(S);
    Ch := '*';
    sW := '';
    Da := [];
    j := 0;
    //Перебор символов строки в направлении справа-налево.
    for i := Len downto 1 do begin
      //Пропускаем разделители.
      if S[i] in D then Continue;
      //Номер буквы в слове, отсчитывая справа.
      Inc(j);
      if j = 2 then
        Ch := S[i] //Запоминаем букву, которая является второй справа в слове.
      else
        Da := Da + [ S[i] ]; //Добавляем во множество все буквы слова, кроме второй справа.
      //Составляем само слово.
      sW := S[i] + sW;
      //Отслеживаем начало слова.
      if (i = 1) or (S[i - 1] in D) then begin
        //Распечатываем слова, в которых вторая буква справа присутствует более одного раза.
        if (j > 1) and (Ch in Da) then Writeln(sW);
        sW := '';
        Da := [];
        j := 0;
      end;
    end;
 
    Writeln('Повторить - Enter, выход - любой символ + Enter.');
    Readln(S);
  until S <> '';
end.
В алгоритме заглавный и строчный варианты одной и той же буквы считаются различными.
Спасибоя вроде не все понял но вот к примеру если ето вторая з конца буква то там j нада сменить?
Старый 13.07.2011, 02:32   #4
Mawrat
Форумчанин
 
Регистрация: 19.09.2009
Сообщений: 7,332
Репутация: 11443 (4828)
Лучшие ответы: 177
Цитата Сообщение от XEHK Посмотреть сообщение
вот к примеру если ето вторая з конца буква то там j нада сменить?
Нет - там ничего менять не надо. Это программа распечатывает те слова, в которых вторая с конца буква присутствует более одного раза.
---
Если надо поменять номер буквы - например, чтобы распечатывались те слова, в которых третья от конца буква присутствует более одного раза, надо поменять только две строки:
в этом случае потребуется заменить:
Код Pascal
1
2
3
      if j = 2 then
...
        if (j > 1) and (Ch in Da) then Writeln(sW);
на:
Код Pascal
1
2
3
      if j = 3 then
...
        if (j > 2) and (Ch in Da) then Writeln(sW);
---
Можно немного поменять условия, чтобы получить внешнее единообразие:
Код Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
program Project1;
 
const
  //Множество разделителей слов.
  D = ['.', ',', ':', ';', '!', '?', '-', ' ', #9, #10, #13];
var
  S, sW : String;
  i, j, Len : Integer;
  Ch : Char;
  Da : set of Char;
begin
  repeat
    Writeln('Задайте строку:');
    Readln(S);
 
    Writeln('Перечень слов, в которых вторая буква справа присутствует более одного раза:');
    Len := Length(S);
    Ch := '*';
    sW := '';
    Da := [];
    j := 0;
    //Перебор символов строки в направлении справа-налево.
    for i := Len downto 1 do begin
      //Пропускаем разделители.
      if S[i] in D then Continue;
      //Номер буквы в слове, отсчитывая справа.
      Inc(j);
      if j = 2 then
        Ch := S[i] //Запоминаем букву, которая является второй справа в слове.
      else
        Da := Da + [ S[i] ]; //Добавляем во множество все буквы слова, кроме второй справа.
      //Составляем само слово.
      sW := S[i] + sW;
      //Отслеживаем начало слова.
      if (i = 1) or (S[i - 1] in D) then begin
        //Распечатываем слова, в которых вторая буква справа присутствует более одного раза.
        if (j >= 2) and (Ch in Da) then Writeln(sW);
        sW := '';
        Da := [];
        j := 0;
      end;
    end;
 
    Writeln('Повторить - Enter, выход - любой символ + Enter.');
    Readln(S);
  until S <> '';
end.
В этом варианте, если понадобится сменить номер буквы с 2 на 3, то надо будет заменить:
Код Pascal
1
2
3
      if j = 2 then
...
        if (j >= 2) and (Ch in Da) then Writeln(sW);
на:
Код Pascal
1
2
3
      if j = 3 then
...
        if (j >= 3) and (Ch in Da) then Writeln(sW);
Старый 13.07.2011, 02:35  [ТС]   #5
XEHK
Форумчанин
 
Регистрация: 23.03.2011
Сообщений: 69
Репутация: 4 (4)
теперь понятно, большое спасибо
Старый 13.07.2011, 02:35
Yandex
Объявления
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать новую тему

Похожие темы
Тема Автор
Turbo Pascal Для каждого символа заданного текста указать, сколько раз он встречается в тексте. Сообщение об одном символе должно печататься не более одного раза.
ОБРоБОтка символьных строк. Для каждого символа заданного текста указать, сколько раз он встречается в тексте. Сообщение об одном символе должно печататься не более одного раза.
Рейвенор
Turbo Pascal Найти в тексте слова, в которых первая буква слева встречается более одного раза
Здраствуйте вот есть задачка, немогу ие решить :(.Найти в тексте слова, в которых первая буква слева встречается более одного раза. В тексте слова разделяютса пробеламе после последнего слова точка
XEHK
С++ для начинающих Найти максимум, который встречается более одного раза.
Задача: Найти максимум, который встречается более одного раза. Когда я я закоментировала некоторые части программы она работает правильно,а когда я откоментирую их, она работает неверно. И как ее можно сделать правильно. int n, max=0,k=0,i=0,c,f=1,z=-1; cin>>n; vector<int> v(n); for(i=0;...
Ulyana
Turbo Pascal Вывести те слова в которых буква "е" встречается три раза
помогите пожалуйста написать программу на паскале.На воруме нашел похожую тему,ниже куски программы.сделайте,пожалуйста,программу полностью. вывести те слова в которых буква "е" встречается три раза. 1. Т.к. точка в конце нам не нужна, да еще и после нее случайно могут оказаться символы, возьмем...
SPORTsMEN000
Delphi Вывести слова,в которых любая из букв встречается не более одного раза.
Напишите пожалста программу!Вывести слова,в которых любая из букв встречается не более одного раза.
marsai
Опции темы

Текущее время: 23:34. Часовой пояс GMT +4.

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.7 PL3
Copyright ©2000 - 2014, vBulletin Solutions, Inc.