Data, typ, selektion, iteration

Relevanta dokument
Dagens föreläsning. Repetition. Repetition - Programmering i C. Repetition - Vad C består av. Repetition Ett första C-program

Objektorienterad programmering Föreläsning 4

Loopar och datatyper. Föreläsning 3

Dagens föreläsning. Repetition. Repetition - Programmering i C. Repetition - Vad C består av. Repetition Ett första C-program

Programmering i C, 7,5 hp

Loopar och datatyper. Föreläsning 3

Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek

TDIU01 - Programmering i C++, grundkurs

Programmera i C Varför programmera i C när det finns språk som Simula och Pascal??

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Strukturdiagram. Styra. Algoritmer. Val

TDIU01 - Programmering i C++, grundkurs

Övning2. Variabler. Data typer

Enkla datatyper minne

Föreläsning 3: Typomvandling, villkor och val, samt textsträngar

Klassdeklaration. Metoddeklaration. Parameteröverföring

Operatorer Tilldelning Kodblock { } if satsen Logiska uttryck Att programmera

Föreläsning 2. Variabler, tilldelning och kodblock{} if-satsen Logiska operatorer Andra operatorer Att programmera

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Felsökning. Datatyper. Referenstyper. Metoder / funktioner

SMD 134 Objektorienterad programmering

Inledande programmering med C# (1DV402) Summera med while"-satsen

F5 Selektion och iteration. ID1004 Objektorienterad programmering Fredrik Kilander

JavaScript del 3 If, Operatorer och Confirm

Uttryck och villkor. Föreläsning 2

Digitalitet. Kontinuerlig. Direkt proportionerlig mot källan. Ex. sprittermometer. Elektrisk signal som representerar ljud.

Programmering i C. Christer Sandberg, Gunilla Eken, Stefan Bygde Olof Andersson Linus Källberg Caroline Uppsäll Johan Hägg

En villkorssats är den konstruktion som finns i C++ för att göra en selektion av två alternativa sekvenser. Formen för if satsen är

Programmeringsteknik I

Uttryck och villkor. Föreläsning 2

Visual Basic, en snabbgenomgång

Föreläsning 7. Nyckelord I Java. Uttryck. Uttryck, Operatorer Och Kontrollflöden

Objektorienterad Programmering (TDDC77)

Objektorienterad Programmering (TDDC77)

OOP Objekt-orienterad programmering

I Skapa Hej.java och skriv programmet. I Kompilera med javac Hej.java. I Rätta fel och repetera tills du lyckas kompilera ditt program

JAVAUTVECKLING LEKTION 3

JAVAUTVECKLING LEKTION 4

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Muddy cards. Slingor

Logik och kontrollstrukturer

Variabler och konstanter

Översikt Introduktion DST 1. Nicholas Wickström. IDE, Högskolan i Halmstad. N. Wickström

Beräkningsvetenskap föreläsning 2

Inledande programmering med C# (1DV402) 27+15=42 1 (22)

Grundkurs i programmering, 6 hp (725G61) Dugga 1 tillfälle 3

Lathund. C för inbyggda system

System.out.println("Jaså du har "+ antalhusdjur+ " husdjur"); if ( antalhusdjur > 5 ) System.out.println("Oj det var många);

OOP Objekt-orienterad programmering

String [] argv. Dagens Agenda. Mer om arrayer. Mer om arrayer forts. String [] argv. argv är variabelnamnet. Arrayer och Strängar fortsättning

Språket Python - Del 1 Grundkurs i programmering med Python

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

Programmering A. Johan Eliasson

Objektorienterad programmering Föreläsning 2

C konstruerades i början på sjuttiotalet av Dennis Ritchie vid Bell Laboratories.

Programmeringsteknik med C och Matlab

1 Iteration. 1.1 for-satsen

Parameteröverföring. Exempel. Exempel. Metodkropp

Övningsuppgifter till föreläsning 2 Variabler och uttryck

Heltalsrepresentation. Fler byggstenar. Overflow och Underflow. TvŒ-komplement. FlyttalsvŠrden. Fyra heltalstyper. Tecken-bit

Iteration while-satsen

Lösningsförslag: Instuderingsfrågor, del A

1 Datorn som miniräknare. 1.1 Räkneoperationer. 1.2 Variabler

En kort text om programmering i C.

Lösningar till uppgifterna sätts ut på kurssidan och på WebCT (Gamla Tentor) i dag kl 19. Tentamen i Programmering C, 5p, Distans, övriga,

Programstruktur och terminologi. Programmet producerar följande utskrift i terminalfönstret: Ett Javaprogram består av en eller flera klasser

Lathund. C för inbyggda system

Datalogi I, grundkurs med Java 10p, 2D4112, Fiktiv tentamen, svar och lösningar och extra kommentarer till vissa uppgifter 1a) Dividera förs

