Witam. Po uruchomieniu poniższego kodu ,na ekranie wyswietla sie dwie wartosci dla zmiennych xr i ry, po wcisnieciu litery "d" wartosci ry dążą do 0 ,a rx do 1. Gdy ry ma sie równać zero pojawia się dziwna wartość 1.37.. co zrobić ,aby pojawiało się 0. Proszę o pomoc.
link do poprzedniego posta:
https://forum.pasja-informatyki.pl/296202/problem-dla-wartosci-0#c296217
Wstawiam post od nowa ,ponieważ tamten został zablokowany. Kodu ja nie pisalem tylko moj niewidomy brat i prosił ,by to wstawić ,trochę cieżko pisać czytelny kod nie widząc. Również przeczytałem kod i jeszcze ja sie moge przyczepic tego ,ze ortografii nie ma. Chcecie to pomozcie. Poprawił kod (jego zdaniem) :
#include <iostream>
#include <windows.h>
using namespace std;
struct sobiekty {
double x;
double y;
double rx;
double ry;
double predkoscr;
sobiekty() {}
bool rotacja_lewo();
bool rotacja_prawo();
virtual int przesun() {}
virtual int akt() {}
};
class cshrit : public sobiekty {
public:
cshrit() {
rx = 0;
ry = -1;
predkoscr = 0.1;
}
int przesun() {
char znak;
cout << "wspolzendne to:" << endl;
cout << "rx= " << rx << " ry= " << ry << endl;
cin >> znak;
if (znak == 'a') {
rotacja_lewo();
cout << "rx= " << rx << " ry= " << ry << endl;
}
if (znak == 'd') {
rotacja_prawo();
cout << "rx= " << rx << " ry= " << ry << endl;
}
/*if(znak=='q')
break;*/
}
int akt() {
if (rx > 1)
rx = rx - 2 * predkoscr;
if (rx < -1)
rx = rx + 2 * predkoscr;
if (ry > 1)
ry = ry - 2 * predkoscr;
if (ry < -1)
ry = ry + 2 * predkoscr;
}
};
bool sobiekty::rotacja_lewo() {
if (rx >= 0 && ry < 0) {
rx = rx - predkoscr;
ry = ry - predkoscr;
}
if (rx >= 0 && ry >= 0) {
rx = rx + predkoscr;
ry = ry - predkoscr;
}
if (rx < 0 && ry >= 0) {
rx = rx + predkoscr;
ry = ry + predkoscr;
}
if (rx < 0 && ry < 0) {
rx = rx - predkoscr;
ry = ry + predkoscr;
}
return true;
}
bool sobiekty::rotacja_prawo() {
/*
if(rx>=0 && ry <0)
{
rx=rx+predkoscr;
ry=ry+predkoscr;
}
if(rx >=0 && ry >=0)
{
rx=rx-predkoscr;
ry=ry+predkoscr;
}
if(rx <0 && ry >=0)
{
rx=rx-predkoscr;
ry=ry-predkoscr;
}
if(rx <0 && ry <0)
{
rx=rx+predkoscr;
ry=ry-predkoscr;
}
return true;
*/
if (rx > 0 && ry < 0) {
rx = rx + predkoscr;
ry = ry + predkoscr;
}
if (rx > 0 && ry > 0) {
rx = rx - predkoscr;
ry = ry + predkoscr;
}
if (rx < 0 && ry > 0) {
rx = rx - predkoscr;
ry = ry - predkoscr;
}
if (rx < 0 && ry < 0) {
rx = rx + predkoscr;
ry = ry - predkoscr;
}
if (rx == 0 && ry == -1) {
rx = rx + predkoscr;
ry = ry + predkoscr;
}
if (rx == 1 && ry == 0) {
rx = rx - predkoscr;
ry = ry + predkoscr;
}
if (rx == 0 && ry == 1) {
rx = rx - predkoscr;
ry = ry - predkoscr;
}
if (rx == -1 && ry == 0) {
rx = rx + predkoscr;
ry = ry - predkoscr;
}
}
int main() {
Sleep(10);
sobiekty * a = new cshrit();
for (;;) {
a->przesun();
}
return 0;
}