Presentation laddar. Vänta.

Presentation laddar. Vänta.

Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 11 /* * Här kommenteras vad programmet (klassen) skall göra */

Liknande presentationer


En presentation över ämnet: "Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 11 /* * Här kommenteras vad programmet (klassen) skall göra */"— Presentationens avskrift:

1 Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 11 /* * Här kommenteras vad programmet (klassen) skall göra */ class ProgramNamn { public static void Main () { // Här står källkoden för det som skall // utföras när programmet exekveras } // Efter definitionen av Main kan det // följa definitioner av andra metoder. } Mall för ett C#-program

2 Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 22 class MyClass { } MyClass.csMyClass.exe kompilering Namnsättning

3 Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 33 class ProgramNamn { public static void Main () { // Huvudflödet… } Main - startpunkten Ordet public betyder att metoden skall vara åtkomlig utifrån. Det måste den vara för att interpretatorn skall kunna anropa den. Ordet static anger att metoden main är en klassmetod (statisk metod). En klassmetod är en metod som inte är speciell för något visst objekt, utan som har att göra med själva klassen. Eftersom det inte finns något objekt när programmet startar, måste main vara en klassmetod. Ordet void innebär att metoden main inte lämnar något returvärde.

4 Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 44 Kompilera och exekvera

5 Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 55 Literaler ”Hej” Primärminnet Hej

6 Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 66 Variabler a = b = c = a = ”Hej då” b = -987 c = Primärminnet Symboliska adresser abcabc Hej Hej då ”Hej” Variabler kan ändra innehåll

7 Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 77 Literaler public class ProgramEtt { public static void Main ( ) { System.Console.WriteLine("Hej"); System.Console.WriteLine(345); System.Console.WriteLine( ); }

8 Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 88 Variabler public class ProgramEtt { public static void Main ( ) { string a = "Hej"; int b = 345; double c = ; System.Console.WriteLine(a); System.Console.WriteLine(b); System.Console.WriteLine(c); } a = "Hej då!"; b = -987; c = ;

9 Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 99 En variabel är ett utrymme i datorns arbetsminne som reserveras eller används av ett program under en kortare eller längre del av programmets exekvering. I C# måste alla variabler måste typdeklareras. Det finns följande primitiva datatyper : • heltal (sbyte, byte,short, ushort, int, uint, long, ulong) • flyttal (float, double, decimal) • boolsk typ (bool) • tecken (char, string) Övriga datatyper i C# är referenstyper (ej strukter). Värden i dessa typer kallas objekt Variabler, datatyper

10 Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 10 int heltal; double flyttal; char tecken; bool klar; string namn; Exempel på tilldelning: heltal = 2; flyttal = 9.0/heltal; flyttal = 9/heltal; tecken = 't'; klar = false; namn = "Göran"; variabeldeklarationer Observera skillnaden i apostrofer om det är en textsträng eller ett enskilt tecken! Här blir flyttal = 4.5 Här blir flyttal = 4.0

11 Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 11 Konstanter •Som variabler, men värdet kan inte ändras! const string a = ”Hej”; a = ”Hej då”;

12 Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 12 Literaler, variabler och konstanter public class VariabelTesta { public static void Main ( ) { int a = 45678; double b = 4.567; System. Console.WriteLine (a * (b + 2)); string s = “Helledudanedå”; System. Console.WriteLine (s); }

13 Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 13 Identifierare class Loneberakning { public static void Main ( ) { const int TIMLÖN = 90; int antaltimmar = 40; int summa = TIMLÖN * antaltimmar; System.Console.WriteLine(summa); } OBS! C# är ”case sensitive” !

14 Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 14 Kommentarer class ProgramNamn { // Kommentar på en rad public static void Main () // Kommentar i slutet av rad { // Kommentar på en rad } /* * En kommentar över * flera rader */ } •Allt mellan /* och */, samt allt efter // på en rad hoppar kompilatorn över

15 Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 15 Operationer •En operator är en symbol som samverkar på något sätt med operander a = b + c operatorer operander operation

16 Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 16 Uttryck •Ett uttryck är en representation av ett värde, framställt med ett värde eller en operation a = b + c uttryck

17 Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 17 a = b + c primära uttryck sammansatta uttryck Uttryck

18 Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 18 Aritmetiska operatorer *Multiplikation /Division %Rest (modulo) +Addition -Subtraktion =Tilldelning

19 Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 19 Särskilda aritmetiska operatorer ++Ökning av variabelvärdet med 1 --Minskning av variabelvärdet med 1 *=Tilldelning efter multiplikation /=Tilldelning efter division %=Tilldelning efter modulo +=Tilldelning efter addition -=Tilldelning efter subtraktion

20 Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 20 Datatyper primitiva datatyper Även om string inte är en primitiv datatyp, kan den ofta användas på ett likartat sätt, ur programmerarens synvinkel, så vi tar med även den redan nu. DatatypBitarAlias för boolsk boolean1System.Boolean heltal sbyte8System.Sbyte byte8System.Byte short16System.Int16 ushort16System.UInt16 int32System.Int32 uint32System.UInt32 long64System.Int64 ulong64System.UInt64 long64System.Int64 char16System.Char flyttal float32System.Single double64System.Double decimal128System.Decimal text string System.String generisk typ object System.Object

21 Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 21 namn ålder namn[3] Vektorer

22 Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur Flerdimensionella vektorer

23 Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 23 rad kolumn djup Flerdimensionella vektorer

24 Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 24 Primärminnet betyg Indexnumreringen börjar med ”0” betyg[2] Vektoradressering public class ArrayTest { public static void Main () { int[] betyg = {3, 4, 5, 2, 4, 3, 1, 3, 2, 4, 2, 3, 4}; int längd = betyg.length; // Antal element System.Console.WriteLine(längd); System.Console.WriteLine(betyg[6]); } Skriver ut ”1”

25 Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 25 Primärminnet C# är ett av de få programmeringsspråk som kan hantera ”assymetriska” matriser lista[2][1] Vektoradressering public class ArrayTest { public static void Main () { int[][] lista = {{3}, {2, 4, 3}, {1, 4}, {5, 3, 2, 3, 4}}; längd = lista.length; // Antal rader System.Console.WriteLine(längd); längd = lista[3].length; // Antal element i rad 4 System.Console.WriteLine(längd); }

26 Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 26 Primärminnet Heap Vektorer Att C# är ett av de få programmeringsspråk som kan hantera ”assymetriska” matriser beror till viss del på hur dessa lagras. I de flesta språk/miljöer lagras arraymedlemmarna i en enda rad på variabeladressens plats, och adresseringen utav de enskilda elementen sker genom en intern omräkning baserad på datatypens storlek. I C# är vektorer egentligen objekt! I C# är alla objekt referenstyper (till skillnad från de primitiva värdetyperna) Stack lista ”objektet” Primärminnet är partitionerat i flera olika delar. Alla variabler hamnar i en del som kallas ”stack”. adress till objektet När det gäller referenstyper, läggs inte värdet i behållaren på ”stacken”, utan värdet läggs i något som kallas ”heap” Variablens plats håller då en referens till värdet på ”heapen”

27 Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 27 Primärminnet Heap Stack lista referens till objektet ”matris-objektet” referens till vektor referens till vektor 1 referens till vektor 2 referens till vektor 3 Vektoradressering

28 Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 28 variabeltyper Det finns inom grundläggande programmering i huvudsak två slags variabeltyper: • värdetyper • referenstyper... string textsträng; Bok boken; int[] poängen;... int heltal; float flyttal; char bokstav;...

29 Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 29 En struct är en sammansatt typ där flera värden av olika typ kopplas till en enhet. Posttyp struct Bok { public string namn; public string författare; public float pris; }

30 Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 30 Procedurer och funktioner public class SumTest { public static void Main () { Summera(); } public static void Summera () { System.Console.Write(“Ange tal: “); int a = int.Parse( System.Console.ReadLine() ); System.Console.Write(“Ange tal: “); int b = int.Parse( System.Console.ReadLine() ); System.Console.WriteLine( a + b ); }

31 Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 31 Procedurer och funktioner public static void Main () { Summera(); } public static void Summera () { System.Console.Write(“Ange tal: “); int a = int.Parse( System.Console.ReadLine() ); System.Console.Write(“Ange tal: “); int b = int.Parse( System.Console.ReadLine() ); System.Console.WriteLine( a + b ); } •Vid anropet av en metod ”hoppar” exekveringen till den punkten i programmet •När metoden kört klart, hoppar exekveringen tillbaks, och kör vidare på raden efter anropet

32 Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 32 Funktioner I Excel använder vi färdiga funktioner. static int heltal (double tal) { return (int) tal; } Som programmerare gör vi också funktioner själva:

33 Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 33 Funktioner & procedurer •En procedur var en del utav ett program, som brutits ut för att få det programmet överskådligt, eller för att slippa upprepa kod. •Jobbar mot programmets data •Därför inget returvärde •En funktion sågs från början inte som en del utav programmet, utan snarare ett ”hjälpprogram” för att få fram resultatet utav en viss beräkning eller liknande •Jobbar mot data som fåtts i parameterlistan •Returnerar resultatet

34 Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 34 Metoder •I dagens moderna programmeringsspråk har detta oftast förenklats till en enda gemensam konstruktion, vilket vi kallar metod. •Varför man använder metoder: -för att programmet skall bli mera lättläst -för att kunna återanvända kod

35 Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 35 Metodens signatur public static int minstaTalet (int a, int b) { if (a < b) return a; return b; } Kombinationen utav metodnamn, formella parametrar och returtyp, kallas för metodens ”signatur” Ordet public anger att metoden är synlig utifrån, dvs att även andra program (klasser) kan anropa den. Ordet static anger att metoden är en klassmetod (statisk metod). Detta nyckelord utelämnas helt, om vi vill använda det för objekt. Metodens namn Parametrar till metoden. Dessa fungerar inom metoden som lokala variabler. Om en metod skall returnera något måste rätt datatyp anges här. Om metoden inte lämnar något returvärde skriver man istället void.

36 Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 36 Funktioner class GradTest { static double Fahrenheit (double c) { return (c * 9 / ); } static double Celcius (double f) { return ((f - 32) * 5 / 9); } public static void Main () { System.out.println("Fahrenheit:" + Fahrenheit(37.2) ); System.out.println("Celcius:" + Celcius(99) ); }

37 Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 37 Procedurer class ProcedurTest { static hälsning = "Hello World!"; static void proceduren () { System.out.println(hälsning); } public static void main (String[] args) { ProcedurTest.proceduren(); }

38 Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 38 y = Math.Sqrt(x); Metoden finns i.NETs klassbibliotek. Sqrt( ) är en statisk metod (klassmetod). Den anropas via klassnamnet. Klassen Math finns i namnrymd System och är deklarerad: public static double Sqrt(double d) Metoder

39 Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 39 Vill man använda funktioner i ett program (en klass) från.NETs standardbibliotek måste man inleda med using för den namnrymd där klasserna finns: using System; using System.Collections; Därigenom har man tillgång till alla klasser i den namnrymd man angett. Titta på egen hand i dokumentationen för System.Math System.String System.DateTime System.Random using

40 Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 40 Studera nu några användbara metoder i klassen System.String Vad kan vi behöva? Vi vill - jämföra två strängar - veta längden av en sträng - plocka ut delar av en sträng Studera metoden Equals ( ) public virtual bool Equals(Object o) Antag följande deklaration: string namn1 = "Ola"; string namn2 = "Olle"; Metoder i String-biblioteket

41 Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 41 O Skriv ”lika” O Skriv ” olika” namn1= namn2 if (namn1.Equals(namn2)) System.Console.WriteLine("Lika namn"); else System.Console.WriteLine("Olika namn"); Metoder

42 Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 42 En sträng är en ändlig följd av tecken. OBS!!! När en sträng väl är skapad går det ej att göra några ändringar. string str1 = "informatik"; str1 är en referensvariabel som pekar på det utrymme i primärminnet där strängkonstanten "informatik" ligger. str1 informatik värden index En sträng har en fast längd: str1.Length // str1 har längden 10 String

43 Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 43 Antag att jag vill ha ändra i till I i str1. Hur göra? Svar: Man måste skapa en ny sträng, tex str1 = ”informatik"; str1 = "I" + str1.Substring(1); str1 informatik värden index Informatik värden index String

44 Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 44 public class Meddelande { public static void Main() { Skriv(5); // argumentet är 5 } public static void Skriv(int antalGgr) { //formell parameter är antalGgr for (int i = 0; i < antalGgr; i++) { System.Console.WriteLine("Hej Nisse!"); } Skillnaden mellan parameter och argument

45 Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 45 antalGgr är en formell parameter och en lokal variabel. i är också en lokal variabel. Dessa är endast definierade inne i metoden. Kom ihåg när ni anropar en metod att alltid kontrollera att de formella och de aktuella parametrarna överensstämmer till antal, ordning och typ!!! Ändra i Meddelande så att Main-metoden endast innehåller anropet skriv(”Cecilia”,5); Utskriften vid körning skall se ut som tidigare, men metoden skall hälsa på rätt person, dvs det som kommer in som argument 1. Parametrar

46 Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 46 public class Meddelande { public static void Main(String[] args) { skriv("Cecilia", 5); // två argument } public static void Skriv(string namn, int antalGgr) { // två formella parametrar for (int i = 0; i < antalGgr; i++) { System.Console.WriteLine("Hej " + namn + "!"); } Parametrar och argument skall stämma

47 Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 47 return public class Test { public static void Main(String[] args) { int a = Plus(4, 5); System.Console.WriteLine(a); } public static int Plus(int x, int y) { int z = x + y; return z; } Värdet av anropet är värdet av uttrycket efter return. Där avslutas exekveringen av metoden och exekveringen av programmet där metodanropet ingick fortsätter. Avslutningen utav en funktion sker med det reserverade ordet return, tillsammans med värdet av det som skall returneras.

48 Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 48 Värdet i det som returneras måste naturligtvis stämma med returtypen, eller kunna omvandlas till samma typ med implicit typkonvertering. Returvärden När return följt av ett uttryck exekveras beräknas värdet av uttrycket. public class Test { public static void Main(String[] args) { int a = Plus(4, 5); System.Console.WriteLine(a); } public static int Plus(int x, int y) { return x + y; }

49 Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 49 Färdiga funktioner •Lär er att hitta i klassbiblioteket •Funktioner för stränghantering och numerisk omvandling hittar ni bl.a. i: •System.String (string) •System.Double (double) •System.Single (float) •System.Int32 (int) •System.Int64 (long) •Grundläggande matematiska funktioner hittar ni bl.a. i : •System.Math

50 Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 50 Operativ- systemarea StackHeap Maskininstruktioner för varje procedur/funktion inklusive huvudprogrammets kod. Koden är fix, den ändras inte under exekveringen. ”statiska” data: ”värdet” i värdetyper och referenstypernas adresser på heapen ”dynamiska” data: ”värdet” för referenstyperna Instruktionsarea Stack och Heap i primärminnet

51 Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 51 Sammansatta typer och minnet Beroende på kompilator/språk läggs sammansatta typer i minnet på olika sätt (något förenklat exempel): Bok bokEtt (”Java från grunden”, ”Franzén”, ”Studentlitteratur”, 440); Bok bokTvå = new Bok(”Java från grunden”, ”Franzén”, ”Studentlitteratur”, 440); C# skiljer på ”struct” och ”class”, där en variabel för en instans av en struct blir av värdetyp, dvs värdena hamnar på ”stacken”, medan en variabel för en instans ur en class blir av referenstyp, dvs värdena hamnar på ”heapen”. C++: C++/Java: Värdena hamnar på ”stacken”. Värdena hamnar på ”heapen”.

52 Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 52 Beroende på kompilator/språk läggs vektorer i minnet på olika sätt (något förenklat exempel för den grundläggande principen): int[] poängen = {45, 13, 67}; Men i C# fungerar inte vektorer på detta sätt… Primärminnesadress: (stacken) Variabeln poängen[0] refererar nu till adress 102. För att kompilatorn skall hitta till poängen[1], lägger den på storleken av en int för varje index. Vektorer och minnet

53 Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 53 I C# är en vektor alltid en referenstyp! int[] poängen = {45, 13, 67}; Primärminnesadress: (stacken) Här refererar variabeln poängen till adress 102. För att kompilatorn skall hitta till poängen[n], går den till adressen på heapen (något förenklat): Vektorer och minnet

54 Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 54 Olika variabler använder minnet på olika sätt. I C# sker det på följande sätt: • variablerna hamnar på ”stacken” • Om variablerna är ”värdetyper” hamnar värdena på ”stacken” • Om variablerna är ”referenstyper” hamnar värdena på ”heapen” int heltal = 45; 45 float flyttal = (float) 14.6; 14.6 char bokstav = ’a’; 97 string textsträng = ”Hej!”; r204 Hej! int[] poängen = {45,13,67}; r Variabler och minnet

55 Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 55 Primärminnet ab 55 kopiering Tilldelning med värdetyper

56 Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 56 Primärminnet ab Ref kopiering Objektet Tilldelning med referenstyper

57 Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 57 { } kan uppfattas som en slags parentes. Ibland måste vi använda detta när vi skall ”samla” flera programsatser för att hanteras som ett block. Varje programsats avslutas med semikolon. Block

58 Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 58 Variablers synlighet och räckvidd class MinaVariabler { static int x = 8; public static void Main() { int y = 16; MinMetod(); } public static void MinMetod() { int z = 32; } Finns och syns i hela programmet Finns och syns bara i metoden Main Finns och syns bara i metoden MinMetod Block Här går z ur räckvidden (ur ”scope”) och upphör att existera

59 Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 59 Block och lokala variabler using System; public class Lokal { public static void Main ( ) { int c = 111; { int b = 333; int a = 222; Console.WriteLine(a + b); } Console.WriteLine(c); } Block

60 Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 60 Skräpsamling •Det utrymme som vi allokerar för programmet måste vi också deallokera. •Minnesutrymmen för värden på stacken återvinns automatiskt (lokala variabler av värdetyp) när variabeln ”gått ur räckvidden”. •Minnesutrymmen på heapen måste återvinnas aktivt (värden för variabler av referenstyp och ev variabler av värdetyper som de i sin tur refererar till) •I.NET återvinns utrymmen på heapen av en skräpsamlare (Garbage Collector), vid behov.

61 Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 61 Datum •I.NET finns datatypen System.DateTime •Håller både datum och klockslag DateTime lucia = new DateTime(2004, 12, 13); DateTime idag = DateTime.Today; DateTime nu = DateTime.Now;


Ladda ner ppt "Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 11 /* * Här kommenteras vad programmet (klassen) skall göra */"

Liknande presentationer


Google-annonser