Перейти к содержанию
СофтФорум - всё о компьютерах и не только

Задача о строках в Pascal


Рекомендуемые сообщения

Приветствие!

Нужна срочная помощь!

Имеется код программы на Паскаль, которая должна делать следующее:

  1. Запрос предложения из произвольного количества слов.
  2. Вывод информации о номере самого длинного слова в предложении, и количестве символов в нём

Однако, результатом выполнения данного кода является вот что: вывод на экран сообщения с номером самого длинного слова (всегда 2) и длина самого длинного слова (подсчитываются буквы только в первом и втором словах, остальные просто не воспринимает).

Например

Ввод: "Длинное самое слово."

Вывод: "Nomer samogo dlinnogo slova 2, ego dlina 7.

Нужно заставить программу работать правильно и убрать, по возможности, GOTO.

PROGRAM Prim_15b;

LABEL 10;

VAR

t:string; p,n,s,max,k:integer;

BEGIN

WRITE('Vvedite predlogenie ');READLN(t);

s:=0; k:=1;

N:=LENGTH(t); p:=POS(' ',t); max:=p-1;

10: DELETE(t,1,p); n:=LENGTH(t); s:=s+p;

IF s<n Then

BEGIN

P:=POS(' ',t);

If p-1>max THEN max:=p-1;

BEGIN k:=k+1; GOTO 10 END;

END

ELSE WRITE('Nomer samogo dlinnogo slova ',k,',','ego dlina ',max);

readln;

END.

Ссылка на комментарий
Поделиться на другие сайты

К сожалению нет под рукой компилятора паскаля, но все же вот:

PROGRAM Prim_15b;LABEL 10;VARt:string; p,n,s,max,k:integer;BEGINWRITE('Vvedite predlogenie ');READLN(t);k:=0;max:=0;repeat  k:=k+1;  p:=POS(' ',t);  if max<p-1 then max=p-1;  DELETE(t,1,p); until p=0;if max!=0 then WRITE('Nomer samogo dlinnogo slova ',k,',','ego dlina ',max)else writeln('В строке нет слов');readln;END.
Ссылка на комментарий
Поделиться на другие сайты

Спасибо, только твой код определят так: если слово только одно, то выводится информация о нём, если их больше одного, то выводится месага "Нет слов" :)

Ссылка на комментарий
Поделиться на другие сайты

попробуй это, массив всех слов можешь не использовать, сделай одну переменную, кот. хранит адрес самого длинного слова:

{ nsimvola - nomer simvola v neredaktiruemom predlozhenii, }

{ p - posiciya v redaktiruemom predlozhenii t2 }

type

TSlov = record

Adr: word;

Len: word;

end;

var

t, t2: string;

Slova: array [1..1024] of TSlov;

nslova, nmaxslova: word;

maxlen, nsimvola: word;

p: word;

begin

writeln;

writeln('Vvedite predlozhenie:');

readln(t);

if t='' then begin writeln('Dik vi nih..a ne vveli ;('); exit; end;

t2:=t;

nslova:=0;

nsimvola:=1;

maxlen:=0;

nmaxslova:=0;

repeat

p:=pos(' ',t2);

if p>0 then

if p=1 then

begin

NSimvola:=NSimvola+1; {nomer sleduuschego simvola v predlozhenii}

writeln('Naiden probel v nachale predlozheniya');

delete(t2,1,1); {udalyaem probel v nachale predlozheniya}

end

else

begin { = if p>1 then}

inc(nslova);

slova[nslova].adr:=nsimvola;

slova[nslova].len:=p-1;

writeln('Naiden probel posle slova. Nsimvola = ',Nsimvola,' pos = ',p);

if maxlen<p-1 then

begin

maxlen:=p-1;

nmaxslova:=nslova;

end;

nsimvola:=nsimvola+p; {nomer simvola sleduuschego vozmozhnogo slova}

delete(t2,1,p);

