Форум программистов, компьютерный форум CyberForum.ru

счетчик цикла for - C++

Восстановить пароль Регистрация
 
iceglen
 Аватар для iceglen
24 / 24 / 2
Регистрация: 24.06.2013
Сообщений: 105
15.09.2013, 21:36     счетчик цикла for #1
Есть задача из Прата глава 5 № 4.
Кликните здесь для просмотра всего текста
Дафна инвестировала $100 под простые 10%. Другими словами, ежегодно инвестиция должна приносить 10% инвестированной суммы, т.е. $10 каждый год:прибыль = 0,10 х исходный баланс. В то же время Клео инвестировала $100 под сложные 5%. Это значит, что прибыль составит 5% от текущего баланса, включая предыдущую накопленную прибыль:прибыль = 0,05 х текущий баланс. Клео зарабатывает 5% от $100 в первый год, что дает ей $105. На следующий год она зарабатывает 5% от $105, что составляет $5.25, и т.д. Напишите программу, которая вычислит, сколько лет понадобится для того, чтобы сумма баланса Клео превысила сумму баланса Дафны, с отображением значений обоих балансов за каждый год.


В целях обучения попробовал выделить память, используя new и delete для всех переменных (в том числе и i).

При таком виде программа не работает (компилится без ошибок).

Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <iostream>
 
using namespace std;
 
int main()
{
  int * dbalance = new int;
  *dbalance = 100;
  int * cbalance = new int;
  *cbalance = *dbalance;
  int * i = new int;
  for (*i = 0; *cbalance <= *dbalance; *i++)
  {
    cout << *i << " year:" << endl;
    cout << "\tCleos balance is " << *cbalance << endl;
    cout << "\tDafnas balance is " << *dbalance << endl;
    *dbalance = *dbalance + 0.1 * 100;
    *cbalance = *cbalance + 0.05 * (*cbalance);
  }
  cout << "On the " << *i << " year Cleo will have more money than Dafna." << endl;
  cout << "\tCleos current balance is " << *cbalance << endl;
  cout << "\tDafnas current balance is " << *dbalance << endl;
  delete dbalance;
  delete cbalance;
  delete i;
  return 0;
}


При небольшом изменении программа работает нормально.

Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <iostream>
 
using namespace std;
 
int main()
{
  int * dbalance = new int;
  *dbalance = 100;
  int * cbalance = new int;
  *cbalance = *dbalance;
  int i;
  for (i = 0; *cbalance <= *dbalance; i++)
  {
    cout << i << " year:" << endl;
    cout << "\tCleos balance is " << *cbalance << endl;
    cout << "\tDafnas balance is " << *dbalance << endl;
    *dbalance = *dbalance + 0.1 * 100;
    *cbalance = *cbalance + 0.05 * (*cbalance);
  }
  cout << "On the " << i << " year Cleo will have more money than Dafna." << endl;
  cout << "\tCleos current balance is " << *cbalance << endl;
  cout << "\tDafnas current balance is " << *dbalance << endl;
  delete dbalance;
  delete cbalance;
  return 0;
}


Можно ли выделять для счетчиков память через new и delete? Если да, то в чем ошибка в первом варианте?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ValeryS
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,057
15.09.2013, 21:39     счетчик цикла for #2
Цитата Сообщение от iceglen Посмотреть сообщение
Можно ли выделять для счетчиков память через new и delete?
можно а зачем?
Цитата Сообщение от iceglen Посмотреть сообщение
*i++
разбери эту запись
iceglen
 Аватар для iceglen
24 / 24 / 2
Регистрация: 24.06.2013
Сообщений: 105
15.09.2013, 21:41  [ТС]     счетчик цикла for #3
Чувстовал же, что там ошибка Спасибо, прочитаю про инкремент еще разок.
ValeryS
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,057
15.09.2013, 21:55     счетчик цикла for #4
можешь записать так
C++
1
*i=*i+1;
но зачем? чем тебе стек то не угодил? любое выделение/ удаление памяти лишнее время
iceglen
 Аватар для iceglen
24 / 24 / 2
Регистрация: 24.06.2013
Сообщений: 105
15.09.2013, 22:00  [ТС]     счетчик цикла for #5
Заменил на (*i)++. Против стека ничего не имею. Просто в целях самообучения
Yandex
Объявления
15.09.2013, 22:00     счетчик цикла for
Ответ Создать тему
Опции темы

Текущее время: 11:34. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru