- Per Sigbjørn
- Valg-setninger
- Treff: 3094
Valg-setninger
I de aller fleste C- og C++-programmer trenger i å gjøre valg og tester.
Til det kan vi bruke if- setinger. Vi har også strukturer med switch og case , men det vil vi ikke komme så mye inn på i forhold til mikrokontrollere. (I hvert fall i første omgang)
if - else - else if
En enkel if-setning bygges opp slik: if (logisk test) { Konkret eksempel: if (teller>255){ Hvis variabelen «teller» er større enn 255, vil «teller» settes til 0. Vi kan også angi hva som skal skje hvis testen ikke er sann: if (logisk test) { Konkret eksempel: if (teller>255){ Hvis variabelen «teller» er større enn 255, vil «teller» settes til 0, hvis ikke vil telleren økes med 1.
if (teller>100){ Hvis variabelen «teller» her er større enn 100, vil «teller» økes med 10. Neste ledd tester om teller enn 50, og øker i så fall telleren med 5. Denne testen vil ikke kjøres hvis den første testen er sann, selv om denne også selvsagt ville vært sann hvis den første var det. Hvis ingen av de to første testene er sanne vil koden etter else kjøres, og telleren økes med 1. Det er, så vidt jeg vet, ingen begrensing på hvor mange ledd en slik |
|
switch - case
Hvis en har mange forskjellige alternativer å sjekke, kan det for bli uoversiktelig og vanskelig å vedlikeholde en struktur med if - else. Da er det et alternativ å bruke switch og case. Her er et enkelt eksempel: int verdi = random (0,5); //Verdi settes til en tilfeldig verdi mellom 0 og 5
|
Oppgaver:
Oppgave 1: for (int teller=0;teller <20;teller++){ Dette er en løkke som teller fra 0 til og med 19. (Mer om dette her: Løkker) Bruk valg-setninger, og skriv ut forskjellig tekst til Serial Monitor hvis teller er mindre enn 5, større enn 5 og større enn 15. Skriv også ut en egen tekst når når telleren er 16. |
Løsningsforslag:
Oppgave 1:
/* Oppgave 1: */
void setup() {
Serial.begin(115200);
}
void loop() {
for (int teller=0;teller <20;teller++){
if(teller<5){ //Sjekker om telleren er mindre enn 5
Serial.println("Telleren er mindre enn 5");
}
if(teller>5){ //Sjekker om telleren er større enn 5
Serial.println("Telleren er større enn 5");
}
if(teller>15){ //Sjekker om telleren er større enn 15
Serial.println("Telleren er større enn 15");
}
if(teller==16){ //Sjekker om teller en er lik 16
Serial.println("Nå er telleren 16!");
}
delay(400);
}
}
Som du ser vil nå programmet skrive ut både "Telleren er større enn 5" og "Telleren er større enn 15" når telleren er 16, 17, 18 eller 19.
Dette kan vi ordne med å endre en av if-setningene fra
if(teller>5) til if(teller>5 && teller<16)
Da kjører vi to tester i samme setning, slik at teksten skrives ut hvis telleren er større enn 5 OG telleren er mindre enn 16.