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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.11.2007, 13:15   #1
Progs
Пользователь
 
Регистрация: 23.04.2007
Сообщений: 17
По умолчанию Решение задачи на Pascal

Добрый день всем.
Собственно сама задача:
"Во введенном тексте задано предложение,в котором встречается одно перечисление двух объектов с помощью предлога "и". Поменять местами слова,соединённые этим предлогом. Например,текст "А и Б сидели на трубе" заменить на "Б и А сидели на трубе" ".
По идеи задача легкая,но я не могу понять как найти начало первого слова между предлогом. Например: "Можеть быть сходим в кино и посмотрим фильм?". Как найти позицию слова кино?
Заранее спасибо.
Read This F**ckin' Manual - прочти руководство, прежде чем доставать нас ©Hammer

Последний раз редактировалось Progs; 03.11.2007 в 13:18.
Progs вне форума Ответить с цитированием
Старый 03.11.2007, 14:23   #2
Alex21
With best regards
Участник клуба
 
Регистрация: 20.04.2007
Сообщений: 1,448
По умолчанию

Код:
program Words;
const
word='кино'; {КЛЮЧЕВОЕ СЛОВО}

var str:string;   {исходная фраза}
    w1,w2:string; {слова для обмена}
    p,k,l:byte;
begin
  str:='Можеть быть сходим в кино и посмотрим фильм';
  Writeln(str);
{находим левое слово}
  k:=POS(' '+word,str);
  l:=0;
{пока символ не .. то слово не определено}
 while((str[k-1]<>' ')and(str[k-1]<>'_')and
       (str[k-1]<>',')and(str[k-1]<>'.')and
       (str[k-1]<>';')and(str[k-1]<>':'))do
  begin
    dec(k);
    inc(l);
  end;
  writeln('word=',word);
  w1:=copy(str,k,l);
  writeln('w1=',w1);
{находим правое слово}
  k:=POS(' '+word,str)+length(word)+1;
  l:=0;
  while((str[k+1]<>' ')and(str[k+1]<>'_')and
        (str[k+1]<>',')and(str[k+1]<>'.')and
        (str[k+1]<>';')and(str[k+1]<>':'))do
  begin
    inc(k);
    inc(l);
  end;
{обмен слов}
  w2:=copy(str,POS(word,str)+length(word)+1,l);
  writeln('w2=',w2);
  p:=POS(' '+w2,str)+1;
  delete(str,p,length(w2));
  insert(w1,str,p);

  p:=POS(' '+w1,str)+1;
  delete(str,p,length(w1));
  insert(w2,str,p);
  writeln(str);

  readln;
end.
Производится только замен слов, прочие символы(запятые, точки....) остаюются на своих местах.

Результат: 'Можеть быть сходим и кино в посмотрим фильм'

Последний раз редактировалось Alex21; 03.11.2007 в 14:25.
Alex21 вне форума Ответить с цитированием
Старый 03.11.2007, 14:26   #3
Progs
Пользователь
 
Регистрация: 23.04.2007
Сообщений: 17
По умолчанию

Немного не то..Мне надо заменить два слова между предлогом "и". Я же не могу знать заранее какое предложение введет пользователь.А необходим результат: "Можеть быть сходим в посмотрим и кино фильм?"
Read This F**ckin' Manual - прочти руководство, прежде чем доставать нас ©Hammer

Последний раз редактировалось Progs; 03.11.2007 в 14:29.
Progs вне форума Ответить с цитированием
Старый 03.11.2007, 14:38   #4
still_alive
Great Code Monkey
Форумчанин
 
Аватар для still_alive
 
Регистрация: 09.08.2007
Сообщений: 533
По умолчанию

Ищем подстроку ' и '. Затем находим слова слева и справа и меняем. Кода нет, потому что то Delphi нет.

Цитата:
while((str[k+1]<>' ')and(str[k+1]<>'_')and
(str[k+1]<>',')and(str[k+1]<>'.')and
(str[k+1]<>';')and(str[k+1]<>':'))do
А ведь так компактнее и выполняться быстрее будет, не правда ли?
Цитата:
while (not (str[k+1] in [' ', '_', ',', '.', ';', ':'])) do
still_alive вне форума Ответить с цитированием
Старый 03.11.2007, 15:23   #5
Alex21
With best regards
Участник клуба
 
Регистрация: 20.04.2007
Сообщений: 1,448
По умолчанию

Цитата:
А ведь так компактнее и выполняться быстрее будет, не правда ли?
Правда.
Цитата:
Я же не могу знать заранее какое предложение введет пользователь
Код:
program Extract;

var str,word:string;

function Change(str,word:string):string;
var w1,w2:string; {слова для обмена}
    p,k,l:byte;
begin
{находим левое слово}
  k:=POS(' '+word,str);
  l:=0;
{пока символ не .. то слово не определено}
while (not (str[k-1] in [' ', '_', ',', '.', ';', ':','?','!'])) do
  begin
    dec(k);
    inc(l);
  end;
  w1:=copy(str,k,l);
  writeln('w1=',w1);
{находим правое слово}
  k:=POS(' '+word,str)+length(word)+1;
  l:=0;
while (not (str[k+1] in [' ', '_', ',', '.', ';', ':','?','!'])) do
  begin
    inc(k);
    inc(l);
  end;
{обмен слов}
  w2:=copy(str,POS(word,str)+length(word)+1,l);
  writeln('w2=',w2);
  p:=POS(' '+w2,str)+1;
  delete(str,p,length(w2));
  insert(w1,str,p);

  p:=POS(' '+w1,str)+1;
  delete(str,p,length(w1));
  insert(w2,str,p);
  writeln(str);
 end;

begin
  { TODO -oUser -cConsole Main : Insert code here }
  Write('Input text: '); // ввод фразы
  Readln(str);
  Write('Input Word: '); // ввод слова-обменника
  ReadLn(word);
  Writeln(Change(str,word));

  readln;
end.
Alex21 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задачи на решение Pascal abc Tecka Фриланс 9 18.12.2012 22:20
Решение задачи на c++ JOFRIF Помощь студентам 2 21.04.2008 00:35
Решение задачи за WMZ (PASCAL). 4meen Фриланс 5 08.12.2007 14:58
Решение задачи на Pascal Progs Помощь студентам 2 22.10.2007 13:22