[C++] Pomoc z programem
Ostatnio zmodyfikowano 2009-03-25 21:45
steckel Temat założony przez niniejszego użytkownika |
» 2009-03-25 19:25:51 Poprawiłem program względem 1 pytania: #include <iostream> #include <ctime> #include <console.h> using namespace std;
int wysokosc; int szerokosc; int il_min; int * plansza;
void wczytaj(); void losuj();
int main() { wczytaj(); plansza = new int[ szerokosc ][ wysokosc ]; losuj( plansza ); system( "cls" ); }
void wczytaj() { cout << "Wprowadz wysokosc planszy:"; cin >> wysokosc; wysokosc += 2; if( wysokosc < 7 ) wysokosc = 5; if( wysokosc > 22 ) wysokosc = 22; cout << "Wprowadz szerokosc planszy:"; cin >> szerokosc; szerokosc += 2; if( szerokosc < 7 ) szerokosc = 5; if( szerokosc > 42 ) szerokosc = 42; cout << "Wprowadz ilosc min"; cin >> il_min; if( il_min < 5 ) il_min = 5; if( il_min > wysokosc * szerokosc * 4 / 5 ) il_min = wysokosc * szerokosc * 4 / 5; }
void losuj() { for( int a = 0; a < szerokosc; a++ ) { for( int b = 0; b < wysokosc; b++ ) { plansza[ a ][ b ] = 0; } } srand( time( 0 ) ); for( int a = 0; a < il_min; ) { int x = rand() %( szerokosc - 2 ) + 1; srand( rand() ); int y = rand() %( wysokosc - 2 ) + 1; if( plansza[ x ][ y ] == 0 ) { plansza[ x ][ y ] = 9; for( int b = 0; b <= 2; b++ ) { for( int a = 0; b <= 2; a++ ) { if( plansza[ x + a - 1 ][ y + b - 1 ] != 9 ) { plansza[ x + a - 1 ][ y + b - 1 ] ++; } } } a++; } } }
Błędy: In function `int main()': 18: error: `wysokosc' cannot appear in a constant-expression 12: error: too many arguments to function `void losuj()' 19: error: at this point in file In function `void losuj()': 40: error: invalid types `int[int]' for array subscript 49: error: invalid types `int[int]' for array subscript 51: error: invalid types `int[int]' for array subscript 56: error: invalid types `int[int]' for array subscript 58: error: invalid types `int[int]' for array subscript
|
|
pekfos |
» 2009-03-25 20:37:16 jeśli jest int losuj( int * ); to dalej nie moze być int losuj() |
|
DejaVu |
» 2009-03-25 20:44:57 Cóż... forma w jakiej obecnie chcesz napisać program to przeforsowanie na siłę rozwiązania nie koniecznie znając techniki do tego celu użyteczne. Rozwiązanie pierwsze: int ** tablica = new int *[ y ]; for( int i = 0; i < y; i++ ) tablica[ i ] = new int[ x ];
Rozwiązanie drugie: #include <vector>
std::vector < std::vector < int > > tablica; tablica.resize( y ); for( int i = 0; i < x; i++ ) tablica[ i ].resize( x );
|
|
GoldWolf |
» 2009-03-25 20:53:19 Nie chciałbym być złośliwy ale to nie ma sensu, widać masz spore braki do tego nie wiem skąd się nauczyłeś tak pisać programy: cin >> wysokosc; wysokosc += 2; if( wysokosc < 7 ) wysokosc = 5; if( wysokosc > 22 ) wysokosc = 22; cout << "Wprowadz szerokosc planszy:"; cin >> szerokosc; szerokosc += 2; if( szerokosc < 7 ) szerokosc = 5; if( szerokosc > 42 ) szerokosc = 42; cout << "Wprowadz ilosc min"; cin >> il_min; if( il_min < 5 ) il_min = 5;
Przecież można tak nie idzie tego analizować spokojnie: cin >> wysokosc; wysokosc += 2; if( wysokosc < 7 ) wysokosc = 5;
if( wysokosc > 22 ) wysokosc = 22;
cout << "Wprowadz szerokosc planszy:"; cin >> szerokosc; szerokosc += 2; if( szerokosc < 7 ) szerokosc = 5;
if( szerokosc > 42 ) szerokosc = 42;
cout << "Wprowadz ilosc min"; cin >> il_min; if( il_min < 5 ) il_min = 5;
Do tego jakieś komentarze by się przydały nie jesteśmy wróżkami leśnymi by zgadywać co ci po głowie chodzi. Po drugie program się pisze stopniowo krok po kroku,a nie napiszesz cały kod, a potem się dziwisz, że masz błędy. Napisz sobie prosty program main z jedną dodatkową funkcją void wczytaj();. Jak już ci się to uda i będzie działać to zastosują drugą funkcję. Może masz braki, o których nie zdajesz sobie sprawy. Każdy z Nas jest to Twojej dyspozycji, ale programu za Ciebie nie napiszemy........ |
|
steckel Temat założony przez niniejszego użytkownika |
» 2009-03-25 20:58:29 int ** tablica = new int *[ y ]; for( int i = 0; i < x; i++ ) tablica[ y ][ i ] = new int[ x ]; Mam to napisać we funkcji int main() ? Jeśli tak to czy ta tablica globalna, tak żebym nie musiał przekazywać jej jako parametr do każdej funkcji? /---------- funkcja wczytaj() wczytuje wysokość i szerokość planszy oraz ilość min, a także dostosowuje te wartości do odpowiednich przedziałów. W tej funkcji kompilator nie zgłosił błędów. Największym problemem jest tablica dwuwymiarowa tworzona podczas wykonywania programu, gdyż mam trudności z operowaniem na niej w innych funkcjach. |
|
DejaVu |
» 2009-03-25 20:59:38 Myślę, że komentarze byłyby zbędne... myślę też, że program możemy też za Ciebie ten mały napisać... ale nic się nie nauczysz :) /edit: Przed main'em: int ** tablica = NULL; w main'ie: [Code src="C++"]tablica = new int*[y]; //... itd [/code] |
|
steckel Temat założony przez niniejszego użytkownika |
» 2009-03-25 21:11:24 Właśnie się nauczyłem jak się to robi z tablicami dwuwymiarowymi, bo wcześniej myślałem, że można je przekazywać jak tablicę jednowymiarową. Jeszcze pomyślę nad funkcją losuj(), bo program się zawiesza, a kompilator nie wyświetla błędów. Dzięki serdeczne za pomoc :) /------ Program zawiesza się tutaj: for( int a = 0; a < szerokosc; a++ ) { for( int b = 0; b < wysokosc; b++ ) { plansza[ a ][ b ] = 0; } } Czy do tej tablicy należy się jakoś inaczej odwoływać? |
|
DejaVu |
» 2009-03-25 21:20:11 Popraw: plansza[ a ][ b ] = 0; na: plansza[ b ][ a ] = 0; |
|
1 « 2 » 3 |