multim Temat założony przez niniejszego użytkownika |
Zadanie domowe nr 1. z rozdziału 21, wątek nr: n++ » 2015-07-24 15:09:27 Jestem kolejnym newbie, który poległ na tym zadaniu. Walczyłem trzeci dzień i spasowałem. Program się zapętla w okolicach funkcji: sprawdzCzyUzyta(int t[], int wynikT[], int idLosowania, int ile, int iK); Cały kod: #include <iostream> #include <cstdlib> #include <ctime> using namespace std;
int wprowadz_dane( int t[], int ile ) { cout << "Podaj " << ile << " liczby:" << endl; int i = 0; do { cin >> t[ i ]; i++; } while( i < ile ); return 0; }
int losuj( int ile ) { return rand() % ile; }
char sprawdzCzyUzyta( int t[], int wynikT[], int idLosowania, int ile, int iK ) { int tmp = 0; int i = 0; do { if( tmp != t[ idLosowania ] ) { tmp = t[ idLosowania ]; wynikT[ i + iK ] = t[ idLosowania ]; iK++; } else { return true; } i++; } while( i < ile - 1 ); iK++; return false; }
int wypisz_wyniki( int t[], int ile ) { int i = 0; do { cout << i + 1 << ": " << t[ i ] << endl; i++; } while( i < ile - 1 ); return false; return 0; }
int main() { srand( time( 0 ) ); int tablica[ 3 ], wynik[ 2 ], ile = 3, los, iK = 0; wprowadz_dane( tablica, ile ); cout << endl; int i = 0; do los = losuj( ile ); while( sprawdzCzyUzyta( tablica, wynik, los, ile, iK ) == true ); wypisz_wyniki( wynik, ile ); cout << endl; return 0; }
Edit: Przepraszam, wkleiłem zły kod. |
|
pekfos |
» 2015-07-24 15:11:52 char sprawdzCzyUzyta( int t[], int wynikT[], int idLosowania, int ile, int iK ) { int tmp = 0; int i = 0; do { if( tmp != t[ idLosowania ] ) { tmp = t[ idLosowania ]; wynikT[ i + iK ] = t[ idLosowania ]; iK++; } else { return true; } i++; } while( i < ile - 1 ); iK++; return false; }
|
Co to wg ciebie robi? |
|
multim Temat założony przez niniejszego użytkownika |
» 2015-07-24 15:59:12 Funkcja miała sprawdzać, czy jest obecna wartość t[idLosowania] - tablica z wprowadzonymi 3 zmiennymi, w tablicy z wynikami - wynikT[].
PS. Może nie powinienem się brać za programowanie? Próbowałem czytać B. Eckela, ale nie szło mi to zbyt dobrze, kolejną szansą był ten kurs. Ech... |
|
pekfos |
» 2015-07-24 16:14:26 Funkcja miała sprawdzać, czy jest obecna wartość t[idLosowania] - tablica z wprowadzonymi 3 zmiennymi, w tablicy z wynikami - wynikT[]. |
Skoro z t[] używasz tylko t[idLosowania], to po co ci w tej funkcji tablica i indeks, zamiast przekazywać od razu tą wartość? I skoro chcesz tylko sprawdzić, czy jakaś wartość jest w tablicy wynikT[], to dlaczego przypisujesz coś co tej tablicy..? Próbowałem czytać B. Eckela, ale nie szło mi to zbyt dobrze |
Thinking in C++? To lepsze dla przeprowadzających się z C i średnio-zaawansowanych, a nie dla początkujących. |
|
multim Temat założony przez niniejszego użytkownika |
» 2015-07-24 17:43:38 Próbowałem się wzorować na rozwiązaniu z wcześniejszych tematów, w którym po pozytywnym sprawdzeniu (braku obecności danej wartości w tablicy wynikowej) przypisywało ją do tej tablicy.
|
|
pekfos |
» 2015-07-24 17:55:54 w którym po pozytywnym sprawdzeniu (braku obecności danej wartości w tablicy wynikowej) przypisywało ją do tej tablicy. |
W jaki sposób możesz stwierdzić, że wartości w tablicy nie ma, skoro nie sprawdziłeś wszystkich elementów? Nie mieszaj ze sobą tylu rzeczy, bo bez odpowiedniego planowania nic ci z tego nie wyjdzie. Nazwałeś funkcję 'sprawdz', więc tylko sprawdzaj. |
|
multim Temat założony przez niniejszego użytkownika |
» 2015-07-24 19:01:24 Poprawiłem co nieco, ale nadal wyniki wychodzą z pustych komórek tabeli. Da się jakoś śledzić w debuggerze CodeBlocksa wartości z poszczególnych komórek tabeli? Aktualizacja kodu: #include <iostream> #include <cstdlib> #include <ctime> using namespace std;
int wprowadz_dane( int t[], int ile ) { cout << "Podaj " << ile << " liczby:" << endl; int i = 0; do { cin >> t[ i ]; i++; } while( i < ile ); return 0; }
int losuj( int ile ) { return rand() % ile; }
int przypiszWynik( int wejsciowaT[], int los, int wyjsciowaT[], int iNr ) { wyjsciowaT[ iNr ] = wejsciowaT[ los ]; return 0; }
bool sprawdzCzyUzyta( int sprLiczbe, int t[], int idLosowania, int licznik, int przekaz[] ) { int i = 0; do { if( t[ i ] != sprLiczbe ) { licznik++; przypiszWynik( t, idLosowania, przekaz, i ); } else { return true; } i++; } while( i < licznik ); return false; }
int wypisz_wyniki( int t[], int ile ) { int i = 0; do { cout << i + 1 << ": " << t[ i ] << endl; i++; } while( i < ile - 1 ); return false; return 0; }
int main() { srand( time( 0 ) ); int tablica[ 3 ], wynik[ 2 ], ile = 3, los, liczbaSpr, iLicznik = 0; wprowadz_dane( tablica, ile ); cout << endl; do { los = losuj( ile ); liczbaSpr = tablica[ los ]; } while( sprawdzCzyUzyta( liczbaSpr, wynik, los, iLicznik, wynik ) == true ); wypisz_wyniki( wynik, ile ); cout << endl; return 0; }
|
|
carlosmay |
» 2015-07-24 19:15:16 Funkcja sprawdzającą powinna zwracać wartość typu bool. Do sprawdzenia wystarczy ci wartość do porównania, tablica wynikowa i jej rozmar. Sprawdzasz czy dana wartość jest w tablicy. Jak jest true, jak nie false.
|
|
« 1 » 2 3 |