помогите пожалуйста,оч плохо соображаю в паскале ....Дана строка содержащая текст , заканчивающиеся точкой. Вывести на экран слова,содержащие три буквы,Напишите программу для ее решения
volvo
16.12.2009 21:58
!
Цитата(Правила Раздела)
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
Исправляй, иначе через час тема будет закрыта.
sheka
16.12.2009 22:01
var s:string; begin s:='На заборе тоже три буквы написано: *** .'; writeln('три ***'); end.
lansel
16.12.2009 22:11
sheka,правда?
Добавлено через 13 мин. а если через write ('введите текст');readln (s); а дальше.....что бы только на три буквы?
andriano
16.12.2009 22:52
1. Разделить строку на отдельные слова. 2. Вывести только те, длина которых равна 3. Примечание: можно делать в единственном цикле.
lansel
16.12.2009 23:29
andriano,можешь показать
andriano
17.12.2009 0:33
Могу. Но будет лучше, если ты сам попытаешься хоть что-то сделать.
lansel
17.12.2009 0:44
andriano,ну пожалуйста
lansel
17.12.2009 18:45
напишите кто нибудь,,,,,мне срочно......пожалуйста
Unconnected
17.12.2009 20:11
Разбиение на слова, все способы Получить длину строки можно функцией length(s);, она возвращает целое значеие, равное длине строки.
Надо будет, думаю, завести отдельный массив для слов.
function GetWords(s:string; var w:TWords):byte; var i,back,n:byte; begin i := 1; n := 0; while(i<=length(s)) do begin while(i<=length(s)) and (s[i] in limits) do inc(i); if i<=length(s) then begin back := i; while(i<=length(s)) and not(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:=1 to n do if length(words[i])=3 then writeln(words[i]); readln; end.
Способ разбиения на слова позаимствовал у klem4'а, по ссылке в предыдущем посте.
lansel
17.12.2009 21:47
Unconnected,спасиб
Добавлено через 1 мин. а попроще способа нет?
Unconnected
18.12.2009 1:05
А чем тебе этот сложный? Спрашивай.
andriano
18.12.2009 2:11
Цитата(lansel @ 17.12.2009 17:47)
а попроще способа нет?
Можно обойтись без массива, если выводить слова в процессе разбора.
Lapp
18.12.2009 8:21
Цитата(andriano @ 17.12.2009 22:11)
Можно обойтись без массива, если выводить слова в процессе разбора.
Совершенно согласен. Unconnected, зачем такой наворот? Можно попроще, конечно.
begin Write('Vvedite stroku: '); ReadLn(s); t:=''; for i:=1 to Length(s)+1 do if (i>Length(s))or(s[i] in Limits) then begin if Length(t)=3 then WriteLn(t); t:='' end else t:=t+s[i]; ReadLn end.
lansel
18.12.2009 19:52
Lapp,огромное спасибо!!)))
lansel
19.12.2009 15:27
а без Limits можно обойтись?
Unconnected
19.12.2009 15:31
Можно, в принципе, если знаешь, что в твоей строке из разделителей будут только пробелы.
lansel
20.12.2009 15:08
Unconnected,прост мы такое еще не проходили....
Lapp
20.12.2009 19:10
Цитата(lansel @ 20.12.2009 11:08)
Unconnected,прост мы такое еще не проходили....
Ты бы лучше на вопрос ответил. Годится использовать ТОЛЬКО пробел в качестве разделителя? Какие символы МЕЖДУ словами могут быть?
lansel
21.12.2009 23:15
давай с пробелом
Unconnected
22.12.2009 0:52
Программа изменится совсем незначительно:
var s,t: string; i: integer;
begin Write('Vvedite stroku: '); ReadLn(s); t:=''; for i:=1 to Length(s)+1 do if (i>Length(s))or(s[i]=' ') then begin if Length(t)=3 then WriteLn(t); t:='' end else t:=t+s[i]; ReadLn end.
lansel
23.12.2009 20:43
Unconnected,спасибо
lansel
27.12.2009 17:07
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 17:24
Предлоги - такие же слова, как и другие части речи.
lansel
27.12.2009 17:44
andriano?покажи по задаче
Lapp
27.12.2009 17:51
Цитата(lansel @ 27.12.2009 13:07)
могут выть предлоги....а не слова
Ух ты! Чем это предлоги не слова?? Тебе не только Паскаль, тебе надо еще и русский подучить..
andriano
27.12.2009 17:57
Цитата(lansel @ 27.12.2009 13:44)
andriano?покажи по задаче
Что именно?
lansel
27.12.2009 18:15
как их тоже включить,продолжите программу
Lapp
27.12.2009 18:19
Цитата(lansel @ 27.12.2009 14:15)
как их тоже включить,продолжите программу
Кого включить?? выразись точнее, пожалуйста.
lansel
27.12.2009 18:29
ну программу дописать:)))
Добавлено через 4 мин. может же быть такой случай например".....' 'а' 'у' ' нас во дворе....."и программа ее выведет,вот надо исключить
Unconnected
27.12.2009 19:03
Цитата
ну программу дописать:)))
Думаешь, людям неизвестно значение слова "включить (во что-то)"??..
Цитата
может же быть такой случай например".....' 'а' 'у' ' нас во дворе....."и программа ее выведет,вот надо исключить
Кого исключить? Откуда исключить? Зачем? Чем предлоги не слова? В "Угадай мелодию, что хочет lansel" играть будем?
Lapp
27.12.2009 19:09
Цитата(lansel @ 27.12.2009 14:29)
может же быть такой случай например".....' 'а' 'у' ' нас во дворе....."и программа ее выведет,вот надо исключить
Слушай, lansel, ты всех настолько заинтриговал, что, я уверен, люди обедать не сядут, пока не узнают (хорошо мне - уже поужинал)).
Ты выразись яснее! Приведи полный пример. И результат обработки. Как есть (неправильно) и как нужно.
lansel
27.12.2009 19: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]=' ') then begin s1:=copy (s,s[i],s[i+4]); s2:=copy (s,s[i+4],s[i]); if pos(' ',s1)=0 and pos(' ',s2)=0
вот что то в ней не хватает,сам не знаю чего
Lapp
27.12.2009 19:17
Цитата(lansel @ 27.12.2009 15:11)
ни кто чтоль ни чего не понимает?свиду все правильно,четко объясняю
За всех говорить не стану, но лично я ничего не понимаю, честно. То ты говоришь, что что-то надо включить, то исключить. Я говорю: приведи полный пример с результатами обработки - как неправильным (как сейчас) и как правильным (как должно быть).
Добавлено через 3 мин. как использовать тэги: - выдели программный код блоком; - кликни в меню CODE над окном ввода; - выбери нужный пункт.
lansel
27.12.2009 19:23
Lapp,ясно
Lapp
27.12.2009 19:23
Цитата(lansel @ 27.12.2009 15:11)
вот что то в ней не хватает,сам не знаю чего
Если ты не знаешь - откуда нам знать? Речь ведь идет не о РЕШЕНИИ, а об УСЛОВИИ. Скажешь, что тебе нужно - тогда будем думать, как исправлять. Понимаешь? Не программу приводи, а условие.
lansel
27.12.2009 19:38
Дана строка содержащая текст , заканчивающиеся точкой. Вывести на экран слова,содержащие три буквы
begin Write('Vvedite stroku: '); ReadLn(s); t:=''; for i:=1 to Length(s)+1 do if (i>Length(s))or(s[i] in Limits) then begin if Length(t)=3 then WriteLn(t); t:='' end else t:=t+s[i]; ReadLn end.
Вариант без использования множества (в качестве разделителя только пробел):
var s,t: string; i: integer;
begin Write('Vvedite stroku: '); ReadLn(s); t:=''; for i:=1 to Length(s)+1 do if (i>Length(s))or(s[i]=' ') then begin if Length(t)=3 then WriteLn(t); t:='' end else t:=t+s[i]; ReadLn end.
Lapp
27.12.2009 19:59
Цитата(lansel @ 27.12.2009 15:38)
Дана строка содержащая текст , заканчивающиеся точкой. Вывести на экран слова,содержащие три буквы
Я тут не вижу никакой разницы с первоначальным условием..
Я тебе говорю еще раз: приведи пример, на котором программа работает неправильно.
А может, ты имеешь в виду, что в варианте, где разделителями только пробелы, сочетания типа буквы в кавычках тоже считаются словом? Так это ты сам так захотел, братец. Тебя спросили - ты ответил, что можно считать, что только пробел разделитель. А если кавычки не разделители - то они БУКВЫ. Третьего не дано! Я прав? в этом дело?
lansel
27.12.2009 20:06
Lapp,да
Lapp
27.12.2009 20: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:=1 to Length(s)+1 do if (i>Length(s))or not (s[i] in Letters) then begin if Length(t)=3 then WriteLn(t); t:='' end else t:=t+s[i] end.
Archon
29.12.2009 1:00
Я кажется понял =). Он попробовал написать программу сам и условие наличия слова из 3-х букв у него вышло следующее:
if (s[i]=' ') and (s[i+4]=' ')
А в таком условии в предложении вроде "..., а у нас во дворе ..." сочетание "а у" программа посчитает одним словом.
Lapp
29.12.2009 1:30
Цитата(Archon @ 28.12.2009 21:00)
Я кажется понял =). Он попробовал написать программу сам и условие наличия слова из 3-х букв у него вышло следующее:
if (s[i]=' ') and (s[i+4]=' ')
А в таком условии в предложении вроде "..., а у нас во дворе ..." сочетание "а у" программа посчитает одним словом.
Archon, где ты раньше был? Единственный человек, давший себе труд посмотреть приведенный автором темы код.. Да, похоже, ты прав. Получай свою долю в дележе: +1
furosemide without prescription
22.09.2021 12:00
Tadalafil 20mg Lowest Price
hydroxychloroquine for rheumatoi
24.09.2021 5:18
Ciprodex Discount
does prednisone make you gain we
12.10.2021 0:41
Canadianhealthcaremall
buy zithromax online overnight s
20.12.2021 11:06
Lupin Keflex
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.