Zmienne globalne a lokalne

Odpowiedz Nowy wątek
2019-06-11 20:49
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;
}

edytowany 2x, ostatnio: Patryk Studzinski, 2019-06-11 21:01
Pokaż pozostałe 2 komentarze
Wytnij tę linię ze zmiennymi, wklej to do main i zobacz skąd będziesz ostrzelany - AnyKtokolwiek 2019-06-11 21:18
Taki kod dostałeś od profesora? - tajny_agent 2019-06-11 23:13
mamy programowanie jako przedmiot dodatkowy taki pobiezny , ale profesor wymaga aby nie uzywac zmiennych globalnych , ja chce po prostu zmieniac wartosc zmiennej poprzez poszczególne funkcje zarazem aby zmiany sie nadpisywały - Patryk Studzinski 2019-06-11 23:25
Powtórzę pytanie: Taki kod dostałeś od profesora i masz go dostosować czy napisałeś go sam od zera? - tajny_agent 2019-06-11 23:31
ja go napisalem. - Patryk Studzinski 2019-06-11 23:34

Pozostało 580 znaków

2019-06-11 21:15
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?


01010100 01110101 01110100 01100001 01101010 00100000 01101110 01101001 01100101 00100000 01101101 01100001 00100000 01101110 01101001 01100011 00100000 01100011 01101001 01100101 01101011 01100001 01110111 01100101 01100111 01101111 00101110 00100000 01001001 01100011 00100000 01110011 01110100 01101111 01101110 01110100 00101110

Pozostało 580 znaków

2019-06-11 22:03
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;
}

Pozostało 580 znaków

2019-06-11 22:10
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

Pozostało 580 znaków

2019-06-11 22:19
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


01010100 01110101 01110100 01100001 01101010 00100000 01101110 01101001 01100101 00100000 01101101 01100001 00100000 01101110 01101001 01100011 00100000 01100011 01101001 01100101 01101011 01100001 01110111 01100101 01100111 01101111 00101110 00100000 01001001 01100011 00100000 01110011 01110100 01101111 01101110 01110100 00101110
edytowany 1x, ostatnio: stivens, 2019-06-11 22:25

Pozostało 580 znaków

2019-06-11 22:33
0

pewnie przez wskaznik ...

Pozostało 580 znaków

2019-06-11 22:35
0

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


01010100 01110101 01110100 01100001 01101010 00100000 01101110 01101001 01100101 00100000 01101101 01100001 00100000 01101110 01101001 01100011 00100000 01100011 01101001 01100101 01101011 01100001 01110111 01100101 01100111 01101111 00101110 00100000 01001001 01100011 00100000 01110011 01110100 01101111 01101110 01110100 00101110

Pozostało 580 znaków

2019-06-11 22:49
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;
}

Pozostało 580 znaków

2019-06-11 22:58

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


01010100 01110101 01110100 01100001 01101010 00100000 01101110 01101001 01100101 00100000 01101101 01100001 00100000 01101110 01101001 01100011 00100000 01100011 01101001 01100101 01101011 01100001 01110111 01100101 01100111 01101111 00101110 00100000 01001001 01100011 00100000 01110011 01110100 01101111 01101110 01110100 00101110
edytowany 2x, ostatnio: stivens, 2019-06-11 22:59

Pozostało 580 znaków

2019-06-11 23:52
0

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

Usunąć też czy samo zamknięcie wystarczy? - szweszwe 2019-06-11 23:54
Tam masz taki przycisk zaakceptuj odpowiedz i wtedy temat sam sie taguje jako rozwiazany ;) - stivens 2019-06-11 23:57
można usunąć , dziękuję - Patryk Studzinski 2019-06-11 23:58
Temat zostanie jutro usunięty, plus dodatkowo format dysków. - szweszwe 2019-06-11 23:59

Pozostało 580 znaków

2019-06-12 00:17
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 ;)

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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