Dotazy začátečníka 2

Odpovědět
Uživatelský avatar
gilhad
Příspěvky: 201
Registrován: 29 kvě 2015, 00:36
Kontaktovat uživatele:

Re: Dotazy začátečníka 2

Příspěvek od gilhad » 18 čer 2020, 19:50

Jednak AND ma prednost pred OR
https://en.wikipedia.org/wiki/Operators ... precedence
ale zavorky maji jeste vyssi a delaji tu podminku prehlednejsi.

Ja bych to zapsal jako

Kód: Vybrat vše

if ( ( 1 == 0 ) && ( (2 == 4) || (2 == 6) || (2==7) ) ) { // tak udelej cosi
   x=x;
   };
ale spis jeste (zvlast s dlouhyma promennyma ) takto

Kód: Vybrat vše

if ( 
     ( 1 == 0 ) &&   // pokud plati toto a libovolne z nasledujicich:
     ( 
        (2 == 4) || 
        (2 == 6) || 
        (2 == 7) 
     )
   ) { 
       // tak udelej cosi
       x=x;
   };

ale samozrejme to jde zapsat i jako

if(1 == 0&&2 == 4||1 == 0&&2 == 6||1 == 0&&2==7){x=x;};

jen te pak nebude mit rad nikdo, kdo to bude po tobe cist, tebe nevyjimaje.

Pivrnec78
Příspěvky: 64
Registrován: 30 dub 2017, 15:25

Re: Dotazy začátečníka 2

Příspěvek od Pivrnec78 » 18 čer 2020, 19:56

Pivrnec78 píše:
18 čer 2020, 13:38
Zdravím,
potřebuju napsat podmínku pro více podmínek, ale kombinace And a Or ... jak to mám napsat - jak je to správně?

If něco1 = 0 and něco2 = 4 or
If něco1 = 0 and něco2 = 6 or
if něco1 = 0 and něco2 = 7 then ...
endif

nebo

If něco1 = 0 and něco2 = 4 or něco2 = 6 or něco2 = 7 then ...
endif
Omlouvám se, blbě jsem se vyjádřil ... upravuji původní text

Uživatelský avatar
gilhad
Příspěvky: 201
Registrován: 29 kvě 2015, 00:36
Kontaktovat uživatele:

Re: Dotazy začátečníka 2

Příspěvek od gilhad » 18 čer 2020, 20:10

To jsem pochopil, porovnavat takto cisla neni vetsinou sikovne :) Ale bral jsem to jako zkratku ...
Samozrejme to plati i pro promenne, takze

Kód: Vybrat vše

neco == 0
1 == neco
neco == cosi
( a + b ) == (c + d - e )
...

Pivrnec78
Příspěvky: 64
Registrován: 30 dub 2017, 15:25

Re: Dotazy začátečníka 2

Příspěvek od Pivrnec78 » 18 čer 2020, 21:29

Můžu napsat pro každou podmínku zvlášť stejný úkol. Ale to je si myslím zbytečné. Proto bych chtěl vyřešit ten zápis, jak to napsat. Mě nezajímá výsledek, ale tento konkrétní zápis, protože úkol té podmínky je asi na 15 řádcích ...

Uživatelský avatar
gilhad
Příspěvky: 201
Registrován: 29 kvě 2015, 00:36
Kontaktovat uživatele:

Re: Dotazy začátečníka 2

Příspěvek od gilhad » 18 čer 2020, 22:27

Tak ty moje priklady by mely jit pouzit a rozvinout dal - a zavorky jsou prima i pokud nejsou vylozene nutne, protoze to zprehledni - stejne jako zapis na vic radku se spravnym odsazenim.

Na druhou stranu, pokud je ta podminka nejaka komplikovana, (a treba jeste na nekolika mistech) muze byt lepsi zabalit ji do funkce, pokud potrebujes porovnavat mraky hodnot, muze byt sikovne (a prehledne) je drzet v poli a projit to cyklem, pokud spolu nejak souvisi, muze byt vyhodne je nahradit vyrazem (kazdou sudou hodinu = misto porovnavani s cisly 2,4,6,... vezmu zbytek po deleni dvema)

Kód: Vybrat vše


bool podminka(int a, int b) {
  if ( a !=0 ) return false;  // prvni parametr musi byt nulovy, jinak podminka nejplati
  if (b==4 || b==6 || b==7) return true; // tyhle hodnoty  beru
  // ...
  return false; // kdyz jsme dosli az sem a nic nevyhovelo, vratime false
}

