rosa Temat założony przez niniejszego użytkownika |
Zadanie domowe 1. Rozdział 21 » 2018-10-11 23:29:10 Zadanie domowe 1. Napisz program, który wczyta 3 liczby podane przez użytkownika do tablicy, a następnie wylosuje 2 z nich bez powtórzeń. Wynik wypisz na ekran. Postaraj się napisać ten program w oparciu o funkcje.
Bardzo proszę o pomoc, dotychczas losowanie odbywało się z określonego przedziału czyli np:
( rand() % 10 ) + 5; - losowanie liczby z przedziału o 5 do 14, więc pytanie moje brzmi do zadania domowego jak wylosować 2 liczby z liczb ktore podał użytkownik, skoro kod na losowanie to
( rand() % (ilośc liczb/przedział) ) + (liczba początkowa); nie wiem jaka jest licza początkowa, i nie wiem jaki jest zakres liczb podanych prez uzytkownika, kompletnie nie wiem jak się za tą część zabrać pomimo tego ze przykład w rozdziale 21 przed zadaniem domowym rozumiem całkowicie - tylko że tam użytkowik nie podaje liczb tylko maszyna sama losuje. |
|
pekfos |
» 2018-10-12 00:05:58 W skrócie, umiesz rzucić monetą i wylosować orła albo reszkę. Teraz masz problem by wylosować, czy wypijesz kawę czy herbatę, bo nie możesz znaleźć monety która ma wybitą kawę po jednej stronie i herbatę po drugiej. |
|
rosa Temat założony przez niniejszego użytkownika |
» 2018-10-12 00:30:26 Staram się zrozumieć co chcesz mi powiedziec i wiem, że chcesz mnie naprowadzić, ale chyba jestem za głupi na to... Mam 3 liczby podane przez kogoś i musze wylosować z pośród tych 3 tylko 2 bez powtórzen i nie wiem jak to ułozyc pod ((rand() % x) + y) Czytając Twoją podpowiedz widzę to tak jakbym miał 50 % szans na wylosowanie. Nie wiem czy o to własnie chodzi, ale nawet jeśli chodzi o to dalej nie wiem jak się do tego zabrać. Czasami się zastanawiam co ja tu robię... to pewnie coś banalnego, a mój mózg nie potrafi tego wykminić... |
|
YooSy |
» 2018-10-12 00:47:01 Trzy liczby trzymasz w tablicy, więc wystarczy wylosować dwa indeksy bez powtórzeń, a następnie wypisać wartości spod tych indeksów. Wtedy nawet nie musisz robić dodatkowej arytmetyki przy wyznaczaniu zakresu do wylosowania, bo rand() % rozmiar_tablicy wylosuje ci indeks z tej tablicy. Pozostaje sprawdzenie, czy indeks nie powtórzył się. |
|
rosa Temat założony przez niniejszego użytkownika |
» 2018-10-12 11:46:40 Znalazłem taki kod na forum do zadania, kod bardzo przejrzysty i rozumiem jak działa sprawdzenie czy liczba się nie powtórzyła jak i samo wpisanie do talbicy przez użtkownika po przez funkcje ale nadal nie rozumiem jeden kwestii która nie daje mi spokoju... W jaki sposób program wie które 2 liczby ma wylosować spośród 3 wypisanych przez użytkownika część KODU której nie rozumiem: a = rand() % 3; // zmienna a przyjmuję wartość losową spośród 3 liczb b = rand() % 3; // zmienna b przyjmuję wartość losową spośród 3 liczb następnie w kodzie poniżej obywdie wartośći są sprawdzane czy są takie same - i tutaj jest wszystko zrozumiałe, lecz w nastepnej linicje są wypisywane na ekran czyli tablica[ a ] << " i " << tablica[ b ] - i nie nadal nie mam pojęcia jak te zmienne a i b są docelowo liczbami które podał użytkownik... #include <conio.h> #include <ctime> #include <cstdlib> #include <iostream> using namespace std;
void wpisz( int tablica[] ) { int i = 0; do { cout << "Podaj " << i + 1 << " liczbe: "; cin >> tablica[ i ]; i++; } while( i < 3 ); }
bool sprawdzenie( int tablica[], int a, int b ) { if( tablica[ a ] == tablica[ b ] ) return false; return true; }
int main() { srand( time( NULL ) ); int tablica[ 3 ]; int a; int b; wpisz( tablica ); cout << endl << "Teraz wylosuje 2 sposrod liczb ktore podales!" << endl; do { a = rand() % 3; b = rand() % 3; if( sprawdzenie( tablica, a, b ) == true ) cout << "Wylosowane liczby to: " << tablica[ a ] << " i " << tablica[ b ]; } while( sprawdzenie( tablica, a, b ) == false ); cout << endl << "Dziekuje za skorzystanie z programiku ;)"; _getch(); return 0; }
|
|
jankowalski25 |
» 2018-10-12 13:08:16 przecież to może być cokolwiek innego co podał użytkownik |
Losujesz indeks tablicy, a nie liczbę wprowadzoną przez użytkownika. Mając indeks jesteś w stanie dostać się do podanej liczby, jaka by ona nie była. Dzięki temu nie musisz się przejmować tym, co wpisze użytkownik. Równie dobrze zamiast liczb można byłoby wczytać litery i je losować, wystarczyłoby jedynie podmienić int na char we właściwych miejscach. |
|
rosa Temat założony przez niniejszego użytkownika |
» 2018-10-12 22:30:14 Co ja bym bez Was zrobił... Wszystko jasne, dziękuję bardzo za odpowiedź po prostu rand() % 3 oznacza że zostanie wylosowana liczba z tablicy z indeksem 3 czyli jeśli podmienie tą liczbę na 2 to tylko program wylosuje mi liczbę podaną przez użytkownika jako pierwszą bądz drugą :) teraz to takie oczywiste dla mnie. Dodam, że dla mnie ta komenda wczesniej znaczyła ze zostanie wylosowana jakaś liczba z przedziału jakichś 3 liczb natomiast gdybyśmy za tym: rand() % 3 dopisali np 5 to program wylosowałby liczbę z przedziału od 5 do 7
|
|
rosa Temat założony przez niniejszego użytkownika |
» 2018-10-31 19:31:23 Drodzy koledzy, przyszła pora na drugą część w/w zadania czyli losowanie 8 liczb z 10 podanych przez uztykwnika, na dole załączam kod w który nie rozumiem jednej rzeczy, a mianowicie funkcja int losuj(int pob[]) Dlaczego w tej funkcji wartosc zwaracana to: pob[indeks] skoro do zmiennej int indeks jest przypisana losowa liczba z tych co wprowadził uzytkownik to dlaczego nie po prostu: return indeks; ? Kilka komentarzy wyzej do zadania 1. jedna z osob napsiała, że losuje indeks tablicy, wiec dlaczego tutaj zapis wyglada inaczej i to co zostało przypisane do zmiennej int indeks (czyli jedna z wylsowaynch liczb) jest potem zwracana w formie pob[indeks] - dlaczego w takich nawiasach skoro to tylko numer ideksu a liczby są przypisywane do indeksów. Tablica ma 10 indeksów czyli tab[10] wiec dlaczego do tych nawiasów jest wpisywana liczba wylsowoana? nie pojmuję... #include "pch.h" #include <conio.h> #include <ctime> #include <cstdlib> #include <iostream> using namespace std;
void pobierzLiczby( int tablica[] ) { int i = 0; do { cout << "Podaj " << i + 1 << " liczbeeeeee: "; cin >> tablica[ i ]; i++; } while( i < 10 ); }
bool sprawdzenie( int tablica[], int a ) { int i = 0; do { if( tablica[ i ] == a ) return true; else i++; } while( i < 8 ); return false; }
int losuj( int pob[] ) { int indeks =( rand() % 10 ); return pob[ indeks ]; }
int main() { srand( time( NULL ) ); int pobrane[ 10 ]; int wylosowane[ 8 ]; pobierzLiczby( pobrane ); int i = 0; int liczba; do { do { liczba = losuj( pobrane ); } while( sprawdzenie( wylosowane, liczba ) ); wylosowane[ i ] = liczba; i++; } while( i < 8 ); i = 0; std::cout << std::endl << "Wylosowane: " << std::endl; do { std::cout << wylosowane[ i ] << std::endl; i++; } while( i < 8 ); return 0; }
|
|
« 1 » 2 |