Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.05.2012, 16:19   #1
yulka6464
 
Регистрация: 05.05.2012
Сообщений: 5
По умолчанию В вводимой строке заменить самое часто встречаемое слово на обратное. Pascal abc

как заменить слово на обратное я знаю, а вот как найти самое часто встречаемое слово не получается..подскажите пожалуйста

Код:
var
    s: string;
    i,n: byte;
    c: char;
begin
    write('Введите строку: ');
    readln(s);
    n := length(s) div 2;
    for i := 1 to n do begin
        c := s[i];
        s[i] := s[length(s)-i+1];
        s[length(s)-i+1] := c;
    end;
    writeln(s);
readln
end.

Последний раз редактировалось Stilet; 06.05.2012 в 13:56.
yulka6464 вне форума Ответить с цитированием
Старый 05.05.2012, 16:34   #2
temaps
Форумчанин
 
Регистрация: 15.05.2011
Сообщений: 160
По умолчанию

Код:
slovo,maxslovo:string;
k,maxk:integer;
....
s1:=s;
maxk:=0;
maxslovo:='';
repeat
ищем в s1 первое слово и записываем его в slovo, далее:
k:=0;
while pos(slovo,s1)>0 do
  begin
  inc(k);
  delete(s1,pos(slovo,s1),length(slovo));
  end;
if k>maxk then
  begin
  maxslovo:=slovo;
  maxk:=k;
  end;
until в строке s1 не осталось слов
дальше ищем максимальное слово в s - pos(maxslovo,s) и обращаем его
....
По repeat - until прокомментирую. Я бы написал функцию, возвращающую true, если в строке есть слова и записывающую первое слово в какую-нибудь переменную и тогда можно использовать её в условии цикла. Например, я называю функцию fw(s:string;var w:string):boolean;
Тогда вместо repeat:
Код:
....
maxslovo:='';

while fw(s1,slovo) do
begin

k:=0;
while pos(slovo,s1)>0 do
......

Последний раз редактировалось temaps; 05.05.2012 в 16:41.
temaps вне форума Ответить с цитированием
Старый 05.05.2012, 16:44   #3
yulka6464
 
Регистрация: 05.05.2012
Сообщений: 5
По умолчанию

а можно готовую программу, у меня чтото не получается
yulka6464 вне форума Ответить с цитированием
Старый 05.05.2012, 17:20   #4
temaps
Форумчанин
 
Регистрация: 15.05.2011
Сообщений: 160
По умолчанию

Я не вижу сложностей. Ну, пожалуйста, вот готовая:
Код:
function fw(s:string;var w:string):boolean;
const
c=['a'..'z','A'..'Z'];
var
i:integer;
begin
  while (not (s[1] in c)) and (length(s)>0) do delete(s,1,1);
  if length(s)>0 then
  begin
    s:=s+' ';
    i:=1;
    while (s[i] in c) do inc(i);
    w:=copy(s,1,i-1);
    fw:=true;
  end
  else
  begin
    w:='';
    fw:=false;
  end;
end;

Последний раз редактировалось temaps; 05.05.2012 в 20:23.
temaps вне форума Ответить с цитированием
Старый 05.05.2012, 23:35   #5
yulka6464
 
Регистрация: 05.05.2012
Сообщений: 5
По умолчанию

спасибо за готовое задание..только оно не хочет у меня работать..у меня англоязычная винда и комменты в строке состояния пишутся непонятными сиволами..ниже прикреплю картинку..посмотрите в чем у меня ошибка?
Изображения
Тип файла: jpg 2.jpg (89.8 Кб, 136 просмотров)
yulka6464 вне форума Ответить с цитированием
Старый 05.05.2012, 23:51   #6
temaps
Форумчанин
 
Регистрация: 15.05.2011
Сообщений: 160
По умолчанию

Цитата:
Сообщение от yulka6464 Посмотреть сообщение
...посмотрите в чем у меня ошибка?
Вроде очевидно же, что в прокладке между монитором и креслом.
Я догадался, что ты хочешь целиком всю программу, но надеялся, что включатся мозги после того как я указанную мной функцию полностью напишу.
Ладно, пофиг. Скомпоную то что есть:
Код:
var
 s: string;
 i,n: byte;
 c: char;
