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

Zadanie domowe nr 1. z rozdziału 21, wątek nr: n++

Ostatnio zmodyfikowano 2015-07-26 11:03
Autor Wiadomość
multim
Temat założony przez niniejszego użytkownika
Zadanie domowe nr 1. z rozdziału 21, wątek nr: n++
» 2015-07-24 15:09:27
Jestem kolejnym newbie, który poległ na tym zadaniu. Walczyłem trzeci dzień i spasowałem.
Program się zapętla w okolicach funkcji:
sprawdzCzyUzyta(int t[], int wynikT[], int idLosowania, int ile, int iK);


Cały kod:
C/C++
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;

int wprowadz_dane( int t[], int ile )
{
    cout << "Podaj " << ile << " liczby:" << endl;
    int i = 0;
    do
    {
        cin >> t[ i ];
        i++;
    }
    while( i < ile );
   
    return 0;
}

int losuj( int ile )
{
    return rand() % ile;
}

char sprawdzCzyUzyta( int t[], int wynikT[], int idLosowania, int ile, int iK )
{
    int tmp = 0;
    int i = 0;
    do {
        if( tmp != t[ idLosowania ] )
        {
            tmp = t[ idLosowania ];
            wynikT[ i + iK ] = t[ idLosowania ];
            iK++;
        }
        else
        {
            return true;
        }
        i++;
    }
    while( i < ile - 1 );
   
    iK++;
    return false;
   
}

int wypisz_wyniki( int t[], int ile )
{
    int i = 0;
    do
    {
        cout << i + 1 << ": " << t[ i ] << endl;
        i++;
    }
    while( i < ile - 1 );
   
    return false;
    return 0;
}

int main()
{
    srand( time( 0 ) );
    int tablica[ 3 ], wynik[ 2 ], ile = 3, los, iK = 0;
    wprowadz_dane( tablica, ile );
    cout << endl;
    int i = 0;
    do
    los = losuj( ile );
    while( sprawdzCzyUzyta( tablica, wynik, los, ile, iK ) == true );
   
    wypisz_wyniki( wynik, ile );
    cout << endl;
    return 0;
}

Edit: Przepraszam, wkleiłem zły kod.
P-135138
pekfos
» 2015-07-24 15:11:52
C/C++
char sprawdzCzyUzyta( int t[], int wynikT[], int idLosowania, int ile, int iK )
{
    int tmp = 0;
    int i = 0;
    do {
        if( tmp != t[ idLosowania ] )
        {
            tmp = t[ idLosowania ];
            wynikT[ i + iK ] = t[ idLosowania ];
            iK++;
        }
        else
        {
            return true;
        }
        i++;
    }
    while( i < ile - 1 );
   
    iK++;
    return false;
   
}
Co to wg ciebie robi?
P-135139
multim
Temat założony przez niniejszego użytkownika
» 2015-07-24 15:59:12
Funkcja miała sprawdzać,   czy jest obecna wartość t[idLosowania] - tablica z wprowadzonymi 3 zmiennymi, w tablicy z wynikami - wynikT[].

PS. Może nie powinienem się brać za programowanie? Próbowałem czytać B. Eckela, ale nie szło mi to zbyt dobrze, kolejną szansą był ten kurs. Ech...
P-135144
pekfos
» 2015-07-24 16:14:26
Funkcja miała sprawdzać,   czy jest obecna wartość t[idLosowania] - tablica z wprowadzonymi 3 zmiennymi, w tablicy z wynikami - wynikT[].
Skoro z t[] używasz tylko t[idLosowania], to po co ci w tej funkcji tablica i indeks, zamiast przekazywać od razu tą wartość?
I skoro chcesz tylko sprawdzić, czy jakaś wartość jest w tablicy wynikT[], to dlaczego przypisujesz coś co tej tablicy..?

Próbowałem czytać B. Eckela, ale nie szło mi to zbyt dobrze
Thinking in C++? To lepsze dla przeprowadzających się z C i średnio-zaawansowanych, a nie dla początkujących.
P-135145
multim
Temat założony przez niniejszego użytkownika
» 2015-07-24 17:43:38
Próbowałem się wzorować na rozwiązaniu z wcześniejszych tematów, w którym po pozytywnym sprawdzeniu (braku obecności danej wartości w tablicy wynikowej)  przypisywało ją do tej tablicy.
P-135150
pekfos
» 2015-07-24 17:55:54
w którym po pozytywnym sprawdzeniu (braku obecności danej wartości w tablicy wynikowej)  przypisywało ją do tej tablicy.
W jaki sposób możesz stwierdzić, że wartości w tablicy nie ma, skoro nie sprawdziłeś wszystkich elementów? Nie mieszaj ze sobą tylu rzeczy, bo bez odpowiedniego planowania nic ci z tego nie wyjdzie. Nazwałeś funkcję 'sprawdz', więc tylko sprawdzaj.
P-135151
multim
Temat założony przez niniejszego użytkownika
» 2015-07-24 19:01:24
Poprawiłem co nieco, ale nadal wyniki wychodzą z pustych komórek tabeli. Da się jakoś śledzić w debuggerze CodeBlocksa wartości z poszczególnych komórek tabeli?

Aktualizacja kodu:
C/C++
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;

int wprowadz_dane( int t[], int ile )
{
    cout << "Podaj " << ile << " liczby:" << endl;
    int i = 0;
    do
    {
        cin >> t[ i ];
        i++;
    }
    while( i < ile );
   
    return 0;
}

int losuj( int ile )
{
    return rand() % ile;
}

int przypiszWynik( int wejsciowaT[], int los, int wyjsciowaT[], int iNr )
{
    wyjsciowaT[ iNr ] = wejsciowaT[ los ];
    return 0;
}

bool sprawdzCzyUzyta( int sprLiczbe, int t[], int idLosowania, int licznik, int przekaz[] )
{
    int i = 0;
    do {
        if( t[ i ] != sprLiczbe )
        {
            licznik++;
            przypiszWynik( t, idLosowania, przekaz, i );
        }
        else
        {
            return true;
        }
        i++;
    }
    while( i < licznik );
   
    return false;
}

int wypisz_wyniki( int t[], int ile )
{
    int i = 0;
    do
    {
        cout << i + 1 << ": " << t[ i ] << endl;
        i++;
    }
    while( i < ile - 1 );
   
    return false;
    return 0;
}

int main()
{
    srand( time( 0 ) );
    int tablica[ 3 ], wynik[ 2 ], ile = 3, los, liczbaSpr, iLicznik = 0;
    wprowadz_dane( tablica, ile );
    cout << endl;
    do
    {
        los = losuj( ile );
        liczbaSpr = tablica[ los ];
    }
    while( sprawdzCzyUzyta( liczbaSpr, wynik, los, iLicznik, wynik ) == true );
   
    wypisz_wyniki( wynik, ile );
    cout << endl;
    return 0;
}
P-135156
carlosmay
» 2015-07-24 19:15:16
Funkcja sprawdzającą powinna zwracać wartość typu bool.
Do sprawdzenia wystarczy ci wartość do porównania, tablica wynikowa i jej rozmar.
Sprawdzasz czy dana wartość jest w tablicy.
Jak jest true, jak nie false.
P-135158
« 1 » 2 3
  Strona 1 z 3 Następna strona