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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 31.12.2009, 18:43
Аватар для Lotles
Lotles Lotles вне форума
Прохожий
 
Регистрация: 05.09.2009
Адрес: г. Новокузнецк
Сообщения: 46
Репутация: -52
По умолчанию Не могу сообразить в цикле

Здравствуйте !!!
Подскажите как сделать, чтобы цикл, при определенном условии, начинался сначала ?

Код:
var
  Form1: TForm1;
  chislo,i,j:integer;
  rez:string;
implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
chislo:=StrToInt(Edit1.Text);
rez:='';
for i:=1 to 99999 do
begin
if chislo mod  i=0 then
begin
rez:=rez+IntToStr(i)+'*';
chislo:=chislo div i;
//Надо сделать чтобы i:=0
end;//для if
end;//для цикла
ShowMessage(rez);
end;

end.
__________________
Skype: Lotles-XXXX

Последний раз редактировалось Lotles, 31.12.2009 в 18:58.
Ответить с цитированием
  #2  
Старый 31.12.2009, 19:22
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,100
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Цикл for лучше не использовать в этом случае. Примерно можно так:
Код:
I := 1;
While I < 99999 Do
  Begin
    // Do somthing ...

    If (condition) then I := 0;
    Inc(I);
  End;
Ответить с цитированием
  #3  
Старый 31.12.2009, 23:06
Аватар для Lotles
Lotles Lotles вне форума
Прохожий
 
Регистрация: 05.09.2009
Адрес: г. Новокузнецк
Сообщения: 46
Репутация: -52
По умолчанию

Спасибо lmikle
Вот что получилось, прога раскладывает числа на составляющие

Код:
var
  Form1: TForm1;
  chislo,i:integer;
  rez,rez1:string;
  i1:integer;
implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
try
chislo:=StrToInt(Edit1.Text);
if Chislo=1 then
begin
ShowMessage(IntToStr(chislo)+' раняется :'+#13#10'1*1');
exit;
end;

rez:=IntToStr(chislo)+' раняется :'+#13#10;
i:=2;
While i<99999 do
begin
if chislo mod i=0 then
begin
rez:=rez+IntToStr(i)+'*';
rez1:='';
chislo:=chislo div i;
i:=1;
end;//для if
inc(i);
end;//для While
delete(rez,Length(rez),1);
ShowMessage(rez+#13#10);
except;
ShowMessage('Чо за дерьмо ты ввел ?');
end;
end;

end.
 
__________________
Skype: Lotles-XXXX

Последний раз редактировалось Lotles, 31.12.2009 в 23:08.
Ответить с цитированием
  #4  
Старый 01.01.2010, 15:23
Аватар для Ferra
Ferra Ferra вне форума
Местный
 
Регистрация: 12.03.2006
Адрес: Минск
Сообщения: 527
Репутация: 1336
По умолчанию

почитай про алгоритм Евклида :-) он полиномиальный, полиномиальнее некуда. Заодно исчезнет твоё ограничение с '99999'. Также узнаешь что делители числа n не превосходят корня квадратного из n :-)
__________________
Нет повести печальнее на свете, чем повесть о заклиневшем Resete.
Ответить с цитированием
  #5  
Старый 01.01.2010, 15:28
Аватар для Ferra
Ferra Ferra вне форума
Местный
 
Регистрация: 12.03.2006
Адрес: Минск
Сообщения: 527
Репутация: 1336
По умолчанию

Да и вроде ошибочка там у тебя. I надо двоечку присваивать, всё же числа сколько угодно раз на единицу делятся.
__________________
Нет повести печальнее на свете, чем повесть о заклиневшем Resete.
Ответить с цитированием
  #6  
Старый 01.01.2010, 15:31
Аватар для Lotles
Lotles Lotles вне форума
Прохожий
 
Регистрация: 05.09.2009
Адрес: г. Новокузнецк
Сообщения: 46
Репутация: -52
По умолчанию

Цитата:
Сообщение от Ferra
почитай про алгоритм Евклида :-) он полиномиальный, полиномиальнее некуда. Заодно исчезнет твоё ограничение с '99999'. Также узнаешь что делители числа n не превосходят корня квадратного из n :-)


Я и так знал что делители не превышают квдратный корень из n, поэтому и взял именно 5 девяток, потому что в integer max 10 цифр, а корень не превысит 5 цифр !!! У меня просто под рукой не было каькулятора а Window-ский недоступен, я в пуск залесть не могу вирусы плагин удалили !!!
__________________
Skype: Lotles-XXXX

Последний раз редактировалось Lotles, 01.01.2010 в 15:40.
Ответить с цитированием
  #7  
Старый 01.01.2010, 16:43
Аватар для Ferra
Ferra Ferra вне форума
Местный
 
Регистрация: 12.03.2006
Адрес: Минск
Сообщения: 527
Репутация: 1336
По умолчанию

Цитата:
Сообщение от Lotles
Я и так знал что делители не превышают квдратный корень из n, поэтому и взял именно 5 девяток, потому что в integer max 10 цифр, а корень не превысит 5 цифр !!! У меня просто под рукой не было каькулятора а Window-ский недоступен, я в пуск залесть не могу вирусы плагин удалили !!!

я без понятия про какой плагин ты говоришь. Может только догадываюсь. Возьми на заметку что есть замечательные функции sqrt и trunc - извлечение квадратного корня и взятие целой части от числа.
__________________
Нет повести печальнее на свете, чем повесть о заклиневшем Resete.
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

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