Anders Sjögren Deklarationsområde och funktioner.

Slides:



Advertisements
Liknande presentationer
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.
Advertisements

Föreläsning1. • Boken?!?! • Vad är ett program? • Kompilerande-Interpreterande • Programmeringsmiljö • Hello World! • Att programmera och ett enkelt program.
Anders Sjögren Lagringsklasser •en variabel i C har två attribut –type( int, float, char..... ) –lagringsklass( auto, extern, register, static ) •lagringsklassens.
Datavetenskap för teknisk kemi 10p, moment 1
Programstruktur: C för enchipsdatorer
Funktioner och programorganisation
2D1311 Programmeringsteknik med PBL
Operatorer.
#include void fun(char s[]) { int i=-1; while(s[++i]!=0) { if('a'
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.
Arrays Indicerade variabler.
Föreläsning 2. Operatorer Tilldelning Kodblock { } if – satsen Logiska uttryck Att programmera.
Föreläsning 4 Python: mera om funktioner och parametrar
C-programmering ID120V William Sandqvist Länkad lista
Välkommen Vahid Mosavat
Programmeringsteknik K och Media
Programmeringsteknik för K och Media
Grundläggande programmering
Föreläsning 4 Python: Definiering av egna funktioner Parametrar
Föreläsning 6 Referenser Objekt som parametrar public/private Klassvariabler och klassmetoder.
i olika programmeringsspråk
Iteration i C ”upprepa”
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.
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; }
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.
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 8 ( ) Innehåll: Trådprogrammering i Java - Avbrott (”interrupts”) - Metoden join() -
Deklarera en struct som kan användas för att representera en rät linje Använd den I main för att deklarera en variabel som du initierar så att den representerar.
William Sandqvist C:s minnesmodell.
Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 1 Föreläsning 8: Underprogram Underprogram Räckvidd Parameteröverföring.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 4 ( ) INNEHÅLL: -Logiska opertorer -Poster.
Problemlösning Veckodagsproblemet Gissa talet Siffersumman.
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.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 7 ( ) INNEHÅLL: -Klasser -Att definiera egna klasser -Klassvariabler -Klassmetoder.
Modulär programutveckling
Anders Sjögren Pekare. Anders Sjögren Skapa ett program som byter plats på två heltal Pekare.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 7 ( ) INNEHÅLL: -Metoder -Lokala variabler -Mera om klasser: -Nyckelorden.
1 Föreläsning 6 Programmeringsteknik och Matlab 2D1312/2D1305 Metoder & parametrar Array API och klassen ArrayList.
Namnrum, räckvidd och rekursion Linda Mannila
William Sandqvist Databuffer Omvandlar mellan olika storlekar på dataobjekt Anpassar mellan olika dataöverföringshastigheter Databuffer.
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
F. Drewes, Inst. f. datavetenskap1 Föreläsning 8: Underprogram Underprogram Räckvidd Parameteröverföring.
Anders Sjögren Selektion i C ”vägval” if och switch - satserna.
Språket för inbyggda system 2
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.
F2 1 Programmeringsteknik, 4p vt-00 Kommentarer Allt mellan /* och */ Varje kommentar byts ut mot en blank av kompilatorn /* Exempel på uttryck, tilldelningsoperatorn.
Föreläsning 5 Objekt Klasser Konstruktorer Metoder Minnesbilder av objekt.
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Datastrukturer och algoritmer Gruppövning 0.
William Sandqvist Funktionsbibliotek När man utvecklat en funktion så långt att den är "färdigutvecklad" kan man lika gärna spara den på.
Mer om operatorer logiska operatorer bit-operatorer adress-operatorn ”komma”-operatorn punkt - operatorn.
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.
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)
Språket för inbyggda system. C:s verktygslåda är välfylld! William Sandqvist
Anders Sjögren Modulär programutveckling. Anders Sjögren Ett programmeringsprojekt, flera personer utvecklar ett program Vi ska utveckla ett ränteberäkningsprogram.
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.
Presentationens avskrift:

Anders Sjögren Deklarationsområde och funktioner

Anders Sjögren Deklarationsområde med hjälp av { } skapar man sammansatta satser ( ) som även kallas block { int a = 2 ; printf("a = %d\n", a); } i början på ett block ( sammansatt sats) är det tillåtet att ha deklarationer och definitioner av variabler samt deklarationer av funktioner men ej definitioner av funktioner som måste ligga utanför alla block.

Anders Sjögren Deklarationsområde block #include int main( void ){ { int a = 2 ; printf("a = %d\n", a); } return 0; }

Anders Sjögren Deklarationsområde block #include int main( void ){ { int a = 2 ; printf("a = %d\n", a); } return 0; }

Anders Sjögren Deklarationsområde block #include int main( void ){ int a = 1 ; printf("a = %d\n", a); { int a = 2 ; printf("a = %d\n", a); } return 0; } kan man ha en variabel a utanför blocket?

Anders Sjögren Deklarationsområde block #include int main( void ){ int a = 1 ; printf("a = %d\n", a); { int a = 2 ; printf("a = %d\n", a); } return 0; } kan man ha en variabel a utanför blocket?

Anders Sjögren Deklarationsområde block #include int main( void ){ int a = 1 ; printf("a = %d\n", a); { int a = 2 ; printf("a = %d\n", a); } return 0; } vad händer nu då? Testa! Slutsats?

Anders Sjögren Deklarationsområde block #include int main( void ){ int a = 1 ; printf("a = %d\n", a); { int a = 2 ; printf("a = %d\n", a); } return 0; } vad händer nu då? Testa! Slutsats?

Anders Sjögren Deklarationsområde block #include int main( void ){ int a = 1 ; printf("a = %d\n", a); { int a = 2 ; printf("a = %d\n", a); } return 0; } vad händer nu då? Testa! Slutsats?

Anders Sjögren Deklarationsområde block #include int main( void ){ int a = 1 ; printf("a = %d\n", a); { int a = 2 ; printf("a = %d\n", a); } return 0; }

Anders Sjögren Deklarationsområde block #include int main( void ){ int a = 1 ; printf("a = %d\n", a); { int a = 2 ; printf("a = %d\n", a); } return 0; } aja baja! variabeln a måste vara definierad innan den kan användas. Detta ger kompileringsfel!

Anders Sjögren Deklarationsområde block #include int main( void ){ int a = 1 ; printf("a = %d\n", a); { int a = 2 ; printf("a = %d\n", a); { int a = 3 ; printf("a = %d\n", a); } { printf("a = %d\n", a); } return 0; } vad händer nu då? Testa! Slutsats?

Anders Sjögren Deklarationsområde block #include int main( void ){ int a = 1 ; printf("a = %d\n", a); { int a = 2 ; printf("a = %d\n", a); { int a = 3 ; printf("a = %d\n", a); } { printf("a = %d\n", a); } return 0; }

Anders Sjögren Nästlade och parallella block {}{} {}{} {}{} {}{} Nästlade block Parallella block

Anders Sjögren Deklarationsområde block slutsatser –man kan definiera variabler med samma namn inom olika block –kompilatorn kontrollerar en använd variabel mot ”närmsta” definition uppåt i den nästlade blockstrukturen –definieras en variabel i ett block döljer den variabler med samma namn från ”yttre” block {}{} {}{} {}{} {}{} Nästlade block Parallella block

Anders Sjögren Deklarationsområde block #include int a = 0 ; int main( void ){ int a = 1 ; printf("a = %d\n", a); { int a = 2 ; printf("a = %d\n", a); { int a = 3 ; printf("a = %d\n", a); } { printf("a = %d\n", a); } return 0; } om man definierar en variabel på den ”yttersta nivån så får man en ”global” (eg extern, tas upp senare) variabel som blir känd i hela programmet om den inte döljs genom lokala definitioner

Anders Sjögren Deklarationsområde block

Anders Sjögren Definition och deklaration av funktioner

Anders Sjögren Definition av funktioner /* Beräknar kapitaltillväxt på 10 år framåt eller bakåt */ #include #define RANTESATS 8.5 void TabellPaSkarmen( int, float ); int main ( void ) { floatkapital ; intantalAr; printf("Insatt kapital och antal år ?(--> )--> "); scanf("%f%d", &kapital, &antalAr); TabellPaSkarmen( antalAr, kapital ); return 0; } void TabellPaSkarmen( int antalAr, float kapital ) { int ar ; printf("\n År Saldo\n == =====\n"); for ( ar = 1; ar <= antalAr; ar++ ) { if ( kapital > 0 ) kapital = kapital * ( 1 + RANTESATS/100 ); else kapital = kapital * 1/( 1 + RANTESATS/100 ); printf("%3d%11.2f\n", ar,kapital>0 ? kapital:-kapital); } return; } funktionen main() definierad funktionen definierad funktionen TabellPaSkarm() deklarerad

