![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
![]() Здравствуйте !!!
Подскажите как сделать, чтобы цикл, при определенном условии, начинался сначала ? Код:
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
|
|||
|
|||
![]() Цикл for лучше не использовать в этом случае. Примерно можно так:
Код:
I := 1; While I < 99999 Do Begin // Do somthing ... If (condition) then I := 0; Inc(I); End; |
#3
|
||||
|
||||
![]() Спасибо 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
|
||||
|
||||
![]() почитай про алгоритм Евклида :-) он полиномиальный, полиномиальнее некуда. Заодно исчезнет твоё ограничение с '99999'. Также узнаешь что делители числа n не превосходят корня квадратного из n :-)
Нет повести печальнее на свете, чем повесть о заклиневшем Resete. ![]() |
#5
|
||||
|
||||
![]() Да и вроде ошибочка там у тебя. I надо двоечку присваивать, всё же числа сколько угодно раз на единицу делятся.
Нет повести печальнее на свете, чем повесть о заклиневшем Resete. ![]() |
#6
|
||||
|
||||
![]() Цитата:
Я и так знал что делители не превышают квдратный корень из n, поэтому и взял именно 5 девяток, потому что в integer max 10 цифр, а корень не превысит 5 цифр !!! У меня просто под рукой не было каькулятора а Window-ский недоступен, я в пуск залесть не могу вирусы плагин удалили !!! Skype: Lotles-XXXX ![]() Последний раз редактировалось Lotles, 01.01.2010 в 15:40. |
#7
|
||||
|
||||
![]() Цитата:
я без понятия про какой плагин ты говоришь. Может только догадываюсь. Возьми на заметку что есть замечательные функции sqrt и trunc - извлечение квадратного корня и взятие целой части от числа. Нет повести печальнее на свете, чем повесть о заклиневшем Resete. ![]() |