Помощь - Поиск - Пользователи - Календарь
Полная версия: Строки
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Flo
Программа выводит только длину слова... что необходимо добавить, чтобы выводилось все слово?
препод вот что написала:
если S[i]<>' ', то B:=B+copy(s,i,1)
n=1
если s[i]=' ' то n:=n

я никак не пойму, что она имела в виду..
заранее спасибо!!

var

i,n,max:integer;

s:string;

function wordlen(i:integer):integer;

var

n:integer;

begin

n:=0;

while (s[i]<>’ ‘) and (i<=length(s)) do

begin

i:=i+1; n:=n+1;

end;

wordlen:=n;

end;


begin

write(‘vvedite stroky:’);

readln(s);

i:=1; n:=0; max:=0;

while (i<=length(s)) do

begin

if s[i]<>’ ‘ then

begin

n:=n+1;

if wordlen(i)>max then max:=wordlen(i);

i:=i+wordlen(i);

end

else i:=i+1;

end;

writeln(max);

readln;

end.
Анна
Может я чего не понимаю, но что мешает написать
writeln (s);
volvo
Цитата
что мешает написать
writeln (s);
То, что тогда будет распечатана вся строка, а нужно - только самое длинное слово...

Flo, нужно запоминать позицию, с которой начинается слово, если его длина больше текущей максимальной:
var

i, n, max, start:integer;
s: string;

function wordlen(i:integer):integer;
var
n:integer;

begin
n:=0;
while (s[i]<>' ') and (i<=length(s)) do begin
i:=i+1; n:=n+1;
end;
wordlen:=n;
end;


begin
write('vvedite stroky:'); readln(s);
i:=1; n:=0; max:=0;

while (i<=length(s)) do begin
if s[i]<>' ' then begin
n:=n+1;
if wordlen(i)>max then begin
max:=wordlen(i); start := i;
end;
i:=i+wordlen(i);
end
else i:=i+1;

end;

writeln(max, ' --> ', copy(s, start, max));

readln;

end.
Flo
спасибо, теперь все получается
Flo
а не подскажете алгоритм решения вот какой задачки.. определить какие символы и сколько раз встречаются в тексте? что за чем мне нужно сделать
volvo
Нужно зайти вот сюда и посмотреть:
Задача на обработку текста
Flo
а если мне не нужен массив? как тогда?
volvo
Цитата
определить какие символы и сколько раз встречаются в тексте?
Или используешь массив и делаешь задание просто, или ... Ну, скажем, идешь и начинаешь изобретать свой велосипед...
Flo
должно получится примерно такое?
const
s: string = 'btuukdsfghkkkkkkl';
var
counter: array[char] of byte;
max: byte;
var i: integer;
begin
max := 0;
for i := 1 to length(s) do
begin
inc(counter[s[i]]);
if max < counter[s[i]] then
max := counter[s[i]]
end;
for i := 1 to 255 do
if counter[chr(i)] = max then
write(chr(i), ' ');
writeln(max);
end.
volvo
По ссылке, которую я привел, находится полностью работоспособная программа. Как только в ту программу начинают вноситься изменения - это уже не моя программа, и в правильности/неправильности ее работы разбирайтесь сами...

Тем более, что спрашивалось -
Цитата
определить какие символы и сколько раз встречаются в тексте?
О том, какой символ встречается максимальное число раз не было и речи... Сначала решаем, ЧТО делать, и только потом - КАК...
Flo
Спасибо, только не мог бы ты объяснить мне кое-что.. не совсем понимаю, что происходит здесь:
 for ch := #32 to #255 do
for i := 1 to cnt[ch] do write(ch);
почему начинаем с 32, а не с 1?
и что мне надо добавить, чтобы он мне не просто выводил символы, но еще и их количество?
Flo
Помогите, плиз!!!!
Анна
Попробуй в паскале ввести этот код и запустить:
Var I : Integer;
Begin
For I:=0 To 255 Do Write(Chr(I));
End.

Посмотри какие символы стоят до #32. Сразу всё понятно станет smile.gif.

Чтобы выводило кол-во символов - включи счётчик good.gif

inc(J)
klem4
Ну ты и придумала ... blink.gif volvo же сказал что велосипед изобретать - это плохо ..


var
cnt: array[char] of integer;
s: string;
i: integer;
ch: char;
begin
s := 'sdj;alskjdf;laskjdf;laksjd;lkjf;lsdk;gjlskd;jgskgf';
for i := 1 to length(s) do
inc(cnt[s[i]]);
for ch := #32 to #255 do
if cnt[ch] <> 0 then writeln(ch,' ',cnt[ch]);
end.


а символы с кодами #0..#31 - упрявляющие.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.