Presentation laddar. Vänta.

Presentation laddar. Vänta.

Programmering i C# Farid Naisan, Universitetsadjunkt Datavetenskap, Teknik och samhälle, Malmö högskola Selektion jämförande och.

Liknande presentationer


En presentation över ämnet: "Programmering i C# Farid Naisan, Universitetsadjunkt Datavetenskap, Teknik och samhälle, Malmö högskola Selektion jämförande och."— Presentationens avskrift:

1 Programmering i C# Farid Naisan, Universitetsadjunkt Datavetenskap, Teknik och samhälle, Malmö högskola Selektion jämförande och logiska operatorer

2 2 Selektion  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; true logiskt uttryck false sats-1 sats-n Flödesdiagram

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

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

5 5 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 > ) { //…. } //fortsätt med något annat } else { //någon annan operation }

6 6 Jämförelse operatorer  Med selektion behöver man använda logiska uttryck.  I logiska uttryck använder man logiska operatorer. OpBeskrivning 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 < dTalBfalse dTalA > dTalBtrue dTalB <= dTalAfalse dTalA >= dTalBtrue dTalA == 3.6Dtrue dTalB != -5.0Dfalse

7 7 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

8 8 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.

9 9 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.

10 10 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. "); }

11 11 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:

12 12 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."); }

13 13 Sammanfattningstabell || (logisk eller) A || BResultat true || truetrue true || falsetrue false || truetrue false || falsefalse && (logisk och) A && BResultat true && truetrue true && falsefalse false && truefalse false && falsefalse ! (logisk inte) !AResultat !truefalse !falsetrue

14 14 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 9 ) ) && ( !klar ); if ( res )... //obs. !klar är samma som (klar == false)

15 15 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!

16 16 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.

17 17 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'; } else betyg = 'x'; //fel betyg return betyg; }

18 18 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 //satser break; }

19 19 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."); break; case 0: Console.WriteLine("Du valt att avsluta."); break; default: Console.WriteLine("Inget bra val!"); break; }

20 20 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 > if ( number > ) avgift += 0.02 * (number ); //samma som avgift = avgift + // return avgift; }

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

22 22 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


Ladda ner ppt "Programmering i C# Farid Naisan, Universitetsadjunkt Datavetenskap, Teknik och samhälle, Malmö högskola Selektion jämförande och."

Liknande presentationer


Google-annonser