Noter til C# Programmering Selektion

Relaterede dokumenter
Noter til C# Programmering Iteration

JavaScript. nedarvning.

Programmering for begyndere Lektion 2. Opsamling mm

Boolsk algebra For IT studerende

Boolsk algebra For IT studerende

Baggrundsnote om logiske operatorer

Kursus 02199: Programmering. Kontrol af programudførelsen. afsnit if (indkomst > ) topskat = (indkomst ) * 0.

Udsagnslogik. Anker Mørk Thomsen. 6. december 2013

Kapitel 3 Betinget logik i C#

Python programmering. Per Tøfting. MacFest

Matematik. 1 Matematiske symboler. Hayati Balo,AAMS. August, 2014

APPENDIX A INTRODUKTION TIL DERIVE

Opgaver i logik, torsdag den 20. april

Grundlæggende Matematik

ALMINDELIGT ANVENDTE FUNKTIONER

Klasse 1.4 Michael Jokil

Kapitel 4 Løkker i C#

Sammenlign og byt. Et eksempel på dokumentering af et program

Integer.parseInt(args[0]) konverterer tegnstreng (f.eks. "10") til heltal (10). if (udtryk) else

En uægte brøk er en brøk der stadig kan forkortes ned til et blandet tal og som er større end Eksempel: Uægte brøk: 12

Grundlæggende matematiske begreber del 2 Algebraiske udtryk Ligninger Løsning af ligninger med én variabel

Boolesk Algebra og det binære talsystem - temahæfte informatik. Oprindelse.

Omskrivningsregler. Frank Nasser. 10. december 2011

Sproget Six. Til brug i rapportopgaven på kurset Oversættere. Vinter Abstract

Grundlæggende Matematik

Matematiske metoder - Opgavesæt

3 Algebra. Faglige mål. Variable og brøker. Den distributive lov. Potenser og rødder

Forelæsning Uge 2 Mandag

Symbolbehandlingskompetencen er central gennem arbejdet med hele kapitlet i elevernes arbejde med tal og regneregler.

CPUer og maskinkode DM534. Rolf Fagerberg

Elementær Matematik. Mængder og udsagn

2) Det er let at være produktiv med Python, da Python som regel kun har mellem 67 og 80% færre linier end tilsvarende C eller Java kode.

Regning. Mike Vandal Auerbach ( 7) 4x 2 y 2xy 5. 2x + 4 = 3. (x + 3)(2x 1) = 0. (a + b)(a b) a 2 + b 2 2ab.

Programmering i C. Lektion december 2008

Indholdsfortegnelse If-sætningen... 3 Opgaver... 4 OR, AND sammen med if-sætningen... 5 Rand() funktion... 5 Opgave... 5 Include() funktionen...

Repræsentation af tal

Lær Python dag 1 - modul 1

Bits, bit operationer, integers og floating point

Indhold. Kontrol af resultater, skrivemåder osv.

De rigtige reelle tal

Programmering i C. Kurt Nørmark 2005 Institut for Datalogi, Aalborg Universitet. Sammendrag

t a l e n t c a m p d k Matematiske Metoder Anders Friis Anne Ryelund 25. oktober 2014 Slide 1/42

vil jeg blive mindet om det af VBA allerede mens jeg skriver koden, da der er tale om en såkaldt kompileringsfejl:

5. Kontrolstrukturer - Motivation og Oversigt

Repræsentation af tal

Med TI-89 / TI-92 Plus kan du også sammenligne eller manipulere binære tal bit for bit.

BOSK F2011, 1. del: Udsagnslogik

Undtagelseshåndtering i C#

Fagets IT Introduktion til MATLAB

Lektion 3 Sammensætning af regnearterne

Implikationer og Negationer

Programmering. Det rent og skært nødvendige, det elementært nødvendige! Morten Dam Jørgensen

Teoretiske Øvelsesopgaver:

Kursusarbejde 3 Grundlæggende Programmering

Affine - et krypteringssystem

Indhold. Maskinstruktur Kapitel 1. Assemblersprog Indledning Hop-instruktioner Input og output...

Mat C HF basisforløb-intro side 1. Kapitel 1. Fortegnsregler og udregningsrækkefølger

