fouettearoma
?>

Напишите, , функцию, которая удаляет из переданной ей символьной строки все лишние пробелы, заменяя все повторяющиеся пробелы на один пробел.

Информатика

Ответы

abuley
 function dele (s : string) : string; 
var    l,i : integer; 
begin   
l := Length (s);   
i := l;   
while i>0  do     
begin     
if (s[i] = ' ') and (i<l) then       
if s[i+1] = ' ' then       
begin         
delete (s,i,1);         
i := i -1;       
end;     
i := i -1;     
end;   
Result := s; 
end;   

var   
a : string; 
begin 
readln (a); 
writeln (dele(a)); 
end.
school24mir23
Из-за дурацкого сбоя этого сервиса при сохранении ответа пропал получасовой набор формул в модераторов удалить этот ответ.

P.S. Набираешь ответ - как по минному полю идешь. При нажатии "сохранить" неизвестно что произойти может. Например, при случайном нажатии "сохранить ответ" (каждый может ошибиться) нет анализа, того, что в поле набора данных не пусто и весь этот набор формул мгновенно "улетает в никуда".
Я уж не говорю о постоянных "Вы были отключены от сервера".

И еще. Поскольку автор вопроса не виноват, даю два "голых" (без формул) решения.

1. Рекурсивная программа (как не надо решать подобные задачи)

{ рекурcивная программа }
function prod(a,b:integer):real;
var
  i:integer;
  p:real;
begin
  p:=1;
  for i:=a to b do p:=p*i;
  prod:=p
end;

function pow2(n:integer):integer;
var
  i,p:integer;
begin
  p:=1;
  for i:=1 to n do p:=p*2;
  pow2:=p
end;

function an(n:integer):real;
begin
  if n=1 then an:=0.5
  else an:=an(n-1)*n/prod(pow2(n-1)+1,pow2(n))
end;

var
  s:real;
  i,n:integer;
begin
  Write('n='); Read(n);
  s:=0;
  for i:=1 to n do s:=s+an(i);
  Writeln(s)
end.

Пример:
n=4
0.58348214285829

2. А вот рекуррентная, которую можно написать, если немного подумать.

{ рекуррентная программа }
var
  a,p,s:real;
  i,j,n,lo,hi:integer;
begin
  Write('n='); Read(n);
  a:=0.5; s:=a; lo:=1; hi:=2;
  for i:=2 to n do begin
    p:=1; lo:=hi+1; hi:=hi*2;
    for j:=lo to hi do p:=p*j;
    a:=a*i/p;
    s:=s+a
    end;
  Writeln(s)
end.

Пример
n=4
0.58348214285829
maruska90
begin
  var n:=readInteger('Число элементов массива-');
  var a:=ArrRandom(n,-50,50); a.Println;
  for var i:=1 to n-2 do a[i]:=2*(i+1);
  a.Println
end.

Пример
Число элементов массива- 10
-40 4 -49 0 -47 41 49 33 -31 -1
-40 4 6 8 10 12 14 16 18 -1

begin
  var n:=readInteger('Число элементов массива-');
  var a:=ArrRandom(n,-50,50); a.Println;
  var i1:=a.IndexMax;
  var i2:=a.IndexMin;
  Writeln(a[min(i1,i2)+1:max(i1,i2)].Where(x->x<0).Sum)
end.

Пример
Число элементов массива- 18
-45 -30 -49 -44 34 -5 -12 -28 22 14 -39 -20 -46 50 6 21 20 -47
-194

begin
  var a:=ReadlnString('Введите строку;').ToCharArray;
  // было сделано так только ради получения массива символов,
  // который на самом деле только мешает
  Writeln(a);
  if Pos('...',a.JoinIntoString)>0 then
    Writeln('Троеточие в массиве есть')
  else Writeln('Троеточия в массиве нет')
end.

Пример
Введите строку; 6ye$% DFDRT..drrtert...DFDGD
[6,y,e,$,%, ,D,F,D,R,T,.,.,d,r,r,t,e,r,t,.,.,.,D,F,D,G,D]
Троеточие в массиве есть

Ответить на вопрос

Поделитесь своими знаниями, ответьте на вопрос:

Напишите, , функцию, которая удаляет из переданной ей символьной строки все лишние пробелы, заменяя все повторяющиеся пробелы на один пробел.
Ваше имя (никнейм)*
Email*
Комментарий*

Популярные вопросы в разделе

rusart3
Larya
tat72220525
НосовЖелиховская
tatyanaryzhkova
viz-art-pnz1664
khar4550
makeeva-nataliya60
Janaz842060
AnnaChulyukanova3
andreevaanastsiyao82
dimiff5
anna-leonova
anastasiaevent4
lelikrom2202