Люди, помогите. Очень нужна программа на Паскале, которая бы удалила повторы слов в строке, а затем выводила результат.
Например: rabbit wolf wolf Должно получиться “rabbit wolf”. wolf rabbit wolf Должно получиться “wolf rabbit” или “rabbit wolft”. bat bat Должно получиться “bat”. pig pig cat Должно получиться “pig cat”.
В качестве разделителя слов - пробелы. Желательно код с комментариями.
Lapp
9.06.2010 7:18
Цитата(Shmaniche @ 8.06.2010 19:17)
Желательно код с комментариями.
Желательно твои наработки увидеть..
Shmanich
9.06.2010 11:31
Для затравки кидую код. Нашел в сети, но он работал неправильно. Затем заменил всего одну строчку и программа стала выдавать верные значения, кроме одной комбинации. Итак:
program string; uses crt; const dividers=[' ']; var tempS, s: string; a: array[1..128] of string; i, j, max: integer; flag: boolean; begin write('Enter string: '); readln(s); tempS:=''; {vaidelyaem i udalyaem povoti slov iz stroki} i:=1; while i<=length(s) do begin if not (s[i] in dividers) then tempS:=tempS+s[i]; if (s[i] in dividers) or (i=length(s)) then begin flag:=true; if tempS<>'' then begin j:=1; repeat if tempS=a[j] then flag:=false; inc(j) until (tempS=a[j]) or ( j>max ); end; if flag then begin inc(max); a[max]:=tempS; end else begin Delete(s,i-i-length(tempS),length(tempS)); {udalenie} i:=i-length(tempS); end; tempS:=''; end; inc(i); end; writeln('Result:', s); Readkey; end.
Работа программы:
Enter string: cat cat Result: cat
Enter string: cat cat dog Result: cat dog
Enter string: cat dog cat Result: dog cat
Но когда вводишь "dog cat cat" (без кавычек), резльтат остается без изменений . Помогите найти ошибку.
Lapp
9.06.2010 13:49
Цитата(Shmaniche @ 9.06.2010 8:31)
Для затравки кидую код. Нашел в сети, но он работал неправильно. Затем заменил всего одну строчку и программа стала выдавать верные значения, кроме одной комбинации. .. Помогите найти ошибку.
Затравщик ты наш.. намеков не понимают в наше время - не двор Людовика XIV.. Тогда буду пямым текстом: давай СССВВВВООООЙЙЙ ККООООООДДД!! в сети он нашел.. для затравки.. блин.. Тут - на этом форуме - ценится собственная работа. Затравки на фиг не нужны.
Ладно, я сегодня добрый. Получай код. Это тебе "для затравки". Чтоб кончал лоботрясничать и искать в сети невесть что..
const s: string= 'dog cat cat dog dog dog dog cat pig pig pig';
var i,j,k: integer; p,q: string;
begin i:=1; while i<Length(s) do begin while (i<Length(s)) and (s[i]=' ') do Inc(i); j:=i; while (i<Length(s)) and (s[i]<>' ') do Inc(i); q:=Copy(s,j,i-j); repeat p:=Copy(s,i,Length(s)-i+1); k:=Pos(q,p); if k>0 then Delete(s,i+k-1,i-j) until k=0 end; WriteLn(s); ReadLn end.
В следующий раз выкладывай свой код. Хотя бы самое начало. Чтоб было понятно, что ты хоть начал думать, а не по помойкам швыряться.. Я лично прослежу )). Ты усвоил?
Shmanich
9.06.2010 14:19
Lapp Если бы все было так просто, я бы тему не открывал . Этот вопрос три дня мучил . Спасибо за код, дальше сам доработаю
Lapp
9.06.2010 14:46
Цитата(Shmaniche @ 9.06.2010 11:19)
Если бы все было так просто, я бы тему не открывал . Этот вопрос три дня мучил
Тоже неправильно. Чего ждать? Открывай всегда - поболтаем.. Нет проблем, удачи тебе.
Shmanich
10.06.2010 11:54
Lapp Тоже неправильно. Чего ждать? Открывай всегда - поболтаем.. Нет проблем, удачи тебе.
погоди, а если юзер введет не слова-константы а любые слова через пробел? как в таком случае убрать дубли?
хотя если убрать константы, то работает с любыми словами .
Lapp
10.06.2010 12:12
Цитата(Shmaniche @ 10.06.2010 8:54)
погоди, а если юзер введет не слова-константы а любые слова через пробел? как в таком случае убрать дубли?
Нет никакой разницы. Что за "слова-константы"? В данном случае s есть "типизированная константа", которая на деле эвивалентна переменной с начальным значением. Я использовал ее для упрощения отладки, и не более того.
Если хочешь, можно так:
var i,j,k: integer; s,p,q: string;
begin Write('Type in a string: '); ReadLn(s); i:=1; while i<Length(s) do begin while (i<Length(s)) and (s[i]=' ') do Inc(i); j:=i; while (i<Length(s)) and (s[i]<>' ') do Inc(i); q:=Copy(s,j,i-j); repeat p:=Copy(s,i,Length(s)-i+1); k:=Pos(q,p); if k>0 then Delete(s,i+k-1,i-j) until k=0 end; WriteLn(s); ReadLn end.
Shmanich
10.06.2010 12:25
Цитата(Lapp @ 10.06.2010 12:12)
Нет никакой разницы. Что за "слова-константы"? В данном случае s есть "типизированная константа", которая на деле эвивалентна переменной с начальным значением. Я использовал ее для упрощения отладки, и не более того.
Ввел другие слова. Проверил, работает. Но интересно в чем состоит ошибка предыдущей программы?
Lapp
10.06.2010 12:37
Цитата(Shmaniche @ 10.06.2010 9:25)
Но интересно в чем состоит ошибка предыдущей программы?
В генокоде программера. Я не хочу тратить время на копание в хламе. Беглого взгляда достаточно, чтобы сказать, что подход неверный.
вот, например, есть автомобиль Жигули, и он даже ездит, хоть и не всегда. И есть автомобиль Хонда, скажем, который ездит всегда и гораздо лучше. В чем ошибка создателей Жигулей? Во всем, начиная с того, что в школе плохо учились.
Программирование - сложная и неоднозначная штука. Одно и то же можно сделать по-разному и с разной эффективностью. В большинстве случаев, ошибочен сам подход к написанию. Какой смысл тогда разбирать, где у там пропущена мелкая деталь?..
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.