Помощь - Поиск - Пользователи - Календарь
Полная версия: Обработка символьных данных и строк
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Kiass
Задав с клавиатуры последовательность символов, реализовать обработку ее, как указано в варианте. Исходные данные задать самостоятельно, учитывая специфику конкретного варианта.
Дана последовательность, содержащая от 2 до 50 слов, в каждом из которых от 1 до 8 строчных латинских букв; между соседними словами - не менее одного пробела, за последним словом - точка. Напечатать те слова последовательности, которые отличны от первого слова и удовлетворяют следующему свойству: слово совпадает с конечным отрезком латинского алфавита (z, yz, xyz и т.д.).
Lapp
М
Просьба уважать Правила Форума (п.6)
Заголовок темы отредактирован



Цитата(Kiass @ 25.05.2011 23:17) *
Задав с клавиатуры последовательность символов, реализовать обработку ее, как указано в варианте. Исходные данные задать самостоятельно, учитывая специфику конкретного варианта.
Дана последовательность, содержащая от 2 до 50 слов, в каждом из которых от 1 до 8 строчных латинских букв; между соседними словами - не менее одного пробела, за последним словом - точка. Напечатать те слова последовательности, которые отличны от первого слова и удовлетворяют следующему свойству: слово совпадает с конечным отрезком латинского алфавита (z, yz, xyz и т.д.).

Kiass, ты забыл задать вопрос. С чем у тебя затруднения? показывай, что сделал, и говори, что не получается.
Rian
Цитата(Lapp @ 26.05.2011 0:14) *

С чем у тебя затруднения? показывай, что сделал, и говори, что не получается.

видимо не знает с чего начать)
60% решения

var
st,abc,sub,first:string;
i,x:integer;
begin
first:='';
abc:='abcdefghijklmnoprstvxyz';
st:=' xyz xvn dfghnv klmn rthrt xz xyz abc .';

for i:=1 to length(st) do
if (st[i]<>' ') and (st[i-1]=' ') then begin
for x:=i+1 to length(st) do
if st[x]=' ' then begin
sub:=copy(st,i,x-i);
...

Kiass
Теперь вопрос состоит в последующих 40 % решения rolleyes.gif
Rian
Цитата(Kiass @ 26.05.2011 8:28) *

Теперь вопрос состоит в последующих 40 % решения rolleyes.gif

и какие действия должна делать эта часть?
IUnknown
Что, не можешь определить, совпадает ли найденное слово с конечными символами алфавита?

     if pos(sub, abc) = length(abc) - length(sub) + 1 then // является. Иначе - нет
При условии, что выделил слово в переменную subs правильно, разумеется.


Добавлено через 15 мин.
Кстати, Rian, в латинском алфавите еще и буквы Q, U и W присутствуют, ага. Их всего 26, а не 23 как у тебя...
Rian
sorry my bad english smile.gif
Lapp
Цитата(IUnknown @ 26.05.2011 9:36) *
в латинском алфавите еще и буквы Q, U и W присутствуют, ага. Их всего 26, а не 23 как у тебя...
Хотя, по условию задачи нужны только 8 последних.. но именно в них сидит львиная доля выпавших букавог ))
Kiass
А можно было для тех кто в танке написать задачу от начала до конца, чтоб вбить ее в Делфи, нажать на F8 и бабац, она что то напишет, чтоб потом пойти к преподу и сдать эту оочень хорошую лабу. ммммм?


Так есть вариант что кто нибудь напишет полное решение задачи?
Lapp
Цитата(Kiass @ 26.05.2011 18:40) *
А можно было для тех кто в танке написать задачу от начала до конца
А тем, кто в танке - им ничего не надо. Главное - маршировать в ногу.

Этот форум не для тех, кто в танке. Он для тех, кто не хочет в танк. И кто готов сделать усилие вникнуть и пожертвовать своим драгоценным временем и постараться понять.

Говори, что конкретно неясно.

Добавлено через 5 мин.
Упс, только сейчас заметил, что пол поменялся.. Так что танк тебе не грозит )). Но подход остается прежним - либо ты проявляешь желание чему-то научиться, либо ты вряд ли найдешь поддержку здесь.
Kiass
Спасибо, помогли. Дай бог вам здоровья.
Lapp
Цитата(Kiass @ 27.05.2011 5:14) *
Дай бог вам здоровья.

