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

Wypisanie float + wskaźniki

Ostatnio zmodyfikowano 2016-10-18 18:54
Autor Wiadomość
Lich555
Temat założony przez niniejszego użytkownika
Wypisanie float + wskaźniki
» 2016-10-13 19:33:28
Witam. Ten kod powinien wypisać po prawej stronie liczby całkowite (co robi dobrze), a po prawej liczby float od 0.1 do 0.9

C/C++
void program1()
{
    cout << "_____________________________________________________" << endl;
   
    int * wi;
    float * wf;
    int tabint[ 10 ] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
    float tabflo[ 10 ];
    //ustawienie wskaznika
    wf = & tabflo[ 0 ];
    //zaladowanie tablicy float wartosciami poczatkowymi, tutaj następuje dzielenie przez 10.0
    for( int i = 0; i < 10; i++ )
    {
        *( wf++ ) = i / 10.0;
    }
    cout << "Tresc tablic na poczatku:\n";
    for( int i = 0, wi = tabint[ 0 ], wf = tabflo[ 0 ]; i < 10; i++ )
    {
        cout << i << ") \t" << wi++ << "\t\t\t\t" << wf++ << endl;
    }
    ...
}
Nie wiem czemu ten program nie wypisuje liczb typy float poprawnie. Wypisuje mi je tak, jakby nigdy nie były dzielone czyli od 1 do 9.
P-152531
pekfos
» 2016-10-13 20:10:33
C/C++
for( int i = 0, wi = tabint[ 0 ], wf = tabflo[ 0 ]; // ..
Tworzysz tu zmienne wi i wf typu int, które zasłaniają wskaźniki o tych nazwach.
P-152533
Lich555
Temat założony przez niniejszego użytkownika
» 2016-10-13 21:21:57
Po zmianie wygląda tak:
C/C++
void program1()
{
    cout << "_____________________________________________________" << endl;
   
    int * wi;
    float * wf;
    int tabint[ 10 ] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
    float tabflo[ 10 ];
    //ustawienie wskaznika
    wf = & tabflo[ 0 ];
    wi = & tabint[ 0 ];
    //zaladowanie tablicy float wartosciami poczatkowymi
    for( int i = 0; i < 10; i++ )
    {
        *( wf ) ++ = i / 10.0;
    }
    cout << "Tresc tablic na poczatku:\n";
    for( int i = 0; i < 10; i++ )
    {
        cout << i << ") \t" << *( wi++ ) << "\t\t\t\t" << *( wf++ ) << endl; //tutaj wypisuje źle po prawej stronie
    }
    //nowe ustawienie wskaznikow
    wi = & tabint[ 5 ];
    wf = tabflo + 2;
    //wpisanie do tablic kilku nowych wartosci
    for( int i = 0; i < 4; i++ )
    {
        *( wi++ ) = - 222;
        *( wf++ ) = - 777.5;
    }
   
    cout << "Tresc tablic po wstawieniu nowych wartosci: \n";
    wi = tabint;
    wf = tabflo;
    for( int i = 0; i < 10; i++ )
    {
        cout << "tabint[" << i << "] = " << *( wi++ ) << " \t\ttabflo[" << i << "] = " << *( wf++ ) << endl; //tutaj wypisuje poprawnie
    }
}
No i jest taki problem, że po wstawieniu nowych wartości wyświetla mi poprawnie (po prawej 1, 2, 3 itd., a po lewej 0.1, 0.2, -777.5 itd.). Lecz przed zmianą wypisuje źle. Po lewej wypisuje dobre liczby, po prawej problemy (liczby typu 62551e-043)
P-152537
pekfos
» 2016-10-14 00:19:02
Wykraczasz poza zakres tablicy przy pierwszym wypisywaniu.
P-152547
Lich555
Temat założony przez niniejszego użytkownika
» 2016-10-18 18:54:07
Masz na myśli tą część?
C/C++
for( int i = 0; i < 10; i++ )
{
    cout << i << ") \t" << *( wi++ ) << "\t\t\t\t" << *( wf++ ) << endl;
}
Przecież tablica jest 10-elementowa. 1 wypisanie ustawione jest na 0 nr tablicy, a wypisuje się 9 razy. W czym problem?

@Edit
Ok, już łapię. Chodziło o to, że trzeba wcześniej ustawić wskaźnik wf na 0-owy element tablicy :P

Tak z ciekawości, nie można tego zrobić tak?
C/C++
for( int i = 0, wf = tabflo; i < 10; i++ ) //tutaj wywala błąd
{
    cout << i << ") \t" << *( wi++ ) << "\t\t\t\t" << *( wf++ ) << endl;
}
P-152631
« 1 »
  Strona 1 z 1