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

Движение планет в звёздной системе, методы isOrbitFree и Simulate работают неправильно - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Выбрать студентов заданного пола, проживающих в общежитии (исправить код) http://www.cyberforum.ru/cpp-beginners/thread1121009.html
Здравствуйте. помогите пожалуйста исправить программу, не могу понять в чем дело нужно выбрать студентов заданного пола, проживающих в общежитии #include <iostream> #include <stdio.h> #include...
C++ Написать программу для динамического графического эфекта цифрового таймера Написать программу для динамического графического эфекта цифрового таймера Заранее большое спасибо http://www.cyberforum.ru/cpp-beginners/thread1121005.html
C++ Найти площадь и значение координаты y на эллипсе для заданного x
Здравствуйте. Подскажите пожалуйста, как исходя из данного задания найти площать и значение координаты y на эллипсе для заданного x? Создать класс ПАРА ЧИСЕЛ. Определить конструкторы, деструктор,...
Посоветуйте хорошую книгу по с++. C++
Посоветуйте пожалуйста какую-то хорошую книгу с++.
C++ Определить, удовлетворяет ли текст следующему свойству: Текст совпадает с каким то отрезком ряда 0123456789 (например: 2, 678, 89) http://www.cyberforum.ru/cpp-beginners/thread1120986.html
Задача В заданный непустой текст входят только цифры и буквы. Определить, удовлетворяет ли он следующему свойству:Текст совпадает с каким то отрезком ряда 0123456789 (например: 2, 678, 89). ...
C++ Как изменить значение в реестре? привет! Я новичек в с++, среда разработки - dev c++/ Помогите примером, мне нужно открыть необходимую ветку реестра и поменять значение в указанной строке. Как это можно реализовать? подробнее

Показать сообщение отдельно
Ilot
Модератор
Эксперт С++
1820 / 1178 / 232
Регистрация: 16.05.2013
Сообщений: 3,115
Записей в блоге: 5
Завершенные тесты: 1
17.03.2014, 08:42
Цитата Сообщение от greendaizer Посмотреть сообщение
второй вообще выводит какую-то неведомую ерунду, причём в (*it).orbit на момент выполнение метода содержится набор левых цифр вперемешку с буквами.
Если я правильно понял у вас круговыt орбиты и этот код:
C++
1
2
3
4
5
6
7
8
9
void StarSystem::simulate(double time)
{
 
  for(vector<Planet>::iterator it = planets.begin();it!=planets.end();it++)
  {
   (*it).place.x+=(*it).orbit*cos(time);
   (*it).place.y+=(*it).orbit*sin(time);
  }
}
означает вычисление координат каждой из планет в определенный момент времени. Если это так то по идее нужно избавится от оператора += и просто оставить =:
C++
1
2
3
4
5
6
7
8
9
void StarSystem::simulate(double time)
{
 
  for(vector<Planet>::iterator it = planets.begin();it!=planets.end();it++)
  {
   (*it).place.x=(*it).orbit*cos(time);
   (*it).place.y=(*it).orbit*sin(time);
  }
}
Теперь общие замечания по коду.
1) Не используйте постфиксный декремент если вам не нужно старое значение переменной. Лучше использовать префиксный.
2) Вы в каждом цикле вычисляете planets.end(). Это не разумно. Введите отдельный итератор и инициализируйте его значением planets.end():
C++
1
2
3
4
5
6
    vector<Planet>::iterator end =planets.end();
    //...
  for(vector<Planet>::iterator it = planets.begin();it != end; ++it)
  {
    //...
  }
P.S. Орбиты планет все-таки не круговые, а элипптические
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru