![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | 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.Последний раз редактировалось 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.
Последний раз редактировалось Lotles, 31.12.2009 в 23:08. |
|
#4
|
||||
|
||||
|
почитай про алгоритм Евклида :-) он полиномиальный, полиномиальнее некуда. Заодно исчезнет твоё ограничение с '99999'. Также узнаешь что делители числа n не превосходят корня квадратного из n :-)
|
|
#5
|
||||
|
||||
|
Да и вроде ошибочка там у тебя. I надо двоечку присваивать, всё же числа сколько угодно раз на единицу делятся.
|
|
#6
|
||||
|
||||
|
Цитата:
Я и так знал что делители не превышают квдратный корень из n, поэтому и взял именно 5 девяток, потому что в integer max 10 цифр, а корень не превысит 5 цифр !!! У меня просто под рукой не было каькулятора а Window-ский недоступен, я в пуск залесть не могу вирусы плагин удалили !!! Последний раз редактировалось Lotles, 01.01.2010 в 15:40. |
|
#7
|
||||
|
||||
|
Цитата:
я без понятия про какой плагин ты говоришь. Может только догадываюсь. Возьми на заметку что есть замечательные функции sqrt и trunc - извлечение квадратного корня и взятие целой части от числа. |