Anders Sjögren Definition av funktioner /* Beräknar kapitaltillväxt på 10 år framåt eller bakåt */ #include #define RANTESATS 8.5 void TabellPaSkarmen( int, float ); int main ( void ) { floatkapital ; intantalAr; printf("Insatt kapital och antal år ?(--> )--> "); scanf("%f%d", &kapital, &antalAr); TabellPaSkarmen( antalAr, kapital ); return 0; } void TabellPaSkarmen( int antalAr, float kapital ) { int ar ; printf("\n År Saldo\n == =====\n"); for ( ar = 1; ar <= antalAr; ar++ ) { if ( kapital > 0 ) kapital = kapital * ( 1 + RANTESATS/100 ); else kapital = kapital * 1/( 1 + RANTESATS/100 ); printf("%3d%11.2f\n", ar,kapital>0 ? kapital:-kapital); } return; } funktionen main() definierad funktionen definierad funktionen TabellPaSkarm() deklarerad en funktion måste definieras på den yttersta nivån den kan däremot deklareras i block praxis är att man definierar funktionerna efter main() och deklarerar dem före pga deklarationen kan kompilatorn kontrollera att funktionen används rätt pga deklarionerna först så spelar det ingen roll i vilken ordning funktions-definitionerna kommer efter main()

