Форум программистов, компьютерный форум CyberForum.ru Форум программистов | Компьютерный форум | Форум web-программистов | Форум по электронике и бытовой технике | Форум о софте | Научный форум | Карьера и бизнес
CyberForum.ru - форум программистов и сисадминов > > >
Восстановить пароль Регистрация

Ответ Создать новую тему
 
XEHK
Форумчанин
4 / 4 / 0
Регистрация: 23.03.2011
Сообщений: 69
13.07.2011, 01:33     Найти в тексте слова, в которых вторая буква справа встречается более одного раза.
  #1
Здраствуйте, нужна помощь в такой задачке: вводитса строка в строке слова разделяющиеся пробелом в конце стоит точка надо вивести на екран слова в каторих предпоследнея буква входит в нево ищераз. Например ввели папа брат вивело тока папа
 Комментарий модератора Mawrat
Название темы изменено модератором. Новое название отражает содержание задачи.
AdAgent
Объявления
13.07.2011, 01:33
Mawrat
Форумчанин
11742 / 5028 / 237
Регистрация: 19.09.2009
Сообщений: 7,717
13.07.2011, 02:15
  #2
Код 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.
В алгоритме заглавный и строчный варианты одной и той же буквы считаются различными.
XEHK
Форумчанин
4 / 4 / 0
Регистрация: 23.03.2011
Сообщений: 69
13.07.2011, 02:23  [ТС]
  #3
Цитата Сообщение от 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 нада сменить?
Mawrat
Форумчанин
11742 / 5028 / 237
Регистрация: 19.09.2009
Сообщений: 7,717
13.07.2011, 02:32
  #4
Цитата Сообщение от 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);
XEHK
Форумчанин
4 / 4 / 0
Регистрация: 23.03.2011
Сообщений: 69
13.07.2011, 02:35  [ТС]     Найти в тексте слова, в которых вторая буква справа встречается более одного раза.
  #5
теперь понятно, большое спасибо
Yandex
Объявления
13.07.2011, 02:35
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать новую тему

Похожие темы
Тема Раздел Автор Дата
Turbo Pascal В тексте найти все слова, у которых буква встречается более одного раза
Задача: В тексте найти все слова, у которых буква встречается более одного раза. Записать их в новый текст. В этом тексте слова упорядочить по возрастанию длины слова. //дополнение к задаче...
Turbo Pascal Fakeoke 25.12.2012 16:14
Free Pascal В заданной строке найти количество слов, в которых заданная буква встречается более одного раза.
Помогите пожалуйста. Дано срока.В заданной строке найти количество слов, в которых заданная буква встречается более одного раза.
Free Pascal VitaliKS 19.11.2012 10:23
Turbo Pascal Найти количество слов, в которых заданная буква встречается более одного раза
Помогите пожалуйста. Дано срока.В заданной строке определить количество слов, в которых заданная буква встречается более одного раза.
Turbo Pascal VitaliKS 19.11.2012 01:40
Turbo Pascal Для каждого символа заданного текста указать, сколько раз он встречается в тексте. Сообщение об одном символе должно печататься не более одного раза.
ОБРоБОтка символьных строк. Для каждого символа заданного текста указать, сколько раз он...
Turbo Pascal Рейвенор 18.12.2011 05:48
Turbo Pascal Найти в тексте слова, в которых первая буква слева встречается более одного раза
Здраствуйте вот есть задачка, немогу ие решить :(.Найти в тексте слова, в которых первая буква слева встречается более одного раза. В тексте слова разделяютса пробеламе после последнего слова точка
Turbo Pascal XEHK 14.07.2011 13:30
Turbo Pascal Вывести те слова в которых буква "е" встречается три раза
помогите пожалуйста написать программу на паскале.На воруме нашел похожую тему,ниже куски программы.сделайте,пожалуйста,программу полностью. вывести те слова в которых буква "е" встречается три...
Turbo Pascal SPORTsMEN000 24.03.2010 19:59
Опции темы

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

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