C++ zwracanie wartości przez wskaźnik

0

Cześć!

Mam pewien problem. Szukam już od kilku godzin i dalej nie wiem...

Mam napisać funkcję, która oblicza średnią liczb w tablicy (gdzie liczby są wylosowane z przedziału podanego przez użytkownika, np. od 10 do 110), a także która zlicza ilość liczb większych od tej średniej. Sumę mam zwrócić przez wskaźnik, a ilość liczb przez return. Mam to wywołać dla tej tablicy.

Czy mógłby ktoś mnie nakierować?

Mój kod:


#include <iostream>
#include <iomanip>

using namespace std;

int losowanie(int tablica[], int rozmiar, int p, int k){
    srand(time(NULL));
    for(int i = 0; i < rozmiar; i++) {
        tablica[i] = rand() % (k - p + 1) + p;
    }

    cout << "\n-----------TABLICA-----------" << endl;
    for (int i = 0; i < rozmiar; i++) {
        if (i%6 == 0){
            cout << "\n";
        }
        cout << setw (5) << tablica[i];
    }

}

double srednia (int *tablica, int rozmiar, double *wynSrednia){
    int i, suma;
    int licznik = 0;

    for (int i = 0; i < rozmiar; i++){
            suma += tablica[i];
        *wynSrednia = double(suma) / rozmiar;
        }

    for (int i = 0; i < rozmiar; i++) {
      if (tablica[i] > *wynSrednia){
       licznik++;
      }
   }
   return licznik;
}

int main() {
    int p, k, rozmiar, licznik;

    int *tablica = new int[rozmiar];

    double wynSrednia;

    cout << "Podaj poczatek przedzialu: ";
    cin >> p;
    cout << "Podaj koniec przedzialu: " ;
    cin >> k;
    cout << "Podaj rozmiar tablicy (liczby elementow): ";
    cin >> rozmiar;

    cout << losowanie(tablica, rozmiar, p, k) << endl;
}
0

warto od razu zmienną suma zrobić typu double
oraz *wynSrednia = double(suma) / rozmiar; wynieść poza pętlę.
Co do pytania, funkcję losowanie umiesz wywołać zaś funkcję srednia już nie umiesz?
WTF?

0

Tak, umiem. Ale ta funkcja musi mi zwrócić dwie wartości - jedną przez wskaźnik a drugą przez return. A dokładnie nie wiem jak to zrobić (żeby mi je wyświetliło przez main)

1

Już zwracasz dwie wartości. To nie twój kod?

Przeczytaj: Przekazywanie parametru przez wartość i referencję

1
yumi382 napisał(a):

Tak, umiem. Ale ta funkcja musi mi zwrócić dwie wartości - jedną przez wskaźnik a drugą przez return. A tego nie wiem jak zrobić.

Przecież to robisz... Chyba, że nie umiesz z tego skorzystać w wywołaniu?

0

Mój, uczę się dopiero i wychodzą całkiem inne liczby. Może źle wywołuję. W main'ie mam:

cout << "Srednia wynosi: " << wynSrednia<< endl;
cout << "Ilosc liczb wiekszych od sredniej to: " << licznik << endl;

srednia(tablica, rozmiar, wynSrednia) - też nie działa.

Nie wiem, pogubiłam się w tym wywoływaniu.

1

licznik = srednia(tablica, rozmiar, &wynSrednia) oczywiście musisz zadeklarować tą wynSrednia wcześniej.

0

Ok, zrobiłam to, dziękuję. Mógłbyś jeszcze powiedzieć, jak mogę zwrócić średnią w main'ie?

1
yumi382 napisał(a):

Ok, zrobiłam to, dziękuję. Mógłbyś jeszcze powiedzieć, jak mogę zwrócić średnią w main'ie?

No napisali: licznik = srednia(tablica, rozmiar, &wynSrednia) -- ten & to adres zmiennej wynSrednia i Ci funkcja zwróci tam wynik...

Uzupełnij kod, zamieść i napisz co nie działa lub czego nie rozumiesz dalej...

0

Dalej wyrzuca mi dziwne liczby...

//-------------------------------------------------------------------
// Iwona Ponicka
// Informtyka, grupa D4
// Nr indeksu: 148306
//-------------------------------------------------------------------
// Cwiczenie 4
//-------------------------------------------------------------------
#include <iostream>
#include <iomanip>

using namespace std;


int losowanie(int tablica[], int rozmiar, int p, int k){
    srand(time(NULL));
    for(int i = 0; i < rozmiar; i++) {
        tablica[i] = rand() % (k - p + 1) + p;

    }

    cout << "\n-----------TABLICA X-----------" << endl;
    for (int i = 0; i < rozmiar; i++) {
        if (i%6 == 0){
            cout << "\n";
        }
        cout << setw (5) << tablica[i];
    }

}


double srednia(int *tablica, int rozmiar, double *wynSrednia){
    int i;
    double suma;
    int licznik = 0;

    for (int i = 0; i < rozmiar; i++){
            suma += tablica[i];
        }
    *wynSrednia = suma / rozmiar;

    for (int i = 0; i < rozmiar; i++) {
      if (tablica[i] > *wynSrednia){
       licznik++;
      }
   }
   return licznik;
}


int main() {
    int p, k, rozmiar, licznik;

    int *tablica = new int[rozmiar];

    double wynSrednia;

    cout << "Podaj poczatek przedzialu: ";
    cin >> p;
    cout << "Podaj koniec przedzialu: " ;
    cin >> k;
    cout << "Podaj rozmiar tablicy (liczby elementow): ";
    cin >> rozmiar;

    licznik = srednia(tablica, rozmiar, &wynSrednia);

    cout << losowanie(tablica, rozmiar, p, k) << endl;
    cout << "Srednia wynosi: " << wynSrednia << endl;
    cout << "Ilosc liczb wiekszych od sredniej to: " << licznik << endl;
}


0

Pierwszy raz używam wskaźników, więc gdybym wiedziała to nie musiałabym tutaj pytać... Dziękuję za jednak za wskazówki, pogrzebałam trochę i działa.
Pozdrawiam.

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