Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Wprowadzanie tablicy przez użytkownika

Ostatnio zmodyfikowano 2014-03-09 23:16
Autor Wiadomość
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.

C/C++
#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 :(
P-105969
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:

C/C++
int * tab = new int[ rozmiar ];
for( int i = 0; i < rozmiar; i++ )
{
    cin >> tab[ i ]; // nie mam pewności co do tego, ale powinno być ok
}

// kod

// na koniec
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ę

C/C++
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:

C/C++
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.
P-105971
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.

C/C++
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 ]; // nie mam pewności co do tego, ale powinno być ok
    }
   
    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)'|
P-105972
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*.
P-105973
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!
P-105974
« 1 »
  Strona 1 z 1