Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Напечатать слова текста, удовлетворяющие условиям

Автор: *alt 3.05.2007 16:41

Задача на множества.
Пусть дан текст, заканчивающийся точкой. Текст состоит из слов, разделённых пробелами. Слово - последовательность латинских букв. Напечатайте слова текста, имеющие нечетный номер, в которых нет ни одной повторяющейся буквы.


Алгоритм Решения (доделайте, если можно представьте исходник)

Код

const n_max=1000; {макс длина текста}
        eot='.';
type litters = set of 'a'..'z'; {тип множества лат букв}
var txt:array [1..n_max] of char; {текст}
      {вспомагательные переменные не пишу, т.к. нет решения}

Пусть я ввёл текст
Код

{ввод текста}
procedure read_text;
var i:integer;
begin
   i:=0;
   repeat
      repeat
         i:=i+1;
         read(txt[i]);
      until eoln or (i=n_max) or (txt[i]=eot);
      readln;
   until (i=n_max) or (txt[i]=eot);
   if txt[i]=eot then n:=i-1
   else n:=i;
end;  


Потом как поступать (если можно пример)?
Я понимаю так:
Идём по тексту, если пробел и i нечёт и нет ни одной повторяющейся буквы (как написать функцию?), то заносим слово в множество.
Печатаем.

Помогите люди добрые. Если есть (или напишите) исходник, то выложите пожалуйста. yes2.gif

Автор: volvo 3.05.2007 17:29

Во-первых, "дан текст"... Как он тебе задан? Файл? Строка?

Во-вторых,

Цитата
заносим слово в множество.
- каким, собственно, образом? Во множество ты можешь занести символ, но никак не слово...

Автор: *alt 3.05.2007 18:19

Цитата(volvo @ 3.05.2007 13:29) *

Во-первых, "дан текст"... Как он тебе задан? Файл? Строка?


Текст мы вводим сами - ручками.

Тогда как? Если условие true, то печатаем слово, так?
Как напечтать то слово, которое нам нужно?

Автор: volvo 3.05.2007 19:21

var
s: string;
my_set: set of char;
ok: boolean;
i, start: integer;

begin
s := 'begin end start finish 121213 1234567.'; { <--- Вводи ручками, для отладки - задано здесь }
start := i; my_set := []; ok := true;
for i := 1 to length(s) do begin
if s[i] in [' ', '.'] then begin

if ok then writeln(copy(s, start, i - start));
my_set := []; ok := true;
start := i + 1;

end
else begin
ok := ok and (not (s[i] in my_set));
include(my_set, s[i]);
end;

end;

end.


Автор: Гость 5.05.2007 23:10

Ручками, то бишь по процедуре read_txt (см. первое сообщение)