Próbuję użyć zmiennych poza ich zakresem - dlaczego nie działa?

0
#include <iostream>

using namespace std;

struct Samochod
{
    string marka;
    string model;
    int przebieg;
    float cena;
};

float srednia(float cena, int n);
void wczytaj(Samochod Tab[], int n);
void wypisz(Samochod Tab[], int n);
int n;

int main()
{


    Samochod Tab[10];
    cout << "Podaj liczbe aut: ";
    cin >> n;

    wczytaj(Tab, n);
    wypisz(Tab, n);

    return 0;
}

void wczytaj(Samochod Tab[], int n)
{
    for (int i = 0; i < n; i++)
    {
        cout << "Podaj marke: ";
        cin >> Tab[i].marka;
        cout << "Podaj model: ";
        cin >> Tab[i].model;
        cout << "Podaj przebieg: ";
        cin >> Tab[i].przebieg;
        cout << "Podaj cene: ";
        cin >> Tab[i].cena;
    }
}

void wypisz(Samochod Tab[], int n)
{
    for (int i = 0; i < n; i++)
    {
        cout << "Marka: " << Tab[i].marka << ",model: " << Tab[i].model << ",przebieg "
             << Tab[i].przebieg << ",cena: " << Tab[i].cena << endl;
    }
    cout << srednia(Tab[i].cena, n);
}

float srednia(Samochod Tab[], int n)
{
    double suma = 0;
    for (int i = 0; i < n; i++)
    {
        suma += Tab[i].cena;
    }


    return suma / n;
}

Ma wypisywac tez srednia cene auta (suma wszystkich cen na ilosc wpisanych aut), czemu nie dziala? Cos w petli nie tak?

2

Tym razem się zlitowałem i poprawiłem tytuł i kod. Następnym razem poleci do kosza. Dlaczego nikt nie odpowiada w moim wątku?

cout << srednia(Tab[i].cena, n);

Próbujesz przekazać element jako tablicę, używając zmiennej, która w tym zakresie nie istnieje. Nic dziwnego, że się nie kompiluje.

3
błąd: 'i' was not declared in this scope
cout<srednia(Tab[i].cena,n); ```
0

mam dac zamiast Tab[i] samo Tab?

1

Jeśli chcesz aby się skompilowało to tak bym sugerował.

0

I tak jest bez zmian.

2

Tak, zamień u góry w definicji funkcji na:

float srednia(Samochod Tab[], int n)

i przekaż Tab.

0

Dzieki. Zdzwilo mnie to bardzo bo wczesniej napisalem inny program:

  float wartosc(int liczba_ukladow, double cena_detaliczna){

	
	double wart=0;

	wart = liczba_ukladow*cena_detaliczna	;

	return wart;
	
}
 void wypisz(Uklad Tab[], int n){
	
	for(int i=0; i<n; i++){
		cout<<endl;
		cout<<"Nazwa ukladu: "<<Tab[i].nazwa<<",liczba ukladow: "<<Tab[i].liczba_ukladow<<", cena detaliczna: "<<Tab[i].cena_detaliczna<<endl;
		cout<<"Wartosc: "<<wartosc(Tab[i].liczba_ukladow, Tab[i].cena_detaliczna)<<endl;
		cout<<endl;
		
	}
	cout<<"Uklady o najwyzszej wartosci: "<<najwyzszaWartosc(Tab,n);
	cout<<endl;
	cout<<"Czy sa 2?: "<<sprawdzCzySaDwieNazwy(Tab,n);

	
}

Jak widać tez mam wartosc(Tab[i].liczba_ukladow, Tab[i].cena_detaliczna), a jednak działa, dlaczego?

0

Mam na mysli to, ze w wywolaniu funkcji w cout nie uzywam samego Tab, ale Tab[i].coś

2

Tam masz wywołanie funkcji "wartosc" w pętli, zatem dla danej wartości "i", liczysz wartość dla jednego elementu tablicy.

W przypadku tym u góry, pętla for się kończy a ty odwołujesz się do "i", które istnieje TYLKO w zasięgu pętli, poza tym potrzebujesz całą tablicę a nie jeden jej element.

0

Typ argumentu musi się zgadzać z typem parametru. Jeśli liczysz średnią, to raczej z jakiejś sekwencji elementów, więc podawanie jednego mija się z celem.

1 użytkowników online, w tym zalogowanych: 0, gości: 1