найти ошибку(удаление элемента из строки.)

За вознаграждение или нахаляву (если повезёт)

Модераторы: Хыиуду, MOTOCoder, Medved, dr.Jekill

Ответить
reprain
Сообщения: 3
Зарегистрирован: 25 дек 2012, 16:21

Даны символы S1, S2,... Известно, что символ S1 отличен
от пробела и что среди S2, S3,... имеется хотя-бы один пробел.
Рассматриваются S1,... SN - символы, предшествующие первому про-
белу (N-заранее известно). Преобразовать последовательность
S1,... SN : удалив из каждой группы цифр, которой не предшес-
твует точка, все начальные нули (кроме последнего, если за ним
идет точка ).

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

1- редакритует всю последовательность. даже то,что идет после 1 нуля...

Код: Выделить всё

var s,s1,s2:string;
i:byte;
begin
clrscr;
repeat
writeln('Введите строку, не начинающуюся пробелом, но содержащую хотя бы 1 пробел.');
readln(s);
if pos(' ',s) in [0,1] then writeln('Строка введена неверно! Повторите ввод.');
until not(pos(' ',s) in [0,1]);
s1:=copy(s,1,pos(' ',s)-1);
s2:='';
i:=1;
while i<=length(s) do
if(s[i]='0')and (s[i+1] <> '.') then i:=i+1
else
begin
s2:=s2+s[i];
i:=i+1;
end;
write(s2);
readln
end.
2- выводит только 2 часть измененой последовательности,а 2(ту ,что после 1 пробела),не выводит

Код: Выделить всё

var n,s,s1,s2,q,g,h,o:string;
i:byte;
begin

repeat
writeln('Ââåäèòå ñòðîêó, íå íà÷èíàþùóþñÿ ïðîáåëîì, íî ñîäåðæàùóþ õîòÿ áû 1 ïðîáåë.');
readln(n);
h:=copy(n,1,pos(' ',n)-()) ;
if pos(' ',n) in [0,1] then writeln('Ñòðîêà ââåäåíà íåâåðíî! Ïîâòîðèòå ââîä.');
until not(pos(' ',n) in [0,1]);
s1:=copy(n,1,pos(' ',n)-1);
s2:='';
i:=1;
q:=s1;
while i<=length(q) do
if(q[i]='0')and (q[i+1] <> '.')
then i:=i+1
else
begin
s2:=s2+q[i];
i:=i+1;
end;
g:=s2;
writeLn('первая часть измененой последовательности: ',g);
writeLn(h)
readln
end.
У кого какие предложения есть?
dr.Jekill
Сообщения: 526
Зарегистрирован: 03 янв 2009, 23:17
Откуда: Voronezh
Контактная информация:

Код: Выделить всё

uses crt;
var
  s: string;
  i: Integer;
begin
  ClrScr;
  Write('s: ');
  ReadLn(s);
  i := 0;
  while s[i] <> ' ' do
  begin
    if s[i] = '0' then
      if ((i = 1) or ((i > 1) and (s[i - 1] <> '.') and not (s[i-1] in ['1'..'9']))) and (s[i + 1] <> '.') then
      begin
        Delete(s, i, 1);
        Dec(i);
      end;
    Inc(i);
  end;
  WriteLn(s);
  ReadKey;
end.
Нет религии выше истины
dr.Jekill
Сообщения: 526
Зарегистрирован: 03 янв 2009, 23:17
Откуда: Voronezh
Контактная информация:

Добавьте проверку вводимой строки
Нет религии выше истины
reprain
Сообщения: 3
Зарегистрирован: 25 дек 2012, 16:21

dr.Jekill писал(а):Добавьте проверку вводимой строки



введенные данные w0000100. whg00.d
вывод w100. whg00.d

перед точкой 1 ноль остаться должен был,а не два. Странно?
dr.Jekill
Сообщения: 526
Зарегистрирован: 03 янв 2009, 23:17
Откуда: Voronezh
Контактная информация:

Почему странно? - нужно же удалить НАЧАЛЬНЫЕ нули
Нет религии выше истины
reprain
Сообщения: 3
Зарегистрирован: 25 дек 2012, 16:21

dr.Jekill писал(а):Почему странно? - нужно же удалить НАЧАЛЬНЫЕ нули


просто мне сегодня говорили(преподователь)что и их тоже надо удалять. Получаеться остаеться до пробела,только 1 нолик(тот,что перед точкой,если она есть конечно)...не подкажете,как переправить программу,чтоб так было*?
dr.Jekill
Сообщения: 526
Зарегистрирован: 03 янв 2009, 23:17
Откуда: Voronezh
Контактная информация:

Сформулируйте конечное задание
Нет религии выше истины
Ответить