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

Przekazywanie tablic do funkcji

Ostatnio zmodyfikowano 2015-08-04 17:32
Autor Wiadomość
badgeer
Temat założony przez niniejszego użytkownika
Przekazywanie tablic do funkcji
» 2015-08-04 16:01:45
Witam,

Mam taki mały problem związany z przekazywaniem tablic do funkcji. Niby wszystko działa, ale dopisuje mi jakieś 0 na końcu i tym samym zmienia sumowanie liczb na jakieś kosmiczne. Dzieje się tak w każdym przypadku. Czy tablice zrobię wewnątrz funkcji, czy wezmę tablice z main'a. Działa tylko w przypadku kiedy wszystko jest w main, ale przecież nie o to w tym chodzi. Tutaj kod, który napisałem. Nie wiem czy druga funkcja od sumowania jest w ogóle potrzebna, ale po prostu szukałem błędów. Zmieniłem z 999 na 10, żeby szybciej widzieć co z sumą.

C/C++
#include <iostream>
#include <cstdlib>
#include <time.h>

using namespace std;


int losowe( int t[], int rozmiar )
{
    srand( time( NULL ) );
   
    //int suma=0;
    int i = 0;
    do
    {
       
        i++;
        t[ i ] =( rand() % 7 ) + 4;
        cout << "Liczba " << i << " to " << t[ i ] << endl;
        //suma+=t[i];
       
    } while( i < rozmiar );
    //cout << endl<<"Suma to: "<<suma;
}

int suma( int t[], int rozmiar )
{
    for( int i = 0; i < rozmiar; i++ )
   
    {
        int suma = 0;
        suma += t[ i ];
    }
    cout << endl << "Suma to: " << suma;
}


int main()
{
    int liczby[ 10 ];
    cout << losowe( liczby, 10 ) << endl;
    cout << suma( liczby, 10 ) << endl;
   
    return 0;
}
P-135689
JMII89
» 2015-08-04 16:47:02
        i++;
        t[ i ] =( rand() % 7 ) + 4;
        cout << "Liczba " << i << " to " << t[ i ] << endl;
        //suma+=t;
       

Nie zapisujesz nic do zerowego indeksu bo za szybko inkrementujesz i .
P-135693
carlosmay
» 2015-08-04 17:04:20
C/C++
for( int i = 0; i < rozmiar; i++ )

{
    int suma = 0;
    suma += t[ i ];
}

A to co za ufo?
W kazdej pętli na nowo definiujesz zmienną suma wartością 0.
Zrób to przed pętla bo suma wyniesie tyle co ostatni elem tablicy.
P-135695
badgeer
Temat założony przez niniejszego użytkownika
» 2015-08-04 17:13:21
Poprawiłem błędy, które słusznie zauważyliście, ale w dalszym ciągu nie działa sumowanie liczb.

Obecny kod:
C/C++
#include <iostream>
#include <cstdlib>
#include <time.h>

using namespace std;


int losowe( int t[], int rozmiar )
{
    srand( time( NULL ) );
   
    int suma = 0;
    int i = 0;
    do
    {
       
        t[ i ] =( rand() % 7 ) + 4;
        cout << "Liczba " << i << " to " << t[ i ] << endl;
        suma += t[ i ];
        i++;
       
    } while( i < rozmiar );
   
    cout << endl << "Suma to: " << suma;
}



int main()
{
    int liczby[ 10 ];
    cout << losowe( liczby, 10 ) << endl;
   
    return 0;
}

Pozbyłem się dodatkowej funkcji sumy. Zauważyłem, że liczby się sumują dobrze. Z tym, że wynik przedstawiany jest z zawsze dodatkowymi takimi samymi liczbami. Przykład: "Suma to: 734683872" 73 jest to suma dodanych liczb i się zawsze zgadzają. 4683872 pojawia się zawsze. Mogę program 20 razy uruchomić i zawsze dwie pierwsze przedstawiają sumę liczb losowych, a reszta jest ta sama.
P-135696
badgeer
Temat założony przez niniejszego użytkownika
» 2015-08-04 17:21:53
Achhh chyba zmęczony jestem przez ten upał. Nie dałem w funkcji żadnego returna. Wysyłało pewnie jakieś śmieci. Oczywiście wszystko już działa. Kod dla innych, gdyby kiedykolwiek mieli taki problem jak ja.

C/C++
#include <iostream>
#include <cstdlib>
#include <time.h>

using namespace std;


int losowe( int t[], int rozmiar )
{
    srand( time( NULL ) );
   
    int suma = 0;
    int i = 0;
    do
    {
       
        t[ i ] =( rand() % 7 ) + 4;
        cout << "Liczba " << i << " to " << t[ i ] << endl;
        suma += t[ i ];
        i++;
       
    } while( i < rozmiar );
   
    return suma;
}



int main()
{ int suma;
    int liczby[ 10 ];
    cout << losowe( liczby, 10 ) << endl;
    cout << endl << "Suma to: " << suma;
   
    return 0;
}

Dziękuję wszystkim za pomoc ! ;]
P-135697
carlosmay
» 2015-08-04 17:32:16
Po piersze funkcja ma zwrócić wartość int a nie zwraca.
Po drugie jak wypiszesz wynik sumy w funkcji a później w main będzie dwa razy.
Teraz masz takie bzdury na ekranie bo funkcja liczy dobrze i wypisuje
Dobrze natomiast w main wypisuje wartość śmieciową bo noe zwracasz wartości z funkcji.

Edit. Spóźnione.

P-135698
« 1 »
  Strona 1 z 1