Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[Allegro]Wykres

Ostatnio zmodyfikowano 2008-12-29 20:50
Autor Wiadomość
szeczu
Temat założony przez niniejszego użytkownika
[Allegro]Wykres
» 2008-12-28 23:08:04
Chcę w mojej aplikacji zrobić prezentację wyników w formie wykresu.
Chcę to zrobić w pętli, ponieważ wykres tworzę na podstawie danych pobieranych z tablicy. Doszedlem do takiego kodu :

C/C++
int x = 20, y = 560, x1 = 40, y1 = 550;
for( int l = 0; l < 46; l++ )
{
    for( int m = 0; m < t_znakow[ l ]; m++ )
    {
       
        rectfill( screen, x, y, x1, y1, makecol( 128, 30, 30 ) );
       
        y - 10;
    }
    x + 20;
    x1 = x + 20;
    y1 = y - 10;
}

Jak widać, chcę po prostu za każdym obrotem pętli dodawać kolejny prostokąt do 'slupka', a następnie przesunąć się o x pikseli i utworzyć kolejny słupek.
Problem tkwi w tym, że program wykonuje pętlę raz i staje.

Kompilator nie zgłasza żadnego błędu.

Tryb graficzny w C++ to dla mnie nowość, więc proszę o wyrozumiałość. 

//Edit
Dokladnie raz petla zostaje wykonana, efektem tego mam jeden prostokąt
rectfill( screen, x, y, x1, y1, makecol( 128, 30, 30 ) );
na coordach : int x = 20,y = 560, x1 = 40, y1 = 550;
Dalej nic się nie dzieje. Tablica t_znakow jest wypelniona.

//Edit2
To wiem, zauważylem już wcześniej, ale dalej to nic nie zmienia.
P-3058
DejaVu
» 2008-12-28 23:16:41
Problem tkwi w tym, że program wykonuje pętlę raz i staje.
Nie rozumiem tego stwierdzenia. Program się wysypuje/wywala/GPF czy poprostu raz narysuje i nic się dalej nie dzieje?

/edit:
C/C++
y - 10;
x - 10;
Powyższe zapisy kompletnie nic nie robią - nawet możesz usunąć te linijki, a program bedzie działał tak samo. Jeśli chcesz przypisać nową wartość do zmiennej musisz napisać:
C/C++
y = y - 10; //lub
y -= 10;
P-3059
szeczu
Temat założony przez niniejszego użytkownika
» 2008-12-29 18:57:35
Ktoś ma jakieś pomysły ??

Kod wygląda poprawnie (uwzględniając poprawione przypisywanie wartości zmiennym), lecz nie działa jak powinien.
P-3065
DejaVu
» 2008-12-29 19:59:17
Niestety nie rozumiem co chcesz osiągnąć. Co więcej nie ma tutaj głównej pętli programu i nie odpowiedziałeś również na moje pytanie. Samo rysowanie wykresu powinno wyglądać tak:
C/C++
std::vector < int > dane;
//tu wypełniona tablica daanymi
while( !key[ ESC ] )
{
    for( int i = 0; i < dane.size(); i++ )
    {
        rysuj_prostokat( i * 20, 640 - dane[ i ], i * 20 + 19, 640 );
    } //for
} //while
P-3069
szeczu
Temat założony przez niniejszego użytkownika
» 2008-12-29 20:15:49
Poradziłem sobie... Problemem była pętla zerująca elementy tablicy umieszczona w złym miejscu, na co nie zwróciłem wcześniej uwagi, twierdząc, że winę ponosi któraś z pętli odpowiedzialnych za rysowanie...

Teraz kod wygląda tak :

C/C++
int main( int argc, char * argv[] )
{
    int choice;
    double l_znakow = 0, t_znakow[ 46 ];
    //zerowanie elementow tablicy.
    for( int i = 0; i < 46; i++ )
         t_znakow[ i ] = 0;
   
    do
    {
        //menu
        cin >> choice;
       
        if( choice == 1 )
        {
            //tutaj odbywaja się operacje wypelniajace tablice;
        }
        else if( choice == 2 )
        {
            init();
           
           
           
            while( !key[ KEY_ESC ] )
            {
                int x = 20, y = 560, x1 = 40, y1 = 550;
                for( int l = 0; l < 46; l++ )
                {
                    for( int m = 0; m < t_znakow[ l ]; m++ )
                    {
                       
                        rectfill( screen, x, y, x1, y1, makecol( 128, 30, 30 ) );
                       
                        y -= 10;
                    }
                    x += 20;
                    x1 += 20;
                    y1 -= 10;
                }
            }
            deinit();
        }
    }
    while( choice != 0 );
   
}
END_OF_MAIN();

Dziękuję za pomoc i przepraszam za kłopot.

//Edit
Wiem, że if'y obsługujące menu przydałoby się zamienić na switcha, ale w programie jest już jeden switch i drugi jakoś nie chce z nim współpracować (potem się tym zajmę).

P-3071
lynx
» 2008-12-29 20:50:48
Jak chcesz jednego switcha dać w drugi, to musisz wartości case-ów wziąć w klamry:
C/C++
switch( zmienna )
{
case '1':
    {
        kod_drugiego switcha
    }
    ...
}
P-3072
« 1 »
  Strona 1 z 1