carlosmay |
» 2015-08-28 14:00:54 wyswietl_tablice( tablica_2_el, 2, 1 ); tutaj powinieneś przekazać obie tablice i rozmiar drugiej. Wypisujesz wartość pierwszej tablicy z indeksem zapisanym w drugiej tablicy. Rozbij sobie wypisywanie na dwie funkcje: 1. Wypisz dane użytkownika 2. Wypisz dane wynikowe. Jak skumasz co jest nie tak możesz spróbować je połączyć w jedną całość. |
|
Deivid Temat założony przez niniejszego użytkownika |
» 2015-08-28 14:13:38 Na razie sie zastanawiam co Ty do mnie powiedziałeś:) Jak mam przekazać obie tablice z rozmiarem drugiej? wyswietl_tablice( tablica_2_el, 2, 1 ); - faktycznie popełniłem błąd bo trzecim argumentem jest 1 a powinna być 2, jednak to odpowiada tylko dwóm różnym "cout'om". Powinno być: wyswietl_tablice( tablica_2_el, 2, 2 ); Ten błąd nie zmienia faktu że nadal program mi kijowo losuje ;/ Edit 1: zmieniłem trochę kod, wydaje się jakby teraz działało poprawnie: if( sprawdzenie_losowania( tablica_2_el, wylosowany_indeks, licznik ) == false ) wcześniej była tab tablica_3_el |
|
carlosmay |
» 2015-08-28 14:38:01 Na razie sie zastanawiam co Ty do mnie powiedziałeś:) Jak mam przekazać obie tablice z rozmiarem drugiej? |
wyswietl_tablice( tablica_3_el, tablica_2_el, 2 ); Napisz do tego funkcję: w tablica_3_el przechowujesz liczby użytkownika, w tablica_2_el przechowujesz wylosowane indeksy. Do tego etapu wszytko jest ok. Później chcesz wyświetlić liczby z tablica_3_el , ale jej nie przekazujesz do funkcji. tablica_3_el - tu są wartości tablica_2_el - tu są indeksy do tablicy tablica_3_el Do wyświetlenia liczb użytkownika napisz taką funkcję void wypisz_uzytkownika( int tab[], int rozmiar ) Kluczem do ogarnięcia dużych problemów jest rozbicie ich na jak najmniejsze składniki. |
|
Deivid Temat założony przez niniejszego użytkownika |
» 2015-08-28 15:13:08 ok, po kolei. Bo zaczynam mieć mętlik. Na wstępie dzięki, ze próbujesz mi pomóc :) Tworzę funkcję wyświetlającą. Ma ona wyświetlić 2 tablice? Czy też mam to zastosować w taki sposób: {...tablica_3_el[ tablica_2_el[ licznik ] ] licznik++; while( licznik < 2 ) } Nie żebym szedł na łatwiznę, ale chyba lepiej jak wysłałbyś kod i usiadłbym sobie nad nim do wieczora, a później sprawdziłbym czy zrozumiałem na zadaniu 2. Edit, Ja nie losuje w zadaniu indexu i nei zapisuje go do tab2, mam wylosowaną całą liczbę z tablicy 3 el i zapisuje caly wynik od razu do tablicy 2 el |
|
carlosmay |
» 2015-08-28 15:30:11 Ja nie losuje w zadaniu indexu i nei zapisuje go do tab2 |
a powinieneś. A to jest w dobrym kierunku. {...tablica_3_el[ tablica_2_el[ licznik ] ] licznik++; while( licznik < 2 ) } |
|
|
Deivid Temat założony przez niniejszego użytkownika |
» 2015-08-28 16:00:18 O to chodzi:
#include<iostream> #include<cstdlib> #include<ctime> using namespace std; void wypelnij_tablice( int tab[], int rozmiar_tablicy ) { cout << "Wprowadz 3 liczby: \n"; int licznik = 0; do { cin.clear(); cin.sync(); cin >> tab[ licznik ]; licznik++; } while( licznik < rozmiar_tablicy ); } void wyswietl_tablice( int tab[], int rozmiar_tablicy ) { int licznik = 0; do { cout << "Element " << licznik + 1 << " tablicy to: " << tab[ licznik ] << "\n"; licznik++; } while( licznik < rozmiar_tablicy ); } int losowanie_indeksu( int ilosc_losowan ) { return(( rand() % ilosc_losowan ) + 0 ); }
bool sprawdzenie_losowania( int tab[], int wylosowany_indeks, int licznik_losowan ) { if( licznik_losowan <= 0 ) return false; int licznik = 0; do { if( wylosowany_indeks == tab[ licznik ] ) return true; licznik++; } while( licznik < licznik_losowan ); return false; }
int main() { srand( time( NULL ) ); int tablica_3_el[ 3 ]; int tablica_2_el[ 2 ]; wypelnij_tablice( tablica_3_el, 3 ); wyswietl_tablice( tablica_3_el, 3 ); int wylosowany_indeks, licznik = 0; do { wylosowany_indeks = losowanie_indeksu( 3 ); if( sprawdzenie_losowania( tablica_2_el, wylosowany_indeks, licznik ) == false ) { tablica_2_el[ licznik ] = wylosowany_indeks; licznik++; } } while( licznik < 2 ); cout << "\nNowa tablica: \n"; licznik = 0; do { cout << "Element " << licznik + 1 << " to: " << tablica_3_el[ tablica_2_el[ licznik ] ] << "\n"; licznik++; } while( licznik < 2 ); return 0; }
Edit. Na razie się poddaję. Wroce z roboty przeczytam jeszcze raz dzial o liczbach losowych bez powtorzen i usiade do tego od nowa. |
|
carlosmay |
» 2015-08-28 16:21:59 Na razie się poddaję. Wroce z roboty przeczytam jeszcze raz dzial o liczbach losowych bez powtorzen i usiade do tego od nowa. |
Teraz działa prawidłowo. #include<iostream> #include<cstdlib> #include<ctime> using namespace std;
void wypelnij( int tab[], int rozm ) { cout << "Podaj trzy liczby calkowite: " << endl; int i = 0; do { cin >> tab[ i++ ]; cin.clear(); cin.ignore( 100, '\n' ); } while( i < rozm ); }
int losuj( int rozm ) { return rand() % rozm; }
bool sprawdz( int tab[], int rozm, int iIndeks ) { if( rozm < 0 ) return false; int i = 0; do { if( tab[ i++ ] == iIndeks ) return false; } while( i < rozm ); return true; }
void wypisz( int tab1[], int tab2[], int rozm ) { cout << "Oto wylosowane wartości: " << endl; int i = 0; do { cout << tab1[ tab2[ i++ ] ] << endl; } while( i < rozm ); cout << endl; }
int main() { srand( time( NULL ) ); const int roz_tab1 = 3; const int roz_tab2 = 2; int tab1[ roz_tab1 ]; int tab2[ roz_tab2 ]; int indeks = 0; int aktual_roz = 0; int i = 0; wypelnij( tab1, roz_tab1 ); do { indeks = losuj( roz_tab2 ); do { if( sprawdz( tab2, roz_tab2, indeks ) ) { tab2[ aktual_roz++ ] = indeks; break; } } while( ++i < roz_tab1 ); } while( aktual_roz < roz_tab2 ); wypisz( tab1, tab2, roz_tab2 ); system( "pause" ); return 0; } Możesz to zerknąć. Może coś ci się przyda. Jeśli chcesz działać na wartościach, nie indeksach musisz dodać wykrywanie czy użytkownik nie podaje takich samych liczb (bo jak poda trzy takie same to program się zapętli, bo będzie porównywał wciąż te same wartościl |
|
Deivid Temat założony przez niniejszego użytkownika |
» 2015-09-02 12:58:05 Wróciłem na nowo do problemu. Przeanalizowałem Twój kod programu i niestety jest on niepoprawny. Twój program działa na zasadzie losowania indeksu z tablicy 1 i sprawdzenie czy zostal już on wykorzystany w tablicy 2. Jeśli np tam tab1[0] =4, tab1[1]=4, tab1[2]=3 to jest prawdopodobieństwo że w tablicy2 zostanie zapisana wartośc indexu 1 i 2, a to spowoduje wylosowanie nam liczb 4 i 4 a więc się powtórzą. Czekam dalej na podpowiedzi. |
|
1 « 2 » 3 |