помогите пожалуйста,оч плохо соображаю в паскале ....Дана строка содержащая текст , заканчивающиеся точкой. Вывести на экран слова,содержащие три буквы,Напишите программу для ее решения
volvo
16.12.2009 17:58
!
Цитата(Правила Раздела)
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
Исправляй, иначе через час тема будет закрыта.
sheka
16.12.2009 18:01
var s:string;
begin
s:='На заборе тоже три буквы написано: *** .';
writeln('три ***');
end.
lansel
16.12.2009 18:11
sheka,правда?
Добавлено через 13 мин. а если через write ('введите текст');readln (s); а дальше.....что бы только на три буквы?
andriano
16.12.2009 18:52
1. Разделить строку на отдельные слова. 2. Вывести только те, длина которых равна 3. Примечание: можно делать в единственном цикле.
lansel
16.12.2009 19:29
andriano,можешь показать
andriano
16.12.2009 20:33
Могу. Но будет лучше, если ты сам попытаешься хоть что-то сделать.
lansel
16.12.2009 20:44
andriano,ну пожалуйста
lansel
17.12.2009 14:45
напишите кто нибудь,,,,,мне срочно......пожалуйста
Unconnected
17.12.2009 16:11
Разбиение на слова, все способы Получить длину строки можно функцией length(s);, она возвращает целое значеие, равное длине строки.
Надо будет, думаю, завести отдельный массив для слов.
Добавлено через 15 мин.
const
limits = [#0..#32,'.',',',':',';','!','?','"'];
type
TWords = array[1..40] ofstring;
var
s:string;
words:TWords;
i,n:integer;
function GetWords(s:string; var w:TWords):byte;
var i,back,n:byte;
begin
i := 1;
n := 0;
while(i<=length(s)) dobeginwhile(i<=length(s)) and (s[i] in limits) do
inc(i);
if i<=length(s) thenbegin
back := i;
while(i<=length(s)) andnot(s[i] in limits) do
inc(i);
inc(n);
w[n] := copy(s, back, i-back);
end;
end;
GetWords := n;
end;
begin
writeln('Vvedite stroku');
readln(s);
n:=getwords(s,words);
for i:=1to n doif length(words[i])=3then writeln(words[i]);
readln;
end.
Способ разбиения на слова позаимствовал у klem4'а, по ссылке в предыдущем посте.
lansel
17.12.2009 17:47
Unconnected,спасиб
Добавлено через 1 мин. а попроще способа нет?
Unconnected
17.12.2009 21:05
А чем тебе этот сложный? Спрашивай.
andriano
17.12.2009 22:11
Цитата(lansel @ 17.12.2009 17:47)
а попроще способа нет?
Можно обойтись без массива, если выводить слова в процессе разбора.
Lapp
18.12.2009 4:21
Цитата(andriano @ 17.12.2009 22:11)
Можно обойтись без массива, если выводить слова в процессе разбора.
Совершенно согласен. Unconnected, зачем такой наворот? Можно попроще, конечно.
const
limits = [#0..#32,'.',',',':',';','!','?','"'];
var
s,t: string;
i: integer;
beginWrite('Vvedite stroku: ');
ReadLn(s);
t:='';
for i:=1to Length(s)+1doif (i>Length(s))or(s[i] in Limits) thenbeginif Length(t)=3then WriteLn(t);
t:=''endelse t:=t+s[i];
ReadLn
end.
lansel
18.12.2009 15:52
Lapp,огромное спасибо!!)))
lansel
19.12.2009 11:27
а без Limits можно обойтись?
Unconnected
19.12.2009 11:31
Можно, в принципе, если знаешь, что в твоей строке из разделителей будут только пробелы.
lansel
20.12.2009 11:08
Unconnected,прост мы такое еще не проходили....
Lapp
20.12.2009 15:10
Цитата(lansel @ 20.12.2009 11:08)
Unconnected,прост мы такое еще не проходили....
Ты бы лучше на вопрос ответил. Годится использовать ТОЛЬКО пробел в качестве разделителя? Какие символы МЕЖДУ словами могут быть?
var
s,t,s1,s2: string;
i: integer;
begin
clrscr;
write ('vved text');readln(s);
s:=' '+s+' ';
if (s[i]=' ') and (s[i+4]=' ')
вот так например,но ведь надо проверить еще ,возможен факт что между этими тремя символами могут выть предлоги....а не слова,подскажите как это можно сделать
!
Ну сколько можно говорить, что код надо заключать в тэги??
andriano
27.12.2009 13:24
Предлоги - такие же слова, как и другие части речи.
lansel
27.12.2009 13:44
andriano?покажи по задаче
Lapp
27.12.2009 13:51
Цитата(lansel @ 27.12.2009 13:07)
могут выть предлоги....а не слова
Ух ты! Чем это предлоги не слова?? Тебе не только Паскаль, тебе надо еще и русский подучить..
andriano
27.12.2009 13:57
Цитата(lansel @ 27.12.2009 13:44)
andriano?покажи по задаче
Что именно?
lansel
27.12.2009 14:15
как их тоже включить,продолжите программу
Lapp
27.12.2009 14:19
Цитата(lansel @ 27.12.2009 14:15)
как их тоже включить,продолжите программу
Кого включить?? выразись точнее, пожалуйста.
lansel
27.12.2009 14:29
ну программу дописать:)))
Добавлено через 4 мин. может же быть такой случай например".....' 'а' 'у' ' нас во дворе....."и программа ее выведет,вот надо исключить
Unconnected
27.12.2009 15:03
Цитата
ну программу дописать:)))
Думаешь, людям неизвестно значение слова "включить (во что-то)"??..
Цитата
может же быть такой случай например".....' 'а' 'у' ' нас во дворе....."и программа ее выведет,вот надо исключить
Кого исключить? Откуда исключить? Зачем? Чем предлоги не слова? В "Угадай мелодию, что хочет lansel" играть будем?
Lapp
27.12.2009 15:09
Цитата(lansel @ 27.12.2009 14:29)
может же быть такой случай например".....' 'а' 'у' ' нас во дворе....."и программа ее выведет,вот надо исключить
Слушай, lansel, ты всех настолько заинтриговал, что, я уверен, люди обедать не сядут, пока не узнают (хорошо мне - уже поужинал)).
Ты выразись яснее! Приведи полный пример. И результат обработки. Как есть (неправильно) и как нужно.
lansel
27.12.2009 15:11
ни кто чтоль ни чего не понимает?свиду все правильно,четко объясняю
Добавлено через 5 мин.
var
s,t,s1,s2: string;
i: integer;
begin
clrscr;
write ('vved text');readln(s);
s:=' '+s+' ';
if (s[i]=' ') and (s[i+4]=' ') thenbegin
s1:=copy (s,s[i],s[i+4]);
s2:=copy (s,s[i+4],s[i]);
if pos(' ',s1)=0and pos(' ',s2)=0
вот что то в ней не хватает,сам не знаю чего
Lapp
27.12.2009 15:17
Цитата(lansel @ 27.12.2009 15:11)
ни кто чтоль ни чего не понимает?свиду все правильно,четко объясняю
За всех говорить не стану, но лично я ничего не понимаю, честно. То ты говоришь, что что-то надо включить, то исключить. Я говорю: приведи полный пример с результатами обработки - как неправильным (как сейчас) и как правильным (как должно быть).
Добавлено через 3 мин. как использовать тэги: - выдели программный код блоком; - кликни в меню CODE над окном ввода; - выбери нужный пункт.
lansel
27.12.2009 15:23
Lapp,ясно
Lapp
27.12.2009 15:23
Цитата(lansel @ 27.12.2009 15:11)
вот что то в ней не хватает,сам не знаю чего
Если ты не знаешь - откуда нам знать? Речь ведь идет не о РЕШЕНИИ, а об УСЛОВИИ. Скажешь, что тебе нужно - тогда будем думать, как исправлять. Понимаешь? Не программу приводи, а условие.
lansel
27.12.2009 15:38
Дана строка содержащая текст , заканчивающиеся точкой. Вывести на экран слова,содержащие три буквы
Unconnected
27.12.2009 15:41
Вариант с использованием множества:
const
limits = [#0..#32,'.',',',':',';','!','?','"'];
var
s,t: string;
i: integer;
beginWrite('Vvedite stroku: ');
ReadLn(s);
t:='';
for i:=1to Length(s)+1doif (i>Length(s))or(s[i] in Limits) thenbeginif Length(t)=3then WriteLn(t);
t:=''endelse t:=t+s[i];
ReadLn
end.
Вариант без использования множества (в качестве разделителя только пробел):
Дана строка содержащая текст , заканчивающиеся точкой. Вывести на экран слова,содержащие три буквы
Я тут не вижу никакой разницы с первоначальным условием..
Я тебе говорю еще раз: приведи пример, на котором программа работает неправильно.
А может, ты имеешь в виду, что в варианте, где разделителями только пробелы, сочетания типа буквы в кавычках тоже считаются словом? Так это ты сам так захотел, братец. Тебя спросили - ты ответил, что можно считать, что только пробел разделитель. А если кавычки не разделители - то они БУКВЫ. Третьего не дано! Я прав? в этом дело?
lansel
27.12.2009 16:06
Lapp,да
Lapp
27.12.2009 16:20
Цитата(lansel @ 27.12.2009 16:06)
Lapp,да
Ну, тогда только первый вариант. Либо подойти с другой стороны и вместо множества раделителей вводить множество букв. Его задавать даже проще (если только латинские).
За + спасибо. Пожалуй, ты тоже заслуживаешь поощрения за долготерпение при объяснении )). +1
Добавлено через 18 мин. Вот тебе вариант с буквами и цифрами (а не с разделителями). Только в нем только латиница. Кириллицу, если надо, добавь сам.
const
letters = ['A'..'Z','a'..'z','0'..'9'];
var
s,t: string;
i: integer;
begin
ReadLn(s);
t:='';
for i:=1to Length(s)+1doif (i>Length(s))ornot (s[i] in Letters) thenbeginif Length(t)=3then WriteLn(t);
t:=''endelse t:=t+s[i]
end.
Archon
28.12.2009 21:00
Я кажется понял =). Он попробовал написать программу сам и условие наличия слова из 3-х букв у него вышло следующее:
if (s[i]=' ') and (s[i+4]=' ')
А в таком условии в предложении вроде "..., а у нас во дворе ..." сочетание "а у" программа посчитает одним словом.
Lapp
28.12.2009 21:30
Цитата(Archon @ 28.12.2009 21:00)
Я кажется понял =). Он попробовал написать программу сам и условие наличия слова из 3-х букв у него вышло следующее:
if (s[i]=' ') and (s[i+4]=' ')
А в таком условии в предложении вроде "..., а у нас во дворе ..." сочетание "а у" программа посчитает одним словом.
Archon, где ты раньше был? Единственный человек, давший себе труд посмотреть приведенный автором темы код.. Да, похоже, ты прав. Получай свою долю в дележе: +1
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.