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

Wskażniki

Ostatnio zmodyfikowano 2014-07-25 21:17
Autor Wiadomość
Mateus.
Temat założony przez niniejszego użytkownika
Wskażniki
» 2014-07-25 19:47:57
Natknąłem się na problem ze wskaźnikami. Kod programu:
C/C++
#include <iostream>
using namespace std;

bool f1( double, int );
bool f2( double, int );
bool f3( double, int );
bool f4( double, int );
bool f5( double, int );
bool f6( double, int );

int main()
{
    cout << "Menu Robota:\n1 - f1\n2 - f2\n3 - f3\n4 - f4\n5 - f5\n6 - f6\n7 - Wykonaj\n8 - Koniec\n\n";
    int a;
    int i = 0;
    double tab[ 20 ];
    bool( *( wsk[ 20 ] ) )( double, int );
    for(; i < 20; i++ )
    {
        cin >> a;
        switch( a )
        {
        case 1:
            wsk[ i ] = & f1;
            cout << "\nO ile stopni kapitanie: ";
            cin >> tab[ i ];
            break;
        case 2:
            wsk[ i ] = & f2;
            cout << "\nO ile stopni kapitanie: ";
            cin >> tab[ i ];
            break;
        case 3:
            wsk[ i ] = & f3;
            cout << "\nO ile stopni kapitanie: ";
            cin >> tab[ i ];
            break;
        case 4:
            wsk[ i ] = & f4;
            cout << "\nO ile stopni kapitanie: ";
            cin >> tab[ i ];
            break;
        case 5:
            wsk[ i ] = & f5;
            cout << "\nO ile stopni kapitanie: ";
            cin >> tab[ i ];
            break;
        case 6:
            wsk[ i ] = & f6;
            cout << "\nO ile stopni kapitanie: ";
            cin >> tab[ i ];
            break;
        case 7:
            goto berlin;
            break;
        case 8:
            goto koniec;
            break;
        default:
            cout << "Bledna instrukcja\n";
            break;
        }
    }
    berlin:
    for( int c = 0; c < i; c++ )
    {
        ( *( wsk[ c ] ) )( tab, c );
    }
    koniec:
    cout << endl << "Koniec programu";
    return 0;
}
bool f1( double f[], int g )
{
    cout << "funkcja f1 " << "Obrot o " << f[ g ] << "Stopni" << endl;
    return true;
}
bool f2( double f[], int g )
{
    cout << "funkcja f2 " << "Obrot o " << f[ g ] << "Stopni" << endl;
    return true;
}
bool f3( double f[], int g )
{
    cout << "funkcja f3 " << "Obrot o " << f[ g ] << "Stopni" << endl;
    return true;
}
bool f4( double f[], int g )
{
    cout << "funkcja f4 " << "Obrot o " << f[ g ] << "Stopni" << endl;
    return true;
}
bool f5( double f[], int g )
{
    cout << "funkcja f5 " << "Obrot o " << f[ g ] << "Stopni" << endl;
    return true;
}
bool f6( double f[], int g )
{
    cout << "funkcja f6 " << "Obrot o " << f[ g ] << "Stopni" << endl;
    return true;
}

Program działał, gdy nie było przekazywanych argumentów do funkcji, ale w kolejnym zadaniu było trzeba go tak zmodyfikować.
Log komilacji:

|67| error: cannot convert 'double*' to 'double' in argument passing|
||=== Build finished: 1 errors, 0 warnings ===|

