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.

Slides:



Advertisements
Liknande presentationer
INTRODUKTION TILL PROGRAMMERING
Advertisements

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.
Programstruktur: C för enchipsdatorer
Introduktion till C för enchipsdatorer
Funktioner och programorganisation
De fundamentala datatyperna
Operatorer.
#include void fun(char s[]) { int i=-1; while(s[++i]!=0) { if('a'
Om Java C =>Java syntax variabler metoder färdiga klasser
C-programmering ID120V William Sandqvist Länkad lista
Välkommen Vahid Mosavat
Grundläggande programmering
Föreläsning 2 Datalogi för E1 2D1343
Föreläsning 2 Primitiva datatyper Variabler och konstanter Tilldelning Inläsning Operatorer Villkorssatsen if Slingor: while och for.
Programmering i C# 2. Inledande detaljer.
Anders Sjögren Selektion i C ”vägval” if och switch - satserna.
Föreläsning 11 Arrayer.
Sid period2CD5250 OOP med C++ Mats Medin MDH/IDT C++ - förbättrat C?  Procedurellt program ser ut som C: sekvens, selektion, iteration  /* kommentar.
Programmering i C# 3. Klasser.
Repetition inför slutprovet
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; }
Programmering B PHP Lektion 2
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.
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.
Föreläsning 7 Uttryck, Operatorer Och Kontrollflöden.
Grundläggande programmering
Problemlösning Veckodagsproblemet Gissa talet Siffersumman.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 3 ( ) INNEHÅLL: -Jämförelseoperatorer -Villkorssatser -Logiska operatorer.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 3 ( ) INNEHÅLL: -Jämförelseoperatorer -Villkorssatser -Logiska operatorer.
Modulär programutveckling
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.
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.
F4 - Funktioner & parametrar 1 Programmeringsteknik, 4p vt-00 Modularisering ”svarta lådor” Väl definierade arbetsuppgifter Enklare validering Enklare.
Anders Sjögren Selektion i C ”vägval” if och switch - satserna.
Föreläsning 4 programmeringsteknik och Matlab 2D1312/ 2D1305
Språket för inbyggda system 2
INTRODUKTION TILL PROGRAMMERING
1 Mönstermatchning och rekursion Nr 4. 2 Förenklad notation val fnname = fn name => expression Förenklas till fun fnname name = expression Exempel fun.
OOP F2:1 Stefan Möller OOP Objekt-orienterad programmering Föreläsning 2 Deklaration och tilldelning Programsatser Tilldelning Input/Output Selektion.
Anders Sjögren Deklarationsområde och funktioner.
Föreläsning 17 Repetition. Källkodsformat Unicode används åäöμψζ tillåtna i namn på identifierare Inte alla miljöer klarar av det Källkod Bytekod Java.
Övning2 programmeringsteknik och Matlab 2D1312/ 2D1305
F2 1 Programmeringsteknik, 4p vt-00 Kommentarer Allt mellan /* och */ Varje kommentar byts ut mot en blank av kompilatorn /* Exempel på uttryck, tilldelningsoperatorn.
Kronljusströmställaren 0, 1, 2, 3
Föreläsning 7 programmeringsteknik och Matlab 2D1312/2D1305 Metoddeklaration och parametrar Arrayer och ArrayList.
-Repetition -Variabler -Primitiva typer (+ boolean) -Operatörer +, ++, --, -Typ konvertering -Wrapper klasser -Jämförelse operatörer,(==, =,,!=, !) -String.
Mer om operatorer logiska operatorer bit-operatorer adress-operatorn ”komma”-operatorn punkt - operatorn.
1 Föreläsning 2 Reserverade ord Javas API Identifierare Litteraler Variabler Kompilering och interpretering.
-Repetition -Variabler -Primitiva typer (+ boolean) -Operatörer +, ++, --, -Typ konvertering -Wrapper klasser -Jämförelse operatörer,(==, =,,!=, !) -String.
Föreläsning 3 Operatorer Flödeskontroll Primitiva datatyperKlasser i API och egna klasser int double byte float char boolean short long String BufferedReader.
OOP&M - teori1 OOP&M – Föreläsning 5 kap 8-13 Operatorer,typkonvertering, booleska operatorer, if och else.
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
Överlagring av operatorer, friends, user-defined conversions, klassmallar sid. 1 6/29/2015 CD5250 OOP med C++ Mats Medin MDH/IDT Överlagring av operatorer.
Anders Sjögren Operatorer. Anders Sjögren Operand(er)
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.
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.
Föreläsning 3: Booleans, if, switch
Iteration – Repetitionssats - while
Presentationens avskrift:

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. /* Beräknar kapitaltillväxt på # å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; }

Anders Sjögren const nyckel ordet const vid variabeldefinitionen gör att värdet ej går att ändra i programmet. /* Beräknar kapitaltillväxt på # år framåt eller bakåt */ #include #define RANTESATS 8.5 const float 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; } fördelen med detta är att kompilatorn kan typkontrollera användningen av konstanten. ranteSats används i denna funktion

