Zmienne globalne a lokalne

0

Witam mam problem z przekształceniem kodu programu aby nie używał zmiennych globalnych tylko lokalne. Jestem bardzo początkujący i sam nie potrafie mimo wielu godzin czyatnia tego zmienić. z góry dzikeuję za pomoc .

Witam mam podobny problem ale odnośnie zmiennych globalnych , nie wiem jak pozmieniać kod aby własnie zmiennych globalnych nie uzywac bo takie mam zadanie przez profesora :/ z góry dziekuje za pomoc , jestem bardzo początkujący ;/

kod programu :

#include <iostream>
#include <cstdlib>

using namespace std;
float xp, xk, h, calka, n,i;

double funkcja(double x)
{
return x*x+3;
}

float dane(float &xp, float &xk, float &n, float &h)
{
cout<<"xp = ";
cin >> xp;
cout<<"xk = ";
cin >> xk;
cout<<"n = ";
cin>>n;
h = (xk - xp) / (float)n;
cout<< "h=" << h << endl;

return xp,xk,n,h;

}

float obliczenia(float & calka )
{
for (int i=1; i<n; i++)
{
calka += funkcja(xp + i h);
}

calka += funkcja(xp) / 2;
calka += funkcja(xk) / 2;
calka = h;
return calka;

}

float wynik()
{
cout<<"Wynik calkowania = "<<calka<<endl<<endl;
}

int main()
{

dane(xp,xk,n,h);
obliczenia(calka);
wynik();

return 0;
}

1

Nie wiem co tam jest napisane bo niesformatowane ale zapewne odpowiedzia jest "przekaz przez parametr". C'mon juz koncowka roku jest a Ty takich rzeczy nie ogarniasz?

0

```#include <iostream>
#include <cstdlib>

using namespace std;
float xp, xk, h, calka, n,i;
double funkcja(double x)
{
    return x*x+3;
}

float dane(float &xp, float &xk, float &n, float &h)
{
    
    cout<<"xp = ";
    cin >> xp;
    cout<<"xk = ";
    cin >> xk;
    cout<<"Podaj n  = " ;
    cin>>n;
    h = (xk - xp) / (float)n;
    cout<<  h=" << h << endl;
    return xp,xk,n,h;
}


float obliczenia(float & calka )
{
    for (int i=1; i<n; i++)
    {
        calka += funkcja(xp + i * h);
    }
    calka += funkcja(xp) / 2;
    calka += funkcja(xk) / 2;
    calka *= h;
    return calka;
}
float wynik()
{
    cout<<"Wynik calkowania = "<<calka<<endl<<endl;
}


int main()
{
    dane(xp,xk,n,h);
    obliczenia(calka);
    wynik();
    return 0;
}
0

w momencie kiedy wrzucam zmienne globalne do fukncji main staja sie lokalne ale tylko dla bloku main , w poszczególnych wywoływanych fukncjach nie sa zainicjowane

0
Patryk Studzinski napisał(a):

w momencie kiedy wrzucam zmienne globalne do fukncji main staja sie lokalne ale tylko dla bloku main , w poszczególnych wywoływanych fukncjach nie sa zainicjowane

Tak. Tak wlasnie ma byc. A jak sie komunikuje z innymi blokami?

Podpowiem ze w podanym kodzie procedury komunikuja sie

0

pewnie przez wskaznik ...

0

Nie widze u Ciebie zadnego wskaznika. Widze za to referencje ale przez wartosc (bez &) tez mozna

0

```#include <iostream>
#include <cstdlib>

using namespace std;
double funkcja(double x)
{
    return x*x+3;
}

float dane(float *xp, float *xk, float *n, float *h)
{
   
    cout<<"xp = ";
    cin >> *xp;
    cout<<"xk = ";
    cin >> *xk;
    cout<<"Podaj n  = " ;
    cin>>*n;
    *h = (*xk - *xp) / (float)*n;
    cout<< h=" << *h << endl;

}


float obliczenia(float calka, float &n ,  float &h, float &xp, float &xk)
{

    for (int i=1; i<n; i++)
    {
        calka += funkcja(xp + i * h);
    }
    calka += funkcja(xp) / 2;
    calka += funkcja(xk) / 2;
    calka *= h;
    cout<<"Wynik calkowania = "<< calka<<endl;
}



int main()
{

    float xp, xk, h, calka, n,i;
 
    dane(&xp,&xk,&n,&h);
    obliczenia(n,h,xp,xk,calka);

    
    return 0;
}
0

W skrocie to jestem z telefonu wiec nic Ci nie naskrobie
ale
W gruncie rzeczy ta funkcja dostaje wszystko co chce w parametrach

float dane(float *xp, float *xk, float *n, float *h)

Dostaje wskazniki (czy to nie byly referencje?) bo chcemy zeby miala efekty uboczne.
Cala filozofia zeby kazda funkcja dostala w parametrach wszystko co jej do zycia potrzebne

0

mozna zamknac temat , udalo mi sie przekazac przez referencje . pozdrawiam

1

Funkcje nic nie zwracają chociaż zdeklarujesz, że zwracają float i używasz niezainicjowanej zmiennej calka.

No ale wierzę na słowo, że działa ;)

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