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

[Lekcja 21] Pytanie dotyczące zadania 1

Ostatnio zmodyfikowano 2013-05-13 19:27
Autor Wiadomość
Bajt
» 2013-05-11 21:36:47
Jeżeli i jest równe j to bool jest równe prawdzie i pętla znowu rozpoczyna swój obieg.  Jeżeli jednak, i jest różne od j, to następuje postinkrementacja licznika i, czyli przejście do następnego sprawdzenia liczby z tablicy Liczba. I tak w kółko.

Czy da się to zrobić za pomocą pętli do..while? Oczywiście. W programowaniu da się wszystko. Jednak byłoby to zbędne utrudnianie życia. Pętla for, daję Ci w pełni to, czego potrzebujesz. Pod indeksem i, ukrywa się liczba, która robi w Twoim progamie wszystko. Jeżeli uważnie przeczytałeś lekcję z kursu, o użyciu for'a z tablicami jednowymiarowymi, nie powinieneś mieć z tym problemów.
C/C++
const SIZE_ARRAY = 5;
int array[ SIZE_ARRAY ];
for( int i = 0; i < SIZE_ARRAY, ++i )
{
    array[ i ] = i + 1;
}
Więc, zadaj sobie pytanie; czy takie rozwiązanie nie jest najoptymalniejsze?
P-82728
Fley
Temat założony przez niniejszego użytkownika
» 2013-05-11 21:56:29
Niby tak, ale chciałbym uzyskać ten sam efekt dzięki do/while. Niestety coś mi nie wychodzi kod, aby z istniejącej już tablicy wypisać liczby bez powtórzeń na ekran.
P-82730
Fley
Temat założony przez niniejszego użytkownika
» 2013-05-12 17:33:45
Witam, piszę drugiego posta aby odświeżyć temat ,a przy okazji zanalizować problem,

"1. Napisz program, który wczyta 10 liczby podane przez użytkownika do tablicy, a następnie wylosuje 8 z nich bez powtórzeń. Wynik wypisz na ekran. Postaraj się napisać ten program w oparciu o funkcje. "

Czyli:
- zapisujemy 10 liczb na tablice (z żadnego przedziału, 10 randomowych liczb)
- losujemy 8 z nich, liczby nie mają się powtarzać
- wykorzystajmy do tego funkcje, i wiedzę którą posiadamy, czyli nie ma tu pętli for (mamy do wyboru if lub do/while)

I teraz, przewertowałem forum ,a także sieć w poszukiwaniu rozwiązania - niestety sam nie umiałem tego rozwiązać (i nadal nie umiem) więc po dwóch dniach stwierdziłem, że może kody stworzone przez innych ludzi kody dadzą mi wiedzę potrzebną do stworzenia mojego własnego programu tak jak ja chcę.

Najważniejszy problem jest taki, że w całości prawie, programy napisane przez innych ludzi opierają swoje sprawdzenie czy liczba wylosowana jest z przedziału, czyli jeżeli podajemy te 10 liczb to najczęściej podajemy je z jakiegoś przedziału więc kod sprawdzający będzie losował liczbę i sprawdzał czy nie została ona zapisana i tak do nieskończoności. Moje pytanie brzmi: Jak napisać kod z pętlą do/while aby liczba była sprawdzana z tablicy1 i zapisywana do tablicy2, a później kiedy już pierwsza liczba zostanie zapisana, aby kolejny były sprawdzane czy w tablicy2 nie ma już takiej liczby.
P-82802
Gucio3012
» 2013-05-12 19:57:48
Zbyt nad tym główkujesz, po prostu stwórz 2 tablice, jedna z liczbami wpisanymi przez np. ciebie, a druga z liczbami już wylosowanymi spośród tych wpisanych. Następnie wylosuj jakąś liczbę, sprawdź czy należy do tablicy pierwszej i czy nie należy do tablicy drugiej, żeby uniknąć powtórzeń. Jeśli oba warianty się zgadzają to dodaj ową liczbę do tablicy drugiej. Na końcu wszystkie wylosowane liczby wyświetl.
P-82828
usmiech
» 2013-05-13 18:47:13
P-82868
Fley
Temat założony przez niniejszego użytkownika
» 2013-05-13 19:27:07
Dobra, kod jest taki
C/C++
#include <iostream>
#include <ctime>
#include <cstdlib>

bool czyBylaWylosowana( int iLiczba, int tab[], int ile )
{
    if( ile <= 0 )
         return false;
   
    int i = 0;
    do
    {
        if( tab[ i ] == iLiczba )
             return true;
       
        i++;
    } while( i < ile );
   
    return false;
}
int wylosuj()
{
    return( rand() % 10 );
}
int main()
{
    srand( time( 0 ) );
    int tablica[ 10 ];
    int liczba[ 8 ];
    int licznik = 0;
    int a = 0;
    std::cout << "Prosze podac 10 liczb" << std::endl;
    do
    {
        std::cin >> tablica[ licznik ];
        licznik++;
    } while( licznik < 10 );
   
    licznik = 0;
    do
    {
        a = tablica[ wylosuj() ];
        if( czyBylaWylosowana( a, liczba, licznik ) == false )
        {
            liczba[ licznik ] = a;
            licznik++;
        }
       
    } while( licznik < 8 );
   
    licznik = 0;
    do
    {
        std::cout << liczba[ licznik ] << ", ";
        licznik++;
    } while( licznik < 8 );
   
    return 0;
}

Chyba wszystko działa, temat zamykam.
P-82875
1 « 2 »
Poprzednia strona Strona 2 z 2