Как упростить алгоритм?
Пользователи, просматривающие топик: none
|
Зашли как: Guest
|
Имя |
Сообщение |
<< Старые топики Новые топики >> |
|
|
Как упростить алгоритм? - 2009-03-22 01:10:36.686666
|
|
|
Mr_Naeba
Сообщений: 2709
Оценки: 0
Присоединился: 2008-07-23 14:21:27.243333
|
if i = 2 then
begin
n := 10;
m := 100;
writeln(g,' ', i, ' znaka');
end
else
if i = 3 then
begin
n := 100;
m := 1000;
writeln(g,' ', i, ' znaka');
end
else
if i = 4 then
begin
n := 1000;
m := 10000;
writeln(g,' ', i, ' znaka');
end
else
if i = 5 then
begin
n := 10000;
m := 100000;
writeln(g,' ', i, ' znakov');
{повторяется x раз}
end как оптимизировать алгоритм? копи\паст, вбивать вручную ноль - не предлагать:)
|
|
|
RE: Как упростить алгоритм? - 2009-03-22 01:43:47.070000
|
|
|
L2nkeR
Сообщений: 115
Оценки: 0
Присоединился: 2009-02-02 04:03:17.786666
|
for i:=2 to x do begin
n:= Exp((i-1)*Ln(10))
m:= Exp((i)*Ln(10))
end;
|
|
|
RE: Как упростить алгоритм? - 2009-03-22 08:22:23.516666
|
|
|
Dgedit
Сообщений: 131
Оценки: 0
Присоединился: 2007-02-04 15:07:37.163333
|
Смотри кажется самый просто вариант: //////////// //начальные значения int n = 10; int m = 10; //теперь устанавливаем в соотв. с i n = pow( n, i ) / 10; m = pow( m, i ); // где pow - функция которая возвращает первый аргумент возведенный в степень(это второй аргумент) P.S. писал на си а ты просил на дэлфи наверное но переделать тут не будет проблем
|
|
|
RE: Как упростить алгоритм? - 2009-03-22 09:31:22.203333
|
|
|
gotoxardas
Сообщений: 842
Оценки: 0
Присоединился: 2007-05-25 08:15:21.840000
|
Что вот ЭТО должно делать? Причем там переменная g, за что она отвечает? Откуда берется i? Поподробнее!
|
|
|
RE: Как упростить алгоритм? - 2009-03-22 10:12:08.663333
|
|
|
Dgedit
Сообщений: 131
Оценки: 0
Присоединился: 2007-02-04 15:07:37.163333
|
Да там как мне кажется особой роли ни g ни i не играет. Автора поста пугает постоянные вложенный проверки которые как я понимаю очень далеко там продолжаются дальше. Вот я ему и предложил вариант как убрать постоянные сравнения.
|
|
|
RE: Как упростить алгоритм? - 2009-03-22 11:49:55.876666
|
|
|
Mr_Naeba
Сообщений: 2709
Оценки: 0
Присоединился: 2008-07-23 14:21:27.243333
|
quote:
ORIGINAL: gotoxardas Что вот ЭТО должно делать? Причем там переменная g, за что она отвечает? Откуда берется i? Поподробнее! g - переменная, обозначающая текстовик output, i - переменная считывающаяся из input.txt, в зависимости от считыываемой переменной должно присваиваться значение n и m quote:
ORIGINAL: Dgedit Смотри кажется самый просто вариант: //////////// //начальные значения int n = 10; int m = 10; //теперь устанавливаем в соотв. с i n = pow( n, i ) / 10; m = pow( m, i ); // где pow - функция которая возвращает первый аргумент возведенный в степень(это второй аргумент) P.S. писал на си а ты просил на дэлфи наверное но переделать тут не будет проблем На Паскале:) Спасиб, опробую
|
|
|
RE: Как упростить алгоритм? - 2009-03-22 11:57:30.353333
|
|
|
Таксист
Сообщений: 68
Оценки: 0
Присоединился: 2009-03-13 09:11:37.530000
|
quote:
как оптимизировать алгоритм? копи\паст, вбивать вручную ноль - не предлагать Не совсем ясно что ЭТО. но влюбом случае n = 10 ^(i-1) a m = 10^i
|
|
|
RE: Как упростить алгоритм? - 2009-03-22 12:40:32.743333
|
|
|
Mr_Naeba
Сообщений: 2709
Оценки: 0
Присоединился: 2008-07-23 14:21:27.243333
|
глупый Никлас Вирт… как реализовать степень на Паскале?) пробовал как: m := exp(ln(x)*i); выдает 26ую ошибку. const
x=10;
var
m, i : longint;
|
|
|
RE: Как упростить алгоритм? - 2009-03-22 13:14:09.026666
|
|
|
unconnected2
Сообщений: 332
Оценки: 0
Присоединился: 2009-01-16 17:56:12.400000
|
Это ошибка несовпадения типов.. Измени тип переменных i,m на real - заработает.
|
|
|
RE: Как упростить алгоритм? - 2009-03-22 13:21:59.440000
|
|
|
Mr_Naeba
Сообщений: 2709
Оценки: 0
Присоединился: 2008-07-23 14:21:27.243333
|
quote:
ORIGINAL: unconnected2 Это ошибка несовпадения типов.. Измени тип переменных i,m на real - заработает. если i еще можно заменить на реал, то с m - больше проблем. дальше по тексту программы идет следующее:
(x3 div n > 0) and (x3 div m < 1)
с данными real'ного типа не катит
|
|
|
RE: Как упростить алгоритм? - 2009-03-22 13:30:25.493333
|
|
|
unconnected2
Сообщений: 332
Оценки: 0
Присоединился: 2009-01-16 17:56:12.400000
|
Можно ввести дополнительную целочисленную переменную (i и m оставить real) и после возведения степень этой переменной присваивать значение m.
|
|
|
RE: Как упростить алгоритм? - 2009-03-22 13:36:52.523333
|
|
|
unconnected2
Сообщений: 332
Оценки: 0
Присоединился: 2009-01-16 17:56:12.400000
|
Кстати, если ты будешь возводить только с целыми показателями, то можно использовать менее оптимальный, но более удобный вариант возведения с циклом, и не будет проблемы с типами данных.
|
|
|
RE: Как упростить алгоритм? - 2009-03-22 13:51:10.340000
|
|
|
Mr_Naeba
Сообщений: 2709
Оценки: 0
Присоединился: 2008-07-23 14:21:27.243333
|
quote:
ORIGINAL: unconnected2 Кстати, если ты будешь возводить только с целыми показателями, то можно использовать менее оптимальный, но более удобный вариант возведения с циклом, и не будет проблемы с типами данных. так и будет) какой алгоритм? quote:
ORIGINAL: unconnected2 Можно ввести дополнительную целочисленную переменную (i и m оставить real) и после возведения степень этой переменной присваивать значение m. равзе можно переменные с типом longint присваивать значение переменной с типом real?
|
|
|
RE: Как упростить алгоритм? - 2009-03-22 13:57:10.713333
|
|
|
unconnected2
Сообщений: 332
Оценки: 0
Присоединился: 2009-01-16 17:56:12.400000
|
Например так(писал здесь, думаю,смысл поймёшь): k:=m;
for z:=1 to i-1 do {i - степень}
m:=m*k;
Таким образом, при каждой итерации m домножается на само себя.. И оно должно быть не равно 0.
|
|
|
RE: Как упростить алгоритм? - 2009-03-22 14:00:58.673333
|
|
|
unconnected2
Сообщений: 332
Оценки: 0
Присоединился: 2009-01-16 17:56:12.400000
|
quote:
равзе можно переменные с типом longint присваивать значение переменной с типом real? нельзя, я тупанул =/
|
|
|
RE: Как упростить алгоритм? - 2009-03-22 14:13:00.303333
|
|
|
Mr_Naeba
Сообщений: 2709
Оценки: 0
Присоединился: 2008-07-23 14:21:27.243333
|
program fib_1;
var
f, g : text;
x1, x2, x3, Summ, m, n : longint;
x, z, i, e, r : longint;
begin
x1 := 1;
x2 := 2;
Summ := 0;
assign(f, 'input.txt');
reset(f);
read(f, i);
assign(g, 'output.txt');
rewrite(g);
writeln(g,' ', i, 'znaka');
n := 10;
m :=10;
if i >= 2 then
begin
z := 10;
for e := 1 to i-1 do
m := m*z;
x := 10;
for r := 1 to i-2 do
n := n*x;
end;
x1 := 1;
x2 := 1;
repeat
x3 := x1 + x2;
x1 := x2;
x2 := x3;
if
(x3 div n > 0) and (x3 div m < 1)
then
begin
write(g,' ', x3:3);
Summ := Summ + x3;
end;
until
(x3 div m) >= 1;
{==========================================}
if m > 0 then
begin
writeln(g);
writeln(g, ' ', Summ);
end;
close(g);
close(f);
end. вот, получено потом и кровью ^_^ программа суммирует числа Фибоначи в соответствии с заявленным количеством знаков в input.txt спасибо всем за помощь
|
|
|
RE: Как упростить алгоритм? - 2009-03-22 15:36:15.076666
|
|
|
L2nkeR
Сообщений: 115
Оценки: 0
Присоединился: 2009-02-02 04:03:17.786666
|
пздц, че вы паритесь, написал же алгоритм еще во втором посте.
|
|
|
|
|