Dobry kod, daje złe wyniki w Dev C++

0

Witam. Mam taki program :

rect.h :

#include <iostream>

class Point // przechowuje współżędne x, y 

{
      public :
             void SetX (int x) { itsX = x ; } ;
             void SetY (int y) { itsY = y ; } ;
             int GetX () const { return itsX ; };
             int GetY () const { return itsY ; };
             
      private :
              int itsX ;
              int itsY ;
} ;

class Rectangle // definicja klasy Prostokąt 
{     
      public :
             Rectangle (int top, int left, int bottom, int right) ;
             ~Rectangle () {} ;     
                     
             int GetTop () const { return itsTop ; } ;
             int GetLeft () const { return itsLeft ; } ;
             int GetRight () const { return itsRight ; } ; 
             int GetBottom () const { return itsBottom ; } ;
      
             void SetTop ( int top ) { itsTop = top ; } ;
             void SetLeft ( int left ) { itsLeft = left ; } ;
             void SetRight ( int right ) { itsRight = right ; } ;
             void SetBottom ( int bottom ) { itsBottom = bottom ; } ;
             
             Point GetUpperLeft () const { return itsUpperLeft ; } ;
             Point GetLowerLeft () const { return itsLowerLeft ; } ;
             Point GetUpperRight() const { return itsUpperRight ; } ;
             Point GetLowerRight () const { return itsLowerRight ; } ;
             
             void SetUpperLeft (Point Location) { itsUpperLeft = Location ; } ;
             void SetLowerLeft (Point Location) { itsLowerLeft = Location ; } ;
             void SetUpperRight(Point Location) { itsUpperRight = Location ; } ;
             void SetLowerRight(Point Location) { itsLowerRight = Location ; } ;
             
             int GetArea () const ;
             
      private :
              int itsTop ;
              int itsLeft ;
              int itsRight ;
              int itsBottom ;
              
              Point itsUpperLeft ;
              Point itsUpperRight ;
              Point itsLowerLeft ;
              Point itsLowerRight ;
              
} ;

rectangle.cpp :

#include "rect.h" 
#include <cstdlib>
#include <iostream>
#include <conio.h>

Rectangle::Rectangle (int top, int left, int bottom, int right)
{
       itsTop = top ;
       itsLeft = left ;
       itsBottom = bottom ;
       itsRight = right ;
       
       itsUpperLeft.SetX(left) ;
       itsUpperLeft.SetY(top) ;
       
       itsUpperRight.SetX(right) ;
       itsUpperRight.SetY(top) ;
       
       itsLowerLeft.SetX(left) ;
       itsLowerLeft.SetY(bottom);
       
       itsLowerRight.SetX(right);
       itsLowerRight.SetY(bottom);
}

// oblicza obszar prostokąta przez pomnożenie szerokości i wysokości
int Rectangle::GetArea () const 
{
    int Width = itsRight - itsLeft ;
    int Height = itsTop - itsBottom ;
    return (Width*Height) ;
}

main.cpp :

#include "rect.h" 
#include <cstdlib>
#include <iostream>
#include <conio.h>


using namespace std;

int main(int argc, char *argv[])
{
    
    //inicjalizacja zmiennej lokalnej typu Rentagle 
    Rectangle MyRentagle(100, 20, 50, 80) ;
    
    int Area = MyRentagle.GetArea() ;
    
    cout << "Obszar " << Area << endl ;
    cout << "\nWspolzedna X gornego lewego rogu : " ;
    cout << MyRentagle.GetUpperLeft().GetX() ;
    cout << "\nWspolzedna Y gornego lewego rogu : " ;
    cout << MyRentagle.GetUpperLeft().GetY() ;
    cout << "\n\nWspolzedna X gornego prawego rogu : " ;
    cout << MyRentagle.GetUpperRight().GetX() ;
    cout << "\nWspolezdna Y gornego prawego rogu : " ;
    cout << MyRentagle.GetUpperRight().GetY() ;
    cout << "\n\nWspolzedna X dolnego lewego rogu : " ;
    cout << MyRentagle.GetLowerLeft().GetX() ;
    cout << "\nWspolzedna Y dolnego lewego rogu : " ;
    cout << MyRentagle.GetLowerLeft().GetY() ;
    cout <<"\n\nWspolzedna X dolnego prawego rogu : " ;
    cout << MyRentagle.GetLowerRight().GetX() ;
    cout << "\nWspolzedna Y dolnego prawego rogu : " ;
    cout << MyRentagle.GetLowerRight().GetY() ;
    
    getch() ;
    return 0 ;
}

=============
Gdzie jest problem ? Przy współrzędnej dolnego prawego rogu.
Wyniki programu są takie :

X górny lewy : 20 , zgadza się
Y górny lewy : 100 , zgadza się

X górny prawy : 80 , zgadza się
Y górny prawy : 100 , zgadza się

X dolny lewy : 20 , zgadza się
Y dolny lewy : 50 , zgadza się

X dolny prawy : 20 , i tu jest zonk. Powinno być 80 . Przeleciałem kilka razy po kodzie i nie wiem, ja nie widzę błędu nigdzie ; /
Y dolny prawy : 50, i to też się zgadza

Proszę o pomoc z tym drobnym problemem : )
Pozdrawiam !</b>

0

Wrzucone w visuala, skompilowane - wynik prawidłowy. Szukaj błędu gdzie indziej - kod jest ok.

