Anders Sjögren Pekare. Anders Sjögren Skapa ett program som byter plats på två heltal Pekare.

Slides:



Advertisements
Liknande presentationer
INTRODUKTION TILL PROGRAMMERING
Advertisements

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.
void hittaMax(int tal[], int antal, int *pmax) { int i; ??=tal[0]; for(i=1;i??) ??=tal[i]; } int main() { int v[]={1,2,3,4,2}; int.
Anders Sjögren Lagringsklasser •en variabel i C har två attribut –type( int, float, char..... ) –lagringsklass( auto, extern, register, static ) •lagringsklassens.
Klasser och objekt.
Programstruktur: C för enchipsdatorer
Funktioner och programorganisation
De fundamentala datatyperna
Operatorer.
Tentamensdags och lab 3…. Större program delas normalt upp i flera filer/moduler vilket har flera fördelar:  Programmets logiska struktur när man klumpar.
C-programmering ID120V William Sandqvist Länkad lista
Välkommen Vahid Mosavat
Programmeringsteknik K och Media
Föreläsning 4 Python: Definiering av egna funktioner Parametrar
Föreläsning 2 Primitiva datatyper Variabler och konstanter Tilldelning Inläsning Operatorer Villkorssatsen if Slingor: while och for.
1 Föreläsning 6 Klass Object, instans av klass public/private Klassvariabler och klassmetoder.
Tentamensdags och lab 3…. Större program delas normalt upp i flera filer/moduler vilket har flera fördelar:  Programmets logiska struktur när man klumpar.
Anders Sjögren Selektion i C ”vägval” if och switch - satserna.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 7 ( ) INNEHÅLL: -Klasser och instansvariabler -Tabeller av klassobjekt.
Föreläsning 11 Arrayer.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 6 ( ) INNEHÅLL: -Mera om tabeller.
Pekare och speciell programstruktur i inbyggda system
Ali Ghodsi Variabler En variabel är en sorts behållare som man kan placera data i Man måste ange typ och namn för alla variabler.
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; }
Föreläsning 5. Problemet Vi har sett att vi kan ersätta de metoder vi ärver från överklassen med egen funktionalitet (polymorfism) class Bil : public.
int res2=Math.max(tal1,tal2);
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.
William Sandqvist C:s minnesmodell.
Anders Sjögren Mer om datatyper. Anders Sjögren const det finns ett elegantare sätt att skapa konstanter i C än sättet med makro som vi använt tidigare.
Modulär programutveckling
1 Windows programmering Programmering med Threads Borland C++ Builder 4 Modsoft Ab Kent Westerholm.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 7 ( ) INNEHÅLL: -Metoder -Lokala variabler -Mera om klasser: -Nyckelorden.
Anders Sjögren Bitfält Kompakt datalagring i delar av bytes, ett fält av bits StackBytes Heap.
1 Föreläsning 6 Programmeringsteknik och Matlab 2D1312/2D1305 Metoder & parametrar Array API och klassen ArrayList.
Föreläsning 1 Reserverade ord Javas API Identifierare Litteraler Variabler Kompilering och interpretering.
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 3 ( ) Innehåll: -Processtruktur -Processklyvning och kodbyte -Avslutning av processer.
Anders Sjögren ANSI - standard ?. Anders Sjögren ANSI - standard ? Om man skriver ett bra C-program och kompilerar fram ”exe”-filen så vore det ju trevligt.
Programmering i C# 9. Pekare och osäker kod.
Anders Sjögren Bitfält exempel Nu kommer ett förbättrat program. Det är funktions- uppdelat och kan lägga till poster som lagras på fil.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 2 ( ) INNEHÅLL: -Variabler och datatyper -Tilldelning av variabler -Aritmetiska.
Problemlösningsmetodik
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 3 ( ) INNEHÅLL: -Tabeller -Villkorssatser -Repetitionssatser.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 5 ( ) INNEHÅLL: -Metoder.
F4 - Funktioner & parametrar 1 Programmeringsteknik, 4p vt-00 Modularisering ”svarta lådor” Väl definierade arbetsuppgifter Enklare validering Enklare.
William Sandqvist C-programmering ID120V Stack och Kö William Sandqvist
Anders Sjögren Selektion i C ”vägval” if och switch - satserna.
Föreläsning 4 programmeringsteknik och Matlab 2D1312/ 2D1305
Anders Sjögren Filer - långtidslagring. Anders Sjögren Filtyper i DOS talet ett ( intx=1; ) lagrat i en –textfil, (en sekvens av tecken ( bytes )) enligt.
F6 - Pekare 1 Programmeringsteknik, 4p vt-00 Pekare & adresser Alla variabler är knutna till en viss adress i minnet int i; adressen till denna fås med.
F. Drewes, Inst. f. datavetenskap1 Föreläsning 9: Implementering av underprogram Aktiveringsposter Exekveringsstacken Implementera dynamisk räckvidd.
Anders Sjögren Deklarationsområde och funktioner.
Övning2 programmeringsteknik och Matlab 2D1312/ 2D1305
Föreläsning 5 Klasser och instanser
Mer om operatorer logiska operatorer bit-operatorer adress-operatorn ”komma”-operatorn punkt - operatorn.
Anders Sjögren Data (i primärminnet) som en länkad lista datatypen för varje element i listan är en struktur, post ( struct )
1 Föreläsning 2 Reserverade ord Javas API Identifierare Litteraler Variabler Kompilering och interpretering.
Datorteknik övning 4 Maskinnära programmering med C inför hemlab 1
Anders Sjögren Mer om datatyper. Anders Sjögren const det finns ett elegantare sätt att skapa konstanter i C än sättet med makro som vi använt tidigare.
Anders Sjögren Enkelt program med funktion /* two_func.c - a program that uses two functions in one file */ /* from Stephen Prata C Primer Plus ISBN
Program indata ? utdata 1/20 Vahid Mosavat, Nada, KTH.
1 Föreläsning 4 Metoder & parametrar Array API och klassen ArrayList.
Anders Sjögren Operatorer. Anders Sjögren Operand(er)
William Sandqvist Datorteknik övning 3 stackhantering subrutin som anropar subrutin programutveckling.
Anders Sjögren Minnen, variabler, att lagra i primärminnet forts. Den här bilden känner ni igen sedan tidigare. Vi skall fortsätta att prata variabeltyper.
Anders Sjögren Minnen, variabler, att lagra i primärminnet forts.
Språket för inbyggda system. C:s verktygslåda är välfylld! William Sandqvist
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.
Anders Sjögren Funktioner något in och något annat ut.
Python.
Presentationens avskrift:

Anders Sjögren Pekare

Anders Sjögren Skapa ett program som byter plats på två heltal Pekare

Anders Sjögren Skapa ett program som byter plats på två heltal Kan detta fungera? int main( void ) { int tal_A=1, tal_B=2 ; SkiftaMinnesinnehall( tal_A, tal_B ); return 0; } tal_A skall tilldelas tal_B:s värde och vice versa. Funktionen skall göra jobbet.

Anders Sjögren Vad händer då man definierar ett minne int main( void ) { int tal_A=1, tal_B=2 ; SkiftaMinnesinnehall( tal_A, tal_B ); return 0; } tal_Atal_B 12

Anders Sjögren int main( void ) { int tal_A=1, tal_B=2 ; SkiftaMinnesinnehall( tal_A, tal_B ); return 0; } Datorns primärminne main() exekveras Maskinkod programmet Heap Stack Bytes tal_A=1 tal_B=2 main() tid En aktiveringspost för main() skapas på stacken. tal_Atal_B

Anders Sjögren Hur måste SkiftaMinnesinnehall() se ut ? intSkiftaMinnesinnehall( int a, int b ) { int x; x = a; a = b; b = x; return a; } int main( void ) { int tal_A=1, tal_B=2 ; SkiftaMinnesinnehall( tal_A, tal_B ); return 0; } int main( void ) { int tal_A=1, tal_B=2 ; SkiftaMinnesinnehall( tal_A, tal_B ); return 0; } a b 12 x 12

Anders Sjögren Datorns primärminne SkiftaMinnesinnehall() exekveras Maskinkod programmet Heap Stack Bytes tal_A=1 tal_B=2 tal_A=1 tal_B=2 main() a=1 b=2 tidSkiftaMinnesinnehall() x=? intSkiftaMinnesinnehall( int a, int b ) { int x; intSkiftaMinnesinnehall( int a, int b ) { int x;

Anders Sjögren Datorns primärminne SkiftaMinnesinnehall() exekveras Maskinkod programmet Heap StackBytes tal_A=1 tal_B=2 tal_A=1 tal_B=2 a=1 b=2 tid tal_A=1 tal_B=2 a=2 b=1 SkiftaMinnesinnehall() main()main() xx=1 x = a; a = b; b = x; x = a; a = b; b = x;

Anders Sjögren Datorns primärminne SkiftaMinnesinnehall() dör main() dör - exekvering slut slutresultat ? tid tal_A=1 tal_B=2 main() tal_A=1 tal_B=2 a=2 b=1 SkiftaMinnesinnehall() x=1 main() Maskinkod programmet Heap StackBytes 21

Anders Sjögren Datorns primärminne SkiftaMinnesinnehall() dör main() dör - exekvering slut slutresultat ? tid tal_A=1 tal_B=2 main() tal_A=1 tal_B=2 a=2 b=1 SkiftaMinnesinnehall() x=1 main() Maskinkod programmet Heap StackBytes ingenting har förändrats i main(). De bägge variablernas värden är oförändrade. Värdet som returneras tas aldrig om hand 21

Anders Sjögren Hur måste SkiftaMinnesinnehall() se ut ? intSkiftaMinnesinnehall( int a, int b ) { int x; x = a; a = b; b = x; return a; } int main( void ) { int tal_A=1, tal_B=2 ; SkiftaMinnesinnehall( tal_A, tal_B ); return; } int main( void ) { int tal_A=1, tal_B=2 ; SkiftaMinnesinnehall( tal_A, tal_B ); return; } a b 12 x 12

Anders Sjögren Värdeöverföring Talen 1 och 2 har värdeöverförts, kopierats in i funktionen SkiftaMinnesinnehall() Att förändra kopian ändrar inte på originalet main() tal_A=1 tal_B=2 a=2 b=1 x 1221 SkiftaMinnesinnehall() kopior original

Anders Sjögren Referensöverföring det är innehållet i mains minne tal_A och tal_B som skall förändras lösningen är att värdeöverföra minnes- adressen till minne tal_A och tal_B tal_A=1 tal_B=2 a=2 b=1 SkiftaMinnesinnehall() main() x adress 2 adress 1 adress 2 adress

Anders Sjögren Referensöverföring det är innehållet i mains minne tal_A och tal_B som skall förändras lösningen är att värdeöverföra minnes- adressen till minne tal_A och tal_B tal_A=1 tal_B=2 a=2 b=1 SkiftaMinnesinnehall() main() x adress 2 adress 1 adress 2 adress 1 två pekare har sett dagens ljus!

Anders Sjögren tal_A=1 tal_B=2 a=2 b=1 x Programmet som klarar biffen voidSkiftaMinnesinnehall( int *, int *); int main( void ) { int tal_A=1, tal_B=2 ; SkiftaMinnesinnehall( &tal_A, &tal_B ); return 0; } voidSkiftaMinnesinnehall( int *a, int *b ) { int x; x = *a; *a = *b; *b = x; return; } Stacken 12 adresser

Anders Sjögren tal_A=1 tal_B=2 a=2 b=1 x Programmet som klarar biffen voidSkiftaMinnesinnehall( int *, int *); int main( void ) { int tal_A=1, tal_B=2 ; SkiftaMinnesinnehall( &tal_A, &tal_B ); return 0; } voidSkiftaMinnesinnehall( int *a, int *b ) { int x; x = *a; *a = *b; *b = x; return; } Stacken här betyder * att man skapar en variabel som lagra en adress till en variabel som lagrar ett heltal, int ! Pekare skapas!

Anders Sjögren adresser tal_A=1 tal_B=2 a=2 b=1 x Programmet som klarar biffen voidSkiftaMinnesinnehall( int *, int *); int main( void ) { int tal_A=1, tal_B=2 ; SkiftaMinnesinnehall( &tal_A, &tal_B ); return 0; } voidSkiftaMinnesinnehall( int *a, int *b ) { int x; x = *a; *a = *b; *b = x; return; } Stacken & är adressoperatorn som ger adressen till en variabel.. &tal_A == ” adressen till variabel tal_A”

Anders Sjögren tal_A=1 tal_B=2 a=2 b=1 x Programmet som klarar biffen voidSkiftaMinnesinnehall( int *, int *); int main( void ) { int tal_A=1, tal_B=2 ; SkiftaMinnesinnehall( &tal_A, &tal_B ); return 0; } voidSkiftaMinnesinnehall( int *a, int *b ) { int x; x = *a; *a = *b; *b = x; return ; } Stacken observera att * betyder olika vid variabeldefinition (deklaration) och i satser.

Anders Sjögren Slut