Selektion jämförande och logiska operatorer

Slides:



Advertisements
Liknande presentationer
F. Drewes, Inst. f. datavetenskap1 Föreläsning 13: Resolution •Resolution i satslogiken •Resolution i predikatlogiken.
Advertisements

Visual Basic - Genomgång
Array Skriv ett program som frågar följande: ”Hur många tal vill du mata in?” användaren matat in ett tal t.ex n. då frågar programmet n ggr följande.
Villkor Booelska operatorer Villkorsatser Switchsatser Villkor och annat.
Programstruktur: C för enchipsdatorer
Funktioner och programorganisation
Föreläsning 3 Repetition Operatorer Styrstrukturer Deklaration och anrop av metoder.
Operatorer.
2D1311 Programmeringsteknik med PBL
Föreläsning 2. Operatorer Tilldelning Kodblock { } if – satsen Logiska uttryck Att programmera.
Inkapsling.
Välkommen Vahid Mosavat
Att programmera i språket Java
Grundläggande programmering
Föreläsning 2 Datalogi för E1 2D1343
Föreläsning 2 Primitiva datatyper Variabler och konstanter Tilldelning Inläsning Operatorer Villkorssatsen if Slingor: while och for.
Flödeskontroll Satser i ett program utförs en och en efter varandra. Detta kallas sekvensiell flödeskontroll. Ofta är det dock nödvändigt att modifiera.
Programmering i C# 2. Inledande detaljer.
Programmering B PHP Lektion 2
Anders Sjögren Selektion i C ”vägval” if och switch - satserna.
OOP F4:1 Marie Olsson OOP Objekt-orienterad programmering Föreläsning 4 Metoder klass-metoder instans-metoder.
Repetition inför slutprovet
Programmeringsbegrepp
Pointers. int a=5; int f(int b) { a--; b++; return b; } int main() { int a=3; printf("%d,",f(a)); printf("%d",a); return 0; }
Programmering B PHP Lektion 2
Programmering B PHP Lektion 3
Föreläsning 2 Kort Översikt Över Javaspråket. Källkodsformat Unicode används åäöμψζ tillåtna Inte alla miljöer klarar av det Källkod Bytekod Java VM för.
Max start-guide Liten och väldigt snabbt ihopkastad.
Föreläsning 3 Programmeringsteknik och Matlab DD1312
Internet A Javaskript.
Grundläggande programmering
Problemlösning Veckodagsproblemet Gissa talet Siffersumman.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 3 ( ) INNEHÅLL: -Jämförelseoperatorer -Villkorssatser -Logiska operatorer.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 3 ( ) INNEHÅLL: -Jämförelseoperatorer -Villkorssatser -Logiska operatorer.
OOP F3:1 Marie Olsson OOP Objekt-orienterad programmering Föreläsning 3 Iteration Många variabler av samma sort – Arrayer.
Modulär programutveckling
1 Föreläsning 6 Programmeringsteknik och Matlab 2D1312/2D1305 Metoder & parametrar Array API och klassen ArrayList.
1 Föreläsning 5 Programmeringsteknik och Matlab 2D1312/2D1305 Repetition Metoder Array API och klassen ArrayList.
Föreläsning 1 Reserverade ord Javas API Identifierare Litteraler Variabler Kompilering och interpretering.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 3 ( ) INNEHÅLL: -Tabeller -Villkorssatser -Repetitionssatser.
Anders Sjögren Selektion i C ”vägval” if och switch - satserna.
Föreläsning 4 programmeringsteknik och Matlab 2D1312/ 2D1305
2D1311 Programmeringsteknik med PBL
1 Mönstermatchning och rekursion Nr 4. 2 Förenklad notation val fnname = fn name => expression Förenklas till fun fnname name = expression Exempel fun.
OOP F13:1 Marie Olsson OOP Objekt-orienterad programmering Föreläsning 13 Repetition variabler, selektion och iteration.
OOP F2:1 Stefan Möller OOP Objekt-orienterad programmering Föreläsning 2 Deklaration och tilldelning Programsatser Tilldelning Input/Output Selektion.
Satslogik, forts. DAA701/716 Leif Grönqvist 5:e mars, 2003.
Föreläsning 17 Repetition. Källkodsformat Unicode används åäöμψζ tillåtna i namn på identifierare Inte alla miljöer klarar av det Källkod Bytekod Java.
Föreläsning 3 Villkorssatsen if Slingor: while och for Felsökning.
Övning2 programmeringsteknik och Matlab 2D1312/ 2D1305
F2 1 Programmeringsteknik, 4p vt-00 Kommentarer Allt mellan /* och */ Varje kommentar byts ut mot en blank av kompilatorn /* Exempel på uttryck, tilldelningsoperatorn.
-Repetition -Variabler -Primitiva typer (+ boolean) -Operatörer +, ++, --, -Typ konvertering -Wrapper klasser -Jämförelse operatörer,(==, =,,!=, !) -String.
Mer om operatorer logiska operatorer bit-operatorer adress-operatorn ”komma”-operatorn punkt - operatorn.
1 Föreläsning 2 Reserverade ord Javas API Identifierare Litteraler Variabler Kompilering och interpretering.
-Repetition -Variabler -Primitiva typer (+ boolean) -Operatörer +, ++, --, -Typ konvertering -Wrapper klasser -Jämförelse operatörer,(==, =,,!=, !) -String.
Föreläsning 3 Operatorer Flödeskontroll Primitiva datatyperKlasser i API och egna klasser int double byte float char boolean short long String BufferedReader.
OOP&M - teori1 OOP&M – Föreläsning 5 kap 8-13 Operatorer,typkonvertering, booleska operatorer, if och else.
Föreläsning4 Repetition slingor Metoder. while-sats består av följande delar: 1. while 2. Villkor-sats (condition) 3. uttryck (statement) while-sats int.
Programmering i.NET Farid Naisan, Universitetsadjunkt Datavetenskap, Teknik och samhälle, Malmö högskola Begreppsförklaring.
Malmö högskola Rolf Axelsson 2003/2004 DA7231, 4 poäng while-loop do-loop continue, break PROJEKT Föreläsning 5.
OOP&M - teori1 OOP – Föreläsning 7 (Sista oop I) Konstruktioner för att hantera upprepningar Kapitel 11.
Karlstads universitet Datavetenskap DAVA07/08 JE,MG,MG,PS Kontraktsprogrammering.
Föreläsning 3 Algoritm Grundstrukturer i en algoritm Sekvens Selektion Iteration Selektion - if-sats Selektion - if-else-sats Selektion - switch-sats jämförelseoperatorer.
Anders Sjögren Operatorer. Anders Sjögren Operand(er)
Anders Sjögren Programmering i ANSI-C Ett första program för att se vart vi ska...
Mer om operatorer logiska operatorer bit-operatorer adress-operatorn ”komma”-operatorn punkt - operatorn.
KPP053, HT2015 MATLAB, Föreläsning 4
Lektion 4.
Föreläsning 3: Booleans, if, switch
Iteration – Repetitionssats - while
Presentationens avskrift:

Selektion jämförande och logiska operatorer Programmering i C# Selektion jämförande och logiska operatorer Farid Naisan, Universitetsadjunkt Datavetenskap, Teknik och samhälle, Malmö högskola farid.naisan@ts.mah.se

Selektion true logiskt uttryck false sats-1 sats-n Flödesdiagram Selektion är en form av algoritm som alternativ till sekvensiell programmering som innebär att satserna utförs steg för steg. Selektion betyder att sätta villkor, dvs utföra operation endast under vissa villkor. Exempel: I någon beräkning får en negativ faktor x värdet noll: if (x < 0) x = 0;

Selektion – två alternativ välj bland två olika alternativ if (x <0) { //meddela användaren //avbryt körningen } else //räkna kvadratroten av x

Flödesdiagram Två alternativ: Logiskt uttryck sats-1 falskt sant delen false sats-1 sats-n true falskt delen sant

Selektion - flera alternativ Välj bland flera alternativ if ( (x >= 0 ) && ( x <= 9) ) { //Talet är positvt och ensiffrigt //Gör det du vill } else if ( (x > 9 ) && ( x < 999 ) ) if ( summan > 5000.0) //…. //fortsätt med något annat else //någon annan operation

Jämförelse operatorer Med selektion behöver man använda logiska uttryck. I logiska uttryck använder man logiska operatorer. Op Beskrivning < mindre än > större än <= mindre eller lika med >= större eller lika med == lika med != inte lika med Exempel double dTalA = 3.6, dTalB = -5.0; dTalA < dTalB false dTalA > dTalB true dTalB <= dTalA dTalA >= dTalB dTalA == 3.6D dTalB != -5.0D

text jämförelse Symbolen ‘==‘ och “!=“ kan också användas med typen string för att jämföra likehet och olikhet av två texter. Jämförelsen sker då efter tecknens placering i teckentabellen. "abc" != "abc" // false "abc" != "123" // true "abc" == "aBc" // false "abc" != "aBc" // true ("abc" + "123“) == "abc123" // true ("abc" + 4) == "abc4" // true

Logiska operatorer De mest använda logiska operatorer är logiskt och, logiskt eller och logisk negation. logiskt ’och’ && logiskt ’eller’ || logisk negation ! De används för att testa två eller flera logiska uttryck samtidigt.

Exempel – logiska operatorer En nybörjarstudent tänker programmera sin tanke om framtiden. Hennes vision är: ”Om jag blir stor och rik och inte är sjuk or slut, reser jag så mycket jag kan.” Villkor 1: ålder >= 60 Villkor 2: ekonomi = toppen Villkor 3: inte (sjuk) eller (orklös)), två undervillkor Samtliga villkor skall vara sanna för att hon skall lyckas med sin plan. if ((minÅlder >= 60) && (ekonomi == toppen) && (hälsa != sjuk) && (ork != slut) ) MessageBox.Show(”Jag reser mer och jobbar mindre när jag blir stor.”); Denna algoritm kan programmeras i en liten void funktion. Obs. datastrukturerna är slumpmässigt valda.

Exempel v1 public enum Status {toppen, gift, slut, sjuk} public void DayDreaming1() { //Variabler och testvärden int minÅlder = 65; string ekonomi = "toppen"; Status hälsa = Status.toppen; Status ork = Status.toppen; bool villkor1 = (minÅlder >= 60); bool villkor2 = (ekonomi.CompareTo("toppen") == 0); bool villkor3 = !((hälsa == Status.sjuk) || (ork == Status.slut)); if (villkor1 && villkor2 && villkor3) Console.WriteLine("Jag reser mer och jobbar mindre när jag närmar mig pensionen."); }

Några förtydligganden Följande är ekvivalenta: if (villkor1 && villkor2 && villkor3) ’1 if ( (villkor1) && (villkor2) && (villkor3) ) ’2 if (villkor1==true && villkor2== true && villkor3== true) ’3 if ( (villkor1==true) && (villkor2== true) && (villkor3== true) ) ’4 Den andra varianten (2) är en rekommenderad stil. Notera också: if(någonVillkor) är samma sak som if (någonVillkor == true) if(! någonVillkor) är samma sak som if (någonVillkor == false) Villkoret: !((hälsa == Status.sjuk) || (ork == Status.slut) ) kan skrivas som ( hälsa != Status.sjuk) && (ork != Status.slut) ) Detta tillämpas i version 2 av samma exempel nedan:

Exempel v2 public void DayDreaming2() { //Variabler och testvärden int minÅlder = 65; string ekonomi = "toppen"; Status hälsa = Status.toppen; Status ork = Status.toppen; if ( (minÅlder >= 60) && (ekonomi.CompareTo("toppen") == 0) && (hälsa != Status.sjuk) && (ork != Status.slut) ) Console.WriteLine("Jag reser mer och jobbar mindre när jag närmar mig pensionen."); }

Sammanfattningstabell || (logisk eller) A || B Resultat true || true true true || false false || true false || false false && (logisk och) A && B Resultat true && true true true && false false false && true false && false ! (logisk inte) !A Resultat !true false !false true

boolska variabler Varje logiskt uttryck resulterar i true eller false. x = -1; if ( x < 0 ) //samma som if (true) ... x = 10; if ( x < 0 ) //samma som if (false) … Man kan spara resultatet av logiska operationer i boolska variabler bool res; //om x är utanför 0 – 9 och beräkningen inte är färdig res = ( ( x < 0 ) || ( x > 9 ) ) && ( !klar ); if ( res ) //obs. !klar är samma som (klar == false)

Exempel Anta vi har variabel frisk av typen bool. bool frisk = false; bool res; res = frisk != true; //är samma som res = !frisk ; //vilket är samma som res = res = !(frisk == true);//är samma som res = frisk == false; // vilket är samma som res = !(frisk == false); Samtliga resulterar i true!

Nästlade satser Det kan blir svårtläst och jobbigt att skriva många if/else satser. Risken att göra fel blir också stor. Men det går inte alltid att ersätta if-else satser till en motsvarande switch konstruktion. Indentering av kod är viktig för att göra koden lättläst (se exemplen som följer). I vissa fall, är switch satsen ett bra alternativ. Det sägs också att switch är snabbard än if/else satsen.

Nästlade if -else public char SetBetyg (double poäng) { char betyg = '\0'; //nollställning if (poäng >= 0.0) if (poäng >= 85.0) betyg = '5'; else if (poäng >= 70.0) betyg = '4'; else if (poäng >= 50.0) betyg = '3'; else betyg = 'u'; } betyg = 'x'; //fel betyg return betyg;

Switch - syntax switch (uttryck) //uttryck kan endast vara int,char,string { case konstant uttryck 1: //sat(er) break; //hopp-sats, break eller goto, undvik helst goto case konstant uttryck 2: //satser break; //andra case-satser default: // valfritt }

Switch - exempel public void SwitchExempel() { Console.Write("Välj 1, 2 för att fortsätta, 0 för att avsluta! "); int val = int.Parse(Console.ReadLine()); switch (val) case 1: Console.WriteLine("Du valt 1."); break; case 2: Console.WriteLine("Du valt 2."); case 0: Console.WriteLine("Du valt att avsluta."); default: Console.WriteLine("Inget bra val!"); }

Sist men inte minst, ’?’-operatorn Syntax: boolskt uttryck ? utryck 1 : uttryck 2; Betrakta följande: //Räkna någon avgift public double RäknaAvgift(double number) { double avgift = 0.05*number; //5% gäller alla //+2% för belopp > 10000 if ( number > 10000.0) avgift += 0.02 * (number - 10000.0); //samma som avgift = avgift + //0.02.... return avgift; }

Forts. Satserna kan skrivas om med ?-operatorn: Ett avslutande råd: //Räkna någon avgift public double RäknaAvgiftEx(double number) { double avgift = 0.05*number; //5% gäller alla return ( number > 10000.0) ? avgift +0.02 * (number - 10000.0) : avgift; } Ett avslutande råd: Öka läsbarheten och minimera felkällor – använd parenteser flyttigt i alla lägen!

Parenteser Obs. när man har två eller satser efter if/else, måste man använda parenteser { } som i exemplet nedan. if ( x < 0 ) { x = 0; //… } Det är dock på säkra sidan att alltid använda parenteser. double rot = 0.0; if ( x > 0 ) rot = Math.Sqrt(x); The End