А тебе - ума ).
Заходи, если будут серьезные виды на обучение (а не на спихивание заданий).
Rian
и смысл идти учица на прогрмиста (ку) если небыло желания даже 2+2 научится складывать?
и буфером обмена пользоваться...
берешь первую часть добавляешь то что volvo дал и энды проставляешь скок нуна...
Kiass
мне ума, а вам вежливости бы не помешало. На программиста никто и не собирался учиться. Без вас разберусь, высокомерные люди.

Добавлено через 2 мин.
Вам лишь бы только всех пообсирать.
Lapp
Цитата(Kiass @ 27.05.2011 15:18) *
мне ума, а вам вежливости бы не помешало. На программиста никто и не собирался учиться. Без вас разберусь, высокомерные люди.

Добавлено через 2 мин.
Вам лишь бы только всех пообсирать.

"мне не помогли, когда я просила все за меня написать - значит, всех обсираете,"- так что ли? smile.gif

Вежливости, говоришь? А ты сказала спасибо за ответы тебе? хоть одно? (сарказм в конце не считается) А ты сказала "пожалуйста", когда спрашивала? хоть раз?

Kiass, дорогая, я с удовольствием тебе первый помогу научиться. Ну, хотя бы притворись, что тебя это интересует, в конце-то концов! Ну как можно приходить и говорить "мне это на фиг не нужно, вы мне напишите, я сдам и пойду"?.. Ну, сама посуди - оно нам надо? А потом еще все удивляются - почему это весь софт такой кривой и глючный? Да потому, что так вот "учатся"..

Ты загляни в другие темы. Тут с великим удовольствием помогают тем, кто хочет научиться. Ну или просто решить и не возвращаться - но сам (с помощью)! От этого тоже есть польза. Тем, кто приходит и говорит "напишите мне", я лично прямым текстом говорю: желаю тебе не сдать.

Попробуй хоть немного разобраться. Я понимаю, что ты не собираешься становиться программером. Но учиться, чтоб спихнуть - неправильно. Не нравится программирование - пойди в деканат и скажи, чтоб тебе заменили этот курс другим.

Последний раз тебе говорю: захочешь написать программу сама (с нашей помощью) и получить удовольствие - приходи, мы обязательно поможем.
Успехов тебе.
Kiass
Верно, прошу прощения. Только покидать Вас я еще не собираюсь lol.gif
Посмотрите "ПОЖАЛУЙСТА" smile.gif

Множество, как я поняла, должно содержать
M:=['z','yz','xyz','wxyz','vwxyz','uvwxyz','tuvwxyz','stuvwxyz'];

Только все равно "фигня" получается, т.е. не работает.

program Project1;

{$APPTYPE CONSOLE}

var

M:Set Of char;
first, st, st2, st3:string;
i:integer;
begin
M:=['s'..'z'];
first:='';
writeln('vvedite stroku');
readln(st);
st:=' ';
for i:=1 to length(st) do
begin
if (st[i] <> ' ') then st2:=st2+st[i];
if st[i] = ' ' then
begin
if st2[i] in ['M'] then
begin
st3:=st3+st2;
st2:=' ';
end
else
begin
st2:='';
end;
if st2[i] in ['M'] then
st3:=st3+st2;
writeln('Slova: ',st3);
readln;

end;
end;
end.
Lapp
Цитата(Kiass @ 28.05.2011 12:04) *
Верно, прошу прощения. Только покидать Вас я еще не собираюсь lol.gif
Ну и хорошо ).

Цитата
Множество, как я поняла, должно содержать
M:=['z','yz','xyz','wxyz','vwxyz','uvwxyz','tuvwxyz','stuvwxyz'];
То есть, это слова, составляющие строку ввода? Тогда их можно задать либо в файле, либо по-простому - строковой константой )). Потому что вводить каждый раз при отладке такой в высшей степени осмысленный текст - зафигачишься..


Цитата
Только все равно "фигня" получается, т.е. не работает.
Ну, ессно.. Ты сразу после ввода стираешь входную строку (закладываешь в нее пробел). Ну, и не только это.. Ты довольно сильно отошла от того, что написал Rian. И вставила что-то про 'M' (что явно к делу не относится, следовательно - содрала кусок с чужой задачи)).

