• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed Losowanie dwóch z trzech podanych liczb bez powtórzeń

Object Storage Arubacloud
0 głosów
1,893 wizyt
pytanie zadane 12 czerwca 2015 w C i C++ przez damian955 Nowicjusz (120 p.)
zamknięte 13 czerwca 2015 przez damian955
Potrzebuję pomocy gdyż nie umiem stworzyć kodu na brak powtórzenia. Oczywiście powinienem to umieć, bo uczę się z pewnego kursu, którego nie będę reklamować gdyż na jego forum wypowiadają się ludzie, którzy nie mają o niczym pojęcia i rzucają samymi ogólnikami. Stworzyłem program, który każe podać trzy dowolne liczby całkowite. Później zostają one wypisane na ekran. Zaznaczam, iż liczby te są w postaci tablicy. Później program losuje numer tablicy. Później program wypisuje 2 liczby dzięki wylosowanemu numerowi tablicy jedna po drugiej wypisując przy okazji jakie to liczby są. Wszystko prawie udało mi się zrobić oprócz wylosowania bez powtórzenia. Myślę nad tym już chyba tydzień i tylko się wkurzam, czy może mi ktoś wytłumaczyć co mam zrobić, żeby utworzyć losowanie bez powtórzeń wcześniej podanych liczb? Najlepiej by było gdyby było to wytłumaczone w taki sposób, aby stworzenie kodu nie wymagało utworzenia dodatkowych funkcji, bo tak lepiej przyswajam kod, a później i tak zamieniam to na funkcję, taki mam sposób pisania programów. Pozwala mi to utrwalać obszerniejszą wiedzę oraz uczy szybkiego pisania kodu, przynajmniej dla mnie. Nie liczb losowych podawanych przez program co jest dużą róźnicą, a to dałbym rade korzystając z podanego kodu we wcześniej wspomnianym tutorialu.

Nie wiem czy taki opis programu wystarczy, ale kodu wkleić nie mogłem, bo wyskakuje błąd limitu znaków? Chyba taki
komentarz zamknięcia: Odpowiedź uzyskana.

1 odpowiedź

0 głosów
odpowiedź 12 czerwca 2015 przez iwan9449 Pasjonat (20,810 p.)
Nie wiem w czym problem. Wystarczy stworzyć zmienną przechowującą indeks już wylosowanej liczby. Pobierasz liczby od urzytkownika, wrzucasz do tablicy, wypisujesz je. Naztępnie losujesz jedną wpisujesz indeks wylosowanej komórki do zmiennej, potem losujesz drugą i sprawdzasz czy nie wylosowałeś przypadkiem zmiennej o tym samym indeksie :) Oczywiście nie jest to najlepsze rozwiązanie (nie jest skalowalne), ale wydaje mi się, że na początek wstarczy, a Ty będziesz mógł sam się zastanowić jak uloepszyć ten kod.

Pozdrawiam!
komentarz 12 czerwca 2015 przez damian955 Nowicjusz (120 p.)
edycja 12 czerwca 2015 przez damian955
I właśnie mam problem z owym indeksem. Jak się za niego zabrać. Pokażę kawałek kodu:

int main()
{
    srand(time(NULL));
    int a[3],liczba,nr;
    cout<<"Wpisz trzy liczby na ekran:"<<endl;
    wpisz(a,1,0);
    pokaz(a,0);
    printf("Losowanie dwoch z trzech wypisanych liczb:\n");
    nr=1;
    do
    {
        liczba=los();
        cout<<a[liczba]<<endl;
        nr++;

    }while(nr<3);
}

Mam nadzieję, że jasny jest kod nawet bez podawania funkcji, które i tak się nie zmieszczą w komentarzu.

W ostatniej pętli po wylosowaniu liczby ma się pojawić instrukcja warunkowa if dla wypisania liczby na ekran oraz zwiekszenia zmiennej nr. Ale nie wiem jak się zabrać za stworzenie zmiennej przechowującej indeks już wylosowanej liczby. Z tego co chcę uzyskać to, aby program rozumiał, że jeśli zmienna liczba nie zostanie wylosowana ponownie to zrób to i to.

 

Użyłem gotowego kodu z jednej strony i działa wszystko ok tylko nie wiem jak to działa i bez czyjego wytłumaczenia nie zaczaje. Wystarczy mi odpowiedź na zadane pytanie a myślę, że wszystko zrozumiem jak powinienem. Jednak w tej chwili kod skleiłem na odpał. :D
komentarz 12 czerwca 2015 przez iwan9449 Pasjonat (20,810 p.)
#include <iostream>
#include <cstdlib>
#include <time.h>

using namespace std;

int main()
{
    srand(time(NULL));
    int a[3], ile = 0, b[2], liczba, wystapila;
    cout<<"Wpisz trzy liczby na ekran:"<<endl;
    cin>>a[0]>>a[1]>>a[2];
    cout<<a[0]<<" "<<a[1]<<" "<<a[2];
    cout<<"\n\nLosowanie dwoch z trzech wypisanych liczb:\n\n";
    do
    {
        liczba=a[rand()%2];
        wystapila = false;
        for(int i=0; i<2; i++) {
            if(liczba == b[i])
                wystapila = true;
        }

        if(!wystapila) {
            b[ile] = liczba;
            ile++;
        }

    } while(ile != 2);

    cout<<b[0]<<" "<<b[1]<<endl;

return 0;
}

Ten kod dziła poprawnie, pod warunkiem, że podane liczby są różne od siebie, ponieważ porównywałem tytaj liczby nie indeksy. Myślę że możesz w prosty sposób dostosować sobie ten kod do porównywania po indekssach ;)

komentarz 13 czerwca 2015 przez damian955 Nowicjusz (120 p.)
Powiem wprost. Jest hardcore i nie rozumiem tego jeszcze, ale skoro napisałem już program losujący bez powtórzeń i to podanych liczb to napisze ich tyle, aż zaczaję. Dzięki za kod nie wykorzystujący funkcji już go skopiowałem i nad nim popracuję. Temat do zamknięcia. Jak się kapnę, że ja go mogę zamknąć to to zrobię.

Podobne pytania

+1 głos
2 odpowiedzi 2,003 wizyt
+2 głosów
2 odpowiedzi 3,405 wizyt
pytanie zadane 14 lipca 2015 w C i C++ przez Wadim Początkujący (260 p.)
0 głosów
2 odpowiedzi 5,766 wizyt
pytanie zadane 14 sierpnia 2016 w Java przez Patryk Rafał Bywalec (2,700 p.)

92,565 zapytań

141,418 odpowiedzi

319,604 komentarzy

61,951 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...