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

Przekazywanie tablic jednowymiarowych - lekcja 19

Ostatnio zmodyfikowano 2014-06-12 10:01
Autor Wiadomość
Aughton
Temat założony przez niniejszego użytkownika
Przekazywanie tablic jednowymiarowych - lekcja 19
» 2014-05-17 21:01:49
Witam.
Mam problem z zadaniem:
Napisz program, który wylosuje 999 liczb całkowitych z zakresu od 4 do 10 włącznie, wypisze te wartości na ekran, po czym zsumuje je i wynik wypisze na ekran. Wszelkie operacje mają zostać zrealizowane w oparciu o funkcje. Tablica ma być zadeklarowana w funkcji main. Oczekiwane funkcje:
- Wypełnienie tablicy o podanym rozmiarze losowymi liczbami z przedziału podawanego przez argumenty funkcji.
- Sumowanie określonej ilości liczb znajdujących się w tablicy i zwrot wyniku.
- Wypisywanie zawartości tablicy.
Przykładowa implementacja funkcji main:

C/C++
int main()
{
    int tablica[ 999 ];
    wylosujLiczby( tablica, 999, 4, 10 );
    wypiszLiczby( tablica, 999 );
    int iSuma = obliczSume( tablica, 999 );
    std::cout << "Suma liczb wynosi: " << iSuma << std::endl;
    return 0;
}

I zrobiłem do tej pory to:


C/C++
#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;
int wylosujLiczby( int t1[], int a, int b, int c )
{
    srand( time( NULL ) );
    do
    {
        t1[ a ] =( rand() % 7 ) + 4;
        a++;
    } while( a < 999 );
   
}

int wypiszLiczby( int t1[], int b )
{
    cout << "Wylosowane liczby to: ";
    t1 = 0;
    b = 0;
    do
    {
        cout << t1[ b ] << ", ";
       
    } while( b < 999 );
   
   
   
}
int obliczSume( int t1[], int c )
{
    t1 = 0;
    c = 0;
    int suma = 0;
    do
    {
        suma += t1[ c ];
        c++;
    }
    while( c < 999 );
   
}
int main()
{
    int tablica[ 999 ];
    wylosujLiczby( tablica, 999, 4, 10 );
    wypiszLiczby( tablica, 999 );
    int iSuma = obliczSume( tablica, 999 );
    cout << "Suma liczb wynosi: " << iSuma << endl;
    return 0;
}
Kompilator nie znajduje żadnych błędów, ale po uruchomieniu program buguje się (w sensie wyskakuje komunikat MS, że wystąpił błąd i tyle). Co jest źle?

P-110212
pekfos
» 2014-05-17 21:05:23
Niepoprawnie używasz argumentów funkcji.

PS. JAK ZAZNACZYĆ KOD, ŻEBY POKAZANY BYŁ W "TRYBIE" C++, A NIE NA CZYSTO? NIECZYTELNE STRASZNIE, SORY.
..
P-110214
Aughton
Temat założony przez niniejszego użytkownika
» 2014-05-17 21:17:58
czyli jak to powinno wyglądać? nie chodzi mi o przepisanie całego programu żeby działal, tylko zebyscie nakierowali ;v
P-110218
pekfos
» 2014-05-17 21:20:43
Wszystkie luźne inty przekazywane do funkcji są niepoprawnie użyte w implementacji funkcji - czyt. niezgodnie z przeznaczeniem.
P-110219
Moorfox
» 2014-05-18 00:18:42
Nie pisz programu o funkcjach, póki nie wiesz jak działają funkcje, kompletnie tego nie rozumiesz...
wylosujLiczby( tablica, 999, 4, 10 ); <--- Takie wywołanie funkcji
A ty ja definiujesz, tak:
C/C++
int wylosujLiczby( int t1[], int a, int b, int c )
{
    srand( time( NULL ) );
    do
    {
        t1[ a ] =( rand() % 7 ) + 4;
        a++;
    } while( a < 999 );
   
}
Co oznacza t1 = tablica (w duzym uproszczeniu)
a = 999
b = 4
c = 10
C/C++
int wylosujLiczby( int t1[], int a, int b, int c )
{
    srand( time( NULL ) );
    do
    {
        t1[ a ] =( rand() % 7 ) + 4; // Skoro a = 999 to t1[999] = (rand()%7+4) ??? nie ma elementu 999 maksymalny argument //dla ktorego funkcja przyjmuje wartosc to 998
        a++;
    } while( a < 999 ); // Skoro a = 999 to tutaj przy pierwszym obrocie (do ktorego nawet nie dojdzie przez naruszenie //pamieci) petla sie zakonczy.
   
}

zastanawiales sie po co ci te argumenty b i c ? bo ich nie wykorzystujesz przeciez to od ilu do ilu chccesz losowac czyli
mozna zapisac to (rand() % c-b+1) + b co jest równoważne z (rand() % 10-4+1) + 4 = (rand() % 7) + 4  jakbys chcial od 20 do 23, czyli b = 20 c = 23 to znowu wzor dziala (rand() % 23-20+1)+20 = (rand() % 4) + 20
Kolejna uwaga przestan uzywac petli while i do while staraj uzywac sie for.
Kolejna... twoja funkcja jak pisze w deklaracji zwraca int, bo int wylosujLiczby(), to gdzie twoj return int ??.
Po za tym nie potrzebny ci tutaj tym zwracany wystarczy void
Pprawnie funkcja wylosujLiczby powinna wygladac
C/C++
void wylosujLiczby( int t1[], int a, int b, int c )
{
    srand( time( NULL ) ); // ta funkcje powinno sie raz wywolywac nie przy kazdym uruchomieniu funkcji, ale to malo wazne
    int temp = c - b + 1
    for( int i = 0; i < a; i++ )
    {
        t1[ i ] =( rand() % temp ) + b;
    }
   
}
Ewentualnie jesli chcesz petle do while
C/C++
void wylosujLiczby( int t1[], int a, int b, int c )
{
    srand( time( NULL ) ); // ta funkcje powinno sie raz wywolywac nie przy kazdym uruchomieniu funkcji, ale to malo wazne
    int i = 0;
    int temp = c - b + 1;
    do {
        t1[ i ] =( rand() % temp ) + b;
        i++;
    } while( i < a );
   
}

Reszte funkcji sam popraw[/i]
P-110244
mody
też mam problem z zadaniem z lekcji 19tej
» 2014-06-12 10:01:13
<< removed - załóż własny temat >>
P-111978
« 1 »
  Strona 1 z 1