Раздел: Задачи / Простейшие /

Задача селекционера

Основы программирования 2.0 Основы программирования
Каждый профессионал когда-то был чайником. Наверняка вам знакомо состояние, когда “не знаешь как начать думать, чтобы до такого додуматься”. Наверняка вы сталкивались с ситуацией, когда вы просто не знаете, с чего начать. Эта книга ориентирована как раз на таких людей, кто хотел бы стать программистом, но совершенно не знает, как начать этот путь. Подробнее...

Условие задачи 1.7

Задача 1.7
Селекционер вывел новый сорт зерновой культуры и снял с опытного поля k килограмм семян. Посеяв 1 кг семян, можно за сезон собрать р килограмм семян. Через сколько лет селекционер сможет засеять новой культурой поле площадью s гектар, если норма высева n кг/га.

Начнём с того, кто такой селекционер. Это человек, который занимается селекцией, то есть отбором (подбором) семян с целью выведения новых (лучших) сортов.

Ну а теперь к задаче. С точки зрения программирования задача, как и в большинстве случаев, простая. Здесь главное - разработать алгоритм решения. А написать код по этому алгоритму будет уже просто.

Итак, у нас есть норма высева n - это количество семян, которое требуется для засева площади в 1 гектар. Следовательно, для засева поля площадью s га, на потребуется:

x = n * s

килограмм семян.

Также у нас есть начальное количество семян k, и мы знаем, что посеяв 1 кг семян, можно собрать р килограмм. Следовательно, при норме высева n мы соберём с одного гектара:

ga = p * n

Но это так, к сведению. Вообще-то нам надо узнать, сколько лет потребуется для того, чтобы из количества семян k в итоге получилось целое поле.

Каждый сезон 1 килограмм семян будет превращаться в p килограмм. То есть за первый сезон мы получим:

ga1 = k * p

За второй сезон мы получим:

ga2 = ga1 * p

ну и так далее. Но как нам определить количество лет, которое потребуется для засева всего поля? А здесь каждый пусть думает сам ))) Но можно, например, увеличивать количество урожая в цикле до тех пор, пока мы не превысим заданную площадь посева. Количество итераций цикла и будет искомым значением - количеством лет, необходимых для засева поля.

Код тела цикла может быть примерно таким:

Y = 0
Цикл
  Y = Y + 1
  ga = k * p
  k = ga
  Если ga >= (n * s) То ПрерватьЦикл

Таким образом мы вычисляем Y - количество лет.

Входные данные:

  • k - начальное количество семян
  • p - количество семян, которое можно собрать за сезон, посеяв 1 кг
  • s - площадь поля, которое надо засеять
  • n - норма высева

Пример:

  • k = 10
  • p = 20
  • s = 100
  • n = 10

Чтобы засеять всё поле нам надо:

x = n * s = 10 * 100 = 1000 кг.

За первый сезон мы получим:

ga1 = k * p = 10 * 20 = 200 кг.

За второй сезон мы получим:

ga2 = ga1 * p = 200 * 20 = 4000 кг.

То есть для того, чтобы получить необходимое для засева поля количество семян нам надо два года. За второй сезон мы не смогли засеять всё поле, мы только получили необходимый урожай. Но это можно считать решением задачи. Потому что через два года (на третий сезон) можно будет уже засеять всё поле.

Примеры программ на Паскале и С++.

Решение задачи 1.7 на Паскале
program mytask;

var
  k : Single;   //Начальное кол-во семян
  p : Single;   //Урожай с 1 кг за сезон
  s : Single;   //Площадь поля
  n : Single;   //Норма высева
  ga: Single;   //Требуемое количество семян
  Y : Integer;  //Количество лет

begin
  k := 10;
  p := 20;
  s := 100;
  n := 15;

  Y := 0;
  while TRUE do
    begin
      Inc(Y);
      ga := k * p;
      WriteLn('ga = ', ga:0:2, ', k = ', k:0:2);
      k := ga;
      if ga >= (n * s) then Break;
    end;

  WriteLn('s = ', s:0:2);
  WriteLn('s * n = ', (s * n):0:2);
  WriteLn('Y = ', Y);
  WriteLn('The end. Press ENTER...');
  ReadLn;
end.

Здесь выводятся некоторые промежуточные результаты, чтобы было понятнее, как это всё работает.

Решение задачи 1.7 на С++
#include <cstdlib>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
  float k = 10;
  float p = 20;
  float s = 100;
  float n = 15;
  float ga = 0;
  int Y = 0;

  while (true)
  {
    Y++;
    ga = k * p;
    cout << "ga = " << ga << ", k = " << k << endl;
    k = ga;
    if (ga >= (n * s)) break;
  }

  cout << "s = " << s << endl;
  cout << "s * n = " << (s * n) << endl;
  cout << "Y = " << Y << endl;
  system("PAUSE");
  return EXIT_SUCCESS;
}

На этом всё. Подписывайтесь на новости (ссылки ниже), чтобы ничего не пропустить.


Как стать программистом 2.0 Как стать программистом 2.0

Эта книга для тех, кто хочет стать программистом. На самом деле хочет, а не просто мечтает. И хочет именно стать программистом с большой буквы, а не просто научиться кулебякать какие-то примитивные программки… Подробнее...
Помощь в технических вопросах Помощь в технических вопросах

Помощь студентам. Курсовые, дипломы, чертежи (КОМПАС), задачи по программированию: Pascal/Delphi/Lazarus; С/С++; Ассемблер; языки программирования ПЛК; JavaScript; VBScript; Fortran; Python и др. Разработка (доработка) ПО ПЛК (предпочтение - ОВЕН, CoDeSys 2 и 3), а также программирование панелей оператора, программируемых реле и других приборов систем автоматизации. Подробнее...

Инфо-МАСТЕР ®
Все права защищены ©
e-mail: mail@info-master.su

Яндекс.Метрика