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

problem z referencjami i wskaznikami

Ostatnio zmodyfikowano 2017-01-26 14:48
Autor Wiadomość
rojek121
Temat założony przez niniejszego użytkownika
problem z referencjami i wskaznikami
» 2017-01-25 20:38:09
Witam. Mam do napisania program w którym zdefiniowana zostanie 10-elementowa tablica. Należy
zaimplementować menu z możliwością wyboru następujących opcji:
1. Wyświetlenie zmiennych z tablicy.
2. Wypełnienie tablicy wartościami losowymi z przedziału 0-100
3. Wyświetlenie średniej harmonicznej tablicy (można wykorzystać funkcję
stworzoną na poprzednich laboratoriach).
4. Znajdowanie elementu podobnego. Podprogram wczytuje liczbę od
użytkownika, a następnie znajduje w tablicy wartość najbardziej zbliżoną do niej
i ją wyświetla.
5. Sortowanie tablicy – można do tego celu wykorzystać sortowanie bąbelkowe
lub dowolny algorytm sortujący.
Wszystkie podprogramy menu, zapisać w oddzielnych funkcjach. Do funkcji należy
przekazywać tablicę oraz pozostałe niezbędne argumenty.


Utknalem na sredniej harmonicznej. Chodzi o to ze program nie chce mi wczytac tablicy z podpunktu 2 i wyliczyc z niego sredniej. Jakies rady? Z gory dziekuje za pomoc.

C/C++
#include <iostream>
#include <cmath>
#include <stdlib.h>
#include <time.h>

using namespace std;

void zmienne( float * tab )
{
    cout << "Zmienne w tablicy: ";
    for( int i = 0; i < 10; i++ )
    {
        cout << tab[ i ] << ", ";
    }
    cout << endl;
}

void losowe( float * tab2 )
{
   
    int liczba;
    srand( time( NULL ) );
    for( int i = 0; i < 10; i++ )
    {
        liczba = rand() % 101;
        tab2[ i ] = liczba;
    }
    for( int i = 0; i < 10; i++ )
         cout << tab2[ i ] << " ";
   
}

void srednia( float tab2[ 10 ], float & wynik )
{
    float suma, suma2 = 0;
    for( int i = 0; i < 10; i++ )
    {
        suma = 1.0 / tab2[ i ];
        suma2 += suma;
    }
    wynik = 10.0 / suma2;
   
}

int main()
{
   
    float tab[ 10 ];
    cout << "Podaj wartosci, ktore mam wpisac do tablicy: ";
    for( int i = 0; i < 10; i++ )
    {
        cin >> tab[ i ];
    }
    system( "cls" );
   
    cout << "MENU:" << endl;
    cout << "Wybierz opcje :" << endl;
    cout << " 1 - Wyswietlanie zmiennych tablicy" << endl;
    cout << " 2 - Wartosci losowe" << endl;
    cout << " 3 - Srednia harmoniczna" << endl;
    cout << " 4 - Znajdowanie elementu podobnego" << endl;
    cout << " 5 - Sortowanie tablicy" << endl;
    cout << " x - Wyjscie" << endl;
    char a;
    cin >> a;
    switch( a ) {
    case '1': {
            {
                zmienne( tab );
            }
            system( "pause" );
            return 0;
        }
    case '2': {
           
            float tab2[ 10 ];
            losowe( tab2 );
           
            system( "pause" );
            return 0;
        }
    case '3': {
            float wynik;
            float tab2[ 10 ];
           
            srednia( tab2, wynik );
            cout << wynik;
           
            system( "pause" );
            return 0;
        }
    case '4': {
           
            system( "pause" );
            return 0;
        }
    case '5': {
           
            system( "pause" );
            return 0;
        }
    case 'x': case 'X':
        {
            return 0;
        }
    }
}
P-156945
latajacaryba
» 2017-01-25 22:25:01
wstawiaj kod w znaczniki
[cpp]kod[/cpp]
C/C++
void srednia( float tab2[ 10 ], float & wynik )
{
    float suma, suma2 = 0;
    for( int i = 0; i < 10; i++ )
    {
        suma = 1.0 / tab2; //  TU
        suma2 += suma;
    }
    wynik = 10.0 / suma2;
}
TU - wydaje mi się,że tu możesz mieć błąd. Chyba chodziło Ci o
tab2[ i ]
? Nie wgłebiałem się w kod, ale to jako pierwsze rzuca się w oczy.
Na marginesie - po co przesyłasz wynik, skoro i tak nic nie zczytujesz z niego, a jedynie zapisujesz wartość, zupełnie niezależną od tego co wcześniej w nim było? Ja bym to zrobił tak:

C/C++
float srednia( float tab2[ 10 ] ) //typ float, bo zwracamy wynik o takim typie
{
    float suma, suma2 = 0;
    for( int i = 0; i < 10; i++ )
    {
        suma = 1.0 / tab2[ i ];
        suma2 += suma;
    }
    float wynik = 10.0 / suma2;
    return wynik;
}
P-156953
mateczek
» 2017-01-26 14:48:28
C/C++
case '3': {
    float wynik;
    //float tab2[ 10 ]; //deklaracja tablicy z zerowymi bądź losowymi elementami.
   
    //srednia( tab2, wynik ); // do funkcji średnia przekazujesz przed chwilą zadeklarowaną losową tablicę
    srednia( tab, wynik ); // tak zadziała
    cout << wynik;
   
    //system( "pause" );
    return 0;
}
P-156969
« 1 »
  Strona 1 z 1