#define DELKA 3
int hodnoty[DELKA] = { 4,6,7 };

bool podminka2(int a, int b) {
  if ( a !=0 ) return false;  // prvni parametr musi byt nulovy, jinak podminka nejplati
  for (int i=0; i<DELKA; i++) { 
       if (b == hodnoty[i]  ) return true;
  };
  // ...
  return false; // kdyz jsme dosli az sem a nic nevyhovelo, vratime false
}

// ...

if ( podminka(neco1,neco2) ) { // sada if
   x=x;
};

if ( podminka2(neco1,neco2) ) { // pruchod polem
   x=x;
};


Pivrnec78
Příspěvky: 64
Registrován: 30 dub 2017, 15:25

Re: Dotazy začátečníka 2

Příspěvek od Pivrnec78 » 19 čer 2020, 07:44

gilhad píše:
18 čer 2020, 22:27
Tak ty moje priklady by mely jit pouzit a rozvinout dal - a zavorky jsou prima i pokud nejsou vylozene nutne, protoze to zprehledni - stejne jako zapis na vic radku se spravnym odsazenim.

Na druhou stranu, pokud je ta podminka nejaka komplikovana, (a treba jeste na nekolika mistech) muze byt lepsi zabalit ji do funkce, pokud potrebujes porovnavat mraky hodnot, muze byt sikovne (a prehledne) je drzet v poli a projit to cyklem, pokud spolu nejak souvisi, muze byt vyhodne je nahradit vyrazem (kazdou sudou hodinu = misto porovnavani s cisly 2,4,6,... vezmu zbytek po deleni dvema)

Kód: Vybrat vše


bool podminka(int a, int b) {
  if ( a !=0 ) return false;  // prvni parametr musi byt nulovy, jinak podminka nejplati
  if (b==4 || b==6 || b==7) return true; // tyhle hodnoty  beru
  // ...
  return false; // kdyz jsme dosli az sem a nic nevyhovelo, vratime false
}

#define DELKA 3
int hodnoty[DELKA] = { 4,6,7 };

bool podminka2(int a, int b) {
  if ( a !=0 ) return false;  // prvni parametr musi byt nulovy, jinak podminka nejplati
  for (int i=0; i<DELKA; i++) { 
       if (b == hodnoty[i]  ) return true;
  };
  // ...
  return false; // kdyz jsme dosli az sem a nic nevyhovelo, vratime false
}

// ...

if ( podminka(neco1,neco2) ) { // sada if
   x=x;
};

if ( podminka2(neco1,neco2) ) { // pruchod polem
   x=x;
};

Dík za pomoc, tady se ale ztrácím, to je na mě moc složité :-/ V tom bych se potom sám nevyznal.

DavidO
Příspěvky: 878
Registrován: 01 kvě 2013, 21:27

Re: Dotazy začátečníka 2

Příspěvek od DavidO » 19 čer 2020, 09:10

Pivrnec78 píše:
18 čer 2020, 13:38
Zdravím,
potřebuju napsat podmínku pro více podmínek, ale kombinace And a Or ... jak to mám napsat - jak je to správně?

If 1 = 0 and 2 = 4 or
If 1 = 0 and 2 = 6 or
if 1 = 0 and 2 = 7 then ...
endif

nebo

If 1 = 0 and 2 = 4 or 2 = 6 or 2 = 7 then ...
endif
V Picaxe na kombinace různých logických operátorů ZAPOMEŇ!!! (viz dokumentace konstrukce if v Picaxe a obecněji také můj příspěvek tady na fóru)

DavidO
Příspěvky: 878
Registrován: 01 kvě 2013, 21:27

Re: Dotazy začátečníka 2

Příspěvek od DavidO » 19 čer 2020, 09:21

gilhad píše:
18 čer 2020, 19:50
Jednak AND ma prednost pred OR
https://en.wikipedia.org/wiki/Operators ... precedence
ale zavorky maji jeste vyssi a delaji tu podminku prehlednejsi.
Tos moh napsat i holandsky, protože Picaxe je uplně jinej jazyk a navíc vyhodnocování výrazů a podmínek tam je udělané chybně.

Uživatelský avatar
gilhad
Příspěvky: 201
Registrován: 29 kvě 2015, 00:36
Kontaktovat uživatele:

Re: Dotazy začátečníka 2

Příspěvek od gilhad » 21 čer 2020, 11:31

Auu, neprecetl jsem si, ze jde o picaxe forum, jako bych nic nerekl ....

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 1 host