Предмет: Информатика,
автор: Аноним
50 баллов. PascalABC
Дан текст, состоящий из слов: между словами произвольное число пробелов, после последнего слова точка.
Напечатать все слова, удалив из них две последние буквы.
Ответы
Автор ответа:
1
var
l,i:integer;
s,w:string;
prt:boolean;
c:char;
begin
{ s:=' Арбуз вагон барабан Goodday dummy. '; }
Write('Введите строку: ');
Readln(s);
l:=Pos('.',s);
s:=Copy(s,1,l-1)+' ';
i:=1;
prt:=False;
w:='';
while i<=l do
begin
c:=s[i];
if c=' ' then
begin
if prt then
begin
if Length(w)>2 then Write(Copy(w,1,Length(w)-2),' ');
w:='';
prt:=not prt
end
end
else
begin
w:=w+s[i];
prt:=True
end;
Inc(i)
end;
Writeln
end.
l,i:integer;
s,w:string;
prt:boolean;
c:char;
begin
{ s:=' Арбуз вагон барабан Goodday dummy. '; }
Write('Введите строку: ');
Readln(s);
l:=Pos('.',s);
s:=Copy(s,1,l-1)+' ';
i:=1;
prt:=False;
w:='';
while i<=l do
begin
c:=s[i];
if c=' ' then
begin
if prt then
begin
if Length(w)>2 then Write(Copy(w,1,Length(w)-2),' ');
w:='';
prt:=not prt
end
end
else
begin
w:=w+s[i];
prt:=True
end;
Inc(i)
end;
Writeln
end.
Аноним:
Код не работает на ввод. При вводе строки с клавиатуры программа не выводит результат.
Я уже эту задачу сам решил.
Решения на "отлюбись" мне не интересны.
И остальные я уже почти все решил)
Автор ответа:
1
var s1,s2:string;
i:integer;
begin
writeln('Введите строку:');
readln(s1);
while pos(' ',s1)>0 do delete(s1,pos(' ',s1),1);
s1[length(s1)]:=' ';
s2:='';
for i:=1 to length(s1)-2 do
if (s1[i+2]<>' ')and(s1[i+1]<>' ')
then s2:=s2+s1[i];
writeln(s2);
end.
Пример:
Введите строку:
все слова удалив две последние буквы.
в сло удал д последн бук
i:integer;
begin
writeln('Введите строку:');
readln(s1);
while pos(' ',s1)>0 do delete(s1,pos(' ',s1),1);
s1[length(s1)]:=' ';
s2:='';
for i:=1 to length(s1)-2 do
if (s1[i+2]<>' ')and(s1[i+1]<>' ')
then s2:=s2+s1[i];
writeln(s2);
end.
Пример:
Введите строку:
все слова удалив две последние буквы.
в сло удал д последн бук
Тоже неточность в коде. Но в остальных задач всё написал правильно. Можешь тупо поменять код на тот, что ниже в комментариях и отмечу как лучший ответ.
var str,sl,sn: string;
i: integer;
begin
write('Введите текст:');
readln(str); str:=str+' '; sl:=''; sn:='';
for i:=1 to length(str) do
if str[i]<>' ' then sl:=sl+str[i] else
if length(sl)>0 then
begin
if length(sl)>2 then begin delete(sl,(length(sl)-1),2); end;
sn:=sn+' '+sl;
sl:='';
end;
write('Конечный текст: ',sn);
end.
i: integer;
begin
write('Введите текст:');
readln(str); str:=str+' '; sl:=''; sn:='';
for i:=1 to length(str) do
if str[i]<>' ' then sl:=sl+str[i] else
if length(sl)>0 then
begin
if length(sl)>2 then begin delete(sl,(length(sl)-1),2); end;
sn:=sn+' '+sl;
sl:='';
end;
write('Конечный текст: ',sn);
end.
Код жуткий и малочитабельный
вообще такие задачи регекспами решаются
Похожие вопросы
Предмет: Математика,
автор: naumovasofa664
Предмет: Музыка,
автор: auda042010
Предмет: Математика,
автор: margobry53
Предмет: Математика,
автор: gylka04
Предмет: Литература,
автор: svetik135