Offline
Sr. Member
Karma: 0
Posts: 355
|
 |
« on: March 15, 2012, 01:35:12 am » |
Sto cercando come si fa a controllare con un solo IF, due variabili. Ma non trovo nulla.
Era per non fare due IF e mantenere il codice piu' possibile pulito.
|
|
|
|
|
Logged
|
|
|
|
|
Rome (Italy)
Offline
Tesla Member
Karma: 74
Posts: 7369
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
|
 |
« Reply #1 on: March 15, 2012, 01:45:31 am » |
Sto cercando come si fa a controllare con un solo IF, due variabili. Ma non trovo nulla.
per la AND if (A==0 && B==1) per la OR if(A==0 || B==1)
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Sr. Member
Karma: 0
Posts: 355
|
 |
« Reply #2 on: March 15, 2012, 05:38:22 am » |
Grazie. Mi sai indicare uina guida per la IDE ? QUI ( http://arduino.cc/en/Tutorial/IfStatement) non c'era scritto...
|
|
|
|
|
Logged
|
|
|
|
|
Torino
Offline
Full Member
Karma: 0
Posts: 133
|
 |
« Reply #3 on: March 15, 2012, 05:42:57 am » |
|
|
|
|
|
Logged
|
|
|
|
|
Forum Moderator
Italy
Offline
Brattain Member
Karma: 219
Posts: 16474
Don't know what I do
|
 |
« Reply #4 on: March 15, 2012, 06:08:19 am » |
Ma tu devi anche distinguere fra l'operazione aritmetica di assegnazione "=" e l'operazione di comparazione "==". http://arduino.cc/en/Reference/Assignmenthttp://arduino.cc/en/Reference/Ifif (a=0 && b=0) è diverso da if (a==0 && b==0)
Nel primo caso chiedi: l'assegnazione di 0 ad a e di 0 a b è stata svolta con successo? Nel secondo caso chiedi: il contenuto di a è uguale a 0 ed il contenuto di b è uguale a 0?
|
|
|
|
|
Logged
|
|
|
|
|
Rome (Italy)
Offline
Tesla Member
Karma: 74
Posts: 7369
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
|
 |
« Reply #5 on: March 15, 2012, 06:16:37 am » |
Ma tu devi anche distinguere fra l'operazione aritmetica di assegnazione "=" e l'operazione di comparazione "==".
Non avevo fatto caso a questo errore, banale e molto frequente che non vine rilevato in nessun modo dal compilatore. Se fai if (A=1) il risultato è che la if è sempre vera perché fai una assegnazione e non un confronto, la sintassi è if (A==1), "==" è l'operatore per l'eguaglianza mentre "=" è l'operatore per l'assegnazione. Ti consiglio di studiarti i vari operatori del C la e differenza tra operatori logici e bitwise, la if puoi scriverla pure così "if (A==0 & B==1)" però è diverso, e produce effetti diversi, dal scriverla ""if (A==0 && B==1)", a te scoprire la differenza tra le due if 
|
|
|
|
« Last Edit: March 15, 2012, 10:19:32 am by astrobeed »
|
Logged
|
|
|
|
|
Forum Moderator
Italy
Offline
Brattain Member
Karma: 219
Posts: 16474
Don't know what I do
|
 |
« Reply #6 on: March 15, 2012, 06:54:33 am » |
Non avevo fatto caso a questo errore, banale e molto frequente
soprattutto se si proviene da linguaggi diversi dal C. la if puoi scriverla pure così "if (A==0 & B==1)" però è diverso, e produce effetti diversi, dal scriverla ""if (A==0 && B==1)", a te scoprire la differenza tra le due if  Già 
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Sr. Member
Karma: 6
Posts: 462
|
 |
« Reply #7 on: March 15, 2012, 09:20:02 am » |
if (a=0 && b=0) è diverso da if (a==0 && b==0)
Nel primo caso chiedi: l'assegnazione di 0 ad a e di 0 a b è stata svolta con successo? Nel secondo caso chiedi: il contenuto di a è uguale a 0 ed il contenuto di b è uguale a 0? Se non sbaglio ,con if (a=0 && b=0) ,oltre a assegnare lo 0 ad a e b, usi i nuovi valori di a e b come valori booleani per la if(tranne se lo impedisco esplicitamente con overloading di operatori)...è equivalente a a=0;b=0; if(a && b) .. non dipende dal fatto che l'assegnazione abbia sucesso(anche perchè di solito è supposto che avvenga corettamente).. @astrobeed: nel tuo caso mi sembra che la & e la && producano gli stessi effetti..o sbaglio?(non uso spesso il bitwise)
|
|
|
|
« Last Edit: March 15, 2012, 01:49:46 pm by m_ri »
|
Logged
|
|
|
|
|
Rome (Italy)
Offline
Tesla Member
Karma: 74
Posts: 7369
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
|
 |
« Reply #8 on: March 15, 2012, 10:19:21 am » |
@astrobeed: nel tuo caso mi sembra che la & e la && producano gli stessi effetti..o sbaglio?(non uso spesso il bitwise)
No, anche per te vale lo stesso consiglio, vai a leggere le differenze tra operatori logici e operatori bitwise
|
|
|
|
|
Logged
|
|
|
|
|
Deep south of Italy
Offline
Faraday Member
Karma: 6
Posts: 2954
The quieter you become, the more you can hear
|
 |
« Reply #9 on: March 15, 2012, 10:28:32 am » |
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Sr. Member
Karma: 6
Posts: 462
|
 |
« Reply #10 on: March 15, 2012, 01:22:23 pm » |
@astrobeed: nel tuo caso mi sembra che la & e la && producano gli stessi effetti..o sbaglio?(non uso spesso il bitwise)
No, anche per te vale lo stesso consiglio, vai a leggere le differenze tra operatori logici e operatori bitwise scusami,ma continuo a essere ignorante... in if(A==0 & B==1) e if(A==0 && B==1),ho A==0 che mi può restituire true o false,stessa cosa per B==1 chiamo a e b due variabili booleane dove a=A==0 e b=B==1..ok?(in quanto il confronto restituisce un valore booleano,o no?) a casa mia, if( a && b) è uguale a if(a & b)..dove sbaglio? qlkn può far notare che mentre | & coinvolgono sempre tutti gli operatori, in alcune implementazioni || e && si fermano quando incontrano un 1(o uno 0)..non so come si comporti il compilatore usato da arduino..
|
|
|
|
« Last Edit: March 15, 2012, 01:31:25 pm by m_ri »
|
Logged
|
|
|
|
|
Offline
Sr. Member
Karma: 6
Posts: 462
|
 |
« Reply #11 on: March 15, 2012, 01:29:09 pm » |
sono andato a cercare un po' di roba su internet e continuo a essere convinto.. vorrei farvi notare che entrambi gli operatori di & o && in questo caso sono dei bool..
|
|
|
|
|
Logged
|
|
|
|
|
Rome (Italy)
Offline
Tesla Member
Karma: 74
Posts: 7369
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
|
 |
« Reply #12 on: March 15, 2012, 01:53:10 pm » |
vorrei farvi notare che entrambi gli operatori di & o && in questo caso sono dei bool..
Sei tratto in inganno da questo caso, il discorso && o & devi vederlo in generale, p.e. valuta cosa succede se scrivo : "If ((a > b) && c)" oppure "if ((a > b) & c)" Il risultato della IF non è sempre lo stesso a seconda del valore che assume C, nel primo caso la IF è vera quando A > B e C è maggiore di 0, nel secondo la IF è vera quando A > B e C ha un qualunque valore dispari.
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Sr. Member
Karma: 6
Posts: 462
|
 |
« Reply #13 on: March 15, 2012, 01:56:32 pm » |
non ci siamo capiti..vorrei farti notare che avevo scritto @astrobeed:nel tuo caso mi sembra che la & e la && producano gli stessi effetti..o sbaglio?(non uso spesso il bitwise) stavo parlando del tuo caso,non in generale.. (= e poi,scambi per un newbie totale uno che scrive di overloading di operatori??  ah,per caso sai dirmi se il compilatore usato da arduino quando vede dei && o || esegue sempre tutti gli operandi o salta quelli successivi quando ha una risposta certa?(importante quando usi delle funzioni come operandi)
|
|
|
|
« Last Edit: March 15, 2012, 02:05:28 pm by m_ri »
|
Logged
|
|
|
|
|
0
Online
Edison Member
Karma: 8
Posts: 2186
Arduino rocks
|
 |
« Reply #14 on: March 15, 2012, 07:12:01 pm » |
ah,per caso sai dirmi se il compilatore usato da arduino quando vede dei && o || esegue sempre tutti gli operandi o salta quelli successivi quando ha una risposta certa?(importante quando usi delle funzioni come operandi) Nel caso di &| salta tutto ciò che segue se il risultato della prima operazione è false, invece &&|| verifica anche le seguenti condizioni. Per evitare l'errore della if tf=false si usa scrivere la condizione al contrario cioè if false=tf, così il compilatore di da errore perchè un lvalue non può essere una costante. lvalue=rvalue, (l, left e r, right) Questa è una buona abitudine che ancora non ho preso, sono sempre in tempo. Ciao.
|
|
|
|
|
Logged
|
|
|
|
|
|