Anders Sjögren Typomvandlingar

Anders Sjögren Typomvandlingar implicit ( automatisk ) typomvandling –typomvandling som görs automatiskt i C explicit typomvandling –typomvandling som programmeraren explicit påkallar

Anders Sjögren Typomvandling implicit ( automatisk ) #include int main ( void ){ doubled; float f = 8.5; inti ; printf("\n sizeof( i ) = %d",sizeof( i ) ) ; printf("\n sizeof( f ) = %d",sizeof( f ) ) ; printf("\n sizeof( 100 ) = %d",sizeof( 100 ) ) ; printf("\n sizeof( f/100 ) = %d",sizeof( f/100 ) ) ; printf("\n sizeof( i + f/100 ) = %d",sizeof( i+f/100 ) ) ; printf("\n sizeof( d = i + f/100 ) = %d",sizeof(d=i+ f/100)); return 0; } genom att studera byte-storleken på uttrycken i programmet kan man lista sig till vilka typomvand- lingar som sker i uttrycket d = i + f/100 provkör!

Anders Sjögren Uttryck: d = i + f/100

Anders Sjögren Typomvandling implicit ( automatisk ) d = i + f/100 int  float division mellan en float och en int. Då konverteras int till float och resultatet av divisionen blir en float float

Anders Sjögren Typomvandling implicit ( automatisk ) d = i + f/100 int  float addition mellan en int och en float. Då konverteras int till float och resultatet av additionen blir en float float

Anders Sjögren Typomvandling implicit ( automatisk ) d = i + f/100 int  float float  double uttrycket i högerledet antar typen float men eftersom resultatet av det skall tilldelas en double konverteras det till en double. float

Anders Sjögren Typomvandling implicit ( automatisk ) d = i + f/100 int  float float  double uttrycket i högerledet antar typen float men eftersom resultatet av det skall tilldelas en double konverteras det till en double. typomvandlingar där programmet får ”välja typ självt”, sker typomvandling från ”lägre” typ till ”högre” typ, se följande sida float

Anders Sjögren Typomvandling implicit ( automatisk ) long double double float unsigned long int long int unsigned int int unsigned short int short int unsigned char signed char typomvandlingar där programmet får ”välja typ självt”, sker typomvandling från ”lägre” typ till ”högre” typ. högsta typ lägsta typ

Anders Sjögren På webtentan

Anders Sjögren Typomvandling implicit ( automatisk ) i C kan typomvandlingar ske vid följande tillfällen

Anders Sjögren Typomvandling implicit ( automatisk ) operanderna till en operator kan omvandlas, operanderna skall vara av samma typ i + f/100

Anders Sjögren Typomvandling implicit ( automatisk ) operanderna till en operator kan omvandlas operanderna skall vara av samma typ i + f/100 vid tilldelning omvandlas högerledet till den typ som operanden till vänster har d = i + f/100

