Programmering i C. Lektion oktober 2008

Relaterede dokumenter
Programmering i C. Lektion september 2009

Programmering i C. Lektion september 2009

Programmering i C. Lektion september 2009

Programmering i C. Lektion november 2008

Programmering i C. Kursusintroduktion. Lektion september Målgruppe 2 Indhold 3 Form 4 Materiale. Målgruppe Indhold Form Materiale

Programmering i C. Lektion december 2008

5. Kontrolstrukturer - Motivation og Oversigt

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

Programmering i C Videre med C (2 af 4) 19. marts 2007

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

Introduktion til C programmering

Programmering i C Intro og grundlæggende C 5. marts 2007

Start på Arduino og programmering

Programmering for begyndere Lektion 2. Opsamling mm

Kontrol-strukturer i PHP

// Definition af porte og funktioner

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

Algoritmer og invarianter

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

Forelæsning Uge 2 Mandag

Projekt - RoboNet Del Journal.

Navn: Søren Guldbrand Pedersen Klasse: 2i Fag: up/ansi Opgave: Brev til Sigurd Lære: John Austin Side 1 af 8 Dato:

Noter til C# Programmering Selektion

Kursusarbejde 3 Grundlæggende Programmering

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

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

Studiepraktik. Thomas Bøgholm Mikkel Hansen Jacob Elefsen

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

Erklæring af variabler. Void indstil (Indstiller starttidspunkt og måleinterval).

Programmering i C Programmering af microcontroller i C (4 af 4) 12. april 2007

Metoder og værktøjer til programmering

Kursusarbejde 2 Grundlæggende Programmering

Flowchart og Nassi ShneidermanN Version. Et flowchart bruges til grafisk at beskrive et forløb. Det kan fx være en microcontrollers programafvikling.

Online kursus: Programming with ANSI C

DM13-3. Obligatorisk opgave E.05 Håndoptimering af SPARC assembler-kode

up/ansi Eksamensspørgsmål

1. Variable og assignment

Forelæsning Uge 2 Mandag

Noter til C# Programmering Iteration

Forelæsning Uge 2 Mandag

Eksempel: Skat i år 2000

Forelæsning Uge 2 Mandag

Mircobit Kursus Lektion 3 (Du skal her vælge Lets Code Og nederst Microsoft Block Editor.)

C Programmering V1.37

Sproget Rascal (v. 2)

Lige siden den elektroniske computers opfindelse i slutningen af 1940, har det været muligt at få en computer til at beregne ting.

Flowchart og Nassi ShneidermanN Version. Et flowchart bruges til grafisk at tegne et forløb. Det kan fx være et programforløb for en microcontroller.

Kapitel 3 Betinget logik i C#

Python programmering. Per Tøfting. MacFest

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

Et alfabet er en ordnet mængde af bogstaver og andre tegn

LØKKER METODER C S HISTORIE. Grundlæggende programmering Lektion 4

Sproget Limba. Til brug i G1 og K1. Dat1E 2003

Forelæsning Uge 4 Mandag

Programmering i C. Lektion september 2009

#AlleKanKode. Lektion 4 - Kontrol flow

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

// inkluder library kode: #include <LiquidCrystal.h> #include <Serial.h> // Initialiser display LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

Anvendelse af del og hersk princippet involverer altså problemopdelning og løsningskombination.

Java Programmering. En bog for begyndere. Skrevet af Henrik Kressner

AAU, Programmering i Java Intern skriftlig prøve 18. maj 2007

En streng er en sekvens af data af samme type. En tekststreng er en streng af datatypen tegn

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.

Forelæsning Uge 2 Torsdag

Asus computer og hvad man kan gøre ved den. For flere år siden købte jeg en lille maskine der hed Asus Eee Pc 900.

Navn: Søren Guldbrand Pedersen Klasse: 2i Fag: up/ansi C Opgave: Brev til Sigurd Lære: John Austin Side 1 af 13 Dato:

Introduktion til funktioner, moduler og scopes i Python

Forelæsning 17, tirsdag 2. november 1999 Søgning efter en given værdi i en tabel. Programmering 1999

Følgende definition fortæller i bund og grund, at en type er en mængde af værdier. Så simpelt er det faktisk.

Alt elektronik heri er købt via og arduino udviklingssoftware er hentet fra

MySQL C API. Denne artikel beskriver hvordan man bruger MySQL C API. Der er beskrivelse af build med forskellige compilere.

Moderne numerische Methoden der Festkörperphysik Lanczos-ED für die AF Heisenberg-Kette

