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

Lekcja 21 zadanie drugie i pytanie

Ostatnio zmodyfikowano 2012-08-24 11:01
Autor Wiadomość
Chris4132
Temat założony przez niniejszego użytkownika
Lekcja 21 zadanie drugie i pytanie
» 2012-08-23 23:19:23
Witam
Na początek przejdę do drugiej części tematu, pytania. Próbowałem sam to rozwiązać, ale nie wychodziło, mimo że próbowałem wszystkiego co do głowy wpadło. Otóż, czy da się stworzyć taki kod, w którym aby wywołać if, A musi być równe B lub C? Jeśli tak, takie coś dało by radę również zastosować w pętli.

Teraz przejdźmy do pierwszej części tematu, czyli zadania. Pierwsze zrobiłem dość szybko, nie miałem zbyt wielu błędów, wystarczyło wylosować tylko dwie liczby z trzech. Ale to ułatwienie znika w zadaniu drugim, w którym trzeba wylosować 8 z 10 liczb. Przypomnę treść zadań:

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. - łatwizna

2. Zmodyfikuj program z pierwszego zadania tak, aby użytkownik musiał podać 10 liczb, a 8 z nich będzie losowanych bez powtórzeń. Sprawdź czy wyniki są poprawne. - difficulty = hardcore

Miałem już kilka chwil krytycznych, ale zwykle udało się wybrnąć z problemu. Ale nie tutaj. Myślałem o pętli, ale nic nie mogę wymyślić, bo wylosować numerki tablicy to proste, ale nie potrafię sprawdzić w jednej pętli jak sprawdzić czy już takie coś zostało wylosowane. Losowanie liczb opanowałem praktycznie do maximum, bo internet nie działał, a kopię kodu z lekcji 21 miałem zapisaną.
Więc proszę o pomoc przy rozwiązaniu, napisanie gotowca zajmie praktycznie kilka minut, ale nie proszę o niego, tylko o kod pętli, losującej 8 z 10 liczb tablicy. Chyba że tu chodzi o dłuuuugi kod, a raczej nie, bo jeśli dobrze rozumiem, C++ już kilka opcji długich kodów wyklucza, a ja taki do tego zadania próbowałem pisać, lecz nie za dużo wyszło.

Dziękuję z góry za pomoc i pozdrawiam, oraz zachęcam nowych w tej dziedzinie do nauki :)

EDIT: Esteban, może źle mnie zrozumiałeś. Chodzi mi o to, że aby wywołać if A musi się równać B lub C  (zależy od programisty), nie samo B. Jeśli jest to możliwe, proszę mały przykład, może dwa. Próbowałem z || i &&, ale mi to nie wychodzi, a to raczej dotyczy true/false i <, <=, >. A jeśli w drugiej odpowiedzi chodzi o for, i ta pętla jest jedynym rozwiązaniem, zamknę temat i przejdę dalej :) Bo do lekcji 21 nie było wspomnienia o pętli for i nie będę jej używał bo jej nie rozumiem. W innych tematach szukałem, i nie bardzo rozumiem wypowiedzi innych osób, a losowanie 10 z 10 liczb jest trochę dziwne. Jeśli się da to na pomoc DejaVu poczekam do jutra, nie lubię się uczyć w nocy. Może to zmęczenie :) Edytuję, bo nowego posta napisać nie mogę.

P-63482
DejaVu
» 2012-08-23 23:26:19
Ja na dzisiaj wyczerpałem limit indywidualnej pomocy :P Musisz zadowolić się tym:
Frazy, które należy wpisać w wyszukiwarkę google:
:) Może ktoś inny indywidualnie podejdzie do Twojego problemu.
P-63483
Esteban
idea
» 2012-08-23 23:40:24
Nie wiem, czy o to ci chodziło, ale...

Pyt1:
C/C++
if( A = B ) if( warunek ) zadanie