0
nav napisał(a)

Wrzucone w visuala, skompilowane - wynik prawidłowy. Szukaj błędu gdzie indziej - kod jest ok.

nie będę używał viusala bo mam z nim złe wspomnienia ^^

poza tym nie wiem gdzie indziej szukac.

Kod sprawdzałem masę razy i wszystko mi pasowało , no ale sorry takie głupoty to już nie wiem z czego mogą wynikac.

0

..wiec moze podasz laskawie z jakiego kompilatora korzystasz, jakie flagi kompilacji/zgodnosci ze standardem/poziom czepialstwa/etc..

0

dev c++ 4.9.9.2

0

Dev-C++ został porzucony w fazie beta, dodatkowo zawiera w sobie mocno zbugowaną wersję GCC. Jeden z bugów to błędne obliczanie odległości skoków i wartości na stosie... Przepuściłem przez nowsze GCC, daje wyniki prawidłowe.

http://nuwen.net/mingw.html - tutaj masz najnowsze GCC dla Windowsa + kilka dodatkowych libów, dorzuć do tego jakieś lepsze IDE (Eclipse, Code::Blocks... emacs) i używaj jak tak bardzo nie lubisz Visuala.

0
LV napisał(a)

Dev-C++ został porzucony w fazie beta, dodatkowo zawiera w sobie mocno zbugowaną wersję GCC. Jeden z bugów to błędne obliczanie odległości skoków i wartości na stosie... Przepuściłem przez nowsze GCC, daje wyniki prawidłowe.

http://nuwen.net/mingw.html - tutaj masz najnowsze GCC dla Windowsa + kilka dodatkowych libów, dorzuć do tego jakieś lepsze IDE (Eclipse, Code::Blocks... emacs) i używaj jak tak bardzo nie lubisz Visuala.

dzięki wielkie : )

0

zalecal bym VS i zaprzyjaznienie sie z debuggerem i breakpointami

0

Dobra, niech będzie, posiedzę w VS 2008 . No więc zainstalowałem, od początku miał problem (chodź szybkość kompilowania mnie mile zaskoczyła).

Mam problem. W Devie kod spokojnie kompiluje . W Visualu to samo - 57 error(s), 4 warning(s)

w efekcie dostaje np. takie ostrzeżenia jak "left of '.GetX' must have class/struct/union" , chodź GetX jest w klasie. Zupełnie już nie czaję o co chodzi ; P

0

A może być tak dał kod, który się nie kompiluje i ew. wskazał miejsce? Ten z pierwszego postu kompiluje się bez problemu.

0
LV napisał(a)

A może być tak dał kod, który się nie kompiluje i ew. wskazał miejsce? Ten z pierwszego postu kompiluje się bez problemu.

o nim cały czas jest mowa [glowa]

0

A pliki podzieliłeś tak samo? Jak tak to raczej działa... Ty coś robisz źle.

0
manfredek napisał(a)

A pliki podzieliłeś tak samo? Jak tak to raczej działa... Ty coś robisz źle.

tak, dokładnie tak samo jest wszystko.

0
1>------ Build started: Project: test, Configuration: Release Win32 ------
1>Compiling...
1>rect.cpp
1>main.cpp
1>.\main.cpp(35) : warning C4996: 'getch': The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: _getch. See online help for details.
1>        F:\Programs\Microsoft Visual Studio 9.0\VC\include\conio.h(145) : see declaration of 'getch'
1>.\main.cpp(9) : warning C4100: 'argv' : unreferenced formal parameter
1>.\main.cpp(9) : warning C4100: 'argc' : unreferenced formal parameter
1>Linking...
1>Generating code
1>Finished generating code
1>Embedding manifest...
1>Build log was saved at "file://e:\visual\test\test\Release\BuildLog.htm"
1>test - 0 error(s), 3 warning(s)
========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========
0
  1. New -> Project -> Visual C++ -> Win32 Console Application, na drugiej planszy zaznacz Empty project.
  2. Project -> Add new item i dodajesz 3 nowe pliczki (main.cpp itd.)
  3. wklejasz kod, F9 i hula
0
adf88 napisał(a)
  1. New -> Project -> Visual C++ -> Win32 Console Application, na drugiej planszy zaznacz Empty project.
  2. Project -> Add new item i dodajesz 3 nowe pliczki (main.cpp itd.)
  3. wklejasz kod, F9 i hula

dzięki ; )
Masz u mnie duże piwo [browar]

temat właściwie można zamknąc, wyniki są poprawne, kompiluje się , wszystko gra ; )

0

No żeby takie rzeczy trzeba było pisać :|

//q: zostawiam ten watek ze wzgledu na poczatek.. ale jak cos takiego jeszcze tu padnie, to newbie murowane..

0
LV napisał(a)

Dev-C++ został porzucony w fazie beta, dodatkowo zawiera w sobie mocno zbugowaną wersję GCC. Jeden z bugów to błędne obliczanie odległości skoków i wartości na stosie... Przepuściłem przez nowsze GCC, daje wyniki prawidłowe.

W mniej więcej której wersji GCC wyeliminowano te bugi ? Czwórka jest już bezpieczna ?

Do wypomnianego Dev'a dołączane jest GCC 3.4.2.

0

Konkretnie to nie pamiętam, Dev miał 3.4.2 a po uaktualnieniu 3.4.5, obie się sypały. W każdym razie 4.* działają bezbłędnie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1