Optimering af fraværsregistrering

BOSK F2011, 1. del: Udsagnslogik

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

10. Funktioner - Lasagne

Hvis du synes at det ligner græsk så fortvivl ikke, inden artiklen er omme vil du synes at det er logik for begyndere.

//Udskriver System.out.println("Hej " + ditfornavn + " " + ditefternavn + "."); System.out.println("Du er " + dinalder + " aar gammel!

Planen for idag. Indhold af G1. Kernealphaerne. Alpha erne. Datalogi 1F Forår 2003

It og informationssøgning Forelæsning september 2006 Nils Andersen. Gentagelser og tekster

Grundlæggende Programmering ITU, Efterår Skriftlig eksamen i Grundlæggende Programmering

Processer og tråde. dopsys 1

uprocessorens hardware

Eksamens spørgsmål Software Construction. Objekter. Spørgsmål 1: Januar Giv en beskrivelse af Objekt-begrebet og deres brug

Dynamisk programmering

Undervisningsbeskrivelse

Input/Output: Brugergrænseflader. dopsys

DANMARKS TEKNISKE UNIVERSITET

Introduktion til programmering. Programmeringssprog Uge 44 Computer Science, kap 6. Learning Python: kap 13, 14.

Åben uddannelse, Efterår 1996, Oversættere og køretidsomgivelser

PHP 3 UGERS FORLØB PHP, MYSQL & SQL

Indholdsfortegnelse Indledning... 2 Projektbeskrivelse... 2 Dette bruger vi i projektet... 2 Komponenter... 2 Software... 2 Kalibrering...

Klasser. Grundlæggende Programmering med Projekt. Peter Sestoft Tirsdag 2. september (Tak til Jakob Bardram for nogle slides) Dagens begreber

ATTRIBUTES MULTITHREADING DYNAMIC PROGRAMMING. Grundlæggende programmering Lektion 11

Fra programmering til mikroprocessor

DM507 Algoritmer og datastrukturer

DATALOGI 1E. Skriftlig eksamen fredag den 7. juni 2002

Systemkald DM Obligatoriske opgave. Antal sider: 7 inkl. 2 bilag Afleveret: d. 18/ Afleveret af: Jacob Christiansen,

DM502. Peter Schneider-Kamp

C++ Gratis PDF-udgave Forlaget Libris

Transkript:

Programmering i C Lektion 2 20 oktober 2008

Historie Processen At kompilere 2 / 23 Fra sidst 1 Historie 2 Processen 3 At kompilere

Historie Processen At kompilere 3 / 23 ALGOL 60 1963 CPL 1966 BCPL 1969 B 1972 C Kernighan&Ritchie: The C Programming Language amerikansk standardisering international standardisering ny standardisering (pga. C++) 1978 K&R C 1989 ANSI C (C89) 1990 ISO C C99 1999

Historie Processen At kompilere 4 / 23 Kildekode Kildekode gcc -E Kildekode Præprocessering Oversættelse Kompilering gcc -S Assemblerkode gcc -c Assemblering Objektkode Maskinkode Udførsel Fortolkning Linkning Maskinkode Udførsel Fortolkning

Historie Processen At kompilere 5 / 23 gcc -ansi -pedantic -Wall -O -o ting ting.c Vi vil have alle advarsler som ANSI kræver Vi følger ANSI-standarden Output skal hedde ting Vi optimerer for at fange flere mulige fejl Vi vil også have en masse andre advarsler

Sekventiel kontrol Logiske udtryk Short circuit evaluering Udvælgelse af kommandoer 6 / 23 Kontrolstrukturer 4 Sekventiel kontrol 5 Logiske udtryk 6 Short circuit evaluering 7 Udvælgelse af kommandoer

Sekventiel kontrol Logiske udtryk Short circuit evaluering Udvælgelse af kommandoer 7 / 23 #include < s t d i o. h> start i n t main ( void ) { / seconds. c / long i n t input, temp, h, m, s ; p r i n t f ( " Giv mig et h e l t a l! \ n " ) ; scanf ( "%l d ", &i n p u t ) ; h= i n p u t / 3600; temp= input h 3600; m= temp / 60; s= temp% 60; p r i n t f ( " \ n%l d sekunder svarer t i l \ %l d timer, %l d m i n u t t e r og %l d sekunder \ n ", input, h, m, s ) ; return 0; printf scanf beregn printf slut

