• 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ń

VPS Starter Arubacloud
0 głosów
2,073 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,099 wizyt
+2 głosów
2 odpowiedzi 3,487 wizyt
pytanie zadane 14 lipca 2015 w C i C++ przez Wadim Początkujący (260 p.)
0 głosów
2 odpowiedzi 5,896 wizyt
pytanie zadane 14 sierpnia 2016 w Java przez Patryk Rafał Bywalec (2,700 p.)

93,015 zapytań

141,978 odpowiedzi

321,271 komentarzy

62,358 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

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...