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 : 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. |
|
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: 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ć: |
|
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.
|
|
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: std::vector < int > dane;
while( !key[ ESC ] ) { for( int i = 0; i < dane.size(); i++ ) { rysuj_prostokat( i * 20, 640 - dane[ i ], i * 20 + 19, 640 ); } }
|
|
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 : int main( int argc, char * argv[] ) { int choice; double l_znakow = 0, t_znakow[ 46 ]; for( int i = 0; i < 46; i++ ) t_znakow[ i ] = 0; do { cin >> choice; if( choice == 1 ) { } 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ę). |
|
lynx |
» 2008-12-29 20:50:48 Jak chcesz jednego switcha dać w drugi, to musisz wartości case-ów wziąć w klamry: switch( zmienna ) { case '1': { kod_drugiego switcha } ... } |
|
« 1 » |