Задав с клавиатуры последовательность символов, реализовать обработку ее, как указано в варианте. Исходные данные задать самостоятельно, учитывая специфику конкретного варианта. Дана последовательность, содержащая от 2 до 50 слов, в каждом из которых от 1 до 8 строчных латинских букв; между соседними словами - не менее одного пробела, за последним словом - точка. Напечатать те слова последовательности, которые отличны от первого слова и удовлетворяют следующему свойству: слово совпадает с конечным отрезком латинского алфавита (z, yz, xyz и т.д.).
Lapp
26.05.2011 4:14
М
Просьба уважать Правила Форума (п.6) Заголовок темы отредактирован
Цитата(Kiass @ 25.05.2011 23:17)
Задав с клавиатуры последовательность символов, реализовать обработку ее, как указано в варианте. Исходные данные задать самостоятельно, учитывая специфику конкретного варианта. Дана последовательность, содержащая от 2 до 50 слов, в каждом из которых от 1 до 8 строчных латинских букв; между соседними словами - не менее одного пробела, за последним словом - точка. Напечатать те слова последовательности, которые отличны от первого слова и удовлетворяют следующему свойству: слово совпадает с конечным отрезком латинского алфавита (z, yz, xyz и т.д.).
Kiass, ты забыл задать вопрос. С чем у тебя затруднения? показывай, что сделал, и говори, что не получается.
Rian
26.05.2011 11:27
Цитата(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:=1to length(st) doif (st[i]<>' ') and (st[i-1]=' ') thenbeginfor x:=i+1to length(st) doif st[x]=' 'thenbegin
sub:=copy(st,i,x-i);
...
Kiass
26.05.2011 12:28
Теперь вопрос состоит в последующих 40 % решения
Rian
26.05.2011 12:32
Цитата(Kiass @ 26.05.2011 8:28)
Теперь вопрос состоит в последующих 40 % решения
и какие действия должна делать эта часть?
IUnknown
26.05.2011 12:36
Что, не можешь определить, совпадает ли найденное слово с конечными символами алфавита?
if pos(sub, abc) = length(abc) - length(sub) + 1then// является. Иначе - нет
При условии, что выделил слово в переменную subs правильно, разумеется.
Добавлено через 15 мин. Кстати, Rian, в латинском алфавите еще и буквы Q, U и W присутствуют, ага. Их всего 26, а не 23 как у тебя...
Rian
26.05.2011 12:58
sorry my bad english
Lapp
26.05.2011 16:20
Цитата(IUnknown @ 26.05.2011 9:36)
в латинском алфавите еще и буквы Q, U и W присутствуют, ага. Их всего 26, а не 23 как у тебя...
Хотя, по условию задачи нужны только 8 последних.. но именно в них сидит львиная доля выпавших букавог ))
Kiass
26.05.2011 21:40
А можно было для тех кто в танке написать задачу от начала до конца, чтоб вбить ее в Делфи, нажать на F8 и бабац, она что то напишет, чтоб потом пойти к преподу и сдать эту оочень хорошую лабу. ммммм?
Так есть вариант что кто нибудь напишет полное решение задачи?
Lapp
27.05.2011 4:43
Цитата(Kiass @ 26.05.2011 18:40)
А можно было для тех кто в танке написать задачу от начала до конца
А тем, кто в танке - им ничего не надо. Главное - маршировать в ногу.
Этот форум не для тех, кто в танке. Он для тех, кто не хочет в танк. И кто готов сделать усилие вникнуть и пожертвовать своим драгоценным временем и постараться понять.
Говори, что конкретно неясно.
Добавлено через 5 мин. Упс, только сейчас заметил, что пол поменялся.. Так что танк тебе не грозит )). Но подход остается прежним - либо ты проявляешь желание чему-то научиться, либо ты вряд ли найдешь поддержку здесь.
Kiass
27.05.2011 8:14
Спасибо, помогли. Дай бог вам здоровья.
Lapp
27.05.2011 11:59
Цитата(Kiass @ 27.05.2011 5:14)
Дай бог вам здоровья.
А тебе - ума ). Заходи, если будут серьезные виды на обучение (а не на спихивание заданий).
Rian
27.05.2011 15:00
и смысл идти учица на прогрмиста (ку) если небыло желания даже 2+2 научится складывать? и буфером обмена пользоваться... берешь первую часть добавляешь то что volvo дал и энды проставляешь скок нуна...
Kiass
27.05.2011 18:18
мне ума, а вам вежливости бы не помешало. На программиста никто и не собирался учиться. Без вас разберусь, высокомерные люди.
Добавлено через 2 мин. Вам лишь бы только всех пообсирать.
Lapp
28.05.2011 3:20
Цитата(Kiass @ 27.05.2011 15:18)
мне ума, а вам вежливости бы не помешало. На программиста никто и не собирался учиться. Без вас разберусь, высокомерные люди.
Добавлено через 2 мин. Вам лишь бы только всех пообсирать.
"мне не помогли, когда я просила все за меня написать - значит, всех обсираете,"- так что ли?
Вежливости, говоришь? А ты сказала спасибо за ответы тебе? хоть одно? (сарказм в конце не считается) А ты сказала "пожалуйста", когда спрашивала? хоть раз?
Kiass, дорогая, я с удовольствием тебе первый помогу научиться. Ну, хотя бы притворись, что тебя это интересует, в конце-то концов! Ну как можно приходить и говорить "мне это на фиг не нужно, вы мне напишите, я сдам и пойду"?.. Ну, сама посуди - оно нам надо? А потом еще все удивляются - почему это весь софт такой кривой и глючный? Да потому, что так вот "учатся"..
Ты загляни в другие темы. Тут с великим удовольствием помогают тем, кто хочет научиться. Ну или просто решить и не возвращаться - но сам (с помощью)! От этого тоже есть польза. Тем, кто приходит и говорит "напишите мне", я лично прямым текстом говорю: желаю тебе не сдать.
Попробуй хоть немного разобраться. Я понимаю, что ты не собираешься становиться программером. Но учиться, чтоб спихнуть - неправильно. Не нравится программирование - пойди в деканат и скажи, чтоб тебе заменили этот курс другим.
Последний раз тебе говорю: захочешь написать программу сама (с нашей помощью) и получить удовольствие - приходи, мы обязательно поможем. Успехов тебе.
Kiass
28.05.2011 15:04
Верно, прошу прощения. Только покидать Вас я еще не собираюсь Посмотрите "ПОЖАЛУЙСТА"
Множество, как я поняла, должно содержать M:=['z','yz','xyz','wxyz','vwxyz','uvwxyz','tuvwxyz','stuvwxyz'];
Только все равно "фигня" получается, т.е. не работает.
program Project1;
{$APPTYPE CONSOLE}var
M:SetOf char;
first, st, st2, st3:string;
i:integer;
begin
M:=['s'..'z'];
first:='';
writeln('vvedite stroku');
readln(st);
st:=' ';
for i:=1to length(st) dobeginif (st[i] <> ' ') then st2:=st2+st[i];
if st[i] = ' 'thenbeginif st2[i] in ['M'] thenbegin
st3:=st3+st2;
st2:=' ';
endelsebegin
st2:='';
end;
if st2[i] in ['M'] then
st3:=st3+st2;
writeln('Slova: ',st3);
readln;
end;
end;
end.
Lapp
28.05.2011 17:17
Цитата(Kiass @ 28.05.2011 12:04)
Верно, прошу прощения. Только покидать Вас я еще не собираюсь
Ну и хорошо ).
Цитата
Множество, как я поняла, должно содержать 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)>0do Delete(s,Pos(' ',s),1); // удаляем лишние пробелы из середины
s:= s+' '; // добавляем пробел в конец для единообразия обработки
w1:= Copy(s,1,Pos(' ',s)-1); // копируем первое слово в w1
Delete(s,1,Pos(' ',s); // удаляем первое слово из строки
while Length(s)>0dobegin
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
28.05.2011 18:49
Мне нужно на делфи. и 'z yz xyz wxyz vwxyz uvwxyz tuvwxyz stuvwxyz'; это не строка ввода. Строку по-идеи нужно задавать с клавиатуры, а на эти как бы слова должно оканчиваться вводимое слово, и если в слове есть последовательность из этих букв, то слово выводится на экран, если нет то нет.
P.S. Сначала я задание не поняла, теперь я в нем запуталась.
Rian
31.05.2011 22:52
Цитата(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; // готовим строку для обработки
for i:=1to length(st) doif (st[i]<>' ') and (st[i-1]=' ') thenbeginfor x:=i+1to length(st) doif (st[x]=' ') or (st[x]='.') thenbegin
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;
endend;
end;
Цитата
Можно вернуться к варианту Rian'а. Это будет лучше еще и с той т.з., что я сейчас отвалюсь в постель (у меня обнаружилась t=101) и буду тихо себе грипповать.. Но у него там не все чисто.. Rian, с твоим кодом могут быть проблемы при длине строки не 32 символа.. Я бы все же работал с Pos. Типа так
отрезать кусок строки это можно, но не тяжеловат ли метод? а какие проблемы с длиной больше 32 символа?
ЗЫ конечно только не "грипповать", а набираться сил!!!)
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.