Можно вернуться к варианту Rian'а. Это будет лучше еще и с той т.з., что я сейчас отвалюсь в постель (у меня обнаружилась t=101) и буду тихо себе грипповать.. Но у него там не все чисто.. Rian, с твоим кодом могут быть проблемы при длине строки не 32 символа.. Я бы все же работал с Pos. Типа так
const
l= 8;
abc: string[l]= 'abcdefghijklmnopqrstuvwxyz';
s: string= 'z yz xyz wxyz vwxyz uvwxyz tuvwxyz stuvwxyz';

...

// подготовка строки
while (Length(s)>0) and (s[1]=' ') do Delete(s,1,1); // удаляем лидирующие пробелы
while (Length(s)>0) and (s[Length(s)]=' ') do Delete(s,1,1); // удаляем оконечные пробелы
while Pos(' ',s)>0 do Delete(s,Pos(' ',s),1); // удаляем лишние пробелы из середины
s:= s+' '; // добавляем пробел в конец для единообразия обработки

w1:= Copy(s,1,Pos(' ',s)-1); // копируем первое слово в w1
Delete(s,1,Pos(' ',s); // удаляем первое слово из строки
while Length(s)>0 do begin
w:= Copy(s,1,Pos(' ',s)-1); // копируем следующее слово в w
Delete(s,1,Pos(' ',s); // удаляем это слово из строки
if (w<>w1) and (Pos(w,abc)=Length(abc)-Length(w))+1) then // проверка условия вывода
writeln(w);
end;
....

Как-то так.. Очень извиняюсь за сумбурность. Rian, ты либо поправь свой код, либо используй мой кусок. Если что не так - звиняйте, мозги крутятся со скрипом, раз в 5 медленнее, даром что горячие...
Все, я отвалился..

Kiass, ты спрашивай про все, что неясно.





Добавлено через 3 мин.
да, еще одно: если все слова по 8 символов, то 50 слов с пробелами это 450. Нужно использовать длинные строки. Kiass, ты правда используешь Delphi или это случайно попало (я имею в виду {$APPTYPE CONSOLE})? Ответь, пожалуйста, какой у тебя компилятор на самом деле.
Kiass
Мне нужно на делфи.
и 'z yz xyz wxyz vwxyz uvwxyz tuvwxyz stuvwxyz'; это не строка ввода. Строку по-идеи нужно задавать с клавиатуры, а на эти как бы слова должно оканчиваться вводимое слово, и если в слове есть последовательность из этих букв, то слово выводится на экран, если нет то нет.

P.S. Сначала я задание не поняла, теперь я в нем запуталась.
Rian
Цитата(Kiass @ 28.05.2011 14:49) *

Мне нужно на делфи.



вроде все букафки, еще что-то?

procedure TForm1.Button1Click(Sender: TObject);
var
st,abc,sub,first:string;
i,x:integer;
begin
first:='';
abc:='abcdefghijklmnopqrstuvwxyz';
st:='xyz xvn dfghnv stuvwxyz klmn z rthrt xz yzxyz abc yz.';

st:=' '+st; // готовим строку для обработки smile.gif

for i:=1 to length(st) do
if (st[i]<>' ') and (st[i-1]=' ') then begin
for x:=i+1 to length(st) do
if (st[x]=' ') or (st[x]='.') then begin
sub:=copy(st,i,x-i);

if first='' then first:=sub;

if (pos(sub, abc) = length(abc) - length(sub) + 1) //проверяем на конец абс
and (sub<>first) //не равно первому слову
then memo1.Lines.Add(sub); //выодим

break;
end

end;

end;




Цитата

Можно вернуться к варианту Rian'а. Это будет лучше еще и с той т.з., что я сейчас отвалюсь в постель (у меня обнаружилась t=101) и буду тихо себе грипповать.. Но у него там не все чисто.. Rian, с твоим кодом могут быть проблемы при длине строки не 32 символа.. Я бы все же работал с Pos. Типа так


отрезать кусок строки это можно, но не тяжеловат ли метод?
а какие проблемы с длиной больше 32 символа?

ЗЫ конечно только не "грипповать", а набираться сил!!!)
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.