Variabler använder man sig av för att under programkörningen spara data eller information i primärminnet. En variabel har typ, namn och värde.

Föreläsning 2. Täcker material från lektion 1, 2, 3 och 4:

Datastrukturer. Erik Forslin. Rum 1445, plan 4 på Nada

Föreläsning 3. Iteration while-satsen

SCB :-0. Uno Holmer, Chalmers, höger 2 Ex. Induktiv definition av lista. // Basfall

Repetera snabbt vad du lärde dig förra veckan. Du är nu redo att kasta dig in i nästa fas, teorin om villkor.

Lathund. Pacific C för MS-DOS

Programmering i C++ En manual för kursen Datavetenskaplig introduktionskurs 5p

Innehållsförteckning

Introduktion till formella metoder Programmeringsmetodik 1. Inledning

Lösningar till tentauppgifterna sätts ut på kurssidan på nätet idag kl 19. Omtentamen i Programmering C, 5p, fristående, kväll,

Introduktion till programmering SMD180. Föreläsning 4: Villkor och rekursion

Arduinokurs. Kurstillfälle 4

C-programmering. Målsättning Introducera programmering i C för de som inte har någon erfarenhet av C eller C++. Litteratur

Introduktion C-programmering

DD1314 Programmeringsteknik

Outline. For. I istället för att följa det normala ordningen, man ändra den. I i Java får man inte göra hopp hur som helst

Några inbyggda funktioner (med resultat!) Introduktion till programmering D0009E. Föreläsning 4: Villkor och rekursion. Modulus-operatorn.

Programmering i C++ EDA623 Typer. EDA623 (Föreläsning 4) HT / 33

översiktskurs (5DV031)

F2 Datatyper och variabler. ID1004 Objektorienterad programmering Fredrik Kilander

Exempel på ett litet Ada-program

Repetition C-programmering

Logik och Jämförelser. Styrsatser: Villkorssatsen if och repetitonssatsen for. Scriptfiler. Kommentarer. Tillämpningar: Ett enkelt filter.

Programmering i C. Vad är C? Målsättning. Litteratur. Jämförelse med Java. Exempel : Ett program som skriver ut texten Hello, world

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Muddy. Funktioner / metoder. Punktnotation. Evalueringsordning

C++ - En introduktion

Grunderna i C++ T A. Skapad av Matz Johansson BergströmLIMY

F4. programmeringsteknik och Matlab

Agenda. Arrayer deklaration, åtkomst Makron Flerdimensionella arrayer Initiering Strängar Funktioner och arrayer. Övningar nu och då

F2 Binära tal EDA070 Datorer och datoranvändning

PROGRAMMERING 2 GRUNDLÄGGANDE SEMANTIK 4

Föreläsning 3. Iteration. while-satsen for-satsen do-satsen

Pseudokod Analys av algoritmer Rekursiva algoritmer

DD1361 Programmeringsparadigm. Carina Edlund

Transkript:

Data, typ, selektion, iteration En programmeringkurs på halvfart IDT, MDH ttp://www.negative-g.com/nolimits/no%20limits%20defunct%20coasters.htm 1

Dagens agenda Talrepresentation Typkonvertering Sekvens Selektion Iteration 2