Sekventiel kontrol Logiske udtryk Short circuit evaluering Udvælgelse af kommandoer Udvælgelse af kommandoer: start Gentagelse af kommandoer: start gør noget gør noget ja betingelse nej nej betingelse gør eet gør andet ja gør noget gør mere gør mere slut if slut while; for 8 / 23

Sekventiel kontrol Logiske udtryk Short circuit evaluering Udvælgelse af kommandoer 9 / 23 Udvælgelse: if( logisk udtryk ) Gentagelse: while( logisk udtryk ) Logiske udtryk: x<y, x<=y, x>=y, x>y, x!=y, x==y!a, A&&B, A B, hvor A og B selv er logiske udtryk har værdien falsk (0) eller sandt (1, i de fleste(!) compilere) && har højere prioritet end brug parenteser! (Hvad er værdien af 3==5 1==1 && 1==2?... ) [oper.c]

Sekventiel kontrol Logiske udtryk Short circuit evaluering Udvælgelse af kommandoer 10 / 23 # include < s t d i o. h> i n t main ( void ) { / l i g h e d. c / i n t a, b, l i g ; p r i n t f ( " Vi sammenligner to t a l. \ n \ Output 0 betyder at de er f o r s k e l l i g e. \ n \ n \ Må jeg bede om to h e l t a l?\ n " ) ; scanf ( "%d %d ", &a, &b ) ; l i g = a== b ; / bedre med parenteser... / p r i n t f ( " \ noutput : %d \ n ", l i g ) ; return 0;

Sekventiel kontrol Logiske udtryk Short circuit evaluering Udvælgelse af kommandoer 11 / 23 Observation: Hvis A er falsk, da er A&&B også falsk Hvis A er sandt, da er A B også sandt i udtrykket A&&B beregnes B kun hvis A er sandt og i udtrykket A B beregnes B kun hvis A er falsk Smart, men kilde til fejl

Sekventiel kontrol Logiske udtryk Short circuit evaluering Udvælgelse af kommandoer 12 / 23 # include < s t d i o. h> i n t main ( void ) { / lighed2. c / i n t a, b ; char l i g ; p r i n t f ( " Vi sammenligner to t a l. \ n \ n \ Må jeg bede om to h e l t a l?\ n " ) ; scanf ( "%d %d ", &a, &b ) ; ( a== b ) &&( l i g = ) ; ( a!= b ) &&( l i g = u ) ; p r i n t f ( "%d er %c l i g %d \ n ", a, l i g, b ) ; return 0;

Sekventiel kontrol Logiske udtryk Short circuit evaluering Udvælgelse af kommandoer 13 / 23 Udvælgelse med &&: (a== b) &&( lig= ); kryptisk... Udvælgelse med if: if( a== b) lig= ; det var bedre! ja lig= a==b nej

Sekventiel kontrol Logiske udtryk Short circuit evaluering Udvælgelse af kommandoer 14 / 23 Udvælgelse med &&: (a== b) &&( lig= ); kryptisk... Udvælgelse med if: if( a== b) lig= ; det var bedre! if( a==b) lig= ; else lig= u ; ja lig= a==b nej lig= u i f ( u dtryk ) kommando1 ; else kommando2 ; først beregnes udtryk hvis udtryk er sandt, udføres kommando1 hvis udtryk er falsk, udføres kommando2

Sekventiel kontrol Logiske udtryk Short circuit evaluering Udvælgelse af kommandoer 15 / 23 # include < s t d i o. h> i n t main ( void ) { / lighed2. c / i n t a, b ; char l i g ; p r i n t f ( " Vi sammenligner to t a l. \ n \ n \ Må jeg bede om to h e l t a l?\ n " ) ; scanf ( "%d %d ", &a, &b ) ; i f ( a== b ) l i g = ; else l i g = u ; p r i n t f ( "%d er %c l i g %d \ n ", a, l i g, b ) ; return 0;

Kommandoblokke; scope Udvælgelse med if, 2. Udvælgelse med switch Gentagelse med while Gentagelse med for 16 / 23 Kontrolstrukturer, 2. 8 Kommandoblokke; scope 9 Udvælgelse med if, 2. 10 Udvælgelse med switch 11 Gentagelse med while 12 Gentagelse med for

