Speedwaymonia93 Temat założony przez niniejszego użytkownika |
Rozdział 21 - zadanie domowe pierwsze » 2016-08-16 18:21:00 Witajcie! Proszę o pomoc! Oto mój kod ale nie działa bo przy kompilacji wyskakują mi błędy opisane w komentarzu do linijki gdzie się pojawia: Z góry dzięki za pomoc :) #include <iostream> #include <cstdlib> #include <ctime> #include <limits>
void wczytaj_liczbe( int tablica_poczatkowa[], int ilosc_liczb ) { std::cout << "Podaj: " << ilosc_liczb << " liczby: " << std::endl; int i = 0; do { std::cin.clear(); std::cin.sync(); std::cin >> tablica_poczatkowa[ i ]; i++; } while( i < ilosc_liczb ); }
void wylosuj( int tablica_koncowa[], int ile_wylosowac ) { int i = 0; do { tablica_koncowa[ i ] =( std::rand() & ile_wylosowac ); i++; } while( i < ile_wylosowac ); }
bool porownanie_tablic( int tablica_poczatkowa[], int tablica_koncowa[], int ile_wylosowac ) { int i = 0; do { if( tablica_poczatkowa[ i ] == tablica_koncowa[ ile_wylosowac ] ) return true; i++; } while( i < ile_wylosowac ); return false; }
int wypisz_wynik( int tablica_koncowa[], int ile_wylosowac ) { int i = 0; do { std::cout << tablica_koncowa[ i ] << ","; i++; } while( i < ile_wylosowac ); } int main() { srand( time( NULL ) ); int tablica_poczatkowa1[ 3 ]; int tablica_koncowa1[ 2 ]; int indeks = 0; int wczytaj = wczytaj_liczbe( tablica_poczatkowa1, 3 ); do { std::cout << "Podales nastepujce liczby: " << wczytaj << ","; indeks++; } while( indeks < 3 ); do { int ile_wylosowac1 = 0; int i = 0; int wynik_losowania = wylosuj( tablica_koncowa1[], 2 ); if( porownanie_tablic( tablica_poczatkowa1, tablica_koncowa1, ile_wylosowac1 ) == false ) { tablica_koncowa1[ ile_wylosowac1 ] = tablica_poczatkowa1; ile_wylosowac1++; } } while( ile_wylosowac1 < 2 ); wypisz_wynik( tablica_koncowa1, 2 ); return 0; }
|
|
carlosmay |
» 2016-08-16 18:34:04 do { int ile_wylosowac1 = 0; int i = 0; int wynik_losowania = wylosuj( tablica_koncowa1[], 2 ); if( porownanie_tablic( tablica_poczatkowa1, tablica_koncowa1, ile_wylosowac1 ) == false ) { tablica_koncowa1[ ile_wylosowac1 ] = tablica_poczatkowa1; ile_wylosowac1++; } } while( ile_wylosowac1 < 2 );
|
|
Speedwaymonia93 Temat założony przez niniejszego użytkownika |
» 2016-08-16 19:11:49 ok dwa błędy poprawiłam. Nadal nie wiem jednak jak poprawić ten gdzie przypisuje wynik jednej tablicy do drugiej
|
|
carlosmay |
» 2016-08-16 20:36:59 Kopiowanie jednej tablicy do drugiej std::copy(), jeśli tylko jedną wartość to przypisz element z jednej tablicy do elementu drugiej. int t1[ 2 ] { 1, 2 }; int t2[ 2 ] { }; t2[ 0 ] = t1[ 1 ]; t2[ 1 ] = t1[ 0 ]; Teraz tablica t2 ma wartości w odwrotnej kolejności do t1. |
|
Speedwaymonia93 Temat założony przez niniejszego użytkownika |
» 2016-08-17 10:40:20 Poprawiłam jedną rzecz w kodzie (zaznaczyłam w komentarzu) ale program nie działa tak jak powinien, tzn: Każe mi podać trzy liczby i to jest ok ale potem wyświetla komunikat "Podałeś następujące liczby: 0. Podałeś następujące liczby: 0,2,3". Czyli program w ogóle nie losuje mi liczb z tych które wpisuje. Już nie wiem co jest nie tak. Oto kod: #include <iostream> #include <cstdlib> #include <ctime> #include <limits>
int wczytaj_liczbe( int tablica_poczatkowa[], int ilosc_liczb ) { std::cout << "Podaj: " << ilosc_liczb << " liczby: " << std::endl; int i = 0; do { std::cin.clear(); std::cin.sync(); std::cin >> tablica_poczatkowa[ i ]; i++; } while( i < ilosc_liczb ); }
int wylosuj( int tablica_koncowa[], int ile_wylosowac ) { int i = 0; do { tablica_koncowa[ i ] =( std::rand() & ile_wylosowac ); i++; } while( i < ile_wylosowac ); }
bool porownanie_tablic( int tablica_poczatkowa[], int tablica_koncowa[], int ile_wylosowac ) { int i = 0; do { if( tablica_poczatkowa[ i ] == tablica_koncowa[ ile_wylosowac ] ) return true; i++; } while( i < ile_wylosowac ); return false; }
int wypisz_wynik( int tablica_koncowa[], int ile_wylosowac ) { int i = 0; do { std::cout << tablica_koncowa[ i ] << ","; i++; } while( i < ile_wylosowac ); } int main() { srand( time( NULL ) ); int tablica_poczatkowa1[ 3 ]; int tablica_koncowa1[ 2 ]; int indeks = 0; int wczytaj = wczytaj_liczbe( tablica_poczatkowa1, 3 ); do { std::cout << "Podales nastepujce liczby: " << wczytaj << ","; indeks++; } while( indeks < 3 ); int ile_wylosowac1 = 0; do { int i = 0; int wynik_losowania = wylosuj( tablica_koncowa1, 2 ); if( porownanie_tablic( tablica_poczatkowa1, tablica_koncowa1, ile_wylosowac1 ) == false ) { tablica_koncowa1[ ile_wylosowac1 ] = tablica_poczatkowa1[ i ]; ile_wylosowac1++; } } while( ile_wylosowac1 < 2 ); wypisz_wynik( tablica_koncowa1, 2 ); return 0; }
|
|
carlosmay |
» 2016-08-17 11:40:53 Losujesz indeksy z rozmiaru pierwszej tablicy, i umieszczasz je w drugiej tablicy, następnie wykorzystujesz drugą tablicę jako indeksy do wypisania liczb z pierwszej tablicy. Łatwiej napisać kod (mam nadzieję, że jest dość czytelny). #include <iostream> #include <cstdlib> #include <ctime> #include <numeric> using namespace std;
int pobierzLiczbe() { int liczba { }; while( !( cin >> liczba ) ) { cin.clear(); cin.ignore( numeric_limits < streamsize >::max(), '\n' ); } cin.ignore( numeric_limits < streamsize >::max(), '\n' ); return liczba; }
void wypelnijTablice( int tablicaUzytkownika[], size_t rozmiar ) { for( size_t i = 0; i < rozmiar; ++i ) { tablicaUzytkownika[ i ] = pobierzLiczbe(); } }
int wylosujIndeks( int start, int stop ) { return rand() %( stop - start ); }
bool czyBylWylosowanyIndeks( int indeks, int tablicaWylosowanychIndeksow[], size_t aktualnyRozmiar ) { if( aktualnyRozmiar <= 0 ) { return false; } for( size_t i = 0; i < aktualnyRozmiar; ++i ) { if( indeks == tablicaWylosowanychIndeksow[ i ] ) { return true; } } return false; }
void wypiszWylosowaneLiczby( int tablicaUzytkownika[], int tablicaWylosowanychIndeksow[], size_t rozmiarTablicyIndeksow ) { for( size_t i = 0; i < rozmiarTablicyIndeksow; ++i ) { cout << tablicaUzytkownika[ tablicaWylosowanychIndeksow[ i ] ] << ' '; } }
int main() { srand( time( 0 ) ); constexpr size_t rozmiarTablicyUzytwnika = 3; constexpr size_t rozmiarTablicyWylosowanychIndeksow = 2; int tablicaUzytkownika[ rozmiarTablicyUzytwnika ]; int tablicaWylosowanychIndeksow[ rozmiarTablicyWylosowanychIndeksow ]; int wylosowanyIndeks { }; wypelnijTablice( tablicaUzytkownika, rozmiarTablicyUzytwnika ); size_t licznik { }; do { wylosowanyIndeks = wylosujIndeks( 0, rozmiarTablicyUzytwnika ); if( !czyBylWylosowanyIndeks( wylosowanyIndeks, tablicaWylosowanychIndeksow, licznik ) ) { tablicaWylosowanychIndeksow[ licznik ] = wylosowanyIndeks; ++licznik; } } while( licznik < rozmiarTablicyWylosowanychIndeksow ); wypiszWylosowaneLiczby( tablicaUzytkownika, tablicaWylosowanychIndeksow, rozmiarTablicyWylosowanychIndeksow ); } |
|
« 1 » |