Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Zadanie domowe 1. Rozdział 21

Ostatnio zmodyfikowano 2018-10-31 21:49
Autor Wiadomość
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.
P-172589
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.
P-172590
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ć... 
P-172591
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ę.
P-172592
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...



C/C++
#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; // dotąd wszystko rozumiem
    do {
        a = rand() % 3; // tutaj i poniżej do zmiennej a przypisana jest jakas losowa liczba z przedziału 3 liczb, ale przeciez to moze
        b = rand() % 3; // być cokolwiek innego co podał użytkownik                                         
        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;
}
P-172593
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.
P-172594
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

P-172601
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ę...





C/C++
#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;
}
P-172728
« 1 » 2
  Strona 1 z 2 Następna strona