Nie wiem co robię źle w tej 67 linijce :(
P-114367
pekfos
» 2014-07-25 20:24:56
Deklaracje funkcji z początku programu są niezgodne z definicjami.
P-114370
Mateus.
Temat założony przez niniejszego użytkownika
» 2014-07-25 20:27:20
"Poprawiłem" trochę i teraz się kompiluje, ale nie wiem dlaczego tamto było źle i dlaczego teraz po wywołaniu "7 - wykonaj" po pierwszej linijce wywala błąd. KOD:
C/C++
#include <iostream>
using namespace std;

bool f1( double );
bool f2( double );
bool f3( double );
bool f4( double );
bool f5( double );
bool f6( double );

int main()
{
    cout << "Menu Robota:\n1 - f1\n2 - f2\n3 - f3\n4 - f4\n5 - f5\n6 - f6\n7 - Wykonaj\n8 - Koniec\n\n";
    int a;
    int i = 0;
    double tab[ 20 ];
    double * wsk2 = tab;
   
    bool( *( wsk[ 20 ] ) )( double );
    for(; i < 20; i++ )
    {
        cin >> a;
        switch( a )
        {
        case 1:
            wsk[ i ] = & f1;
            cout << "\nO ile stopni kapitanie: ";
            cin >> tab[ i ];
            break;
        case 2:
            wsk[ i ] = & f2;
            cout << "\nO ile stopni kapitanie: ";
            cin >> tab[ i ];
            break;
        case 3:
            wsk[ i ] = & f3;
            cout << "\nO ile stopni kapitanie: ";
            cin >> tab[ i ];
            break;
        case 4:
            wsk[ i ] = & f4;
            cout << "\nO ile stopni kapitanie: ";
            cin >> tab[ i ];
            break;
        case 5:
            wsk[ i ] = & f5;
            cout << "\nO ile stopni kapitanie: ";
            cin >> tab[ i ];
            break;
        case 6:
            wsk[ i ] = & f6;
            cout << "\nO ile stopni kapitanie: ";
            cin >> tab[ i ];
            break;
        case 7:
            goto berlin;
            break;
        case 8:
            goto koniec;
            break;
        default:
            cout << "Bledna instrukcja\n";
            break;
        }
    }
    berlin:
    for( int c = 0; c < i; c++ )
    {
        ( *( wsk[ c ] ) )( *( wsk2++ ) );
    }
    koniec:
    cout << endl << "Koniec programu";
    return 0;
}
bool f1( double f )
{
    cout << "funkcja f1 " << "Obrot o " << f << "Stopni" << endl;
    return true;
}
bool f2( double f )
{
    cout << "funkcja f2 " << "Obrot o " << f << "Stopni" << endl;
    return true;
}
bool f3( double f )
{
    cout << "funkcja f3 " << "Obrot o " << f << "Stopni" << endl;
    return true;
}
bool f4( double f )
{
    cout << "funkcja f4 " << "Obrot o " << f << "Stopni" << endl;
    return true;
}
bool f5( double f )
{
    cout << "funkcja f5 " << "Obrot o " << f << "Stopni" << endl;
    return true;
}
bool f6( double f )
{
    cout << "funkcja f6 " << "Obrot o " << f << "Stopni" << endl;
    return true;
}
P-114371
pekfos
» 2014-07-25 20:30:44
ale nie wiem dlaczego tamto było źle
Argumenty się nie zgadzały.

i dlaczego teraz po wywołaniu "7 - wykonaj" po pierwszej linijce wywala błąd.
Jaki..?
P-114373
Mateus.
Temat założony przez niniejszego użytkownika
» 2014-07-25 20:45:50
Nie rozumiem co się stało??? Gdy pisałem poprzedni post wyskakiwała mi pomoc systemu windows i program się zawieszał, a teraz ponownie go skopilowałem i działa. Magia? W międzyczasie pomyślałem, że może być to wina pętli, która się nie kończy przy wyjściu z niej przy pomocy
goto
. i dołożyłem ifa z przerwaniem pętli przy wartości 7 lub 8, ale teraz i bez tego nie działa. Instrukcja
goto
 jest taka niebezpieczna? Polecasz jej unikać, czy tez nie?
P-114377
pekfos
» 2014-07-25 21:04:18
Każdy powie, że goto to zła praktyka i trzeba jej unikać. A czy niebezpieczna..?
P-114379
Moorfox
» 2014-07-25 21:17:53
Jeśli pracujesz na DOS'ie to tak ;/
P-114381
« 1 »
  Strona 1 z 1