Форум программистов
 
Расширенный поиск
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Delphi > Паскаль
Регистрация

Восстановить пароль
Повторная активизация e-mail

Ответ
 
Опции темы
Старый 20.04.2017, 22:40   #1
LaSTiqq
Новичок
 
Регистрация: 20.04.2017
Сообщений: 2
Репутация: 10
По умолчанию есть 200 тонн цемента, в первый день я трачу 5 тонн, дальше каждый день на 20% больше. Как при помощи цикла while заставить программу показать, через сколько дней цемент кончится?

Суть проблемы такова - учусь последний год и у нас есть основы программирования на базе паскаля (он же Lazarus у нас). Заключительная работа по циклам. Задача стоит следующая: есть 200 тонн цемента, в первый день я трачу 5 тонн, дальше каждый день на 20% больше. Как при помощи цикла while заставить программу показать, через сколько дней цемент кончится? (Пользователь в данном задании ничего не вводит)
Заранее спасибо за выручку.
LaSTiqq вне форума   Ответить с цитированием
Старый 21.04.2017, 11:12   #2
Serge_Bliznykov
МегаМодератор
СуперМодератор
 
Регистрация: 09.01.2008
Сообщений: 21,648
Репутация: 4911
По умолчанию

Код:

var mas, inday, count_day : integer;
begin
  mas := 200000; {в кг, т.к. будем округлять значения до килограмма}
  inday := 5000; {в начале тратим 5000 кг в день}
  count_day := 0;

  while mas>= inday do begin
     inc(count_day);
     mas := mas - inday;
     WriteLn('День ',count_day,' потратили цемента ', inday,' остаток ',mas);
     inday := inday + (inday div 5); { это деление на 5, т.к. 20% - это 1/5}
  end;

  WriteLn('Цемента хватит на ',count_day,' дней ');
  Readln
end.

p.s. если число процентов будет не кратно целому числу,
тогда можно использовать такую формулу:
Код:

  inday := trunc(inday * 1.20);

Serge_Bliznykov вне форума   Ответить с цитированием
Старый 21.04.2017, 17:04   #3
LaSTiqq
Новичок
 
Регистрация: 20.04.2017
Сообщений: 2
Репутация: 10
Хорошо Спасибо за ответ!

Анализируя данный код пришел к выводу, что при собственных попытках программа в строке "inday:=inday+(inday/0.2)" отказывалась работать. Похоже понял почему, integer не позволяет делить (или выполнять какие либо другие действия) не на целое число, а при помощи div это удалось обойти.
LaSTiqq вне форума   Ответить с цитированием
Старый 21.04.2017, 18:47   #4
Serge_Bliznykov
МегаМодератор
СуперМодератор
 
Регистрация: 09.01.2008
Сообщений: 21,648
Репутация: 4911
По умолчанию

Цитата:
Сообщение от LaSTiqq Посмотреть сообщение
что при собственных попытках программа в строке "inday:=inday+(inday/0.2)" отказывалась работать.
Похоже понял почему, integer не позволяет делить (или выполнять какие либо другие действия) не на целое число
не совсем.
Integer позволяет делить на любое* число (* кроме нуля, конечно
но результат получается ВЕЩЕСТВЕННЫЙ (см. типы данных float, double)
поэтому, выхода три:
1) если переменные нужны типа Integer, тогда можно выполнять целочисленное деление (с помощью DIV )
или
2) если переменные нужны типа Integer, тогда можно выполнять деление вещественное, а результат приводить к целому значению с помощью trunc()( при этом дробная часть отбрасывается
3) перейти к вещественным числам. Тогда можно делить без всяких хитростей - будут получаться вещественные (дробные) значения.

какой способ выбрать - зависит от самой задачи и от программиста.

успехов в учёбе
Serge_Bliznykov вне форума   Ответить с цитированием
Ответ



Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите решить задачу через цикл For. загрузить грузовик грузоподъемностью Р тонн контейнерами трех видов: по А, В и С кг. Определить, какое количество контейнеров каждого вида Belzan Паскаль 1 02.12.2016 10:31
С++ Лыжник, начав тренировки, в первый день пробежал n км. Каждый следующий день он увеличивал пробег на m% от пробега предыдущего дня. Сколько километров он пробежит за k дней. marina46 Помощь студентам 9 23.11.2016 19:27
Как будет выглядеть скрипт, вычисляющий целое число центнеров и тонн из кг? Rin PHP 1 27.12.2012 21:33
по дате рождения и текущей дате (день, месяц, год) определить сколько дней до дня рождения (код на ПАСКАЛЕ) Николай1 Помощь студентам 1 16.02.2012 09:07
определить день недели по заданному числу (считать в месяце 30 дней и первый день месяца понедельник dan1991 Помощь студентам 1 01.03.2009 21:59




14:14.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.

купить трафик


как улучшить посещаемость, а также решения по монетизации сайтов, видео и приложений

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru