Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 29.11.2010, 16:47
shokoladka shokoladka вне форума
Прохожий
 
Регистрация: 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.
Ответить с цитированием
  #2  
Старый 29.11.2010, 17:05
Black Raider Black Raider вне форума
Местный
 
Регистрация: 31.05.2010
Адрес: Москва
Сообщения: 466
Версия Delphi: 7
Репутация: 40
По умолчанию

А почему бы введенное число не преобразовать в строку и не смотреть по ней последовательность символов?
__________________
Новый вирус - "БОМЖ"! Он просто роется в Корзине...и спит под ярлычком "Сетевое окружение"
Ответить с цитированием
  #3  
Старый 29.11.2010, 17:08
shokoladka shokoladka вне форума
Прохожий
 
Регистрация: 25.11.2010
Сообщения: 10
Репутация: 10
По умолчанию

В этом и дело, что через строку нельзя
Ответить с цитированием
  #4  
Старый 29.11.2010, 17:34
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,095
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Ну сделай через массив, тем более, что строка это тот же массив.


Код:
uses Math;

var
  I : Integer;
  A : Array Of Byte;
begin
// Разбираем число N на массив
  SetLength(A,0);
  While N > 0 Do
    Begin
      SetLength(A,Length(A) + 1);
      A[High(A)] := N mod 10;
      N := N div 10;
    End;

// Делаем то, что нам надо
...

// Собираем число M из массива
M := 0;
For I := Low(A) To High(A) Do
  M := M + A[i] * Power(10,I);
Ответить с цитированием
  #5  
Старый 29.11.2010, 17:57
shokoladka shokoladka вне форума
Прохожий
 
Регистрация: 25.11.2010
Сообщения: 10
Репутация: 10
По умолчанию

а что нельзя просто как то изменить немного мою прогу чтобы она нули удаляла?
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 19:12.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025