podstawy wywołanie funkcji

O jezykach programowania w platformach i nie tylko.
Awatar użytkownika
NiceFox
Pasjonat
Pasjonat
Posty: 454
Rejestracja: 05 lis 2009, 13:22

podstawy wywołanie funkcji

Nieprzeczytany post autor: NiceFox »

czy ktoś mi może powiedzieć dlaczego wyniki alert są 0, 2 ,0,-2?

Kod: Zaznacz cały

extern int a=-1 , b=1;
int f (int a, int b)
   {
   return(a*b+b);
   }
   
   

//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int start()
  {
//----
   Alert("f(a,a)=", f(a,a)); //wynik 0
   Alert("f(b,b)=", f(b,b)); //wynik 2
   Alert("f(a,b)=", f(a,b)); //wynik 0
   Alert("f(b,a)=", f(b,a)); //wynik -2
      
//----
   return(0);
  }
//+------------------------------------------------------------------+
Pieniądze rosną na drzewie cierpliwości.

Michx
Stały bywalec
Stały bywalec
Posty: 41
Rejestracja: 05 lip 2010, 10:39

Nieprzeczytany post autor: Michx »

NiceFox pisze:czy ktoś mi może powiedzieć dlaczego wyniki alert są 0, 2 ,0,-2?
bo takie być powinny?
1. 1-1 = 0
2. 1+1 = 2
3. -1+1 = 0
4. -1-1 = -2
...
"Racja jest jak dupa, każdy ma swoją" J. Piłsudski

Awatar użytkownika
NiceFox
Pasjonat
Pasjonat
Posty: 454
Rejestracja: 05 lis 2009, 13:22

Nieprzeczytany post autor: NiceFox »

no obliczone dobrze tylko skąd to się wzieło?
skąd w ostatnim działaniu -1-1?
Pieniądze rosną na drzewie cierpliwości.

Michx
Stały bywalec
Stały bywalec
Posty: 41
Rejestracja: 05 lip 2010, 10:39

Nieprzeczytany post autor: Michx »

NiceFox pisze:no obliczone dobrze tylko skąd to się wzieło?
Fakt, że mnożenie jest nieco trudniejsze od dodawania, ale oba operatory zostały chyba dokładnie omówione w szkole podstawowej :/

Aha i żeby była jasność: zmienne a i b, które zostały zadeklarowane globalnie nie mają nic wspólnego ze zmiennymi a i b, które są zadeklarowane jako parametry w funkcji...
"Racja jest jak dupa, każdy ma swoją" J. Piłsudski

Awatar użytkownika
NiceFox
Pasjonat
Pasjonat
Posty: 454
Rejestracja: 05 lis 2009, 13:22

Nieprzeczytany post autor: NiceFox »

Kod: Zaznacz cały

extern int a=-1 , b=1;
int f (int a, int b)
   {
   return(a*b+b);   // ciało funkcji daje -1*(1+1) = -2
   }
   
   

//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int start()
  {
//----
   Alert("f(a,a)=", f(a,a)); //wynik 0   u mnie -1*-1=1
   Alert("f(b,b)=", f(b,b)); //wynik 2   u mnie 1*1 =1
   Alert("f(a,b)=", f(a,b)); //wynik 0  u mnie -1*1=-1
   Alert("f(b,a)=", f(b,a)); //wynik -2 u mnie 1*-1=-1
     
//----
   return(0);
  }
//+------------------------------------------------------------------+

a możesz powiedzić skąd podstawiasz a i b do funkcji?
Pieniądze rosną na drzewie cierpliwości.

Awatar użytkownika
Tig3r
Przyjaciel Forum
Przyjaciel Forum
Posty: 2310
Rejestracja: 02 sty 2008, 10:46

Nieprzeczytany post autor: Tig3r »

do funkcji podstawiasz 2 zmienne w kolejności jedna za druga, i ta zmienna jest używana w funkcji, skoro wywołujesz:
f(b,a)

czyli to to samo co
f(1,-1)


a tym samym wewnątrz funkcji przyjmują wartości:
a=1, b=-1

resztę możesz sobie policzyć
======================================================
Nie głupi ten co nie wie, lecz ten który nie chce się nauczyć..

Michx
Stały bywalec
Stały bywalec
Posty: 41
Rejestracja: 05 lip 2010, 10:39

Nieprzeczytany post autor: Michx »

NiceFox pisze: return(a*b+b); // ciało funkcji daje -1*(1+1) = -2
To bardzo interesujące podejście.
Od kiedy dodawanie ma pierwszeństwo przed mnożeniem? Kiedyś była taka "zagadka" ile to jest 2+2*2 -> łatwo można było się pomylić ale jak można się pomylić w równaniu typu 2*2+2?!

Może rozważ czy nie powinieneś używać innych nazw dla różnych zmiennych np. coś w stylu:

Kod: Zaznacz cały

extern int z1=-1 , z2=1;
int f (int a, int b)
   {
   return(a*b+b);
   }

int start()
  {
//----
   Alert("f(z1,z1)=", f(z1,z)); //wynik 0
   Alert("f(z2,z2)=", f(z2,z2)); //wynik 2
   Alert("f(z1,z2)=", f(z1,z2)); //wynik 0
   Alert("f(z2,z1)=", f(z2,z1)); //wynik -2
     
//----
   return(0);
  } 
"Racja jest jak dupa, każdy ma swoją" J. Piłsudski

Awatar użytkownika
NiceFox
Pasjonat
Pasjonat
Posty: 454
Rejestracja: 05 lis 2009, 13:22

Nieprzeczytany post autor: NiceFox »

Kod: Zaznacz cały

x= 2+2*2; // wynik 6
y=(2+2)*2 // wynik 8
W MQL-u chyba ale jestem początkującym więc proszę o potwierdzenie.
Pieniądze rosną na drzewie cierpliwości.

Awatar użytkownika
Tig3r
Przyjaciel Forum
Przyjaciel Forum
Posty: 2310
Rejestracja: 02 sty 2008, 10:46

Nieprzeczytany post autor: Tig3r »

NiceFox No bez jaj :D

wszędzie działania mają ten sam priorytet i tu nie ma nic innego

jak chcesz sprawdzić to sobie wstaw alert w skrypcie
======================================================
Nie głupi ten co nie wie, lecz ten który nie chce się nauczyć..

Awatar użytkownika
reptile
Maniak
Maniak
Posty: 2799
Rejestracja: 13 gru 2008, 13:48

Nieprzeczytany post autor: reptile »

Tig3r pisze:wszędzie działania mają ten sam priorytet i tu nie ma nic innego
też mógłbym domniemywać że w mqlu jest inaczej gdybym przeczytał to
Michx pisze:NiceFox napisał:
return(a*b+b); // ciało funkcji daje -1*(1+1) = -2

To bardzo interesujące podejście.
Od kiedy dodawanie ma pierwszeństwo przed mnożeniem? Kiedyś była taka "zagadka" ile to jest 2+2*2 n łatwo można było się pomylić ale jak można się pomylić w równaniu typu 2*2+2?!
więc to chyba tylko drobne nieporozumienie w treści i kotekscie

Dodano po 5 minutach:
NiceFox pisze:return(a*(b+b)); // ciało funkcji daje -1*(1+1) = -2
R.E.P.T.I.L.E. - Robotic Electronic Person Trained for Infiltration and Logical Exploration (off-line,only e-mail)

ODPOWIEDZ