Wprowadzanie tablicy przez użytkownika
Ostatnio zmodyfikowano 2014-03-09 23:16
gustawson Temat założony przez niniejszego użytkownika |
Wprowadzanie tablicy przez użytkownika » 2014-03-09 22:34:28 Witam! Mam taki o to programik, liczący arytmetycznie zawartości tablicy. #include <iostream> #include <cstdlib>
using namespace std;
double srednia_aryt( int * tab, int n ) { double suma_t = 0; double sr; for( int i = 0; i < n; i++ ) { suma_t = suma_t + tab[ i ]; } sr = suma_t / n; return sr; } int main() { int tab[] = {( 10.12654 ),( 2.2120 ),( 3.125 ),( 10.1212 ),( 41.1289 ) }; cout << srednia_aryt( tab, 5 ); return 0; }
Działa bez zarzutu. Jednak chciałem go zmodyfikować na taki aby to użytkownik wprowadzał tablice, a nie przypisane wartości na "sztywno" I prosze Was w takim razie o pomoc w tym jak to wklepać aby działało, ponieważ moje pomysły doprowadzały do uwalenia programu :( |
|
michal11 |
» 2014-03-09 22:47:35 Po pierwsze to int tab[] = {( 10.12654 ),( 2.2120 ),( 3.125 ),( 10.1212 ),( 41.1289 ) }; jest bez sensu ponieważ inicjalizujesz tablicę liczb całkowitych liczbami zmiennoprzecinkowymi. Zdecyduj się jakie ci są potrzebne. W najprostszy sposób możesz zrobić tak, jeżeli użytkownik poda wcześniej ilość wpisywanych liczb: int * tab = new int[ rozmiar ]; for( int i = 0; i < rozmiar; i++ ) { cin >> tab[ i ]; }
delete[] tab;
Jeżeli nie chcesz aby użytkownik podawał ilość wpisywanych liczb to musisz stworzyć jakiś bufor i pętlą while wczytywac do niego liczby po kolei a później przepisać je do dynamicznie zaalokowanej tablicy. Edit: Funkcję double srednia_aryt( int * tab, int n ) { double suma_t = 0; double sr; for( int i = 0; i < n; i++ ) { suma_t = suma_t + tab[ i ]; } sr = suma_t / n; return sr; }
możesz zmienic na coś takiego: double srednia_aryt( int * tab, int n ) { double suma_t = 0; for( int i = 0; i < n; i++ ) { suma_t = suma_t + tab[ i ]; } return suma_t / n; }
Nie wiem czy to dużo zmienia ale taki zapis jest chyba bardziej oszczędny pod względem wizualnym. |
|
gustawson Temat założony przez niniejszego użytkownika |
» 2014-03-09 23:04:41 Ogromne dzięki za pomoc! Mam tylko jeszcze jedno pytanie. Ogólnie program działa. Jednak kiedy zgodnie z Twoją uwagą chce zamienić tablice z "intów" na double to podczas kompilacji pojawia sie taki błąd. using namespace std;
double srednia_aryt( int * tab, int n ) { double suma_t = 0; for( int i = 0; i < n; i++ ) { suma_t = suma_t + tab[ i ]; } return suma_t / n; } int main() { int b; cin >> b; int * tab = new int[ b ]; for( int i = 0; i < b; i++ ) { cin >> tab[ i ]; } cout << srednia_aryt( tab, b ); delete[] tab; return 0; } W takiej formie program działa, jednak jak zmienie double srednia_aryt( int * tab, int n ) na double srednia_aryt( double * tab, int n ) to wyświetla błąd: error: cannot convert 'int*' to 'double*' for argument '1' to 'double srednia_aryt(double*, int)'| |
|
michal11 |
» 2014-03-09 23:12:27 Masz przecież napisane co jest nie tak. Funkcja oczekuje double* a ty jej przesyłasz int*. Jeżeli chcesz liczyć średną dla double to musisz taka tablicę zadeklarować: double * tab = new double[ rozmiar ]; i taka tablice dopiero przesyłać do funkcji która oczekuje double*. |
|
gustawson Temat założony przez niniejszego użytkownika |
» 2014-03-09 23:16:01 Racja, przecież to oczywiste i nie zauważyłem tego. W każdym razie dzięki wielkie za pomoc! |
|
« 1 » |