Talrepresentation Elektroniskt är det lätt att representera tal på binär form; dvs. 0 och 1 (Konrad Zuse 1937) En bit (b) är den minsta lagringsenheten. En bit kan representera en binär siffra som kan anta värdet 0 eller 1. Dvs 2 olika värden. 8 bitar kallas 1 Byte (B). En B kan alltså lagra tal som kan representeras med högst 8 binära siffror. Totalt 2 8 = 256 olika värden. Ett värde av typen int har (vanligen) 32 bitars (dvs 4 Bytes) storlek. Så en int-variabel kan anta 2 32 = 4294967296 (ca 4 miljarder) olika värden. 3

Decimala talsystemet (basen 10) 1027 Tusental Hundratal Tiotal Ental 10 3 10 2 10 1 10 0 10 3 *1 + 10 2 *0 + 10 1 *2 + 10 0 *7 = 1027 4

Binära talsystemet (basen 2) 101001 2 2 5 2 4 2 3 2 2 2 1 2 0 32 16 8 4 2 1 2 5 *1 + 2 4 *0 + 2 3 *1 + 2 2 *0 + 2 1 *0 + 2 0 *1 = 32+8+1 = 41 5

Hexadecimalt (basen 16) x 0,1,2,, 8, 9, a, b, c, d, e, f d 0,1,2,, 8, 9, 10, 11, 12, 13, 14, 15 b 0000, 0001, 0010,, 1000,, 1111 c4 16 c*16 1 + 4 * 16 0 = 12*16 + 4 = 196 10 Omvandling mellan binär och hex är trivial (!) 0xc4 1100 0100 1111 0101 0xf5 Man kan ange hexadecimala konstanter i C genom att inleda med 0x. a = 196; och a = 0xc4; har alltså samma betydelse. 6

Uttryck med blandad typ Inte överraskande ger beräkningen a + b ett värde av typen int om både a och b är av typen int. Pss med t.ex. float. Men om a och b har olika typ t.ex. int och float? Då sker s.k. automatisk typomvandling. Den av operanderna som har den sämre typen kommer Heltalstyp med 8 bitar promoveras. Ex: int x=250; char y=100; x + y float x=3.0; int y=4; x / y uttryckets värde blir 350 uttryckets värde blir 0.75 Obs! Det är inte variabeln som promoveras utan värdet 7

Tilldelning av annan typ Om höger och vänsterled i en tilldelningssats har olika typ så måste värdet av högerledet anpassas till variabeln i vänsterledet. Här gäller alltså inte att den bättre typen går före. Ex. int x; x värde blir 3 x = 3.14; float y; y värde blir 3.0 y = 3; unsigned char a=250, b=100, c; c = a + b; unsigned anger att värdet tolkas som positivt värdet på c blir 94 (350 får ej plats på 8 bitar) 8

Konverteringsregler Och vad är en bättre typ? Flyttalstyper är bättre än heltalstyper En större typ är bättre än en mindre Vilka är typerna? long long > long > int long double > double > float En unsigned är bättre än dess signed motsvarighet short och char promoveras till int före beräkning 9

Övning Implicit typkonvertering Vilket värde har result? 1) int a=3,b=4; float result; result = a+b; 2) float a=3,b=4; int result; result = a+b; 3) float a=0.3,b=0.4; int result; result = a+b; int b=4; float a=3.5, result; result = a+b; 10

Explicit typkonvertering Skriv (typen) framför ett uttryck eller variabel som du vill typkonvertera explicit. Ex: int a=3,b=4; float svar; svar = (float)a + (float)b; #define RAENTESATS 13 int saldo=100,raenta; raenta=saldo*((float)raentesats/100); #define RAENTESATS 13 int saldo=100,raenta; raenta=saldo*(float)(raentesats/100); #define RAENTESATS 13 int saldo=100; float raenta; raenta=saldo*((float)raentesats/100) 11

Heltalsdivision i datorn 7 / 3 uttrycket beräknas till 2 (men vi vet att det finns en rest på 1) 14 / 4 beräknas till 3 (men vi vet att det finns en rest på 2) 12

Rest - Modulus Vi behöver ibland veta hur stor resten är I C finns den s.k. modulus-operatorn % Binär operator vars båda operander är heltal och resultatet är det heltal som utgör resten vid division mellan operanderna. 13

Division och rest i datorn Vad kommer alltså att skrivas ut: int a=21; printf( %d\n, a / 5); printf( %d\n, a % 5); printf( %d\n, a / 7); printf( %d\n, a % 7); printf( %d\n, a % 25); 14

