помогите решить задачу, или подскажите смысл. дан список слов, максимум слов может быть 60. и в зависимости оттого есть ли в слове сочетание букв ова нужно записать слова в таком порядке например: список который задан
немцова корова оваоова овал
результат
немцова _корова ____оваоова оваоова ____овал
только вместо '_' будет пробел максимальная длина рядка например 170
заранее спасибо
Lapp
5.12.2010 11:48
Цитата(superseal @ 5.12.2010 3:22)
в зависимости оттого есть ли в слове сочетание букв ова нужно записать слова в таком порядке
Правильно я понимаю, что слова, в которых нет этого семпла, нужно опускать? В любом случае, задача не из самых простых. Делать нужно в два прохода, поскольку заранее неизвестен максимальный индент. Так что надо сначала все просмотреть и определить его. А потом на втором проходе уже печатать. Я написал полное решение. Там, правда только английские буквы, русских нет. Работает вот так:
Type in a text: abcdef snabcsnnn abchjhjhhjhjhjhjh mnabcnmabcnmabcnmabcnm asdabc Type in a sample: abc abcdef snabcsnnn abchjhjhhjhjhjhjh mnabcnmabcnmabcnmabcnm mnabcnmabcnmabcnmabcnm mnabcnmabcnmabcnmabcnm mnabcnmabcnmabcnmabcnm asdabc Hit Enter..
Настя, как у тебя с Паскалем дела? Можешь начать это делать? Я не хочу давать тебе полное решение, ведь ты же так ничему не научишься - верно? Могу подкинуть тебе для затравки некоторое начало, в котором есть function for getting next word из заданной строки. Попробуешь продолжить?
const Letters: set of char= ['A'..'Z']+['0'..'9'];
var s: string;
function GetNextWord: string; var w: string; begin while (Length(s)>0) and not (UpCase(s[1]) in Letters) do Delete(s,1,1); w:= ''; while (Length(s)>0) and (UpCase(s[1]) in Letters) do begin w:= w+s[1]; Delete(s,1,1) end; GetNextWord:=w end;
var Text,Sample,w,v: string; p,Max,i: integer;
begin Write('Type in a text: '); ReadLn(Text); Write('Type in a sample: '); ReadLn(Sample); s:= Text; Max:=0; repeat w:=GetNextWord; ...
Все, что непонятно - спрашивай.
М
На будущее: делай нормальный заголовок
superseal
5.12.2010 17:16
спасибо, попробую уже додумать сорри что заголовок такой, просто учусь не в России,на чешском, и для меня проблематично некоторые вещи корректно перевести на русский
Unconnected
5.12.2010 18:25
А можно пояснить, от чего зависит количество пробелов перед словами с нужным сочетанием? Что-то из примера в первом посте не понял..
superseal
5.12.2010 18:34
Цитата(Unconnected @ 5.12.2010 14:25)
А можно пояснить, от чего зависит количество пробелов перед словами с нужным сочетанием? Что-то из примера в первом посте не понял..
в первом слове ова-эт о последние три буквы последущие слова мы записываем так, что бы ова были все время под собой. а пробелы занимают то пространство на которое подвинули слово. я может не оч корректно выражаюсь, но это аля кросворда,который выглядит так _____ова___ _____ова_ ова____ _____ова _____ова___ (ова в один столбик записаны) где за ___ ты вставляешь недостающие буквы,котторые нам известны
klem4
6.12.2010 0:43
Хотелось бы уточнить, в каком виде стоит ожидать ввод слов ? Надо понимать это файл ? В строку Pascal 60 слов поместится не очень длинных)
задача была решина. спасибо за помощь, и за советы, они мне действительно помогли усвоить и понять где делала ошибки в своем решение
Lapp
7.12.2010 6:49
Цитата(superseal @ 7.12.2010 2:19)
задача была решина. спасибо за помощь, и за советы, они мне действительно помогли усвоить и понять где делала ошибки в своем решение
Хорошо. Заходи еще. На всякий случай выкладываю свое решение (только для английских букв).
const Letters: set of char= ['A'..'Z']+['0'..'9'];
var s: string;
function GetNextWord: string; var w: string; begin while (Length(s)>0) and not (UpCase(s[1]) in Letters) do Delete(s,1,1); w:= ''; while (Length(s)>0) and (UpCase(s[1]) in Letters) do begin w:= w+s[1]; Delete(s,1,1) end; GetNextWord:=w end;
var Text,Sample,w,v: string; p,Max,i: integer;
begin Write('Type in a text: '); ReadLn(Text); Write('Type in a sample: '); ReadLn(Sample); s:= Text; Max:=0; repeat w:=GetNextWord; while Pos(Sample,w)>0 do begin p:=Pos(Sample,w); if p>Max then Max:=p; w[p]:=#0 end until w=''; s:=Text; repeat w:=GetNextWord; v:=w; while Pos(Sample,w)>0 do begin p:=Pos(Sample,w); w[p]:=#0; for i:=1 to Max-p do Write(' '); WriteLn(v) end until w=''; WriteLn('Hit Enter..'); ReadLn end.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.