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

[Lekcja 21] 1 praca domowa

Ostatnio zmodyfikowano 2014-12-23 01:52
Autor Wiadomość
G4m3killer
Temat założony przez niniejszego użytkownika
[Lekcja 21] 1 praca domowa
» 2014-12-22 15:07:16
Witam. Mam problem odnośnie 1 pracy domowej. A raczej 1 funkcji. Napisalem ładnie caly programik no i teraz chcialem zrobic funkcję która by sprawdzala czy podane liczby nie sa przypadkiem takie same. Jesli tak to jeszcze raz podawalo by sie liczbe. Jednak wyskakuje mi błąd, że nie zidentyfikowano ten funkcji w tym zakresie. Nie widzę tu żadnego błędu, wiec może coś wspomożecie. Co do samej funkcji
saRozne()
, to także możecie sprawdzić przy okazji czy byczków nie popelnilem.
Oto mój kod:
C/C++
#include<iostream>
#include<cstdlib>
#include<ctime>
using namespace std;
void wczytaj( int zapis[] ) // Wczytywanie liczb do tablicy
{
    int i = 0, a = 0;
    do
    {
        cin.sync();
        cin.clear();
        cin >> a;
        if( cin.good() && saRozne( zapis, i ) == true )
        {
            zapis[ i ] = a;
            i++;
        }
    } while( i < 3 );
   
}
bool saRozne( int zapis[], int i )
{
    if( i <= 0 )
         return true;
   
    int a = 1, b = 0;
    do
    {
        b = 0;
        if( zapis[ a ] == zapis[ b ] || zapis[ b++ ] || zapis[ b += 2 ] )
             return false;
       
        a++;
    } while( a < 3 );
   
    return true;
}
bool czyWylosowana( int wylLicz[], int los, int ile ) // Sprawdzanie czy liczba zostala wylosowana wczesniej
{
    if( ile <= 0 )
         return false;
   
    int i = 0;
    do
    {
        if( los == wylLicz[ i ] )
             return true;
       
        i++;
    } while( i < ile );
   
    return false;
}
void dopisz( int zapis[], int wylLicz[], int ile ) // Dopisanie wylosowanej liczby, gdy nie zostala wczesniej wylosowana
{
    do
    {
        int los = zapis[ rand() % 3 ];
        if( czyWylosowana( wylLicz, los, ile ) == false )
        {
            wylLicz[ ile ] = los;
            ile++;
        }
    } while( ile < 2 );
   
}
void wypisz( int wylLicz[], int wylos ) // Wypisanie liczb z tablicy
{
    cout << "Wypisanie wylosowanych 2 liczb z tablic: " << endl;
    do
    {
        cout << wylLicz[ wylos ] << endl;
        wylos++;
    } while( wylos < 2 );
   
}
int main()
{
    srand( time( NULL ) );
   
    int zapis[ 3 ];
    int wylLicz[ 2 ];
    int wylosowanych = 0;
   
    wczytaj( zapis );
    dopisz( zapis, wylLicz, wylosowanych );
   
    wylosowanych = 0;
    wypisz( wylLicz, wylosowanych );
   
   
    return 0;
}
P-123223
NopeDotAvi
» 2014-12-22 16:38:44
Ponieważ, ta funkcja nie widzi żadnej deklaracji, kod jest czytany od góry do dołu, daj deklaracje tej funkcji pod using namespace std;
P-123230
G4m3killer
Temat założony przez niniejszego użytkownika
» 2014-12-22 21:05:33
ok, dzięki.
Ale jednak jeszcze jakis byczek popelnilem, bo program zatrzymal sie na ciaglym wczytywaniu :)
Co tu nie tak?
P-123244
darko202
» 2014-12-23 00:27:26
A.
Podstawowy błąd jaki popełniasz to niewiedza nad techniką szukania prostych błędów
technika ta polega na
1. użyciu debugera
2. jeśli nie masz debugera, to szukając błędu pokazujesz wartości poszczególnych zmiennych, funkcji, obliczane warunki, pokazuje przebieg  (oczywiście na czas szukania błędu)
trochę to kosztuje, ale sam znajdziesz proste błędy

Musisz się nauczyć z tego korzystać, bo droga nauki programowania polega na pisaniu coraz bardziej złożonych programów
a w pewnym momencie czas staje się czynnikiem krytycznym



B.
błąd masz w saRozne( )

zastanów się :
na jakiej podstawie stwierdzasz, czy wczytana przed chwilą liczba jest różna ?
czy liczba ta jest dla Ciebie w tej funkcji dostępna ? 

dla ułatwienia zobacz jak powinna wyglądać realizacja tego o czym mówię w A
C/C++
bool saRozne( int zapis[], int i )
{
    cout << "1.\n";
    if( i <= 0 )
    {
        cout << "if( i <= 0 )\n";
        return true;
    }
    int a = 1, b = 0;
    do
    {
        cout << "do\n";
        b = 0;
        cout << "zapis[ a ] == zapis[ b ] " <<( zapis[ a ] == zapis[ b ] ) << "\n";
        cout << "zapis[ b++ ] " << zapis[ b++ ] << "\n";
        cout << "zapis[ b += 2 ] " << zapis[ b += 2 ] << "\n";
        cout << "a " << a << "\n";
        cout << "b " << b << "\n";
        cout << "b++ " << b++ << "\n";
        cout << " b += 2 " <<( b += 2 ) << "\n";
       
        if( zapis[ a ] == zapis[ b ] || zapis[ b++ ] || zapis[ b += 2 ] )
        {
            cout << "if( zapis[ a ] == zapis[ b ] || zapis[ b++ ] || zapis[ b += 2 ] )\n";
            return false;
        }
        a++;
    } while( a < 3 );
   
    return true;
}
P-123260
G4m3killer
Temat założony przez niniejszego użytkownika
» 2014-12-23 01:52:51
Dzięki :)
Co do debugowania to nie umiem tego, bo tu w kursie tego nie miałem i jak narazie było mi zbyteczne, ale muszę się jeszcze nauczyć jak tego używać :)
A co do funkcji to zrobiłem ją "na szybko". Teraz gdy chwilkę pomyślałem zobaczyłem co źle porobiłem :)
Dzięki za pomoc. Taki debugger ułatwi z pewnością prace i zaoszczędzę dużo czasu.
P-123262
« 1 »
  Strona 1 z 1