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. |
|
FrostEvil Temat założony przez niniejszego użytkownika |
» 2017-10-30 17:04:59 #include <iostream>
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ąć... |
|
YooSy |
» 2017-10-30 17:09:39 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; } return wynik; delete[] wynik; |
Taka kolejność nie ma sensu. retrun powoduje opuszczenie funkcji, więc delete nigdy się nie wykona. |
|
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 |
|
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ć. |
|
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 |
|
FrostEvil Temat założony przez niniejszego użytkownika |
» 2017-10-30 17:39:58 #include <iostream>
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; 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 |
|
YooSy |
» 2017-10-30 17:54:28 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 ]; |
|
1 « 2 » 3 |