Добро пожаловать! Это — архивная версия форумов на «Хакер.Ru». Она работает в режиме read-only.
 

Как упростить алгоритм?

Пользователи, просматривающие топик: 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 как оптимизировать алгоритм?
копи\паст, вбивать вручную ноль - не предлагать:)
Post #: 1
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;
Post #: 2
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. писал на си а ты просил на дэлфи наверное но переделать тут не будет проблем
Post #: 3
RE: Как упростить алгоритм? - 2009-03-22 09:31:22.203333   
gotoxardas

Сообщений: 842
Оценки: 0
Присоединился: 2007-05-25 08:15:21.840000
Что вот ЭТО должно делать? Причем там переменная g, за что она отвечает? Откуда берется i? Поподробнее!
Post #: 4
RE: Как упростить алгоритм? - 2009-03-22 10:12:08.663333   
Dgedit

Сообщений: 131
Оценки: 0
Присоединился: 2007-02-04 15:07:37.163333
Да там как мне кажется особой роли ни g ни i не играет. Автора поста пугает постоянные вложенный проверки которые как я понимаю очень далеко там продолжаются дальше. Вот я ему и предложил вариант как убрать постоянные сравнения.
Post #: 5
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. писал на си а ты просил на дэлфи наверное но переделать тут не будет проблем


На Паскале:)
Спасиб, опробую
Post #: 6
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
Post #: 7
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;
Post #: 8
RE: Как упростить алгоритм? - 2009-03-22 13:14:09.026666   
unconnected2

Сообщений: 332
Оценки: 0
Присоединился: 2009-01-16 17:56:12.400000
Это ошибка несовпадения типов.. Измени тип переменных i,m на real - заработает.
Post #: 9
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 &gt; 0) and (x3 div m &lt; 1) с данными real'ного типа не катит
Post #: 10
RE: Как упростить алгоритм? - 2009-03-22 13:30:25.493333   
unconnected2

Сообщений: 332
Оценки: 0
Присоединился: 2009-01-16 17:56:12.400000
Можно ввести дополнительную целочисленную переменную (i и m оставить real) и после возведения степень этой переменной присваивать значение m.
Post #: 11
RE: Как упростить алгоритм? - 2009-03-22 13:36:52.523333   
unconnected2

Сообщений: 332
Оценки: 0
Присоединился: 2009-01-16 17:56:12.400000
Кстати, если ты будешь возводить только с целыми показателями, то можно использовать менее оптимальный, но более удобный вариант возведения с циклом, и не будет проблемы с типами данных.
Post #: 12
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?
Post #: 13
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.
Post #: 14
RE: Как упростить алгоритм? - 2009-03-22 14:00:58.673333   
unconnected2

Сообщений: 332
Оценки: 0
Присоединился: 2009-01-16 17:56:12.400000
quote:

равзе можно переменные с типом longint присваивать значение переменной с типом real?


нельзя, я тупанул =/
Post #: 15
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 &gt;= 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 &gt; 0) and (x3 div m &lt; 1) then begin write(g,' ', x3:3); Summ := Summ + x3; end; until (x3 div m) &gt;= 1; {==========================================} if m &gt; 0 then begin writeln(g); writeln(g, ' ', Summ); end; close(g); close(f); end. вот, получено потом и кровью ^_^
программа суммирует числа Фибоначи в соответствии с заявленным количеством знаков в input.txt
спасибо всем за помощь
Post #: 16
RE: Как упростить алгоритм? - 2009-03-22 15:36:15.076666   
L2nkeR

Сообщений: 115
Оценки: 0
Присоединился: 2009-02-02 04:03:17.786666
пздц, че вы паритесь, написал же алгоритм еще во втором посте.
Post #: 17
Страниц:  [1]
Все форумы >> [Компилируемые языки] >> Как упростить алгоритм?







Связаться:
Вопросы по сайту / xakep@glc.ru

Предупреждение: использование полученных знаний в противозаконных целях преследуется по закону.