Repræsentation af tal

LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam) { int wmid, wmevent; programmering med

#AlleKanKode. Lektion 2 - Konstanter og Variabler

Andengradsligninger. Frank Nasser. 12. april 2011

DATALOGI MASKINARKITEKTUR Blok 2 samt Reeksamination i DATALOGI MASKINARKITEKTUR Blok 1 og arkitekturdelen af DATALOGI 1E

Induktive og rekursive definitioner

Appendiks 6: Universet som en matematisk struktur

Matematiske metoder - Opgaver

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 2

Logik. Af Peter Harremoës Niels Brock

Jeg har i forbindelse med it og programmering designet og udviklet et it-produkt, som kan beregne rødder i en anden gradsligning.

Abstrakte datatyper C#-version

Computerarkitektur. - en introduktion til computerarkitektur med LINDA

Matematisk argumentation

Manual Søg & erstat. Søg efter tekst

Start på Arduino og programmering

Fundamentale sprogbegreber

Transkript:

Noter til C# Programmering Selektion Sætninger Alle sætninger i C# slutter med et semikolon. En sætning kontrollerer sekvensen i programafviklingen, evaluerer et udtryk eller gør ingenting Blanktegn Mellemrum, tabulatorer og ny linje kaldes under ét for blanktegn. Blanktegn ignoreres af kompileren. Dvs. at hver gang man laver et mellemrum, så kan man lige så godt benytte en tabulator eller en ny linje. Blanktegn gør blot koden lettere at læse. Sammensat sætning På ethvert sted, hvor man kan placere en sætning kan man placere en sammensat sætning. En sammensat sætning begynder med en venstre-tuborg "{" og slutter med en højre-tuborg "". Enhver sætning, som er indeholdt i en sammensat sætning, skal slutte med et semikolon, medens den sammensatte sætning selv ikke skal. Operatorer Der findes to generelle typer af operatorer: Aritmetiske Relationelle og logiske Aritmetiske operatorer Herunder listes nogle af de aritmetiske operatorer Symbol Operation Eksempel Værdi + Addition 3 + 5 8 - Subtraktion og fortegn 43-25 18 * Multiplikation 4 * 7 28 / Division 9 / 2 4 % (heltal) Modulus (Restdivision) 20 % 6 2 - - (postfix) Nedskrivning 6 - - 5 ++ (postfix) Opskrivning 6 ++ 7 - - (prefix) Nedskrivning - - 6 5 ++ (prefix) Opskrivning ++ 6 7 Bemærk, at hvis divisions-operatoren "/" benyttes i forbind med to heltal, så returneres et heltal, idet resten smides bort. (Heltalsdivision) int x = 10, y = 3, z; z = x/y; // z har nu værdien 3 Kapitel 8 side 1 af 8

Det unære minus (fortegnsminus), multiplicerer den enlige operand med (-1). int x = 10, y; y = -x; // y har nu værdien -10 Bemærk op- og nedskrivningsoperatorerne (increment og decrement). Disse operatorer var oprindeligt enestående for C++, og er nu taget med over i Java-sproget og senest C#. Den kvikke læser kan muligvis nu se, hvordan C++ har fået sit navn, idet C++ er udviklet på baggrund af sproget C. x = x + 1; Kan skrives som eller som ++x; // præfix opskrivning x++; // postfix opskrivning På samme vis for nedskrivningsoperatoren. Post- og præfix-notationen giver mulighed for at påvirke, hvorvidt en op- eller nedskrivning udføres før eller efter at operanden er evalueret. Betragt de to følgende eksempler: int x = 10, y; y = ++x; // værdien af y er nu 11 og værdien af x er også 11 Variablen x opskrives ved præfix-notationen før værdien tildeles variablen y. int x = 10, y; y = x++; // værdien af y er nu 10 og værdien af x er 11 Variablen x opskrives ved postfix-notationen først efter at dens oprindelige værdi er tildelt variablen y. Det er faktisk muligt, at opskrive en værdi på endnu en måde i C#. Følgende 4 sætninger er ens: x = x + 1; x++; ++x; x += 1; Det er da forvirrende? I lighed med "selvtildelingsoperatoren" +=, så findes følgende: -=, *=, /=, %=. Disse fungerer som vist: x -= 1; // Svarer til x = x - 1 x *= 2; // Svarer til x = x * 2 x /= 3; // Svarer til x = x / 3 x %= 4; // Svarer til x = x % 4 Kapitel 8 side 2 af 8

Operatorerne rangordnes som følger: Rangorden Operatorer Højst ( ) ++ - - (postfix) ++ - - (prefix) - (unært minus) * / % + - Lavest = Relationelle og logiske operatorer Følgende relationelle operatorer anvendes til sammenligninger: Symbol Betydning Eksempel Værdi < Mindre end 3 < 5 Sand > Større end 4 > 7 Falsk <= Mindre end eller lig med 43 <= 25 Falsk >= Større end eller lig med 9 >= 2 Sand == Lig med 20 == 6 Falsk!= Forskellig fra 20!= 6 Sand Følgende logiske operatorer anvendes: Symbol Betydning Eksempel Værdi && AND (3 < 5) && (4 == 4) Sand OR (3 < 5) (4!= 4) Sand! NOT!(4 == 4) Falsk Operatorerne rangordnes som følger: Rangorden Højst Operatorer! (NOT) > >= < <= ==!= && (AND) Lavest (OR) Bemærk, at aritmetiske operatorer rangordnes højere end relationelle og logiske. Kapitel 8 side 3 af 8

Sandhedstabel Nedenstående tabel giver et hurtigt overblik over boolsk algebra. To boolske værdier, p og q, evalueres med NOT, AND, OR og XOR, og resultatet gives. I daglig tale svarer AND til "både/og", OR svarer til "og/eller", medens XOR svarer til "enten/eller". p q NOT p p AND q p OR q p XOR q Sand Sand Falsk Sand Sand Falsk Sand Falsk Falsk Falsk Sand Sand Falsk Sand Sand Falsk Sand Sand Falsk Falsk Sand Falsk Falsk Falsk XOR (Exclusive OR) findes godt nok iboende i C#, (^); men man kan også hurtigt lave en metode, der kan foretage en XOR: <modifikatorer> bool xor(bool a, bool b) { return (a b) &&!(a && b); Omskrivninger af boolske udtryk vha. DeMorgans sætning: Oprindeligt udtryk Omskrevet udtryk NOT p AND NOT q NOT(p OR q) NOT p AND q NOT(p OR NOT q) p AND NOT q NOT(NOT p OR q) p AND q NOT(NOT p OR NOT q) NOT p OR NOT q NOT(p AND q) NOT p OR q NOT(p AND NOT q) p OR NOT q NOT(NOT p AND q) p OR q NOT(NOT p AND NOT q) Hvis man vil benytte DeMorgans sætning på den logiske operator AND eller den logiske operator OR og to operander, så skal man negere begge operander bytte om på AND og OR, og sluttelig negere hele udtrykket. if-sætningen Programmet afvikles som nævnt linje for linje i den rækkefølge, som det er skrevet i koden. if-sætningen gør det muligt, at evaluere et udtryk, og på baggrund heraf at forgrene programafviklingen til forskellige dele af koden. if (storttal > lilletal) storttal = lilletal Koden sammenligner storttal og lilletal. Hvis resultatet er sand, så tildeles variablen storttal værdien af variablen lilletal. Herefter fortsætter programafviklingen sekventielt. Kapitel 8 side 4 af 8

Man vil ofte have brug for, at programafviklingen forgrener sig til en side, hvis betingn i if-parentesen er sand og til en anden side, hvis den er falsk. Dette klan naturligvis gøres ved først at teste en situation og dernæst en anden; men -nøgleordet giver os mulighed for skrive koden på en lettere og mere læselig måde. int tal1, tal2; Console.Write("Indtast et stort tal: "); tal1 = int.parse(console.readline()); Console.Write("Indtast et lille tal: "); tal2 = int.parse(console.readline()); if (tal1 > tal2) Console.WriteLine("Rigtigt!"); Console.WriteLine("Ahæm... det andet tal er størst!"); Komplekse if-sætninger Husk, at sætningen, som afvikles efter at betingn i if-parentesen er evalueret også kan være en sammensat sætning. Denne sætning kan igen bestå af en if-sætning osv. Se følgende eksempel på en kompleks indlejret if-sætning: int tal1, tal2; Console.Write("Indtast et tal: "); tal1 = int.parse(console.readline()); Console.Write("Indtast endnu et tal: "); tal2 = int.parse(console.readline()); if (tal1 >= tal2) { if ((tal1 % tal2) == 0) { if (tal1 == tal2) Console.WriteLine("Tallene er ens!"); Console.WriteLine("Tallene kan divideres!"); Console.WriteLine("Tallene kan ikke divideres!"); Console.WriteLine("Det andet tal er størst!"); Læg mærke til brugen af tuborg-klammerne. Brugen af disse samt indryk er med til at gøre koden lettere at læse og forstå. De følgende to eksempler viser, hvorfor brugen af tuborg-klammer er hensigtsmæssig. Prøv at indtaste kodeeksemplerne og kør dem. Hvad går galt i det første eksempel? int tal; Console.Write("Indtast et tal: x, hvor x<10 eller x>100: "); tal = int.parse(console.readline()); Kapitel 8 side 5 af 8

if (tal > 10) if (tal < 100) Console.WriteLine("Tallet skal være større end 100, tak!"); Console.WriteLine("Tallet skal være mindre end 10, tak!"); Kapitel 8 side 6 af 8

int tal; Console.Write("Indtast et tal: x, hvor x<10 eller x>100: "); tal = int.parse(console.readline()); if (tal > 10) { if (tal < 100) Console.WriteLine("Tallet skal være større end 100, tak!"); Console.WriteLine("Tallet skal være mindre end 10, tak!"); if--if stigen if--if stigen er en meget anvendt programstruktur, som kan illustreres vha. af følgende eksempel: int tal; Console.Write("Indtast et af flg. tal (0, 1, 2, 3, 4, 5):"); tal = int.parse(console.readline()); if (tal == 1) Console.WriteLine("Tallet er ét"); if (tal == 2) Console.WriteLine("Tallet er to"); if (tal == 3) Console.WriteLine("Tallet er tre"); if (tal == 4) Console.WriteLine("Tallet er fire"); Console.WriteLine("Tallet er mindre end 1 eller større end 4"); Prøv at indtaste det ovenstående eksempel og kør det! Som man vil se, så afvikles programmet oppefra og nedefter. Når en beting er opfyldt, så afvikles den tilhørende sætning, og resten af stigen springes over. Hvis ingen betingr er opfyldte, så afvikles sætningen, som følger efter det sidste -nøgleord, og alle andre sætninger i stigen overspringes switch-sætninger kombinationer af if og if kan blive meget uoverskuelig, hvis de indlejres i flere niveauer. Heldigvis findes der et brugbart alternativ i C#: switch, der i modsætning til if tillader, programafviklingen kan forgrene sig på baggrund af et utal af forskellige værdier. Herunder er listet et eksempel int tal; Console.Write("Indtast et tal mellem 0 og 4: "); tal = int.parse(console.readline()); switch (number) { case 0: Console.WriteLine("Dejligt rundt tal!"); break; // Spring ud af strukturen case 4: case 3: case 2: case 1: Console.WriteLine("Positivt!"); break; default: Console.WriteLine("Uden for nummer... desværre!"); break; Kapitel 8 side 7 af 8

Brugeren bedes indtaste et tal mellem 1 og 4. I switch-parentesen evalueres tallet. Her kan placeres ethvert gyldigt C#-udtryk. case-sætningerne gennemgås nu oppefra og nedefter i søgen efter et tal som matcher tallet i switch-parentesen, dvs. som er lig med dette tal. Herefter udføres sætningen efter case, eller programmet fortsætter sekventielt indtil et break tvinger programafviklingen ud af strukturen. Hvis ingen case matcher, så afvikles koden under default. Prøv at indtaste det ovenstående eksempel og kør det. Opfører programmet sig, som du forventer? Kapitel 8 side 8 af 8