Problem ze wskaźnikami c++

0

Mam problem ze wskaźnikami. MAm do zrobienia sumę, różnice i średnia liczb przesyłanych przez wskaźniki, lecz gdy ogarnę sumę to zrobię resztę sama. Do obliczenia sumy mam wykorzystać wcześniej napisaną funkcję wczytania liczb. Tylko przy sumowaniu podkreśla mi funkcje1 nie wiem tylko dlaczego..
chodzi mi o to, żeby podane wcześniej liczby przenosiło do kolejnej funkcji i z tego obliczało ich sumę.


double *wczytaj(int *liczby)
{
    double *wczytane;
    cout<< " Ile liczb chcesz wczytac " ;
    cin>> *liczby;
    wczytane = new double[*liczby];
    for (int i=0; i<*liczby; i++)
    {
        cin>> wczytane[i];
    }
    return wczytane;
}
double *sumal(int *suma)
{
    double  *funkcja1, *sumak;
    int n,a;
    funkcja1=wczytaj(&n);
    sumak=new double[*suma];
    for (int i=0; i<n; i++)
    {
        cout<<" "<<funkcja1[i];
        sumak=sumak+funkcja1[i];
    }
    return sumak;

}
int main()
{
    double *suma1;
    int a, n;
    suma1=sumal(&n);
    cout<<"  "<<suma1;
    system( "Pause" );
    return 0;
}
0
  1. Po co Ci parametry funkcji skoro i tak ich nie wykorzystujesz?

  2. Przekaż do funkcji wczytaj wskaznik na inta, czyli tablice, nie musisz jej potem zwracac, bo dzialasz na pamieci, nie na zmiennej. Czyli Tworzysz sobie wskaznik na inta w funkcji sumal, przekazujesz go w parametrze do wczytaj, wypelniasz, zwracasz liczbe elementow, i w sumalu już w petli dla pobranej liczby elementów wszystko sobie liczysz.

  3. Poza tym może mógłbyś operować na samych wskażnikach :P ale tak się w C++ nie programuje, za dużo szukania błędów jeżeli kod jest skomplikowany. Staraj się jak najbardziej wszystko upraszczać.

0
double *wczytane;
cout<< " Ile liczb chcesz wczytac " ;
cin>> *liczby;

Chyba nie doczytałeś coś o Tych wskaźnikach, nie zrozumiałeś, a teraz upychasz je wszędzie na siłę..

0

Jeżeli już tak bardzo chcesz wszędzie je upychać, to wyglądałoby to tak:

#include <iostream>
using namespace std;
double* wczytaj(double *tab,int *n){
    for(int i=0;i<*n;i++){
        cin>>tab[i];
    }
    return tab;
}
double *suma(double *tab,int *n){
    double *sum = new double;
    for(int i=0;i<*n;i++){
        *sum += tab[i];
    }
    return sum;
}
int main(){
    int n;
    cin>>n;
    double *tab=new double[n];
    cout<<*suma(wczytaj(tab,&n),&n);
    return 0;
}
0

Akurat o tym pamiętam. Wielkie dzięki za wskazówki!

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0