Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - [решено] Ошибка в простом коде

Ответить
Настройки темы
C/C++ - [решено] Ошибка в простом коде

Аватара для Hector

Misanthrope


Сообщения: 474
Благодарности: 38


Конфигурация

Профиль | Отправить PM | Цитировать


Изменения
Автор: Hector
Дата: 12-10-2010
Описание: среду забыл указать :)
Задача:
Цитата:
Население города ежегодно увеличивается на 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

-------
Information must be free!
Нет границ, есть только препятствия


Отправлено: 21:42, 12-10-2010

 

Аватара для lxa85

Необычный


Contributor


Сообщения: 4463
Благодарности: 994

Профиль | Сайт | Отправить PM | Цитировать


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

-------
- Я не разрешаю тебе быть плохой! Потому что плохие люди совершают плохие поступки. А это нехорошо!
(Из наставлений 5 летней девочки своей младшей сестре)


Отправлено: 22:07, 12-10-2010 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для Hector

Misanthrope


Сообщения: 474
Благодарности: 38

Профиль | Отправить PM | Цитировать


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

-------
Information must be free!
Нет границ, есть только препятствия


Отправлено: 22:16, 12-10-2010 | #3


ИО Капитана Очевидности


Contributor


Сообщения: 5387
Благодарности: 1105

Профиль | Отправить PM | Цитировать


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

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

Почему всех осужденных за измену Родине при Сталине реабилитировали при Горбачёве по отсутствию состава преступления? Потому что при Горбачёве измену Родине перестали считать преступлением.

Это сообщение посчитали полезным следующие участники:

Отправлено: 01:23, 13-10-2010 | #4


Аватара для Hector

Misanthrope


Сообщения: 474
Благодарности: 38

Профиль | Отправить PM | Цитировать


Итого с учетом изменений
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 странно, или так и надо?

-------
Information must be free!
Нет границ, есть только препятствия


Отправлено: 01:32, 13-10-2010 | #5


Аватара для lxa85

Необычный


Contributor


Сообщения: 4463
Благодарности: 994

Профиль | Сайт | Отправить PM | Цитировать


Цитата Hector:
вот только результат всегда один и тот же, 24 странно, или так и надо? »
n=n*1.05*1.05*1.05...
1,05 ^ 23 = 3,071523756

-------
- Я не разрешаю тебе быть плохой! Потому что плохие люди совершают плохие поступки. А это нехорошо!
(Из наставлений 5 летней девочки своей младшей сестре)

Это сообщение посчитали полезным следующие участники:

Отправлено: 07:00, 13-10-2010 | #6



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - [решено] Ошибка в простом коде

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
[решено] Поиск слова в исходном коде html страницы?????? klsorat2010 AutoIt 65 01-04-2013 07:34
Ошибка - Во время перезагрузки/выключения ошибка: Explorer.EXE - Ошибка приложения Psyhopate Microsoft Windows 2000/XP 8 28-08-2010 00:27
Непонятная ошибка virtualdub при просмотре либо конвертации DV файла-ошибка only в VD illusionmgs Видео и аудио: обработка и кодирование 9 21-03-2009 14:47
[решено] Поиск нужного текста в html коде страницы ph0en1x AutoIt 8 16-02-2009 02:38
Установка - Ошибка при установке windows xp sp2: ошибка обработки манифеста ceramicool Microsoft Windows 2000/XP 5 18-07-2007 22:27




 
Переход