Помощь - Поиск - Пользователи - Календарь
Полная версия: Вывести на экран слова,содержащие три буквы
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
lansel
помогите пожалуйста,оч плохо соображаю в паскале
....Дана строка содержащая текст , заканчивающиеся точкой. Вывести на экран слова,содержащие три буквы,Напишите программу для ее решения
volvo
 ! 
Цитата(Правила Раздела)
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
Исправляй, иначе через час тема будет закрыта.

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

lol.gif
lansel
sheka,правда?

Добавлено через 13 мин.
а если через
write ('введите текст');readln (s);
а дальше.....что бы только на три буквы?
andriano
1. Разделить строку на отдельные слова.
2. Вывести только те, длина которых равна 3.
Примечание: можно делать в единственном цикле.
lansel
andriano,можешь показать
andriano
Могу.
Но будет лучше, если ты сам попытаешься хоть что-то сделать.
lansel
andriano,ну пожалуйста
lansel
напишите кто нибудь,,,,,мне срочно......пожалуйста
Unconnected
Разбиение на слова, все способы
Получить длину строки можно функцией 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
Unconnected,спасиб

Добавлено через 1 мин.
а попроще способа нет?
Unconnected
А чем тебе этот сложный? Спрашивай.
andriano
Цитата(lansel @ 17.12.2009 17:47) *
а попроще способа нет?
Можно обойтись без массива, если выводить слова в процессе разбора.
Lapp
Цитата(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
Lapp,огромное спасибо!!)))
lansel
а без Limits можно обойтись?
Unconnected
Можно, в принципе, если знаешь, что в твоей строке из разделителей будут только пробелы.
lansel
Unconnected,прост мы такое еще не проходили....
Lapp
Цитата(lansel @ 20.12.2009 11:08) *
Unconnected,прост мы такое еще не проходили....
Ты бы лучше на вопрос ответил. Годится использовать ТОЛЬКО пробел в качестве разделителя? Какие символы МЕЖДУ словами могут быть?
lansel
давай с пробелом
Unconnected
Программа изменится совсем незначительно:

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
Unconnected,спасибо
lansel
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
Предлоги - такие же слова, как и другие части речи.
lansel
andriano?покажи по задаче
Lapp
Цитата(lansel @ 27.12.2009 13:07) *
могут выть предлоги....а не слова
Ух ты! Чем это предлоги не слова??
Тебе не только Паскаль, тебе надо еще и русский подучить..
andriano
Цитата(lansel @ 27.12.2009 13:44) *

andriano?покажи по задаче

Что именно?
lansel
как их тоже включить,продолжите программу
Lapp
Цитата(lansel @ 27.12.2009 14:15) *
как их тоже включить,продолжите программу

Кого включить?? выразись точнее, пожалуйста.
lansel
ну программу дописать:)))

Добавлено через 4 мин.
может же быть такой случай например".....' 'а' 'у' ' нас во дворе....."и программа ее выведет,вот надо исключить
Unconnected
Цитата
ну программу дописать:)))


Думаешь, людям неизвестно значение слова "включить (во что-то)"??..

Цитата
может же быть такой случай например".....' 'а' 'у' ' нас во дворе....."и программа ее выведет,вот надо исключить


Кого исключить? Откуда исключить? Зачем? Чем предлоги не слова? В "Угадай мелодию, что хочет lansel" играть будем?
Lapp
Цитата(lansel @ 27.12.2009 14:29) *

может же быть такой случай например".....' 'а' 'у' ' нас во дворе....."и программа ее выведет,вот надо исключить
Слушай, lansel, ты всех настолько заинтриговал, что, я уверен, люди обедать не сядут, пока не узнают (хорошо мне - уже поужинал)).

Ты выразись яснее! Приведи полный пример. И результат обработки. Как есть (неправильно) и как нужно.
lansel
ни кто чтоль ни чего не понимает?свиду все правильно,четко объясняю

Добавлено через 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
Цитата(lansel @ 27.12.2009 15:11) *
ни кто чтоль ни чего не понимает?свиду все правильно,четко объясняю

За всех говорить не стану, но лично я ничего не понимаю, честно.
То ты говоришь, что что-то надо включить, то исключить. Я говорю: приведи полный пример с результатами обработки - как неправильным (как сейчас) и как правильным (как должно быть).


Добавлено через 3 мин.
как использовать тэги:
- выдели программный код блоком;
- кликни в меню CODE над окном ввода;
- выбери нужный пункт.
lansel
Lapp,ясно
Lapp
Цитата(lansel @ 27.12.2009 15:11) *
вот что то в ней не хватает,сам не знаю чего
Если ты не знаешь - откуда нам знать? Речь ведь идет не о РЕШЕНИИ, а об УСЛОВИИ. Скажешь, что тебе нужно - тогда будем думать, как исправлять. Понимаешь? Не программу приводи, а условие.
lansel
Дана строка содержащая текст , заканчивающиеся точкой. Вывести на экран слова,содержащие три буквы
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.



Вариант без использования множества (в качестве разделителя только пробел):

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

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

А может, ты имеешь в виду, что в варианте, где разделителями только пробелы, сочетания типа буквы в кавычках тоже считаются словом? Так это ты сам так захотел, братец. Тебя спросили - ты ответил, что можно считать, что только пробел разделитель. А если кавычки не разделители - то они БУКВЫ. Третьего не дано!
Я прав? в этом дело?
lansel
Lapp,да
Lapp
Цитата(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
Я кажется понял =). Он попробовал написать программу сам и условие наличия слова из 3-х букв у него вышло следующее:
if (s[i]=' ') and (s[i+4]=' ')
А в таком условии в предложении вроде "..., а у нас во дворе ..." сочетание "а у" программа посчитает одним словом.
Lapp
Цитата(Archon @ 28.12.2009 21:00) *
Я кажется понял =). Он попробовал написать программу сам и условие наличия слова из 3-х букв у него вышло следующее:
if (s[i]=' ') and (s[i+4]=' ')
А в таком условии в предложении вроде "..., а у нас во дворе ..." сочетание "а у" программа посчитает одним словом.
Archon, где ты раньше был? Единственный человек, давший себе труд посмотреть приведенный автором темы код.. smile.gif
Да, похоже, ты прав. Получай свою долю в дележе: +1 smile.gif
furosemide without prescription
Tadalafil 20mg Lowest Price
hydroxychloroquine for rheumatoi
Ciprodex Discount
does prednisone make you gain we
Canadianhealthcaremall
buy zithromax online overnight s
Lupin Keflex
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.