Kommandoblokke; scope Udvælgelse med if, 2. Udvælgelse med switch Gentagelse med while Gentagelse med for 17 / 23 Problem: Vil gerne udvælge mellem to blokke af kommandoer Løsning: Sammensætning af kommandoer: i f ( a== b ) { c= 1; d= 2; else { c= 7; d= 5; blok blok ja kommando kommando betingelse nej kommando kommando

Kommandoblokke; scope Udvælgelse med if, 2. Udvælgelse med switch Gentagelse med while Gentagelse med for blok = antal kommandoer omkranset af { og en blok behandles som én kommando blokke kan indlejres i hinanden i starten af en blok kan variabelerklæringer forekomme!! disse variable er lokale for blokken (deres scope er blokken) #include < s t d i o. h> i n t main ( void ) { / blok. c / i n t a=5; p r i n t f ( " Før : a==%d \ n ", a ) ; { / en blok / i n t a=7; / d e k l a r a t i o n / p r i n t f ( " I : a==%d \ n ", a ) ; p r i n t f ( " E f t e r : a==%d \ n ", a ) ; #include < s t d i o. h> i n t main ( void ) { / blok2. c / i n t a=5; p r i n t f ( " Før : a==%d \ n ", a ) ; { / en blok / a=7; / assignment! / p r i n t f ( " I : a==%d \ n ", a ) ; p r i n t f ( " E f t e r : a==%d \ n ", a ) ; return 0; return 0; 18 / 23

Kommandoblokke; scope Udvælgelse med if, 2. Udvælgelse med switch Gentagelse med while Gentagelse med for Dangling else -problemet: i f ( a== 1) i f ( b== 2) p r i n t f ( "A" ) ; else p r i n t f ( "B" ) ; i f ( a== 1) { i f ( b== 2) p r i n t f ( "A" ) ; else p r i n t f ( "B" ) ; ja a==1 nej ja a==1 nej ja b==2 nej ja b==2 nej printf("b") printf("a") printf("b") printf("a") en else knytter sig altid til den inderste if brug kommandoblokke for at undgå tvivl! 19 / 23

Kommandoblokke; scope Udvælgelse med if, 2. Udvælgelse med switch Gentagelse med while Gentagelse med for Hvad hvis der er flere end to valgmuligheder? Brug switch! #include < s t d i o. h> i n t main ( void ) { / switch. c / i n t a ; char dyr ; p r i n t f ( " Giv mig et h e l t a l! \ n " ) ; scanf ( "%d ", &a ) ; switch ( a ) { case 1: dyr= " hest " ; break ; case 2: dyr= " g r i s " ; break ; case 3: dyr= " abe " ; break ; default : dyr= " ko " ; break ; p r i n t f ( " \ ndu er en %s! \ n ", dyr ) ; return 0; 20 / 23

Kommandoblokke; scope Udvælgelse med if, 2. Udvælgelse med switch Gentagelse med while Gentagelse med for switch ( u d t r y k ) { case const1 : command1 ; case const2 : command1 ;... case constn : commandn ; default : command ; først beregnes udtryk. Resultatet skal være et heltal eller noget der ligner (f.x. en char) udtryk = const i command i udføres. Herefter udføres command i+1 osv. udtryk const i for alle i default-kommandoen udføres, og herefter de efterfølgende! Hvis der ingen default er, gøres ingenting. man ønsker næsten altid at afslutte et case med en break-kommando; så springes de efterfølgende kommandoer over. 21 / 23

Kommandoblokke; scope Udvælgelse med if, 2. Udvælgelse med switch Gentagelse med while Gentagelse med for while ( udtryk ) kommando ; først beregnes udtryk hvis udtryk er sandt, udføres kommando, og løkken startes forfra hvis udtryk er falsk, afsluttes løkken nej udtryk ja kommando #include < s t d i o. h> i n t main ( void ) { / while. c / i n t h= 0; while ( h!= 1234) { p r i n t f ( " I n d t a s t det hemmelige h e l t a l : " ) ; scanf ( "%d ", &h ) ; p r i n t f ( " \ nhurra! \ n " ) ; return 0; 22 / 23

Kommandoblokke; scope Udvælgelse med if, 2. Udvælgelse med switch Gentagelse med while Gentagelse med for for ( i n i t ; c o n d i t i o n ; update ) kommando ; (den mest generelle løkkekonstruktion i C) 1 først udføres init 2 så beregnes condition, og hvis den er falsk, afbrydes 3 kommando udføres 4 update udføres, og vi springer tilbage til trin 2. #include < s t d i o. h> i n t main ( void ) { / f o r. c / i n t i = 1; p r i n t f ( "%d e l e f a n t \ n ", i ) ; for ( i = 2; i <=10; ) { p r i n t f ( "%d e l e f a n t e r \ n ", i ) ; i ++; return 0; 23 / 23