Serdecznie witam. Już raz mi pomogliście, więc ze śmiałością zwracam się o pomoc do użytkowników forum raz jeszcze.
Mam informatykę na studiach, gdzie mnie nic nie uczą, uczę się sam w domku i klepię trochę programów w C++. Zaczynałem od zupełnego zera, a teraz z pomocą Mirosława Zelenta i Jerzego Grębosza już ogarnąłem jakieś podstawy.
Przyszły wskaźniki i... Zrobiło się kiepsko. Temat, który z początku mnie przerósł. Początkowo miałem prosić o całkowitą pomoc w napisaniu programu, ale zawziąłem się, otworzyłem Symfonię C++ i coś jednak zrobiłem sam. Mam jednak parę wątpliwości i jeden problem.
Zadanie do zrobienia jest następujące:
Napisz program, który dla tablicy liczb całkowitych o stałym rozmiarze:
a) znajduje wartość największą i najmniejszą,
b) oblicza średnią arytmetyczną,
c) oblicza standardowe odchylenie
W zadaniu tym można zaprogramować własne funkcje do realizacji zadań, np. funkcja, która
nadaje wartości losowe wszystkim elementom tablicy: void LosujTablice(int*, int, int, int) -
pierwszy parametr to adres tablicy, drugi liczba elementów tablicy, trzeci to najmniejsza możliwa
wartość, jaką może mieć element tablicy, czwarty parametr to największa możliwa wartość, jaką
może mieć element tablicy.
Funkcja wyświetlająca wszystkie elementy tablicy na ekranie: void WyswietlTablice(int *, int,
int) - pierwszy parametr to adres tablicy, drugi to liczba elementów tablicy, trzeci parametr to
liczba elementów tablicy w jednym wierszu.
Funkcje do szukania wartości min i max, liczenia średniej arytmetycznej oraz standardowego
odchylenia należy zdefiniować samodzielnie.
Poczyniłem coś takiego:
#include <iostream>
#include <ctime>
#include <windows.h>
using namespace std;
void GeneratorTablicy( int * wsk, int m );
void WyswietlaczTablicy( int * wsk, int m );
float fSrednia( int * wsk, int m );
int fNajmniejsza( int * wsk, int m );
int fNajmniejsza( int * wsk, int m );
float fOdchylenie( int * wsk, int m );
int main()
{
srand( time( NULL ) );
int m = rand() % 14 + 2;
int * tablica;
tablica = new int[ m ];
cout << endl;
GeneratorTablicy( tablica, m );
WyswietlaczTablicy( tablica, m );
cout << "Co chcesz zrobic?" << endl;
cout << "1. Policz srednia liczb w tablicy" << endl;
cout << "2. Znajdz najmniejsza wartosc w tablicy" << endl;
cout << "3. Znajdz najwieksza wartosc w tablicy" << endl;
cout << "4. Policz odchylenie standardowe liczb w tablicy" << endl;
int wybor;
cin >> wybor;
switch( wybor )
{ case 1: cout << fSrednia( tablica, m );
break;
}
return 0;
}
void GeneratorTablicy( int * wsk, int m )
{
for( int i = 0; i <= m - 1; i++ )
{
wsk[ i ] = rand() % 5 + 1;
}
}
void WyswietlaczTablicy( int * wsk, int m )
{
cout << "Wylosowano m= " << m << endl << endl;
cout << "Otrzymujemy nastepujaca tablice: " << endl;
for( int i = 0; i <= m - 1; i++ )
{
cout << wsk[ i ] << "\t";
}
cout << endl;
}
float fSrednia( int * wsk, int m )
{
int suma;
float srednia;
for( int i = 0; i <= m - 1; i++ )
{
suma += wsk[ i ];
}
return srednia;
}
Wiem, że nie ma tych parametrów maksymalnych i minimalnych, jakie mogą przyjmować elementy tablic, ale to nieważne póki co. Proszę na to nie zwracać uwagi. Wątpliwości mam następujące:
1) Proszę o zwrócenie uwagi na moje komentarze. Mam taki zwyczaj je pisać, żeby jak najwięcej się nauczyć przy pisaniu programów. Czy te komentarze mają ręce i nogi? Zdaje sobie sprawę, że nie pisane są super profesjonalnie - do użytku własnego, ale czy nie ma w nich rażących błędów logicznych? Czy moje rozumowanie jest poprawne?
2) Szczególne pytania do komentarza pierwszego, z trzema znakami zapytania. Czy ta gwiazdka oznacza, że ja wysyłam do funkcji jako argument obiekt pod danym adresem, a nie adres? Tym sobie próbuję tłumaczyć to, że np. w funkcji GeneratorTablicy używamy wsk
- bez "*". A przecież przeczytałem, że "*" powoduje, że pracujemy na obiektach pod tym adresem, a nie na adresie. A generując tablicę ja pracuje właśnie na obiektach pod tymi adresami.
3) Dlaczego program źle liczy średnią? Nie mogę znaleźć błędu. Reszta podpunktów cały czas przede mną i mam nadzieję, że przy dalszych problemach będę mógł się do Was zwrócić.
Z góry bardzo dziękuję!