Anders Sjögren Funktioner exempel ytterligare funktionsuppdelning /* Beräknar kapitaltillväxt på 10 år framåt eller bakåt */ #include #define RANTESATS 8.5 void TabellPaSkarmen( int, float ); int main ( void ) { floatkapital ; intantalAr; printf("Insatt kapital och antal år ?(--> )--> "); scanf("%f%d", &kapital, &antalAr); TabellPaSkarmen( antalAr, kapital ); return 0; } void TabellPaSkarmen( int antalAr, float kapital ) { int ar ; printf("\n År Saldo\n == =====\n"); for ( ar = 1; ar <= antalAr; ar++ ) { if ( kapital > 0 ) kapital = kapital * ( 1 + RANTESATS/100 ); else kapital = kapital * 1/( 1 + RANTESATS/100 ); printf("%3d%11.2f\n", ar,kapital>0 ? kapital:-kapital); } return; }

Anders Sjögren Den nya funktionen den nya funktionen som tar en float och returnerar en float float NastaAr( float x ) { if ( x > 0 ) x = x * ( 1 + RANTESATS/100 ); else x = x * 1/( 1 + RANTESATS/100 ); return x ; }

Anders Sjögren Det modifierade programmet #include #define RANTESATS 8.5 float NastaAr( float ); void TabellPaSkarmen( int, float ); int main ( void ) { floatkapital ; intantalAr; printf("Insatt kapital och antal år ?(--> )--> "); scanf("%f%d", &kapital, &antalAr); TabellPaSkarmen( antalAr, kapital ); return 0; } void TabellPaSkarmen( int antalAr, float kapital ) { int ar ; printf("\n År Saldo\n == =====\n"); for ( ar = 1; ar <= antalAr; ar++ ) { kapital = NastaAr( kapital ); printf("%3d%11.2f\n", ar,kapital>0 ? kapital:-kapital); } return; } float NastaAr( float x ) { if ( x > 0 ) x = x * ( 1 + RANTESATS/100 ); else x = x * 1/( 1 + RANTESATS/100 ); return x ; } funktionen main() definierad funktionen TabellPaSkarmen() definierad funktionerna TabellPaSkarm(), NastaAr() deklarerad funktionen NastaAr() definierad

Anders Sjögren Det modifierade programmet #include #define RANTESATS 8.5 void TabellPaSkarmen( int, float ); int main ( void ) { floatkapital ; intantalAr; printf("Insatt kapital och antal år ?(--> )--> "); scanf("%f%d", &kapital, &antalAr); TabellPaSkarmen( antalAr, kapital ); return 0; } void TabellPaSkarmen( int antalAr, float kapital ) { float NastaAr( float ); int ar ; printf("\n År Saldo\n == =====\n"); for ( ar = 1; ar <= antalAr; ar++ ) { kapital = NastaAr( kapital ); printf("%3d%11.2f\n", ar,kapital>0 ? kapital:-kapital); } return; } float NastaAr( float x ) { if ( x > 0 ) x = x * ( 1 + RANTESATS/100 ); else x = x * 1/( 1 + RANTESATS/100 ); return x ; } funktionen main() definierad funktionen TabellPaSkarmen() definierad funktionerna TabellPaSkarm(), NastaAr() deklarerad funktionen NastaAr() definierad funktionen definierad en funktion måste definieras på den yttersta nivån den kan däremot deklareras i block praxis är att man definierar funktionerna efter main() och deklarerar dem före pga deklarationen kan kompilatorn kontrollera att funktionen används rätt pga deklarionerna först så spelar det ingen roll i vilken ordning funktions-definitionerna kommer efter main()

Anders Sjögren Funktioner indata - utdata indata överförs till funktionerna m h a de formella parametrarna och utdata m h a return eller ( som vi skall see längre fram ) m h a de formella parametrarna. Detta strävar man efter pga tydligheten men det finns ett annat sätt också, nämligen genom s k sidoeffekt. float NastaAr( float x ) { if ( x > 0 ) x = x * ( 1 + RANTESATS/100 ); else x = x * 1/( 1 + RANTESATS/100 ); return x ; } Denna möjlighet att ”lämna utdata” tas upp längre fram när ”pekare” har lanserats.

Anders Sjögren Sidoeffekt hos funktion exempel #include #define RANTESATS 8.5 float NastaAr( float ); void TabellPaSkarmen( int, float ); float kapital; int main ( void ) { floatkapital ; intantalAr; printf("Insatt kapital och antal år ?(--> )--> "); scanf("%f%d", &kapital, &antalAr); TabellPaSkarmen( antalAr, kapital ); return 0; } void gör kapital till en global ( extern ) variabel genom att definiera den på den yttersta nivån. Den blir då känd i alla block.

Anders Sjögren Sidoeffekt hos funktion exempel void TabellPaSkarmen( int antalAr, float kapital ) { int ar ; printf("\n År Saldo\n == =====\n"); for ( ar = 1; ar <= antalAr; ar++ ) { kapital = NastaAr( kapital ); printf("%3d%11.2f\n", ar,kapital>0 ? kapital:-kapital); } return; } ändringar i TabellPaSkarmen() NastaAr();

Anders Sjögren Sidoeffekt hos funktion exempel float NastaAr( float x ) { if ( x kapital > 0 ) x kapital = x kapital* ( 1 + RANTESATS/100 ); else x kapital = x kapital * 1/( 1 + RANTESATS/100 ); return x ; } ändringar i NastaAr(), x byts mot kapital in och utdata överförs nu sidovägen, ett sådant här program är svårt att underhålla, felavlusa samt bygga ut. void

Anders Sjögren Sidoeffekter #include #define RANTESATS 8.5 void NastaAr( void ); void TabellPaSkarmen( int ); float kapital; int main ( void ) { intantalAr; printf("Insatt kapital och antal år ?(--> )--> "); scanf("%f%d", &kapital, &antalAr); TabellPaSkarmen( antalAr ); return 0; } void TabellPaSkarmen( int antalAr ){ int ar ; printf("\n År Saldo\n == =====\n"); for ( ar = 1; ar <= antalAr; ar++ ) { NastaAr(); printf("%3d%11.2f\n", ar,kapital>0 ? kapital:-kapital); } return; } void NastaAr( void ) { if ( kapital > 0 ) kapital = kapital * ( 1 + RANTESATS/100 ); else kapital = kapital * 1/( 1 + RANTESATS/100 ); return ; } vilken funktion ändrar resp använder variabeln kapital ?

Anders Sjögren Sidoeffekter #include #define RANTESATS 8.5 void NastaAr( void ); void TabellPaSkarmen( int ); float kapital; int main ( void ) { intantalAr; printf("Insatt kapital och antal år ?(--> )--> "); scanf("%f%d", &kapital, &antalAr); TabellPaSkarmen( antalAr ); return 0; } void TabellPaSkarmen( int antalAr ){ int ar ; printf("\n År Saldo\n == =====\n"); for ( ar = 1; ar <= antalAr; ar++ ) { NastaAr(); printf("%3d%11.2f\n", ar,kapital>0 ? kapital:-kapital); } return; } void NastaAr( void ) { if ( kapital > 0 ) kapital = kapital * ( 1 + RANTESATS/100 ); else kapital = kapital * 1/( 1 + RANTESATS/100 ); return ; } ? Användaren upplever inga problem – det är vi som programmerare som får svårt att förstå programmets funktion, och därmed får svårt att underhålla programvaran.

Anders Sjögren Slut