Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Вывести на экран слова,содержащие три буквы

Автор: lansel 16.12.2009 21:49

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

Автор: volvo 16.12.2009 21:58

 ! 
Цитата(Правила Раздела)
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
Исправляй, иначе через час тема будет закрыта.


Автор: sheka 16.12.2009 22:01

var s:string;
begin
s:='На заборе тоже три буквы написано: *** .';
writeln('три ***');
end.

lol.gif

Автор: 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

http://forum.pascal.net.ru/index.php?showtopic=6972
Получить длину строки можно функцией length(s);, она возвращает целое значеие, равное длине строки.

Надо будет, думаю, завести отдельный массив для слов.

Добавлено через 15 мин.

const
limits = [#0..#32,'.',',',':',';','!','?','"'];

type
TWords = array[1..40] of string;

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)) 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, зачем такой наворот?
Можно попроще, конечно.

const
limits = [#0..#32,'.',',',':',';','!','?','"'];

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] 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

Дана строка содержащая текст , заканчивающиеся точкой. Вывести на экран слова,содержащие три буквы

Автор: Unconnected 27.12.2009 19:41

Вариант с использованием множества:

const
limits = [#0..#32,'.',',',':',';','!','?','"'];

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] 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) *
Дана строка содержащая текст , заканчивающиеся точкой. Вывести на экран слова,содержащие три буквы
blink.gif Я тут не вижу никакой разницы с первоначальным условием..

Я тебе говорю еще раз: приведи пример, на котором программа работает неправильно.

А может, ты имеешь в виду, что в варианте, где разделителями только пробелы, сочетания типа буквы в кавычках тоже считаются словом? Так это ты сам так захотел, братец. Тебя спросили - ты ответил, что можно считать, что только пробел разделитель. А если кавычки не разделители - то они БУКВЫ. Третьего не дано!
Я прав? в этом дело?

Автор: 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, где ты раньше был? Единственный человек, давший себе труд посмотреть приведенный автором темы код.. smile.gif
Да, похоже, ты прав. Получай свою долю в дележе: +1 smile.gif

Автор: 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