Pyt2:
C/C++
for( int i = 0; i < max; )
if( wylosowana liczba != TablicaLiczb[ i ] ) ++i
(Pętla sprawdza czy liczba ta już się powtórzyła, jeśli się nie powtórzyła,
to zajmuje się kolejną) coś w ten deser, sam jestem początkującym
P-63484
Chris4132
Temat założony przez niniejszego użytkownika
» 2012-08-24 00:03:23
Esteban, może źle mnie zrozumiałeś. Chodzi mi o to, że aby wywołać if A musi się równać B lub C  (zależy od programisty), nie samo B. Jeśli jest to możliwe, proszę mały przykład, może dwa. Próbowałem z || i &&, ale mi to nie wychodzi, a to raczej dotyczy true/false i <, <=, >. A jeśli w drugiej odpowiedzi chodzi o for, i ta pętla jest jedynym rozwiązaniem, zamknę temat i przejdę dalej :) Bo do lekcji 21 nie było wspomnienia o pętli for i nie będę jej używał bo jej nie rozumiem. W innych tematach szukałem, i nie bardzo rozumiem wypowiedzi innych osób, a losowanie 10 z 10 liczb jest trochę dziwne. Jeśli się da to na pomoc DejaVu poczekam do jutra, nie lubię się uczyć w nocy. Może to zmęczenie :)
P-63488
DejaVu
» 2012-08-24 00:11:35
C/C++
if( a == b || a == c )
Ale i tak nie wiem czy o to Ci chodzi. Poza tym nie tędy droga w tym zadaniu :)
P-63492
Chris4132
Temat założony przez niniejszego użytkownika
.
» 2012-08-24 00:36:39
Tak, to raczej to. Dzięki. A w zadaniu próbowałem dużo, robiłem przerwy, myślałem i nic. Może jeszcze coś mi wpadnie jak zrobić tą pętle losującą, ale myślę, myślę i nie mogę wymyślić. Pewnie źle myślę. Przecież w zadaniu wyraźnie napisane że obecna wiedza powinna wystarczyć. Niech mnie ktoś chociaż nakieruje. :)
P-63493
DejaVu
» 2012-08-24 00:39:06
Zrób sobie przerwę - jutro przeczytaj jeszcze raz rozdział z którym masz problem i może na coś wpadniesz :)
P-63494
Chris4132
Temat założony przez niniejszego użytkownika
..
» 2012-08-24 10:01:03
Wszystko jest, rozdział czytam, i nie potrafię sprawdzić, czy owa tablica nie została wylosowana już wcześniej. Nakierujcie mnie chociaż. A może stworzyć drugą tablicę...
Ten post napisałbym jakieś 10 minut temu, ale ostatnie zdanie oświeciło mnie. Proszę, oto mój kod. Funkcja losująca tablicę to losujtab. Sprawdziłem kilka razy, zgadza się, losuje bez powtórzeń.
Post poprawiony. Dzięki wszystkim za pomoc, szczególnie DejaVu. Problem rozwiązany, więc temat zamykam.

C/C++
#include <iostream>
#include <cstdlib>
#include <ctime>

int losujtab( int tab[], int liczby[] )
{
   
    int loslicz;
    int liczniktab = 0;
    int licznik = 0;
   
    do
    {
       
        loslicz =( rand() % 10 ) + 1;
       
        do
        {
           
            if( liczby[ licznik ] == loslicz )
            {
                loslicz =( rand() % 10 ) + 1;
                licznik = - 1;
            }
           
            licznik++;
           
        } while( licznik <= 8 );
       
        liczby[ liczniktab ] = loslicz;
       
        liczniktab++;
       
        licznik = 0;
       
    } while( liczniktab <= 8 );
   
    licznik = 0;
   
   
    do
    {
        std::cout << tab[ liczby[ licznik ] ] << std::endl;
        licznik++;
       
    } while( licznik <= 7 );
   
}

bool czybyla( int wczytana, int ktora, int tab[] )
{
    if( wczytana >= 1000 )
         return true;
   
    int licznik = 0;
   
    if( ktora == 0 )
         return false;
   
    do
    {
       
        if( tab[ licznik ] == wczytana )
             return true;
       
        licznik++;
       
    } while( licznik <= ktora );
   
    return false;
}

int main()
{
    srand( time( 0 ) );
   
    int tab[ 10 ];
    int liczby[ 8 ];
    int wczytaj;
    int licznik = 0;
   
    std::cout << "            =====Witaj w moim programie=====" << std::endl << std::endl;
    std::cout << " Teraz podasz dziesiec liczb, a nastepnie ja wylosuje osiem z nich." << std::endl;
    std::cout << " Lecz jest jeden haczyk, te liczby musza sie roznic od siebie," << std::endl << " inaczej bedziesz musial podawac liczby w kolko." << std::endl;
    std::cout << " Pamietaj, ze liczba musi byc mniejsza niz tysiac!" << std::endl << std::endl;
   
   
    do
    {
       
        std::cout << " Podaj liczbe: ";
        std::cin >> wczytaj;
        std::cin.clear();
        std::cin.sync();
       
        if( czybyla( wczytaj, licznik, tab ) == false )
        {
            tab[ licznik ] = wczytaj;
            licznik++;
        }
       
    } while( licznik < 10 );
   
   
   
    std::cout << " Dobrze, teraz wylosuje 8 z podanych przez ciebie liczb." << std::endl << std::endl;
   
    losujtab( tab, liczby );
   
    return 0;
   
}
P-63512
« 1 » 2
  Strona 1 z 2 Następna strona