
29.11.2010, 16:47
|
Прохожий
|
|
Регистрация: 25.11.2010
Сообщения: 10
Репутация: 10
|
|
Помогите пожалуйста разобраться
Написала программу. Нужно из числа удалить самую длинную одинаковую последовательность.....Работает, все....Вот только когда ввожу 1000 нули не удаляет.....Где ошибка?
Код:
uses crt;{графический модуль от грязи}
var chislo,chislo2,{Числа, исходное, и сокращенное, исходное не трогаем на всякий случай}
st:longint;{степень}
c,old_c,{Текущее число}
i,{для цикла}
how,h,maxLenght,{}
p,position:integer;
function get_int(chislo:longint;pos:integer):integer;{Функция, которая достает из числа цифру номера pos, считает с правой стороны}
var
c,i:integer;
o:longint;
begin
o := chislo;
i := 0;
c := -1;
while o>0 do begin
inc(i);
if i = pos then begin {перебираем остатки от деления на 10, и как только появиться остаток нужного номера, то достаем его}
c := o mod 10;
o := 0;
end;
o := o div 10;
end;
get_int := c;
end;
begin
clrscr;
write('Write: ');
readln(chislo);
c := 0;
i := 0;
old_c := 0;
h:=0;
maxLenght := 0;
while c>=0 do begin {перебираем все цифры, ищем начало самой длинной последовательности и ее длину}
inc(i);
c := get_int(chislo,i);
if c = old_c then begin
inc(h);
if h>maxLenght then begin {Проверяем на длину}
maxLenght := h;
end;
end else begin
if h=maxLenght then
position := p; {Запоминаем начальную позицию, самой длинной текущей последовательности}
p := i;
h := 1;
end;
old_c := c;
end;
if h=maxLenght then
position := p;
i := 0;
c := 0;
st := 1;
while c>=0 do begin {Перебираем все элементы, как только доходим до номера начала самой длинной последовательности, то перепрыгиваем ее}
inc(i);
c := get_int(chislo,i);
if i = position then begin
i := i+maxLenght;
c := get_int(chislo,i);
end;
if c>=0 then begin
chislo2 := chislo2 + st * c;
st:=st*10;
end;
end;
writeln(chislo2);
readkey;
end.
Admin: Пользуемся тегами!
Последний раз редактировалось Admin, 29.11.2010 в 16:57.
|