Selektion Uttryck kan vara sanna true eller falska false. if( uttryck ) sats else sats I uttrycket finns ofta med operatorer som ==!= >= <= Ex.if(pressed_key == q ) quit = true; if(speed > 30) speed = 30; if(error) printf( Emergency!\n ); För att få använda den i C inbyggda konstanten för booleska (logiska) värden så: 15 #include <stdbool.h>

if-satsen if(villkor) sats if(villkor) sats1 sats2... falskt VILLKOR sant SATSER 16

Flera villkor a ska skrivas ut om det ligger i intervallet 5..9: if (a >= 5) if (a < 10) printf( %d,a); if (a >= 5 && a < 10) printf( %d, a); Obs! if(5 <= a < 10) ger inte samma resultat (i allmänhet fel att skriva så)! 17

if-else-satsen if(villkor) sats else sats if(villkor) sats1 sats2... else sats1 sats2... falskt VILLKOR sant SATSER SATSER 18

if else if else if else if (a < 7) satser else if (a < 9) satser else if (a < 15) satser else satser Skillnad? if (a < 7) satser if (a < 9) satser if (a < 15) satser else satser 19

Introducerande uppgift Summera alla heltal mellan x och y, där x och y getts av användaren. Kan man skriva ett program som gör det genom att använda sekvensiella satser av den typ som nämnts (tilldelningar, scanf/printf och if-satser)? 20

Loop upprepa en sats så länge som ett villkor är sant while ( uttryck ) falskt VILLKOR sant SATSER Viktigt: i loopen måste en förändring ske som förr eller senare påverkar villkorsuttrycket Annars Oändlig loop / låsning 21

while() och do-while() falskt VILLKOR SATSER sant SATSER VILLKOR sant falskt while do-while 22

while-satsen while(villkor) sats while(villkor) sats1 sats2... Den underordnade satsen i while-satsen utförs om villkoret är sant. Efter att satsen utförts undersöks om villkoret är sant i vilket fall satsen utförs igen etc. Det hela fortgår tills dess villkoret blir falskt. 23

do-while-satsen do sats while(villkor); do sats1 sats2... while(villkor); Den underordnade satsen i do-whilesatsen utförs först. Därefter upprepas satsen så länge som villkoret är sant. 24

Några små övningar 1. Skriv ett program som låter användaren skriva in två tal och skriver ut talens summa. Detta upprepas till dess att summan blir 0. 2. Skriv ett program som summerar alla heltal mellan x och y, där x och y ges av programmets användare. 25

for-satsen Initiering Villkor för fortsatt iteration Förändring for(uttryck; uttryck; uttryck) sats Initiering utförs innan loopen startar (en gång) villkor kontrolleras varje gång innan loopen skall starta förändring utförs efter varje gång efter att loopen körts 26

Loop i loopen Om en loop är nästlad i en annan brukar den behöva andra variabler för villkoret Exempel; räkna ut en multiplikationstabell Alla rader tas med den yttre loopen Alla kolumner (objekt i en rad) tas med den inre loopen for(r = 0;r < ROWS; r++) c = 0; while (c < COLUMNS) printf( %d, r * c); c++; 27

Uppgift Problem: vilket udda heltal är minst av följande 6 tal? 6, 5, 0, 3, 16, 37 Det är lätt att ge svaret genom att bara läsa raden. Men beskriv algoritmen (receptet för att få datorn att göra det) under antagandet att det är en sekvens av positiva heltal. Tänk på att datorn bara kan se ett av talen i taget, och i tur och ordning. Skriv ett program i C som läser in 6 tal från användaren och skriver ut det minsta udda av dem! 28

När använda vilken? while (uttryck) sats används i det allmänna fallet do sats while(uttryck); används om loopkroppen (sats) alltid ska utföras minst en gång for( init; villkor; uppräkning) sats tillför egentligen ingen uttrycksmöjlighet i språket, men är i många fall bekvämare, typiska fall: for(i=0; i< nr_of_buckets; i++) sats for(i=maxsize 1; i >= 0; i ) sats 29