Как самому расчитать расход ресурсов на выращивание растений на приусадебном или садовом участке
Использована методика учебников для вузов
- Коломейченко. Растениеводство
- Посыпанов. Растениеводство
Работа с программой
Последовательность работы:
- Внести в главный файл данные о площади посева и планируемом урожае в соответствующие переменные (
@l_гряды_м, @b_гряды_м, @урожай_кг) - При желании откорректировать значения других переменных
- Запустить на выполнение в терминале:
ruby grow.rb. - Текстовая информация выведет прогноз по использованию воды и стандартных удобрений
Библиотечный файл класса растений Grow_class на Ruby
require "date"
class Grow
attr_reader :version,
:t0, :start , :control, :класс,
:sum_at, :sum_at_min, :sum_at_max, :t_midle_day[3],
:day_all, :day_min, :day_max, :day_end,
# потребность воды
:h2o_s[3], #_1, # м2_литр_сут при вегетации
# :h2o_s_2, # м2_литр_сут при плодоношении
# :h2o_s_3, # м2_литр_сут при завершении плодоношения
:t_всходов, :t_min, :t_max, :t_цвет, :t_почвы,
:урожай_кг, :вынос_npkcm_г_кг[5],
:урожай_норма, :h2o_sum, :густота_стояния_шт_га,
:норма_высева_кг_га
attr_accessor :id, :title, :anons,
:замачивание, :прорастание, :рассада, :колво,
:l_гряды_м, :b_гряды_м, :faza,
:tme, :посев, :всходы
def initialize( title, колво=1 )
@@version = "0.2.54"
t0 = Time.new
@start = t0.strftime( "%Y-%m-%d %H:%M %Z" )
@посев = [ 2025, 4, 1 ]
@всходы = [ 2025, 4, 4 ]
# сумма активных температур до начала плодоношения
@sum_at_min = 1000
@sum_at_max = 2000
@sum_at = 0 # сумма активных температур
@title = title
@колво = колво
@l_гряды_м = 8.0
@b_гряды_м = 0.35
@h2o_s=Array.new(3)
@h2o_s=[ 3.0, 5.5, 3.2 ]
@faza = 1
@t_midle_day = [ 26,26,20 ]
@урожай_норма = 50.0# т с га
@урожай_кг = 0.000001
@норма_высева_г_га = 4500.0
@густота_стояния_шт_га = 1200000
@вынос_npkcm_г_кг = [ 2.3, 0.3, 3.3, 0.7, 0.2 ]
# @прорастание = 10
end
def посев=(a)
@посев=Time.mktime( a[0], a[1], a[2] )
end
def всходы=(a)
@всходы=Time.mktime( a[0], a[1], a[2] )
end
def time
t = Time.new
t0= @всходы
@tme = t.strftime( "%Y-%m-%d %H:%M %Z" )
pnow= (t-t0).to_i/3600/24
end
def s_гряды
@l_гряды_м * @b_гряды_м
end
def h2o
self.s_гряды * @h2o_s[ @faza-1 ]
end
def h2o_future
@day_min = @sum_at_min/@t_midle_day[0]
@day_max = (@sum_at_max-@sum_at_min)/@t_midle_day[1]
@day_end = 10
@day_all = @day_min + @day_max + @day_end
a = @h2o_s[0] * self.s_гряды * @day_min
b = @h2o_s[1] * self.s_гряды * @day_max
c = @h2o_s[2] * self.s_гряды * @day_end
sum = a + b + c
end
private :control
def title=( a )
@title = self.control=( a )
end
def anons=( a )
@anons = self.control=( a )
end
def замачивание=( a )
@замачивание = self.control=( a )
end
def add_sum_at( a )
@sum_at = @sum_at.to_i + a
if @sum_at>@sum_at_max
@faza = 3
else
@faza = 2
end
@faza = 1 if @sum_at<@sum_at_min
end
def calc_sum_at
min = @sum_at_min / @t_midle_day[0]
max = @sum_at_max / @t_midle_day[1]
day = self.time
@sum_at = day < min ? @t_midle_day[0]*day :
(day-min) * @t_midle_day[1] + @t_midle_day[0]
if @sum_at>@sum_at_max
@faza = 3
else
@faza = 2
end
@faza = 1 if @sum_at<@sum_at_min
end
def add_урожай( a )
@урожай_кг = @урожай_кг.to_f + a
end
def about
printf( "Программа прогнозирования урожая овощей и затрат на негоn")
printf( "версия %sn", @@version )
end
def print
self.calc_sum_at
p " * " * 6
printf( "%s %sn", @класс, @title )
printf( " Температура всходов = %sn", @t_всходов )
printf( " min..max = %s..%sn", @t_min, @t_max )
printf( " цветения= %sn", @t_цвет )
printf( " почвы = %sn", @t_почвы )
printf( " Анонс: %sn", @anons ) if @anons
printf( " Посев %sn ", @посев.strftime( "%Y.%m.%d" ) )
printf( " замачивание: %sn", @замачивание ) if @замачивание
printf( " прорастание: %s днейn", @прорастание ) if @прорастание
printf( " Всходы %sn", @всходы.strftime( "%Y.%m.%d" ) )
printf( " Возраст %dn", self.time ) # if @всходы
printf( " Занимаемая площадь: %2.2f x %2.2f = %3.2f м2n", @b_гряды_м,@l_гряды_м,self.s_гряды )
printf( " Количество растений = %in", @колво )
printf( " Густота стояния ( шт ) га = %i, на м2 = %in", @густота_стояния_шт_га, @густота_стояния_шт_га/10000 )
printf( " Норма высева ( г ) га = %i, на м2 = %.2fn", @норма_высева_г_га, @норма_высева_г_га.to_f/10000.0 )
printf( " Рассада %sn", @рассада ) if @рассада
printf( " Фаза = %in", @faza )
printf( " Сумма активных температур = %in", @sum_at )
printf( " Потребность в воде = %.2f литров в суткиn", self.h2o )
printf( " в воде = %.2f литров всегоn", self.h2o_future )
printf( " в N=%.2f, P=%.2f K=%.2f Ca=%.2f Mg=%.2f ( г ) на 1 кГ плодов n",
@вынос_npkcm_г_кг[0],@вынос_npkcm_г_кг[1],@вынос_npkcm_г_кг[2],
@вынос_npkcm_г_кг[3],@вынос_npkcm_г_кг[4])
printf( " в N=%.2f, P=%.2f K=%.2f Ca=%.2f Mg=%.2f ( г ) реальная n",
@вынос_npkcm_г_кг[0]*@урожай_кг,@вынос_npkcm_г_кг[1]*@урожай_кг,
@вынос_npkcm_г_кг[2]*@урожай_кг,
@вынос_npkcm_г_кг[3]*@урожай_кг,@вынос_npkcm_г_кг[4]*@урожай_кг)
printf( " в N=%.2f, P=%.2f K=%.2f Ca=%.2f Mg=%.2f ( г ) планируемая n",
@вынос_npkcm_г_кг[0]*@урожай_норма*1000/@густота_стояния_шт_га*@колво,
@вынос_npkcm_г_кг[1]*@урожай_норма*1000/@густота_стояния_шт_га*@колво,
@вынос_npkcm_г_кг[2]*@урожай_норма*1000/@густота_стояния_шт_га*@колво,
@вынос_npkcm_г_кг[3]*@урожай_норма*1000/@густота_стояния_шт_га*@колво,
@вынос_npkcm_г_кг[4]*@урожай_норма*1000/@густота_стояния_шт_га*@колво)
printf( " Всего жизнедеятельности %i днейn",@day_all )
printf( " из них %i дней фаза вегетацииn",@day_min )
printf( " %i дней фаза плодоношенияn",@day_max )
printf( " %i дней фаза завершенияn",@day_end )
if @урожай_кг
printf( " Урожайность: всего = %.2f кГn", @урожай_кг )
printf( " растения = %.2f кГn", @урожай_кг/@колво )
printf( " с м2 = %.2f кГn", @урожай_кг/self.s_гряды )
printf( " с га = %.2f тn", @урожай_кг/self.s_гряды*10 )
printf( " при норме с га = %.2f тn", @урожай_норма )
printf( " растения = %.2f кГn", @урожай_норма*1000/@густота_стояния_шт_га )
end
p " * " * 3
end
def stat
self.print
end
def стат
self.stat
end
end
# ------- subclass ---------------
class Томат < Grow
def initialize( title, колво=1 )
super( title, колво )
@класс = " Томат "
@t_всходов = 20
@t_цвет = 24..30
@t_почвы = 16..30
@t_min = 10
@t_max = 30
@sum_at_min = 1800
@sum_at_max = 3000
@h2o_s=[ 3.0, 5.5, 3.2 ]
@t_midle_day = [ 26,26,20 ]
@урожай_норма = 50.0 # т с га
@норма_высева_г_га = 3000.0
@густота_стояния_шт_га = 150000
@вынос_npkcm_г_кг = [ 3.2, 0.4, 5.2, 3.8, 0.5 ]
end
end
class Томат_бч < Томат
def initialize( title, колво=1 )
super( title, колво )
@класс = " Томат Балконное чудо "
@sum_at_min = 3000
@sum_at_max = 19000
end
end
class Перец < Grow
def initialize( title, колво=1 )
super( title, колво )
@класс = " Перец-Баклажан "
@t_всходов = 10
@t_цвет = 24..30
@t_почвы = 16..30
@t_min = 8
@t_max = 30
@sum_at_min = 1800
@sum_at_max = 2000
@h2o_s=[ 4.5, 6.5, 4.5 ]
@t_midle_day = [ 26,26,20 ]
@урожай_норма = 35.0 # т с га
@норма_высева_г_га = 2000.0
@густота_стояния_шт_га = 130000
@вынос_npkcm_г_кг = [ 4.0, 0.6, 4.7, 2.4, 0.5 ]
end
end
class Огурец < Grow
def initialize( title, колво=1 )
super( title, колво )
@класс = " Огурец "
@t_всходов = 13..30
@t_цвет = 24..30
@t_почвы = 16..30
@t_min = 15
@t_max = 30
@sum_at_min = 1400
@sum_at_max = 2500
@h2o_s=[ 3.2, 6.0, 4.0 ]
@t_midle_day = [ 26,26,20 ]
@урожай_норма = 50.0 # т с га
@норма_высева_г_га = 8000.0
@густота_стояния_шт_га = 150000
@вынос_npkcm_г_кг = [ 1.4, 0.4, 2.2, 1.2, 0.2 ]
@прорастание = 2..10
end
end
class Тыква < Grow
def initialize( title, колво=1 )
super( title, колво )
@класс = " Тыква "
@t_всходов = 25..30
@t_цвет = 22..30
@t_почвы = 12..30
@t_min = 8
@t_max = 45
@sum_at_min = 970
@sum_at_max = 2100
@h2o_s=[ 3.0, 5.5, 3.2 ]
@t_midle_day = [ 20,26,20 ]
@урожай_норма = 90.0 # т с га
@норма_высева_г_га = 10000.0
@густота_стояния_шт_га = 35000
@вынос_npkcm_г_кг = [ 4.0, 0.8, 4.2, 1.2, 0.2 ]
end
end
class Кабачок < Grow
def initialize( title, колво=1 )
super( title, колво )
@класс = " Кабачок "
@t_всходов = 13
@t_цвет = 24..30
@t_почвы = 16..30
@t_min = 8
@t_max = 30
@sum_at_min = 1200
@sum_at_max = 3000
@h2o_s=[ 3.0, 5.5, 3.2 ]
@t_midle_day = [ 20,26,20 ]
@урожай_норма = 90.0 # т с га
@норма_высева_г_га = 10000.0
@густота_стояния_шт_га = 35000
@вынос_npkcm_г_кг = [ 4.0, 0.8, 4.2, 1.2, 0.2 ]
end
end
class Цукини < Кабачок
def initialize( title, колво=1 )
super( title, колво )
@класс = " Цукини "
@h2o_s=[ 2.5, 5.0, 3.0 ]
end
end
class Картофель < Grow
def initialize( title, колво=1 )
super( title, колво )
@класс = " Картофель "
@t_всходов = 18
@t_цвет = 24..27
@t_почвы = 16..27
@t_min = 8
@t_max = 27
@sum_at_min = 1000
@sum_at_max = 1750
@h2o_s=[ 0.001, 5.5, 0.002 ]
@t_midle_day = [ 16,26,11 ]
@урожай_норма = 30.0 # т с га
@норма_высева_г_га = 1800000
@густота_стояния_шт_га = 60000
@вынос_npkcm_г_кг = [ 2.6, 1.0, 6.0, 1.2, 0.2 ]
end
end
class Свекла < Grow
def initialize( title, колво=1 )
super( title, колво )
@класс = " Свекла "
@t_всходов = 10
@t_цвет = 24..30
@t_почвы = 16..30
@t_min = -1
@t_max = 30
@sum_at_min = 600
@sum_at_max = 1200
@h2o_s=[ 3.0, 5.5, 3.2 ]
@t_midle_day = [ 16,26,12 ]
@урожай_норма = 60.0 # т с га
@норма_высева_г_га = 16000
@густота_стояния_шт_га = 400000
@вынос_npkcm_г_кг = [ 4.5, 0.7, 3.5, 1.2, 0.2 ]
@прорастание = 8..16
end
end
class Шпинат < Свекла
def initialize( title, колво=1 )
super( title, колво )
@класс = " Шпинат "
@t_всходов = 10
@t_цвет = 24..30
@t_почвы = 16..18
@t_min = -1
@t_max = 30
@sum_at_min = 600
@sum_at_max = 1200
@h2o_s=[ 3.0, 5.5, 3.2 ]
@t_midle_day = [ 16,26,12 ]
@урожай_норма = 40.0 # т с га
@норма_высева_г_га = 250000
@густота_стояния_шт_га = 400000
@вынос_npkcm_г_кг = [ 4.5, 0.7, 3.5, 1.2, 0.2 ]
@прорастание = 8..16
end
end
class Амарант < Шпинат
def initialize( title, колво=1 )
super( title, колво )
@класс = " Амарант "
end
end
class Укроп < Grow
def initialize( title, колво=1 )
super( title, колво )
@класс = " Укроп "
@t_всходов = 20
@t_цвет = 15..20
@t_почвы = 16..18
@t_min = -1
@t_max = 21
@sum_at_min = 600
@sum_at_max = 1200
@h2o_s=[ 3.0, 5.5, 3.2 ]
@t_midle_day = [ 16,26,12 ]
@урожай_норма = 20.0 # т с га
@норма_высева_г_га = 300000
@густота_стояния_шт_га = 400000
@вынос_npkcm_г_кг = [ 4.5, 0.7, 3.5, 1.2, 0.2 ]
@прорастание = 8..16
end
end
class Кориандр < Укроп
def initialize( title, колво=1 )
super( title, колво )
@класс = " Кориандр "
@t_всходов = 20
@t_цвет = 15..20
@t_почвы = 16..18
@t_min = -1
@t_max = 21
@sum_at_min = 600
@sum_at_max = 1200
@h2o_s=[ 3.0, 5.5, 3.2 ]
@t_midle_day = [ 16,26,12 ]
@урожай_норма = 60.0 # т с га
@норма_высева_г_га = 100000
@густота_стояния_шт_га = 400000
@вынос_npkcm_г_кг = [ 4.5, 0.7, 3.5, 1.2, 0.2 ]
@прорастание = 8..16
end
end
class Морковь < Grow
def initialize( title, колво=1 )
super( title, колво )
@класс = " Морковь "
@t_всходов = 10
@t_min = -5
@t_max = 30
@sum_at_min = 600
@sum_at_max = 1200
@h2o_s=[ 3.0, 5.5, 3.2 ]
@t_midle_day = [ 16,26,8 ]
@урожай_норма = 60.0 # т с га
@норма_высева_г_га = 6000.0
@густота_стояния_шт_га = 1200000
@вынос_npkcm_г_кг = [ 2.8, 0.5, 3.9, 1.2, 0.2 ]
@прорастание = 9..15
end
end
class Репа < Grow
def initialize( title, колво=1 )
super( title, колво )
@класс = " Репа "
@t_всходов = 10
@t_почвы = 16..30
@t_min = 8
@t_max = 30
@sum_at_min = 700
@sum_at_max = 900
@h2o_s=[ 3.0, 5.5, 3.2 ]
@t_midle_day = [ 16,26,20 ]
@урожай_норма = 60.0 # т с га
@норма_высева_г_га = 2000.0
@густота_стояния_шт_га = 500000
@вынос_npkcm_г_кг = [ 3.3, 0.7, 4.0, 2.0, 0.3 ]
@прорастание = 3..7
end
end
class Редис < Grow
def initialize( title, колво=1 )
super( title, колво )
@класс = " Редис "
@t_всходов = 19..21
@t_почвы = 12..16
@t_min = 5
@t_max = 20
@sum_at_min = 700
@sum_at_max = 900
@h2o_s=[ 3.0, 5.5, 3.2 ]
@t_midle_day = [ 18,20,20 ]
@урожай_норма = 60.0 # т с га
@норма_высева_г_га = 20000.0
@густота_стояния_шт_га = 1200000
@вынос_npkcm_г_кг = [ 3.3, 0.7, 4.0, 2.0, 0.3 ]
@прорастание = 3..7
end
end
class Редька < Grow
def initialize( title, колво=1 )
super( title, колво )
@класс = " Редька "
@t_всходов = 18
@t_почвы = 12..18
@t_min = 6
@t_max = 20
@sum_at_min = 700
@sum_at_max = 900
@h2o_s=[ 3.0, 5.5, 3.2 ]
@t_midle_day = [ 16,26,20 ]
@урожай_норма = 60.0 # т с га
@норма_высева_г_га = 20000.0
@густота_стояния_шт_га = 1200000
@вынос_npkcm_г_кг = [ 3.3, 0.7, 4.0, 2.0, 0.3 ]
@прорастание = 3..7
end
end
class Петрушка < Grow
def initialize( title, колво=1 )
super( title, колво )
@класс = " Петрушка "
@t_всходов = 18
@t_почвы = 12..18
@t_min = 6
@t_max = 20
@sum_at_min = 700
@sum_at_max = 900
@h2o_s=[ 3.0, 5.5, 3.2 ]
@t_midle_day = [ 16,26,20 ]
@урожай_норма = 60.0 # т с га
@норма_высева_г_га = 20000.0
@густота_стояния_шт_га = 1200000
@вынос_npkcm_г_кг = [ 5.3, 0.7, 9.3, 2.0, 0.4]
@прорастание = 12..20
end
end
class Салат < Grow
def initialize( title, колво=1 )
super( title, колво )
@класс = " Салат "
@t_всходов = 18
@t_почвы = 12..18
@t_min = 6
@t_max = 20
@sum_at_min = 700
@sum_at_max = 900
@h2o_s=[ 3.0, 5.5, 3.2 ]
@t_midle_day = [ 16,26,20 ]
@урожай_норма = 60.0 # т с га
@норма_высева_г_га = 20000.0
@густота_стояния_шт_га = 1200000
@вынос_npkcm_г_кг = [ 2.3, 0.3, 3.3, 0.7, 0.2]
end
end
class Лук < Grow
def initialize( title, колво=1 )
super( title, колво )
@класс = " Лук "
@t_всходов = 1
@t_min = -2
@t_max = 26
@sum_at_min = 1200
@sum_at_max = 1700
@h2o_s=[ 3.0, 4.5, 0.0 ]
@t_midle_day = [ 16,26,10 ]
@урожай_норма = 50.0 # т с га
@норма_высева_г_га = 1100000.0
@густота_стояния_шт_га = 350000
@вынос_npkcm_г_кг = [ 2.5, 0.45, 3.5, 1.2, 0.2 ]
end
end
class Чеснок < Grow
def initialize( title, колво=1 )
super( title, колво )
@класс = " Чеснок из зубков "
@t_всходов = 6
@t_min = 0
@t_max = 25
@sum_at_min = 1200
@sum_at_max = 1700
@h2o_s=[ 3.5, 2.5, 0.0 ]
@t_midle_day = [ 16,26,10 ]
@урожай_норма = 35.0 # т с га
@норма_высева_г_га = 3500000.0
@густота_стояния_шт_га = 700000
@вынос_npkcm_г_кг = [ 2.5, 0.45, 3.5, 1.2, 0.2 ]
end
end
class Капуста < Grow
def initialize( title, колво=1 )
super( title, колво )
@класс = " Капуста "
@t_всходов = 10
@t_min = 8
@t_max = 30
@sum_at_min = 1000
@sum_at_max = 1700
@h2o_s=[ 3.0, 5.5, 3.2 ]
@t_midle_day = [ 16,26,15 ]
@урожай_норма = 35 # т с га
@вынос_npkcm_г_кг = [ 4.5, 0.8, 4.2, 1.2, 0.2 ]
end
end
class Подсолнечник < Grow
def initialize( title, колво=1 )
super( title, колво )
@класс = " Подсолнечник "
@t_всходов = 4..10
@t_min = -6
@t_max = 30
@sum_at_min = 1400
@sum_at_max = 2150
@h2o_s=[ 0.8, 0.9, 0.8 ]
@t_midle_day = [ 16,20,20 ]
@урожай_норма = 1.0 # т с га
@норма_высева_г_га = 400000.0
@густота_стояния_шт_га = 40000
@вынос_npkcm_г_кг = [ 5.5, 2.2, 15.2, 1.2, 0.2 ]
@прорастание = 10..15
end
end
class Земляника < Grow
def initialize( title, колво=1 )
super( title, колво )
@класс = " Земляника "
@t_всходов = 4..10
@t_min = -6
@t_max = 30
@sum_at_min = 300
@sum_at_max = 2150
@h2o_s=[ 0.8, 0.9, 0.8 ]
@t_midle_day = [ 16,20,20 ]
@урожай_норма = 1.2 # т с га
@норма_высева_г_га = 67000.0
@густота_стояния_шт_га = 67000
@вынос_npkcm_г_кг = [ 5.5, 2.2, 15.2, 1.2, 0.2 ]
@прорастание = 10..15
end
end
Главный файл Grow.rb
require "./lib/grow_class" require "date" # ----smpl ------ # # - - план - - #k=Чеснок.new( " План",87 ) #k.замачивание = "саженцы" #k.посев=[2025,4,1] #k.всходы=[2025,4,13] #k.add_sum_at( 720 ) ##k.колво=( 8 ) #k.l_гряды_м=8 #k.b_гряды_м=0.35 #k.add_урожай( 100.3 ) #k.stat
k=Морковь.new( " План",87 ) k.замачивание = "саженцы" k.посев=[2025,4,1] k.всходы=[2025,4,13] k.add_sum_at( 720 ) #k.колво=( 8 ) k.l_гряды_м=8 k.b_гряды_м=0.35 k.add_урожай( 100.3 ) #k.stat
#k=Лук.new( " План",87 ) #k.замачивание = "саженцы" #k.посев=[2025,4,1] #k.всходы=[2025,4,13] #k.add_sum_at( 720 ) ##k.колво=( 8 ) #k.l_гряды_м=8 #k.b_гряды_м=0.35 #k.add_урожай( 100.3 ) ##k.stat #
Эпилог
Функции программы документированы, переменные имеют доступные имена.
Но если понадобится помощь -- обращайтесь