domin568 Temat założony przez niniejszego użytkownika |
» 2013-02-20 19:20:41 Wymyśliłem coś takiego jednak mam błąd invalid conversion from 'int' to 'int*' [-fpermissive] i nie widze tutaj błędu w tej linijce : int * kosci_przeciwnika = losuj( kosci, wszystkie_kosci ); . Tutaj cały kod : int wartosc = 0; int wartoscWygranej = 0; using namespace std; void rzucKosci( int kosci, int wszystkie_kosci );
int main() { string START; cout << "**************************" << endl; cout << "| GRA W KOSCI |" << endl; cout << "| DOMINIK TAMIOLLO |" << endl; cout << "**************************" << endl; rzucKosci( 5, 6 ); return 0; }
int losuj( int kosci, int wszystkie_kosci ) { int rzucone[ wszystkie_kosci + 1 ]; for( int i = 0; i < kosci; i++ ) { int * rzucone = new int[ i ]; rzucone[ i ] = rand() %( wszystkie_kosci ) + 1; cout << "Twoje kosci to: " << rzucone[ i ] << endl; } return * rzucone; } void rzucKosci( int kosci, int wszystkie_kosci )
{ char znak = 'T'; srand( time( NULL ) ); int rozmiar = wszystkie_kosci + 1; int rzucone[ kosci ]; int tablica[ rozmiar ]; for( int i = 0; i < rozmiar; i++ ) { tablica[ i ] = 0; } int * kosci_przeciwnika = losuj( kosci, wszystkie_kosci ); for( int i = 0; i < rozmiar; i++ ) { kosci_przeciwnika[ i ] = 0; tablica[ kosci_przeciwnika[ i ] ] ++; cout << kosci_przeciwnika[ i ] << endl; } Nie pisz posta pod postem, używaj opcji Edytuj. Kurs STC - xevuel |
|
|
unimator |
» 2013-02-20 19:22:36 int * losuj( int kosci, int wszystkie_kosci ) { int * rzucone = new int[ wszystkie_kosci + 1 ]; for( int i = 0; i < kosci; i++ ) { rzucone[ i ] = rand() %( wszystkie_kosci ) + 1; cout << "Twoje kosci to: " << rzucone[ i ] << endl; } return rzucone; }
int * pRzuconeA = losuj( 5, 5 ); int * pRzuconeB = losuj( 10, 10 );
for( int i = 0; i < 5; ++i ) pRzuconeA[ i ] = i * i;
delete[] pRzuconeA; delete[] pRzuconeB;
I jeszcze jedno: int rzucone[ wszystkie_kosci + 1 ];
Po co Ci ten dodatkowy element? @down Ta, coś dzisiaj nie mogę ogarnąć kodowania. |
|
Berux |
» 2013-02-20 19:23:58 return * rzucone; - myślę, że powinieneś zamienić to na: return & rzucone; @up int * pRzuconeB = losuj( 10, 10; - nawiasik |
|
domin568 Temat założony przez niniejszego użytkownika |
» 2013-02-20 19:48:11 tomczyk dobry pomysł tylko że jak zamienie to na & to mam błąd [Error] cannot convert 'int**' to 'int*' in return , 36 linijka czyli przy zwracaniu &return Kod: int * losuj( int kosci, int wszystkie_kosci ) { int * rzucone = new int[ wszystkie_kosci + 1 ]; for( int i = 0; i < kosci; i++ ) { rzucone[ i ] = rand() %( wszystkie_kosci ) + 1; cout << "Twoje kosci to: " << rzucone[ i ] << endl; } return & rzucone; } void rzucKosci( int kosci, int wszystkie_kosci ) { char znak = 'T'; srand( time( NULL ) ); int rozmiar = wszystkie_kosci + 1; int rzucone[ kosci ]; int tablica[ rozmiar ]; for( int i = 0; i < rozmiar; i++ ) { tablica[ i ] = 0; } int * kosci_przeciwnika = losuj( kosci, wszystkie_kosci ); for( int i = 0; i < rozmiar; i++ ) { tablica[ kosci_przeciwnika[ i ] ] ++; cout << tablica[ i ] << endl; } |
|
Berux |
» 2013-02-20 20:22:37 Zwróć: return rzucone; Przedtem nawet nie popatrzyłem na kod. Błąd taki dostajesz, bo próbujesz zwrócić adres ?(zmiennej wskaźnikowej). Nie wiem czy to odpowiednia nazwa. W razie czego poprawcie :D /edit: Plus jeszcze: void rzucKosci( int kosci, int wszystkie_kosci ) { char znak = 'T'; srand( time( NULL ) ); int rozmiar = wszystkie_kosci + 1; int rzucone[ kosci ]; int tablica[ rozmiar ]; for( int i = 0; i < rozmiar; i++ ) { tablica[ i ] = 0; } int * kosci_przeciwnika = losuj( kosci, wszystkie_kosci ); for( int i = 0; i < rozmiar; i++ ) { tablica[ kosci_przeciwnika[ i ] ] ++; cout << tablica[ i ] << endl; } }
|
|
domin568 Temat założony przez niniejszego użytkownika |
» 2013-02-21 17:21:00 Witajcie , napisałem moją aplikacje od nowa , bo już się w tym kodzie pogubiłem , wszystko mi ładnie szło , żadnych błędów kompilacji i poprostu konsola mi się zawiesza gdy jest instrukcja tablica rzucone[i] ++ . Czemu tak się dzieje ? Szukałem błędu dosyć długo , ale nic nie znalazłem :( Kod (light :P ) #include <iostream> #include <stdlib.h> #include <time.h>
using namespace std; int * losuj( int, int ); void rzucKosci( int kosci, int wszystkie_kosci );
int main() { string START; cout << "**************************" << endl; cout << "| GRA W KOSCI |" << endl; cout << "| DOMINIK TAMIOLLO |" << endl; cout << "**************************" << endl; rzucKosci( 5, 6 ); return 0; }
void rzucKosci( int kosci, int wszystkie_kosci ) { losuj( 6, 5 ); int rozmiar = wszystkie_kosci + 1; int rzucone[ kosci ]; int tablica[ rozmiar ]; for( int i = 0; i < rozmiar; i++ ) { tablica[ i ] = 0; } for( int i = 0; i < kosci; i++ ) { } } int * losuj( int kosci, int wszystkie_kosci ) { int rozmiar = wszystkie_kosci; int * tablica = new int[ rozmiar ]; int * rzucone = new int[ rozmiar ]; srand( time( NULL ) ); for( int i = 0; i < wszystkie_kosci; i++ ) { * rzucone = rand() % kosci + 1; tablica[ rzucone[ i ] ] ++; cout << * rzucone << endl; } return tablica; return rzucone; }
|
|
unimator |
» 2013-02-21 18:21:54 int * losuj( int kosci, int wszystkie_kosci ) { int rozmiar = wszystkie_kosci; int * tablica = new int[ rozmiar ]; int * rzucone = new int[ rozmiar ]; srand( time( NULL ) ); for( int i = 0; i < wszystkie_kosci; i++ ) { * rzucone = rand() % kosci + 1; tablica[ rzucone ] ++; cout << * rzucone << endl; }
Pewnie komentarze nie wystarczą więc wyjaśniam: int * pointer = new int; * pointer = 3;
Zgadnij co się stanie jak spróbujesz wypisać: *pointer Zgadłeś, zostanie wypisane 3. A teraz zgadnij co się stanie jak spróbujesz wypisać: pointer Niespodzianka (albo i nie). Zostanie wypisany adres, na który wskazuje zmienna int * pointer. Czyli liczba, która kompletnie nas nie interesuje w arytmetyce. Poza tym: * rzucone = rand() % kosci + 1;
Z dereferencji zmiennej rzucone otrzymasz dostęp do pierwszego elementu tablicy (i tylko pierwszego bo nie ma tu offsetu co obieg pętli a chyba o to Ci chodziło). No i jeszcze taka mniejsza uwaga, teoretycznie kosmetyczna. Zgadnij czemu ten kod jest zły: int a = 1; int b = a; int c = b; int d = c; printf( "%i\n", d );
A teraz zobacz co robisz: int rozmiar = wszystkie_kosci; int * tablica = new int[ rozmiar ]; int * rzucone = new int[ rozmiar ];
for( int i = 0; i < wszystkie_kosci; i++ )
No i jeszcze Twój program ma wycieki pamięci bo nie usuwasz tablic w funkcji losuj. Więcej nie chce mi się szukać. |
|
domin568 Temat założony przez niniejszego użytkownika |
» 2013-02-21 18:42:18 Dzięki , zrozumiałem , tylko że mam teraz problem ze sprawdzeniem czy jest dwójka , para , etc . Kiedy jest na przykład para to wypisuje tylko jedną dwójke , czasami wypisze 2 dwójki , dosyć to dziwne może wy mi pomożecie w tym troche :P ?? Kod: #include <iostream> #include <stdlib.h> #include <time.h>
using namespace std; int * losuj( int, int ); void rzucKosci( int kosci, int wszystkie_kosci );
int main() { string START; cout << "**************************" << endl; cout << "| GRA W KOSCI |" << endl; cout << "| DOMINIK TAMIOLLO |" << endl; cout << "**************************" << endl; rzucKosci( 5, 6 ); return 0; }
void rzucKosci( int kosci, int wszystkie_kosci ) { losuj( 6, 5 ); int rozmiar = kosci + 1; int rzucone[ kosci ]; int tablica[ rozmiar ]; for( int i = 0; i < rozmiar; i++ ) { tablica[ i ] = 0; } } int * losuj( int kosci, int wszystkie_kosci ) { int rozmiar = wszystkie_kosci; int * tablica = new int[ rozmiar ]; int * rzucone = new int[ rozmiar ]; srand( time( NULL ) ); for( int i = 0; i < rozmiar; i++ ) { tablica[ i ] = 0; } for( int i = 0; i < wszystkie_kosci; ++i ) { rzucone[ i ] = rand() %( wszystkie_kosci ) + 1; tablica[ rzucone[ i ] ] ++; cout << rzucone[ i ] << endl; } cout << endl; for( int i = 0; i < rozmiar; i++ ) { cout << tablica[ i ] << endl; } return rzucone; } |
|
1 « 2 » 3 |