Решено: Странный результат вычислений в Ruby

Модератор: Модераторы разделов

Аватара пользователя
lordinferius
Сообщения: 26
ОС: Fedora 11

Решено: Странный результат вычислений в Ruby

Сообщение lordinferius »

Всем привет. Решил вот курсовой свой сделать по предмету "Электрические линии передач". Так вот, расчётную часть хочу сделать в Ruby. И вот досада: только начал, уже неверный результат. Причём, это действительно ОЧЕНЬ странно. Это не просьба сделать что-либо за меня и это не домашнее задание. Делаю по своей инициативе.

Код: Выделить всё

# -*- coding: utf-8 -*-
# require "Math"

f = [0.5, 23, 45.5, 68] # кГц - расчётные частоты
d0 = 0.64 # мм - диаметр проводника
a = 1.34 # мм - расстояние между проводниками
rho = 0.0175 # ом x мм2 / м - удельное сопротивление меди
ae = 1.03 # тот самый параметр
p = 1 # ещё один
Rmt = 7.5 # влияние окружающих мет. масс


########################################################

# Расчёт сопротивления на постоянном токе

R0 = rho * 8000/Math::PI/d0/d0

puts "R_{0}=" + R0.to_s

# Расчёт сопротивления на переменном токе

Rm = Array.new(f.size)
f.each_index do |i|
  Rm[i]=Rmt*Math.sqrt(f[i]/200)
  #TeXindex=i+1
  puts "R_{\\text{М}f_{" + (i+1).to_s + "}}=" + Rm[i].to_s
  i = i+1
end

puts "Протестируем..."
test=Rmt*Math.sqrt(23/200)
puts test.to_s


И вот что получается в результате:
R_{0}=108.797324379225
R_{\text{М}f_{1}}=0.375
R_{\text{М}f_{2}}=0.0
R_{\text{М}f_{3}}=3.57727200531355
R_{\text{М}f_{4}}=0.0
Протестируем...
0.0

Как видно, не считаются элементы только с нечётными индексами. В чём проблема?
Спасибо сказали:
Аватара пользователя
diesel
Бывший модератор
Сообщения: 5989
ОС: OS X, openSuSE, ROSA, Debian

Re: Решено: Странный результат вычислений в Ruby

Сообщение diesel »

Код: Выделить всё

f.each_index do |i|
  i = i+1
end

два раза за один проход i меняется
Спасибо сказали:
Аватара пользователя
lordinferius
Сообщения: 26
ОС: Fedora 11

Re: Решено: Странный результат вычислений в Ruby

Сообщение lordinferius »

Спасибо, не заметил. Но это дела не меняет. Итератор each_index перебирает индексы массива, так что при каждом проходе i определяется заново, так что можно в конце цикла делать с i что хочешь. Вывод остаётся прежним. Плюс - в конце надпись "Протестируем..." - там специально проведён расчёт для одного из элементов массива f.
Спасибо сказали:
Аватара пользователя
diesel
Бывший модератор
Сообщения: 5989
ОС: OS X, openSuSE, ROSA, Debian

Re: Решено: Странный результат вычислений в Ruby

Сообщение diesel »

Код: Выделить всё

puts "Протестируем..."
puts Rmt
puts Math.sqrt(23/200)
puts Math.sqrt(23.00/200.00)
test=Rmt*Math.sqrt(23/200)
puts test.to_s



Код: Выделить всё

Протестируем...
7.5                                     <---- Rmt
0.0                                     <---- Math.sqrt(23/200)
0.339116499156263                        <---- Math.sqrt(23.00/200.00)
0.0
Спасибо сказали:
Аватара пользователя
lordinferius
Сообщения: 26
ОС: Fedora 11

Re: Решено: Странный результат вычислений в Ruby

Сообщение lordinferius »

Понял, спасибо. Всё из-за целых чисел. Очень благодарен.
Спасибо сказали: