Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Языки программирования > Prolog
Перезагрузить страницу Задачка на строки
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
Nastia Nastia вне форума
Новичок
 
Сообщений: 8
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 19.05.2006
По умолчанию Задачка на строки - 22.05.2006, 01:58

Задача простенькая:
Введенную с клавиатуры строку вывести на экран наоборот.
Вроде как должно все работать (точнее работает), но результат не выводится. В чем ошибка?

Код:
domains
  str=string
predicates
  reverse(str,str)
  result
clauses
  reverse("","").
  reverse(S,S1):-
          frontstr(1,S,S2,Str1),
          concat(S2,S1,ResStr),
          write(ResStr),nl,
          reverse(Str1,ResStr).
  result:-write("Enter string:"),nl,
          readln(S),
          S1="",
          reverse(S,S1),
          write("New string: ",S1),nl,
          write("   All done!").
goal
  clearwindow,
  result.
Ответить с цитированием
  (#2 (permalink)) Старый
Alison Alison вне форума
Member
 
Сообщений: 4,781
Сказал(а) спасибо: 0
Поблагодарили 119 раз(а) в 116 сообщениях
Регистрация: 17.11.2004
По умолчанию 22.05.2006, 12:28

Цитата:
В чем ошибка?
Nastia, попробуйте написать комментарий к каждой строчке Вашей программы, и мы с Вами разберемся, в чем ошибка.
Ответить с цитированием
  (#3 (permalink)) Старый
Elenka79 Elenka79 вне форума
Member
 
Сообщений: 115
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 06.03.2006
По умолчанию Re: Задачка на строки - 22.05.2006, 22:32

Цитата:
Originally posted by Nastia
[b]Задача простенькая:
Введенную с клавиатуры строку вывести на экран наоборот.
Вроде как должно все работать (точнее работает), но результат не выводится. В чем ошибка?

Код:
          S1="",
          reverse(S,S1),
Получается, что предикат reverse в Вашем случае, не реверсирует список, а сранивает реверсивный список с пустым списком, так как обе переменные определены: S-строка, а S1="" и результат соответственно NO.
Поэтому скорее всего нужно использовать трехаргументный предикат, а не двух.
И зачем Вам промежуточный вывод я тож не поняла.
Вот так вроде работает:
Код:
domains 
  str=string 
predicates 
 reverse(str,str,str) 
  result 
clauses 
  reverse("",S,S):-!. 
  reverse(S,S1,S3):- 
          frontstr(1,S,S2,Str1),concat(S2,S1,S11), 
          
          reverse(Str1,S11,S3) . 
  result:-write("Enter string:"),nl, 
          readln(S), 
        S1="",
          reverse(S,S1,S2), 
          write("New string: ",S2),nl, 
          write("   All done!"). 
goal 
  clearwindow, 
  result.
Ответить с цитированием
  (#4 (permalink)) Старый
Alison Alison вне форума
Member
 
Сообщений: 4,781
Сказал(а) спасибо: 0
Поблагодарили 119 раз(а) в 116 сообщениях
Регистрация: 17.11.2004
По умолчанию 22.05.2006, 22:44

Цитата:
Получается, что предикат reverse в Вашем случае, не реверсирует список, а сранивает реверсивный список с пустым списком, так как обе переменные определены: S-строка, а S1="" и результат соответственно NO.
Точно. Это одна из основных проблем.
Цитата:
И зачем Вам промежуточный вывод я тож не поняла.
Прмежуточный вывод показывает, что правильный результат все-таки находится, правда, последним. Nastia, видимо, это и заметила, и написала, что вроде как работает.
В предикате reverse просто "перепутаны" некоторые подцели и аргументы в некоторых предикатах. Если их поставить на место, то все будет работать.
Код:
omains
str=string
predicates
reverse(str,str)
result
clauses
reverse("",""):- !.
reverse(S,S1):-
    frontstr(1,S,S2,Str1),
    reverse(Str1,ResStr),
    concat(ResStr,S2,S1).

result:- write("Enter string:"),nl,
    readln(S),
    reverse(S,S1),
    write("New string: ",S1),nl,
    write(" All done!").
goal
clearwindow,
result.
Ответить с цитированием
  (#5 (permalink)) Старый
Nastia Nastia вне форума
Новичок
 
Сообщений: 8
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 19.05.2006
По умолчанию 24.05.2006, 02:27

Да, так все работает. Спасибо.
PS. И как я сама не додумалась?
Ответить с цитированием
Ads.
Ads
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Соединение строки и строки? FIREDOG С/С++ 7 16.11.2011 20:46
Задачка User++ Prolog 11 22.03.2011 21:02
задачка Tina Prolog 2 06.04.2010 09:50
Добавить в конец первой строки, последние n2-n1 слов второй строки gika111 Вопросы начинающих программистов 1 20.01.2010 16:41
Строки. Добавление части строки внутрь другой frikorsar Prolog 2 21.01.2009 19:58
Задачка про строки Ar][Devil Prolog 8 12.12.2007 18:13
задачка на строки {qwerty} Prolog 4 03.12.2007 00:14
задачка на С++ Katrinka Задания за деньги 1 17.05.2006 12:45
задачка про строки Светочка-красавица Prolog 1 22.12.2005 01:23
Задачка... :) Кошмар Офтопик 48 16.06.2005 22:32
Задачка про чай MiHanick Prolog 1 12.12.2004 12:23
Имеются две строки CString, можно ли реализовать поиск части первой строки во второй Anonymous Visual C++ 4 23.05.2003 16:34



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов