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

potęgowanie za pomocą funkcji

Ostatnio zmodyfikowano 2017-10-30 18:23
Autor Wiadomość
YooSy
» 2017-10-30 16:59:44
Pokaż aktualny kod. Nie zmieniłeś w którymś miejscu typu na
int *
 i kompilator cie o tym ostrzega.
P-166251
FrostEvil
Temat założony przez niniejszego użytkownika
» 2017-10-30 17:04:59
C/C++
#include <iostream>

/* run this program using the console pauser or add your own getch, system("pause") or input loop */
using namespace std;
int oblicz( int a, int p[], int w[] )
{
    int i, j;
    int * wynik = new int[ a ];
    for( j = 0; j < a; j++ )
    { wynik[ j ] = 1;
        for( i = 1; i <= p[ j ]; i++ )
        {
            wynik[ j ] = wynik[ j ] * w[ j ];
        }
       
    }
   
    return wynik;
    delete[] wynik;
}




int main( int argc, char ** argv ) {
   
    int i, D;
    cout << "Podaj ilosc powtorzen" << "\n";
    cin >> D;
    int * potega = new int[ D ];
    int * wykladnik = new int[ D ];
   
   
    for( i = 0; i < D; i++ )
    {
        cout << "podaj potege" << "\n";
        cin >> potega[ i ];
        cout << "podaj wykladnik" << "\n";
        cin >> wykladnik[ i ];
    }
   
    int * m = oblicz( D, potega, wykladnik );
   
    cout << m;
   
    delete[] m;
    delete[] potega;
    delete[] wykladnik;
    return 0;
}

nie zmieniłem chyba nigdzie bo nie rozumiem dokładnie zapisu tych wskaźników, szczerze powiedziawszy dopiero teraz się z nimi spotkałem i próbuje je jakoś pojąć...
P-166252
YooSy
» 2017-10-30 17:09:39
C/C++
int * oblicz( int a, int p[], int w[] )
{
    int i, j;
    int * wynik = new int[ a ];
    for( j = 0; j < a; j++ )
    {
        wynik[ j ] = 1;
        for( i = 1; i <= p[ j ]; i++ )
        {
            wynik[ j ] = wynik[ j ] * w[ j ];
        }
       
    }
   
    return wynik;
}
 
C/C++
return wynik;
delete[] wynik;
Taka kolejność nie ma sensu. retrun powoduje opuszczenie funkcji, więc delete nigdy się nie wykona.
P-166254
FrostEvil
Temat założony przez niniejszego użytkownika
» 2017-10-30 17:13:09
Okey, program uruchamia się tylko teraz kwestia wyświetlenia wyniku ale przede wszystkim teraz program źle działa
P-166255
YooSy
» 2017-10-30 17:17:43
tylko teraz kwestia wyświetlenia wyniku
Coś więcej na temat? Dla jakich danych wejściowych, dane wyjściowe są poprawne?
przede wszystkim teraz program źle działa
Co znaczy "źle działa"?

Pora poznać się z debuggerem. Błędy w logice i obliczeniach możesz sam znajdować.
P-166256
FrostEvil
Temat założony przez niniejszego użytkownika
» 2017-10-30 17:21:55
Podaje ilość powtórzeń załóżmy 2 następnie podaję po kolei dla pierwszego przypadku wykładnik i potęgę potem dla drugiego, w funkcji chcę aby program obliczył przypadek pierwszy następnie drugi i zwrócił wynik w postaci tablicy, następnie tą tablicę chcę wyświetlić w main jako wynik tych działań. Obecnie program nie wykonuje dobrze operacji w funkcji ale patrząc logicznie na działanie funkcji wszystko jest OK
P-166257
FrostEvil
Temat założony przez niniejszego użytkownika
» 2017-10-30 17:39:58
C/C++
#include <iostream>

/* run this program using the console pauser or add your own getch, system("pause") or input loop */
using namespace std;
int * oblicz( int a, int p[], int w[] )
{
    int i, j;
    int * wynik = new int[ a ];
    for( j = 0; j < a; j++ )
    { wynik[ j ] = 1;
        for( i = 1; i <= p[ j ]; i++ )
        {
            wynik[ j ] = wynik[ j ] * w[ j ];
        }
       
    }
   
    return wynik;
}




int main( int argc, char ** argv ) {
   
    int i, D;
    cout << "Podaj ilosc powtorzen" << "\n";
    cin >> D;
    int * potega = new int[ D ];
    int * wykladnik = new int[ D ];
   
   
    for( i = 0; i < D; i++ )
    {
        cout << "podaj potege" << "\n";
        cin >> potega[ i ];
        cout << "podaj wykladnik" << "\n";
        cin >> wykladnik[ i ];
    }
   
    int * m = oblicz( D, potega, wykladnik );
   
    cout <<* m; // tutaj nastąpiła modyfikacja w stosunku do poprzedniego programu
   
    delete[] m;
    delete[] potega;
    delete[] wykladnik;
    return 0;
}


Program teraz działa poprawnie tylko wyświetla tylko jedną wartość czyli np, jeśli podaje D=3 (ilość powtórzeń; czyli ile przypadków program ma rozwiązać), następnie podaję wszystkie dane wejściowe, reasumując chcę aby program obliczył 2^3, 2^2, 3^4. Na wyjściu wyświetla mi się tylko wynik działania 2^3
P-166258
YooSy
» 2017-10-30 17:54:28
C/C++
int * m = oblicz( D, potega, wykladnik );

cout <<* m;
Przecież zwracasz wskaźnik na tablicę, a jak wyświetla się zawartość tablicy?
Teraz wyświetlasz wartość pierwszego elementu.
Ten zapis jest równoważny
cout << m[ 0 ];
P-166260
1 « 2 » 3
Poprzednia strona Strona 2 z 3 Następna strona