Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   [решено] Ошибка в простом коде (http://forum.oszone.net/showthread.php?t=188185)

Hector 12-10-2010 21:42 1517451

Ошибка в простом коде
 
Задача:
Цитата:

Население города ежегодно увеличивается на 1/20 наличного состава жителей. Через сколько лет население города утроится.
Решение:
PHP код:

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


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


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

lxa85 12-10-2010 22:07 1517470

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

Hector 12-10-2010 22:16 1517476

изменил тело цикла с
Код:

n=n+n*0,05;
на
Код:

n=n+n*0,05;               
printf("%f\n",n);

в результате прога зацикливается, постоянно выводит n

El Scorpio 13-10-2010 01:23 1517579

Цитата:

Цитата Hector
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 1517588

Итого с учетом изменений
PHP код:

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


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


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

lxa85 13-10-2010 07:00 1517640

Цитата:

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

n=n*1.05*1.05*1.05...
1,05 ^ 23 = 3,071523756


Время: 17:11.

Время: 17:11.
© OSzone.net 2001-