Anders Sjögren Typomvandling implicit ( automatisk ) operanderna till en operator kan omvandlas, operanderna skall vara av samma typ i + f/100 vid tilldelning omvandlas högerledet till den typ som operanden till vänster har d = i + f/100 en aktuell parameter till en funktion omvandlas för att matcha den formella parametern void TabellPaSkarmen( int, float ); int main ( void ){ intkapital ; floatantalAr; printf("Insatt kapital och antal år ?(--> )--> "); scanf("%f%d", &kapital, &antalAr); TabellPaSkarmen( antalAr, kapital ); int  float (trunkering!) En 32 bitar float använder 8 bitar till exponenten, så en int som använder mer än 32-8=24 bitar kommer att förlora precision om den lagras i en float. Om Du har mer än 16 miljoner i kapital!

Anders Sjögren Typomvandling implicit ( automatisk ) operanderna till en operator kan omvandlas, operanderna skall vara av samma typ i + f/100 vid tilldelning omvandlas högerledet till den typ som operanden till vänster har d = i + f/100 en aktuell parameter till en funktion omvandlas för att matcha den formella parametern void TabellPaSkarmen( int, float ); int main ( void ){ intkapital ; floatantalAr; printf("Insatt kapital och antal år ?(--> )--> "); scanf("%f%d", &kapital, &antalAr); TabellPaSkarmen( antalAr, kapital ); värdet som returneras från en funktion omvandlas till den typ som funktionen skall ge som resultat double Berakna( int i, float f ) { ” return i + f/100 ; int  float (trunkering!) float  double float  int Omvandlingen från float till double är problemfri

Anders Sjögren Typomvandling explicit ( av programmeraren påkalllad )( cast på engelska) exempel #include int main ( void ){ floatkvot; inttaljare, namnare ; printf("\n Ge taljare --> "); scanf("%d",&taljare); printf("\n Ge namnare --> "); scanf("%d",&namnare); kvot = taljare / namnare; /* int/int -> int */ printf("\n %d/%d blev %f",taljare, namnare, kvot); return 0; } provkör!

Anders Sjögren

Typomvandling explicit ( av programmeraren påkalllad )( cast på engelska) exempel #include int main ( void ){ floatkvot; inttaljare, namnare ; printf("\n Ge taljare --> "); scanf("%d",&taljare); printf("\n Ge namnare --> "); scanf("%d",&namnare); kvot = taljare / namnare; /* int/int -> int */ printf("\n %d/%d blev %f",taljare, namnare, kvot); return 0; } hmm, hur löser man detta? Tidigare kunde man ju sätta till en decimalpunkt, men då var ju en av operanderna en konstant 5./namnare. lösning

Anders Sjögren Typomvandling explicit ( av programmeraren påkalllad )( cast på engelska) exempel #include int main ( void ){ floatkvot; inttaljare, namnare ; printf("\n Ge taljare --> "); scanf("%d",&taljare); printf("\n Ge namnare --> "); scanf("%d",&namnare); kvot = (float) taljare / namnare; /* cast */ printf("\n %d/%d blev %f",taljare, namnare, kvot); return 0; } jahaja, man gör en explicit typomvandling av värdet fpån taljare till en float och då konverteras värdet från namnare implicit till float.

Anders Sjögren

Typomvandling explicit ( av programmeraren påkalllad )( cast på engelska) exempel #include int main ( void ){ floatkvot; inttaljare, namnare ; printf("\n Ge taljare --> "); scanf("%d",&taljare); printf("\n Ge namnare --> "); scanf("%d",&namnare); kvot = (float) taljare / namnare; /* cast */ printf("\n %d/%d blev %f",taljare, namnare, kvot); return 0; } jahaja, man gör en explicit typomvandling av värdet fpån taljare till en float och då konverteras värdet från namnare implicit till float.

Anders Sjögren Typomvandling syntax ( typnamn) uttryck

Anders Sjögren Typomvandling alla typer som är av tal-typ ( skalär typ )kan konverteras mellan varandra man bör fundera och kontrollera vad som händer vid typomvandling, följand gäller dock –från flyttal till heltal om talet ryms (till storlek) så trunkeras det dvs avhuggning av decimaldel sker, ingen avrundning –från heltal till fyttal precisionsförlust, det är inte säkert att flyttalsformen kan lagra alla värdesiffror

Anders Sjögren Typen på en konstant blir int oktalt blir int 0xA 0x14D hex bli int 10Lblir long int 0Xalblir long int 012ublir unsigned int 333Ublir unsigned int ”default” för en heltalskonstant är att den antar typen int HeltalskonstanterFlyttalskonstanter

Anders Sjögren Typen på en konstant HeltalskonstanterFlyttalskonstanter blir double 0.57e11exponentform blir double 5.7E13exponentform blir double 3.11E-7fexponentform blir float.56Fblir float e+50Lblir long double 7.45lblir long double ”default” för en flyttalskonstant är att den antar typen double blir int oktalt blir int 0xA 0x14D hex bli int 10Lblir long int 0Xalblir long int 012ublir unsigned int 333Ublir unsigned int ”default” för en heltalskonstant är att den antar typen int

Anders Sjögren #include #define DELAY L int main( void ){ long i; while ( !kbhit() ) {/* kbhit() ej ANSI */ printf("A"); for ( i=1; i < DELAY ; i++ ) ; printf("\tn"); for ( i=1; i < DELAY ; i++ ) ; printf("\td"); for ( i=1; i < DELAY ; i++ ) ; printf("\te"); for ( i=1; i < DELAY ; i++ ) ; printf("\tr"); for ( i=1; i < DELAY ; i++ ) ; printf("\ts"); for ( i=1; i < DELAY ; i++ ) ; printf("\r \t \t \t \t \t \r"); for ( i=1; i < DELAY ; i++ ) ; } return 0; } Typen på en konstant exempel en heltalskonstan har ”default” typen int. Vill man definiera en konstant av typen long int lägger man till l eller L på slutet. U och u är ett andra suffix. Det ger en konstant av typen unsigned int. Kombinationer går också bra t ex uL.

Anders Sjögren En första egendefinierad datatyp med hjälp av enum

Anders Sjögren Variabeltyper vad man tänker lagra heltalstyper –teckenlösa heltal ( 2 bytes lagrar talen [0,65535] ) –heltal med tecken ( 2bytes lagrar talen [-32768,32767] –tecken i texter ( ASCII-koden i 1 byte: B = 65 D =’A’ ) –logiska värden, boolean ( =0 falskt,  0 sant ) –bitmönster ( varje bit betyder något t ex tänd eller släckt lampa flyttalstyper –de reella talen ( 3.56E-10 = 3.56 · ) det lagrade värdet är exakt det lagrade värdet är oftast en approximation kommer ni ihåg den här bilden? Med hjälp av enum kan vi nu skapa en data- typ som bara kan lagra de sk boolska värdena sant och falskt

Anders Sjögren #include int main ( void ){ enum boolean { false, true }; /* typdef */ enum boolean omIgen=true, ok=false; char svar ; while ( omIgen ) { printf("Hej allihopa! En g\206ng till? ( j/n ) --> "); while ( !ok ){ /******* Inmatningskontroll ************/ ok = true ; scanf(" %c", &svar); /* ignorerar blanka */ switch ( svar ) { case'j': omIgen = true; break; case 'J': omIgen = true; break; case'n': omIgen = false; break; case'N': omIgen = false; break; default : printf("Du ska svara j eller n ! --> "); ok = false; } ok = false ; /******* Slut inmatningskontrtoll *******/ } return 0; } enum exempel

Anders Sjögren

enum - månaderna /* Beräkning av antalet semesterdagar */ #include int main(void) { enum manad {jan, feb, mar, apr, maj, jun, jul, aug, sep, okt, nov, dec}; enum manad akt_manad; int n, ant_dagar = 0; printf("Ange uttagen semester varje m\206nad\n"); for (akt_manad = jun; akt_manad <= sep; akt_manad++) { printf("m\206nad %d semesterdagar: ",akt_manad+1); scanf("%d", &n); ant_dagar += n; } printf("Totala antalet semesterdagar: %3d\n”,ant_dagar); system("PAUSE"); return 0; }

Anders Sjögren

enum - toner enum ton { c, ciss, d, diss, e, f, fiss, g, giss, a, b, h};

Anders Sjögren Slut