dmx81 Temat założony przez niniejszego użytkownika |
program dziala dobrze tylko dla pewnego przedzialu zmiennej (od 1 do 8, powyzej juz blednie) » 2010-04-27 00:21:31 #include <vector> #include <iostream> #include<conio.h>
void dodaj( std::vector < int > & wektor, int n ) { if( wektor[ n ] > 0 ) { wektor[ n ] = 0; n++; dodaj( wektor, n ); return; } else wektor[ n ] ++; for( int i = wektor.size() - 1; i >= 0; i-- ) std::cout << wektor[ i ] << " "; std::cout << std::endl; return; } int potega( int a, int b ) { int wynik = a; if( b == 0 ) return 1; else if ( b == 1 ) return a; else if( b > 1 ) { for( int i = 1; i < b; i++ ) wynik *= a; return wynik; } } int main() { std::cout << potega( 2, 7 ) << std::endl; std::vector < int > wektor; wektor.resize( 7 ); for( int i = 0; i < wektor.size(); i++ ) wektor[ i ] = 0; for( int i = 0; i < wektor.size(); i++ ) std::cout << wektor[ i ] << std::endl; for( int i = 0; i < potega( 2, 7 ); i++ ) dodaj( wektor, 0 ); getch(); return 0; }
dlaczego program dziala od 1 do 8 zmiennych w wektorze, a przy 9 i wiecej juz fiksuje? kiedys juz mialem podobny problem, ale byl kod napisany przez kogos, rowniez przez P. Piotra, teraz napisalem od poczatku sam, a ten sam rezultat, mimo, ze wydaje sie, ze powinien dzialac dobrze ... PS>> no chyba ze konsola ma zbyt mala pamiec i pokazuje tylko od pewnego momentu, bo rozwiazan jest np 2^9... |
|
DejaVu |
» 2010-04-27 02:30:16 Cud, że ta Twoja rekurencja w ogóle działa. Pod linuxem byłoby naruszenie ochrony pamięci. Nie sprawdzasz nawet czy element wektora a[n] istnieje (tj. czy indeks nie wychodzi poza zakres). |
|
dmx81 Temat założony przez niniejszego użytkownika |
» 2010-04-27 14:10:11 ok rozumiem, dopisze if(wektor n >0 && n<wektor.size) lub cos takiego (mam krotka przerwe w pracy wiec pisze na szybko, w domu sprawdze dalej) ale to chyba nie rozwiazuje problemu, o ktory pytam? bo Pana program dzialal dokladnie tak samo, jesli chodzilo o liczbe wyrazow wieksza niz 8, do 8 pokazywalo wszytsko od 00000 do 11111, a powyzej 8 pokazuje od 010101 czyli nie od poczatku jakby, wiec pytam, czy konsola ma jakas ograniczona pamiec wyswietlania |
|
DejaVu |
» 2010-04-27 20:30:17 Co jak co ale mój program działał dobrze, a nie tak samo jak Twój i nie wyglądał tak samo. |
|
dmx81 Temat założony przez niniejszego użytkownika |
» 2010-04-28 00:55:22 co jak co, ale Pana, jak i moj, dzialaja podobnie (nie mowie o konstrukcji programu - mowie o wyniku w konsoli) #include <vector> #include <iostream>
void obliczenia( std::vector < int >& klopsy ) { for( long i = 0; i < klopsy.size(); i++ ) std::cout << klopsy[ i ]; std::cout << std::endl; }
void szoruj( std::vector < int >& klopsy, int indeks ) { if( indeks >= klopsy.size() ) { obliczenia( klopsy ); return; } for( int i = 0; i < 2; i++ ) { klopsy[ indeks ] = i; szoruj( klopsy, indeks + 1 ); } }
int main() { std::vector < int > ble; ble.resize( 9 ); szoruj( ble, 0 ); return 0; }
prosze skompilowac i powiedziec, czy pierwsza linia w konsoli zaczyna sie od 000000000? bo dla ble.resize 8 dziala dobrze, pokaze 00000000 w pierwszej linii - dokladnie tak samo jak w moim przypadku dla wektora o liczbie elementow > 8 pierwsza linia w konsoli nie jest taka, jaka byc powinna, jak wychodzi to dla zakresu od 1 do 8 no i dlatego tak to drąże, ja nie twierdze ze Pana kod jest zly, nie twierdze, ze moj nie ma bledow, ze wszystkim sie zgadzam - ale prosze tylko o wskazanie przyczyny, dlaczego wystepuje taki problem, bo ja nie potrafie przejsc do porzadku dziennego z tym fantem, dopoki nie mam tego pod kontrola... dlatego, jesli moge prosic jeszcze o troszke cierpliwosci, mam nadzieje, ze jesli zna Pan juz odpowiedz, to mi powie, a jesli nie, ze tez Pana to zaintryguje, dziekuje |
|
DejaVu |
» 2010-04-28 13:56:58 Konsola pamięta domyślnie 300 ostatnich wierszy. |
|
dmx81 Temat założony przez niniejszego użytkownika |
» 2010-04-28 17:45:38 o taka odpowiedz mi chodzilo :) dzieki, poszukam w googlach, ale moze szybciej ktos odpowie, czy mozna te ustawienie na 300 wierszy zmienic? jesli nie, zostaje co ok 300 wierszy getch()? |
|
DejaVu |
» 2010-04-28 18:11:53 Da się zmienić, ale to nie będzie crossplatformowe rozwiązanie. |
|
« 1 » |