slovo,maxslovo:string;
k,maxk:integer;

function fw(s:string;var w:string):boolean;
const
c=['a'..'z','A'..'Z'];
var
i:integer;
begin
  while (not (s[1] in c)) and (length(s)>0) do delete(s,1,1);
  if length(s)>0 then
  begin
    s:=s+' ';
    i:=1;
    while (s[i] in c) do inc(i);
    w:=copy(s,1,i-1);
    fw:=true;
  end
  else
  begin
    w:='';
    fw:=false;
  end;
end;

 begin
 write('Введите строку: ');
 readln(s);

s1:=s;
maxk:=0;
maxslovo:='';
while fw(s1,slovo) do
begin
k:=0;
while pos(slovo,s1)>0 do
  begin
  inc(k);
  delete(s1,pos(slovo,s1),length(slovo));
  end;
if k>maxk then
  begin
  maxslovo:=slovo;
  maxk:=k;
  end;
end;

{изменять в твоём коде не хочу, поэтому использую твою переменную}
s1:=s;
s:=maxslovo; 

 n := length(s) div 2;
 for i := 1 to n do begin
 c := s[i];
 s[i] := s[length(s)-i+1];
 s[length(s)-i+1] := c;
 end;

repeat
  i:=pos(maxslovo,s1);
  delete(s1,i,length(maxslovo));
  insert(s1,s,i);
until pos(maxslovo,s1)=0;
s:=s1;{изменять в твоём коде не хочу, поэтому использую твою переменную}

 writeln(s);
 readln
 end.
temaps вне форума Ответить с цитированием
Старый 06.05.2012, 04:48   #7
TinMan
Форумчанин
 
Аватар для TinMan
 
Регистрация: 05.09.2011
Сообщений: 869
По умолчанию

Цитата:
Сообщение от temaps Посмотреть сообщение
Вроде очевидно же, что в прокладке между монитором и креслом.
Улыбнуло, согласен, temaps +1 ))

Юлка6464 сделай вот так:

Start -> Control Panel -> Region and Language -> Administrative -> Change System Locale -> Select Russian -> Okay ...

Хотя, темапс, не все у тебя так гладко в ответе..
Предпочитаю на "ты".
TinMan вне форума Ответить с цитированием
Старый 06.05.2012, 10:59   #8
yulka6464
 
Регистрация: 05.05.2012
Сообщений: 5
По умолчанию

спасибо большущее, все работает)))
а как сделать так чтобы все не часто повторяющиеся слова не удалялись а записывались в строке вместе с перевернутым?

Последний раз редактировалось yulka6464; 06.05.2012 в 11:48.
yulka6464 вне форума Ответить с цитированием
Старый 06.05.2012, 11:47   #9
temaps
Форумчанин
 
Регистрация: 15.05.2011
Сообщений: 160
По умолчанию

Цитата:
Сообщение от TinMan Посмотреть сообщение
.....

Хотя, темапс, не все у тебя так гладко в ответе..
Я же сказал, что буду просто компоновать то что есть в теме. Добавил только пару строк кода.
Цитата:
Сообщение от yulka6464 Посмотреть сообщение
а как сделать так чтобы все не часто повторяющиеся слова не удалялись а записывались в строке вместе с перевернутым?
Ну просто добавь сюда:
Код:
repeat
  i:=pos(maxslovo,s1);
  delete(s1,i,length(maxslovo));
  insert(s1,s,i);
until pos(maxslovo,s1)=0;
копирование в другую строку от начала и до i+length(maxslovo) и удаление до этого же места, а при копировании добавляй перевёрнутое слово.

Последний раз редактировалось temaps; 06.05.2012 в 11:51.
temaps вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Самое часто произносимое слово Altera Свободное общение 40 08.06.2012 12:12
С# найти самое длинное и самое короткое слово в строке и вывести их Зеленый Чай Помощь студентам 4 06.01.2012 18:40
Найти самое длинное слово в строке (массив) bot.bat Помощь студентам 2 05.11.2011 00:40
Язык С : Найти наиболее часто встречаемое слово в строке delphi_HOBu4oK Помощь студентам 0 15.05.2010 12:18
заменить самое длинное слово, на самое короткое в Delphi сер4ей Помощь студентам 5 05.03.2009 18:40