Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Программа на JS (https://javascript.ru/forum/misc/53195-programma-na-js.html)

Nadir 24.01.2015 17:24

Программа на JS
 
Всем привет. Это моя первая программа. По идеи это программа которая считает сумму накоплений с учетом банковских процентов, которые выплачиваются каждый год. И я кладу каждый месяц одну сумму. Вопрос очень просто почему после выполнения full = 0?

var years = prompt("Сколько лет копим?)");
var prec = prompt("А сколько % в год?");
var income = prompt("Сколько откладываешь каждый месяц?");
var num = 12;
var full = 0;
months=years*num;
console.log("Получилось всего " + years + " лет и " + months + " месяцев.")
for (var month = 0; month == months; month++) {
   if (month % num == 0) {
	full = full +income + (full*prec/100);
	
} else {
  full = full + income;
}
 
}
console.log("Всего накопленно =" + full);

Octane 24.01.2015 17:31

month <= months

Safort 24.01.2015 21:07

Некоторые ошибки:
1. prompt() возвращает строку, даже если вобьют число, то тип переменной всё равно будет строковым. Для приведения к числу используй parseInt() и parseFloat(). Прочитай про них подробнее.
2. Переменная months объявлена без var. Если будешь так и дальше делать, то в крупных приложениях горя хлебнёшь с отладкой.
3. Ну и как уже выше намекнул Octane, у тебя ошибка в условии цикла.

SV0L0CH 25.01.2015 03:10

Кроме parseInt и parseFloat стоит почитать про варианты использования конструктора Number, про унарный плюс и про JSON.parse. Это не просто разные способы одного и того же, у них разное поведение в некоторых ситуациях, потому выбери самое подходящее.
Вообще-то арифметические операции над строками преобразуют их в числа и можно это не замечать пока где-то не появится бинарный плюс который для строк является конкатенацией.
Так что результатом внезапно окажется набор из цифр и точек начинающийся с нуля.

Nadir 26.01.2015 19:48

var years = Number( prompt("Сколько лет будем копить?") );
var prec = Number( prompt("Сколько % дает банк?") );
var income = Number( prompt("Сколько будешь откладывать каждый месяц?") );
var num = 12;   
var full = income;
months=years*num;
console.log("Всего получилось " + years + " лет и  " + months + " месяцев и по " + prec " каждый год.")
for (var month = 1; month <= months; month++) {
	if (month % num == 0) {
	full = full + (full*prec/100);
	console.log("12 months done!")
	console.log(full)
	}
	else {
	full += income;
	console.log(full)
	}
}
console.log("Всего скопленно =" + full);


Вот весь код. Подправил все как надо. Но что то с алгоритмом. Если ввести 1 год то программа работает нормально, но если ввести 2 и больше результать не точен. Если ввести 2 года то должно быть 2772

вот что выдает консоль



рони 27.01.2015 12:33

Nadir,
<script>
var years = Number( prompt("Сколько лет будем копить?",2) );
var prec = Number( prompt("Сколько % дает банк?",10) );
var income = Number( prompt("Сколько будешь откладывать каждый месяц?",100) );
var num = 12;
var full = 0;
months=years*num;
document.write("Всего получилось " + years + " лет и  " + months + " месяцев и по " + prec + "% каждый год.<br>") ;
for (var month = 1; month <= months; month++) {
    full += income
    document.write(month + " " +full.toFixed(2)+"<br>")
    if (month % num == 0) {
	full = full + (full*prec/100);
	document.write("12 months done! " +full.toFixed(2)+ "<br>")
	}

}
document.write("Всего скопленно =" + full.toFixed(2));

</script>


Часовой пояс GMT +3, время: 16:46.