end;

until (p=0) and (nsimvola>=length(t));

writeln('Konchilis'' probeli v predlozhenii.');

if (p=0) and (nslova>0) then

if (t2<>'') then

begin { = if p>1 then}

inc(nslova);

slova[nslova].adr:=nsimvola;

slova[nslova].len:=length(t2);

writeln('Poslednee slovo: Nsimvola = ',Nsimvola,' length = ',length(t2));

if maxlen<length(t2) then

begin

maxlen:=length(t2);

nmaxslova:=nslova;

end;

end

else

begin

writeln('Vsego slov ',nslova);

writeln('Nomer samogo dlinnogo slova = ',nmaxslova);

writeln('Ego dlina = ',maxlen);

writeln('Eto slovo "',copy(t,slova[nmaxslova].adr,maxlen),'".');

writeln;

writeln('Press enter.');

readln;

end;

end.

Ссылка на комментарий
Поделиться на другие сайты

мля а вот с пробелами )

{ nsimvola - nomer simvola v neredaktiruemom predlozhenii, }{ p		- posiciya v redaktiruemom predlozhenii t2	  }type TSlov = recordAdr: word;Len: word; end;var t, t2: string; Slova: array [1..1024] of TSlov; nslova, nmaxslova: word; maxlen, nsimvola: word; p: word;begin writeln; writeln('Vvedite predlozhenie:'); readln(t); if t='' then begin writeln('Dik vi nih..a ne vveli;('); exit; end; t2:=t; nslova:=0; nsimvola:=1; maxlen:=0; nmaxslova:=0; repeatp:=pos(' ',t2);if p>0 then  if p=1 then	begin	  NSimvola:=NSimvola+1; {nomer sleduuschego simvola v predlozhenii}	  writeln('Naiden probel v nachale predlozheniya');	  delete(t2,1,1); {udalyaem probel v nachale predlozheniya}	end  else	begin { = if p>1 then}	  inc(nslova);	  slova[nslova].adr:=nsimvola;	  slova[nslova].len:=p-1;	  writeln('Naiden probel posle slova. Nsimvola = ',Nsimvola,' pos = ',p);	  if maxlen<p-1 then		begin		  maxlen:=p-1;		  nmaxslova:=nslova;		end;	  nsimvola:=nsimvola+p; {nomer simvola sleduuschego vozmozhnogo slova}	  delete(t2,1,p);	end; until (p=0) and (nsimvola>=length(t)); writeln('Konchilis'' probeli v predlozhenii.'); if (p=0) and (nslova>0) thenif (t2<>'') then  begin { = if p>1 then}	inc(nslova);	slova[nslova].adr:=nsimvola;	slova[nslova].len:=length(t2);	writeln('Poslednee slovo: Nsimvola = ',Nsimvola,' length = ',length(t2));	if maxlen<length(t2) then	  begin		maxlen:=length(t2);		nmaxslova:=nslova;	  end;  endelse  begin	writeln('Vsego slov ',nslova);	writeln('Nomer samogo dlinnogo slova = ',nmaxslova);	writeln('Ego dlina = ',maxlen);	writeln('Eto slovo "',copy(t,slova[nmaxslova].adr,maxlen),'".');	writeln;	writeln('Press enter.');	readln;  end;end.
Ссылка на комментарий
Поделиться на другие сайты

sensato:

program Prim_15b;var t:string; i,k,m,kt,mt:integer;beginWriteLn('Vvedite predlogenie ');ReadLn(t);k:=0; m:=0; kt:=0; mt:=0; t:=t+' ';for i:=1 to Length(t) doif t[i]>='0' then mt:=mt+1 else if mt<>0 then begin kt:=kt+1;if mt>m then begin m:=mt;k:=kt end; mt:=0 end;WriteLn('Nomer samogo dlinnogo slova ',k,',','ego dlina ',m);readln;end.
Ссылка на комментарий
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...