HOME ПРИМЕРЫ THANKS НОВИЧКАМ ДОКИ LINKS JavaScript Mail |
|
|
uses crt; var s,s1:string; i:integer; begin clrscr; write('Input string: ');readln(s); while copy (s,1,1)=' ' do delete (s,1,1); while copy (s,length(s),1)=' 'do delete (s,length(s),1); while pos(' ',s)<>0 do delete (s,pos(' ',s),1); s:=s+' '; s1:=''; for i:=1 to length(s) do if copy(s,i,1)<>'a' then s1:=s1+copy(s,i,1); s:=s1; write('Changed string is: ',s); readln; end. |
Комментарии 1. Здесь не надо разбивать текст на слова, посему четыре строки после readln(s) лишние. 2. Выражение copy(s,i,1) можно записывать как s[i]. 3. С учетом этого программа выродится в uses crt; var s,s1:string; i:integer; begin clrscr; write('Input string: ');readln(s); s1:=''; for i:=1 to length(s) do if s[i]<>'a' then s1:=s1+s[i]; write('Changed string is: ',s1); readln; end. 4. С моей точки зрения более эффективным будет код: uses crt; var s,s1:string; i:integer; begin clrscr; write('Input string: ');readln(s); i:=pos('a',s); while (i>0) do begin Delete(s,i,1); i:=pos('a',s); end; write('Changed string is: ',s); readln; end. to top
Автор: strike |
uses crt; var s:string; i,j,k:integer; begin i:=0;j:=0;k:=0; clrscr; write('Input string: ');readln(s); for i:=1 to length(s) do begin if s[i]=')' then j:=j+1; if s[i]='(' then k:=k+1; end; if j>k then write('")" is more in string'); if k>j then write('"(" is more in string'); if j=k then write('Balance is not broken'); readln end. |
Комментарии 1. ОК, ОК. Задача решена верно. Единственное (это не входит в задание, просто как дополнение) было бы здорово, если бы программа еще проверяла правильность следования скобок, исключая варианты вроде "3)-(3". На самом деле сдалать это совсем несложно: ... var balance:integer; ... balance:=0; for i:=1 to length(s) do begin if s[i]=')' then Dec(balance); if s[i]='(' then Inc(balance); if (balance<0) begin writeln('Balance is broken. ) is before (.');halt(1); end; end; if (balance>0) writeln('Balance is broken. ) more than ('); end. to top
Автор: strike |
uses crt; var s,s1,s2:string; i,k:integer; c:char; begin clrscr; write('Input original string: ');readln(s); for i:=1 to length(s)+1 do begin if copy(s,i,1)='a' then begin delete(s,i,1); insert('ku',s,i); end; end; write('Modified string: ',s); readln; end. |
Комментарии 1. Программа является на самом деле частным случаем задачи "Написать прог-му, которая каждый встречающийся в строке заданный символ заменяет на заданную последовательность символов, расширяя при этом строку", которая была рассмотрена выше. 2. Автор прислал исправленный вариант с учетом предыдущих замечаний, и предложил более простой выход из положения в ответ на комментарии 3. и 4., а именно: использовать "обратный" цикл: for i:=length(s) downto 1 do В этом случае указанные замечания снимаются. to top
Автор: strike |
uses crt; var s:string; i,j:integer; begin clrscr; write('Input phrase: ');readln(s); while copy (s,1,1)=' ' do delete (s,1,1); while copy (s,length(s),1)=' 'do delete (s,length(s),1); while pos(' ',s)<>0 do delete (s,pos(' ',s),1); s:=s+' '; for i:=1 to length(s) do if s[i]=' ' then j:=j+1; write('There are ',j,' words in the phrase'); readln end. |
HOME EXAMPLES |
|