sensato Posted March 17, 2007 Report Share Posted March 17, 2007 Приветствие! Нужна срочная помощь! Имеется код программы на Паскаль, которая должна делать следующее: Запрос предложения из произвольного количества слов. Вывод информации о номере самого длинного слова в предложении, и количестве символов в нём Однако, результатом выполнения данного кода является вот что: вывод на экран сообщения с номером самого длинного слова (всегда 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. Link to comment Share on other sites More sharing options...
Maikl Korleone Posted March 17, 2007 Report Share Posted March 17, 2007 К сожалению нет под рукой компилятора паскаля, но все же вот: 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. Link to comment Share on other sites More sharing options...
sensato Posted March 18, 2007 Author Report Share Posted March 18, 2007 Спасибо, только твой код определят так: если слово только одно, то выводится информация о нём, если их больше одного, то выводится месага "Нет слов" :) Link to comment Share on other sites More sharing options...
MyName Posted March 18, 2007 Report Share Posted March 18, 2007 попробуй это, массив всех слов можешь не использовать, сделай одну переменную, кот. хранит адрес самого длинного слова: { 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. Link to comment Share on other sites More sharing options...
MyName Posted March 18, 2007 Report Share Posted March 18, 2007 мля а вот с пробелами ) { 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. Link to comment Share on other sites More sharing options...
Тролль Posted March 18, 2007 Report Share Posted March 18, 2007 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. Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now