PDA

Показать полную графическую версию : [решено] Ошибка в простом коде


Hector
12-10-2010, 21:42
Задача:
Население города ежегодно увеличивается на 1/20 наличного состава жителей. Через сколько лет население города утроится.
Решение:

#include "stdafx.h"
#include "stdio.h"
#include "locale.h"


int _tmain(int argc, _TCHAR* argv[])
{
setlocale(LC_ALL,"rus"); // вывод русских символов в консоль
printf("Введите изначальную численность жителей ");
int i;
float n, e;
scanf("%f",&n);
e=3*n;
for (i=1; n<=e; i++)
n=n+n*0,05;
printf("\nКоличество жителей утроится через %d лет\n",i);
return 0;
}

При запуске программа просит ввести численность жителей и на этом выполнение останавливается (просто висит окно консоли). Что я сделал не так?
Написано в MVS 2010

lxa85
12-10-2010, 22:07
функция n=n+n*0,05; слишком медленно растет. А вообще - она подозрительна. Попробуй на 2 операции разбить. И введи поправку, что бы "полтора землекопа" не получалось.
Сделай вывод текущего значения n в цикле. Считать будет дольше, но увидишь "виснет" или нет.

Hector
12-10-2010, 22:16
изменил тело цикла с n=n+n*0,05; на n=n+n*0,05;
printf("%f\n",n); в результате прога зацикливается, постоянно выводит n

El Scorpio
13-10-2010, 01:23
n=n+n*0,05; »
лучше заменить на n *= 1.05

И я нашёл ошибку - в коде программы для дробных чисел должны использоваться точки, а не запятые. А запятая, если я правильно помню - это оператор перечисления. Примеры его использования С++
int x,y,z; // объявление нескольких переменных
for (int i = столько_то, j = столько_то; i <= j; i++, j = F (i)) // цикл с несколькими итераторами
{
// какой-то код
}
То есть, в вашем случае сначала выполняется команда n=n+n*0, а потом - "пустая" команда 0.05

Hector
13-10-2010, 01:32
Итого с учетом изменений

#include "stdafx.h"
#include "stdio.h"
#include "locale.h"


int _tmain(int argc, _TCHAR* argv[])
{
setlocale(LC_ALL,"rus"); // вывод русских символов в консоль
printf("Введите изначальную численность жителей ");
int i;
float n, e;
scanf("%f",&n);
e=3*n;
for (i=1; n<=e; i++)
n*=1.05;
printf("\nКоличество жителей утроится через %d лет\n",i);
return 0;
}

вот только результат всегда один и тот же, 24 странно, или так и надо?

lxa85
13-10-2010, 07:00
вот только результат всегда один и тот же, 24 странно, или так и надо? »
n=n*1.05*1.05*1.05...
1,05 ^ 23 = 3,071523756




© OSzone.net 2001-2012