Datatyp - mera. Begreppet värde, igen. Ett slags mått på en egenskap, eller något fenomen. Ska ges en bred tolkning!

Relevanta dokument
TENTAMEN TDDB53. Programmering i Ada för MI (provkod TEN2) den 7 april 2010 kl Institutionen för datavetenskap, IDA Olle Willén mars 2010

Exempel på ett litet Ada-program

Tentamen Grundläggande programmering

KOMPLETTERANDE HEMTENTAMEN TDDB53

KOMPLETTERANDE HEMTENTAMEN TDDB53

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

KOMPLETTERANDE HEMTENTAMEN 2 TDDB53

Klassdeklaration. Metoddeklaration. Parameteröverföring

Månadsnamn september Några deklarationer

Variabler och konstanter

Typsystem. DA2001 (Föreläsning 23) Datalogi 1 Hösten / 19

TDIU01 - Programmering i C++, grundkurs

Typsystem. Typsystem... Typsystem... Typsystem... 2 *

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

GRUNDER I VHDL. Innehåll. Komponentmodell Kodmodell Entity Architecture Identifierare och objekt Operationer för jämförelse

Parameteröverföring. Exempel. Exempel. Metodkropp

Föreläsning 4: Poster

DD1361 Programmeringsparadigm. Carina Edlund

Översikt över Visual Basic

TDDC30. Kursledning Kursledare: Jonas Lindgren. Labassistent: Jonas Lindgren Labassistent: Niklas Holma Labassistent: Erik Nilsson

Beräkningsvetenskap föreläsning 2

Imperativ programmering. Föreläsning 2

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

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. Felsökning. Datatyper. Referenstyper. Metoder / funktioner

Paket (2) nautisk_mil : constant Float := * foot; ångström : constant Float := 10.0E-10; mile : constant Float := 5280.

Föreläsning 6: Introduktion av listor

Pascal. reserverade ord fördefinierade funktioner och procedurer egendefinierade funktioner, procedurer och objekt

5 Grundläggande in- och utmatning

Pascal... Pascal. Pascal... Pascal...

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

TAIU07 Matematiska beräkningar med MATLAB för MI. Fredrik Berntsson, Linköpings Universitet. 15 januari 2016 Sida 1 / 26

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

Föreläsning 2 Programmeringsteknik och C DD1316. Mikael Djurfeldt

Objektorienterad Programmering (TDDC77)

SMD 134 Objektorienterad programmering

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

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

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 1 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Uppgift 1 ( Betyg 3 uppgift )

Omgivningar. Omgivningar är viktiga eftersom de avgör vilka namn som är synliga och därmed dessas innebörd och de värden som är förknippade med dem.

Föreläsningsanteckningar, Introduktion till datavetenskap HT S4 Datastrukturer. Tobias Wrigstad

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

Introduktion till MATLAB

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

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

Objektorienterad Programmering (TDDC77)

TANA17 Matematiska beräkningar med MATLAB för M, DPU. Fredrik Berntsson, Linköpings Universitet. 27 oktober 2015 Sida 1 / 31

Objektorienterad programmering Föreläsning 4

Tentamen i. TDDC67 Funktionell programmering och Lisp

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

Övning2. Variabler. Data typer

Programmering A. Johan Eliasson

TDIU01 - Programmering i C++, grundkurs

Föreläsning 3-4 Innehåll. Diskutera. Metod. Programexempel med metod

Föreläsning 3.1: Datastrukturer, en översikt

Platser för att skriva och testa kod online. Workshop om programmering i matematikkurser, version 0.7 senast sparat

Föreläsning 3-4 Innehåll

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

Introduktion till formella metoder Programmeringsmetodik 1. Inledning

TDDE10 TDDE11, 725G90. Gemensam kurswebsida på:

MATLAB the Matrix Laboratory. Introduktion till MATLAB. Martin Nilsson. Enkel användning: Variabler i MATLAB. utvecklat av MathWorks, Inc.

Variabler. TANA81: Beräkningar med Matlab. Matriser. I Matlab skapas en variabel genom att man anger dess namn och ger den ett värde:

Föreläsning 3: Booleans, if, switch

Data, typ, selektion, iteration

Föreläsning 5: Introduktion av pekare

Programmeringsteknik med C och Matlab

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

Språket Scheme. DAT 060: Introduktion till (funktions)programmering. DrScheme. uttryck. Jacek Malec m. fl. evaluering av uttryck.

Introduktion till programmering D0009E. Föreläsning 1: Programmets väg

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

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

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

Iteration while-satsen

Hej Då, Karel! Programmering. Vårt första Javaprogram. hh.se/db2004. Java. Grundtyper, variabler och arrayer

Föreläsning 2 Programmeringsteknik och C DD1316. Programmering. Programspråk

Föreläsning 3. Iteration while-satsen

Övningsuppgifter kapitel 8

Lite om reella tal. Programmering. I java. Om operatorers associativitet och prioritet

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

Shannon-Fano-Elias-kodning

Introduktion till programmering SMD180. Föreläsning 2: Variabler, uttryck och satser

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

C++ - En introduktion

Alla datorprogram har en sak gemensam; alla processerar indata för att producera något slags resultat, utdata.

Föreläsning 2 sept 05 (Onsdag v 36). DD Chapter 2.

Pythons standardbibliotek

Föreläsning 2 Programmeringsteknik DD1310. Programmering. Programspråk

Deklarationer/definitioner/specifikationer

TAIU07 Matematiska beräkningar med Matlab

Grundläggande programmering med C# 7,5 högskolepoäng

Uppgift 1 (grundläggande konstruktioner)

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

Introduktion till Matlab

Föreläsningsmaterial (Syntax och variabler)

2.4. Teckensträngar och logiska uttryck

Föreläsning 2 Programmeringsteknik DD1310. Programmering. Programspråk

n Detta för att kunna koncentrera oss på n Tal: number? n Symboler: symbol? n Strängar: string? n Tecken: char? n Boolskt: boolean?

1 Funktioner och procedurell abstraktion

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

Transkript:

Begreppet värde, igen Ett slags mått på en egenskap, eller något fenomen. Ska ges en bred tolkning! Kan vara mycket enkla: födår, ögonfärg, styckepris,.. eller lite sammansatta: en vektor, ett personnamn, en faktura,.. eller tämligen komplexa: ett ekvationssystem, en schackställning, Begreppet datatyp, igen Värden med samma karaktär, som mäter samma fenomen. Varje värde tillhör alltid en datatyp! Varje datatyp har (vanligen) ett eget namn. Datatyp Adas typnamn Exempel på bokstavliga skrivsätt heltal Integer 12-34 reella tal Float 3.1415-0.003 enstaka tecken Character A > texter String-varianter "Medelvärdet:" sanningsvärden Boolean true false Datatyp - mera Man kan som programmerare också tillverka egna, nya datatyper, t ex Egen datatyp Exempel på värden - för komplexa tal (12.3, -0.5) - för matriser 2.0-0.1 3.5 1.2 - för ögonfärg blå grå eller vad som helst! Men hur det går till visas inte just nu! Begreppet uttryck Ungefär: skrivsätt (konstruktioner) som beskriver ett värde. Flera alternativ, bl a Som literaler (dvs bokstavligt skrivna värden) 312 3.1415 "Summan: " Som variabler (egentligen variabelnamn) Alfa no_of_steps Som formler (operationsuttryck) 3.1415 - Alfa ** 2 Varje uttryck tillhör en och endast en datatyp! TDDB53 - Fö3 Sammanfattning 1 TDDB53 - Fö3 Sammanfattning 2 Variabel - en modell? Associationen från ett namn (identifierare) till ett värde av en viss given datatyp. Värdet kan ändras, men inte namn eller datatyp! Idé till hur det kan betraktas: Alfa namnet Samma variabel när den senare fått ett nytt värde: Alfa Variablers namn hittar jag själv på, enligt vissa regler. Variabler skall deklareras innan de kan användas! Begreppet deklaration värdets typ Float 1.25 aktuellt värde Float -0.003 Ungefär: att introducera ett nytt namn (egentligen identifierare), och samtidigt ge namnet en speciell innebörd (t ex att vara en variabel eller konstant). Deklaration - några exempel Variabler, konstanter: Alfa, Beta : Float; Anger att Alfa och Beta är namn på variabler av Float-typ. Men värdet på variablerna är än så länge odefinierat. Sum : Integer := 0; Anger att Sum är namnet på en heltalsvariabel, vars värde nu också sätts till 0. Men det kan givetvis ändras senare! Pi : constant Float := 3.141592; Anger att Pi är namnet på en konstant som får angivet värde, vilket aldrig kan ändras. Prompter : constant String := "? "; Anger att Prompter är namnet på en text-konstant (med huvud -datatypen String) med det oföränderliga värdet?. Andra exempel: type Color is (Blue, Green, Gray); Anger att Color blir namnet på en ny datatyp med de tre värdena som räknas upp, vilka härmed också deklareras att tillhöra datatypen Color. package IIO is new Integer_IO(Integer); Anger att IIO är namnet på ett speciellt slags paket. Därefter är det tillåtet att använda namnet. TDDB53 - Fö3 Sammanfattning 3 TDDB53 - Fö3 Sammanfattning 4

Deklarationer - exempel på skrivsätt Deklaration av fem variabler (lite osnyggt skrivet): Aritmetiska operatorer - sammanfattning Nedan anges typerna för operanderna! A, B, C : Integer; Mean, SqSum : Float; Operation: Typ på värde: Alternativt deklarationssätt: Ordningen kan vara en annan, kommentarer tillfogade, layout tillrättalagd: -- Variabler: Mean : Float; -- Medelvärdet. C, A, B : Integer; -- De tre talen. SqSum : Float; -- Summa av kvadraterna. Snyggaste sättet att skriva deklarationerna. En variabel per rad: -- Variabler: A : Integer; -- De tre talen, B : Integer; C : Integer; SqSum : Float; -- deras kvadratsumma, Mean : Float; -- och deras medelvärde. integer + integer integer integer - integer integer - integer integer {sk monärt -} integer * integer integer integer / integer integer integer mod integer integer abs integer integer { beloppet } float + float float float - float float - float float float * float float float / float float abs float float integer ** integer integer { a b } float ** integer float Detta sista gör det enklare att skriva en individuell kommentar till varje variabel, vilket ofta är en god idé. Prioriteter (beräkningsordning): högst (= först) abs ** mod * / monärt - lägst (= sist) binärt - binärt + TDDB53 - Fö3 Sammanfattning 5 TDDB53 - Fö3 Sammanfattning 6 Typkonvertering Funktioner - funktionsanrop De aritmetiska operationerna är alltså mycket strikta när det gäller operandernas datatyper. Ibland kan man behöva omvandla ett värde av en datatyp till ett värde av en annan datatyp. Integer till Float Om A, B och C är variabler av typen Integer och jag vill beräkna medelvärdet av dom som en Float duger inte uttrycket (A + B + C) / 3 eftersom kvoten då blir en (oprecis) Integer. Inte heller duger (A + B + C) / 3.0 eftersom den divisionsoperationen inte existerar överhuvudtaget! Jag måste omvandla summan till en Float innan jag gör en Float_division: Float(A + B + C) / 3.0 Alternativt skulle man förstås kunna ha gjort det som (Float(A) + Float(B) + Float(C)) / 3.0 men det är lite klumpigare. Alternativet 0.33 * Float(A + B + C) är inte heller så bra, på grund av att 0.33 är en ganska dålig approximation av en tredjedel! Float till Integer Integer(float-värde) skapar ett nytt Integer-värde som är en kopia av float-värde avrundat till närmaste Integer! En funktion är en slags transformation av ett/flera värden (parametrar, eller argument) till ett annat värde. Känt från t ex matten, där man ofta har mycket speciella skrivsätt för många såna: sin x x 10 log x x P(x, y) Ada har också funktioner, men alla beskrivs av ett namn, och argumenten skrivs alltid inom parentes. Värden kan också beskrivas med hjälp av funktioner - man säger att man använder funktionsanrop. Några exempel: Integer Max(i, k) Float Truncation(x) abs(k) abs(x) i och k betecknar här godtyckliga Integervärden, och x betecknar ett Float-värde Genom att använda det särskilda paketet Ada.Numerics.Elementary_Functions får man också tillgång till många andra matematiska funktioner, bl a Sin(x) och Cos(x) och andra trigonometriska Sqrt(x) för roten ur x Log(x) för naturliga logaritmen av x Log(x, b) för b-logaritmen av x Exp(x) för e x Funktionsanrop är alltså ytterligare en form av uttryck! Man kan införa egna funktioner! Mer senare i kursen. TDDB53 - Fö3 Sammanfattning 7 TDDB53 - Fö3 Sammanfattning 8

Jämförr (relationsoperationer) 6 operatorer: = /= < > <= >= Två värden kan jämföras bara om dessa har samma datatyp! Värdet av en jämför tillhör den inbyggda datatypen Boolean som innehåller exakt två värden, true och false OBS: true och false är inte namn på variabler, de är literaler (bokstavliga värden) pss som t ex 162 är ett literalt värde av typen Integer, eller -0.5 en literal av typen Float. Exempel: bland deklarationerna: x, y : Float; are_equal : Boolean; x_is_negative : Boolean; i den utförande delen: begin are_equal := x = y; x_is_negative := x < 0.0; Användning: Booleska (eller logiska) värden, t ex jämförr, används bl a för att styra if- och while-repetitioner. Logiska (Booleska) operationer Logiska värden kan sättas ihop till mer komplexa villkor med hjälp av logiska operationer (operatorer). I huvudsak finns 3 sådana i Ada: logiskt värde or logiskt värde logiskt värde and logiskt värde not logiskt värde Några exempel: bland deklarationerna: A, B, C : Integer; AllDifferent : Boolean; sen kan man göra t ex A=B or A=C or B=C true om minst två är lika A=0 and B=0 and C=0 true om alla är noll A < B and B < C Värdet är förstås också logiskt, true / false. true om stigande ordning AllDifferent := A/=B and A/=C and B/=C; AllDifferent sätts till true bara om alla är olika AllDifferent := not (A=B or A=C or B=C) dito! Jämför första uttrycket. TDDB53 - Fö3 Sammanfattning 9 TDDB53 - Fö3 Sammanfattning 10 Satser Ett uttryck är alltså något sätt att beskriva ett värde. En sats är å andra sidan snarast en order, en uppmaning till handling! (Ett imperativ, på vackert språk!) X := Alfa * 12.5; Sätt X till!!! Put(X, 0, 3, 0); Skriv ut!!! exit when X > 0.0; Avbryt (repetitionen) när!!! En sats kan beskriva vad som ska hända med värden: Sätt X till det värde som beskrivs av Alfa * 12.5 Skriv ut det värde som X står för En sats beteende kan också påverkas av, styras av värden: Olika typer av (1) tilldelningssatsen Den allmänna formen kan skrivas variabelnamn av nån typ T := värde av typ T ; proceduranrop Get(variabelnamn); Put(); i olika varianter New_Line; Get, Put, New_Line är namn på sk procedurer. Anropet av en procedur är en form av sats. Du ska få veta mer om vad en procedur är senare. Avbryt (repetitionen) när värdet av X > 0.0 är true, (fortsätt annars). Ett uttryck kan därmed vara del av en sats, men det är aldrig tvärtom! Ett uttryck kan aldrig finnas som en egen sats för sig själv. Däremot kan vara del av, styras av, andra. (loop-satsen, if-satsen) En sats har inte något värde! Varje sats skall avslutas med ; (semikolon). exit-satsen, som bara kan finnas mellan loop och end loop Det finns i själva verket två former av den satsen. Den ovillkorliga skrivs helt enkelt exit; Den villkorliga skrivs i den allmänna formen som exit when villkor ; Ett programs algoritmiska del (utförande del) är helt enkelt en sekvens av! Och uttryck ingår som beståndsdelar i (de flesta). där villkor är ett godtyckligt uttryck av Boolesk typ. TDDB53 - Fö3 Sammanfattning 11 TDDB53 - Fö3 Sammanfattning 12

Olika typer av (2) if-satsen - en styrsats Nedan betecknar villkor i ett uttryck vars värde är av typen Boolean, och i betecknar en följd av, vilka som helst, men minst en. Exempel utan -gren: Exempel med -gren: 1 1 2 1 1 elsif villkor 2 then elsif villkor 2 then 2 2 3 Olika typer av (3) if-satsen kan nu sammanfattas med en generell beskrivning på ett lite formellt sätt. Formella symboler: [ x ] x kan finnas en gång eller inte alls [ x ] x kan finnas noll gånger eller flera if villkor then [ elsif villkor then ] [ ] Ett annat generellt och grafiskt beskrivningssätt visas här. Det beskriver uppbyggnaden av en konstruktion genom att man följer pilar genom ett diagram: elsif Sammanfattningsvis: if villkor then elsif villkor then end if ;.. skall alltid finnas först.. kan sedan finnas 0 eller flera gånger.. kan därefter finnas 0 eller 1 gång.. skall alltid finnas sist if villkor then end if ; Här visas dels verkliga ada-ord och dels, i ramar, delar som betecknar andra delkonstruktioner. TDDB53 - Fö3 Sammanfattning 13 TDDB53 - Fö3 Sammanfattning 14 Olika typer av (4) Mera om datatyper repetitionssatsen - en styrsats Med samma grafiska beskrivningssätt kan den sammanfattas som while villkor for variabelnamn in range loop reverse Dvs: egentligen en enda konstruktion, men med olika alternativ. Vi kan ha en styrande beskrivning först, med for eller med while, eller utelämna den helt. I samtliga fall kan innehålla 0 eller flera förekomster av exit-satsen. villkor har samma betyd som tidigare. range är ungefär samma sak som intervall. Det kan skrivas på lite olika sätt - ett sätt är lägsta värde.. högsta värde. Det finns restriktioner på vilka värden range kan innehålla. Variabeln med namnet variabelnamn är en ny variabel som bara existerar inom loop-satsen, och som inte ska deklareras! Om reverse finns med innebär det att styrvariabeln stegas baklänges över range:en. För vissa datatyper gäller att det säkert går att säga vilket värde som följer närmast efter (eller före) ett givet värde. Eller: att det går att räkna upp alla värden från det minsta till det största (eller tvärtom). Integer: -oo, -1, 0, 1, 2, 3,.. oo Character:, a, b, c, A, B, C, Boolean: false, true Detta är omöjligt för Float! Vilket Float-värde är närmast större än 3.0? Vi säger nu att Integer, Character och Boolean är sk uppräkningstyper (eller: diskreta datatyper). range (intervallet) i en for-sats måste vara av uppräkningstyp! Man kan också tillverka egna uppräkningstyper! Man bestämmer då själv både namnet på den nya datatypen, vilka värden som typen ska innehålla och storleksrelationen mellan dessa. Värdena ska vara namn (identifierare)! I deklarationsdelen exempelvis type InstId is (IDA, IEI, IFM, MAI, IMT, ISY, ITN); TDDB53 - Fö3 Sammanfattning 15 TDDB53 - Fö3 Sammanfattning 16

Uppräkningstyper - attribut Ett attribut är en egenskap hos en datatyp, vars värde man kan läsa av med en särskild konstruktion: type InstId is (IDA, IEI, IFM, MAI, IMT, ISY, ITN); Inst : InstId := IEI; Attributen First och Last ger första resp sista värdet i datatypen: Integer First -2147483648 Integer Last 2147483647 Boolean First false InstId Last ITN Attributet Range ger intervallet över datatypens alla värden: Boolean Range false.. true InstId Range IDA.. ITN Attributen Pred och Succ ger föregångaren resp efterföljaren till ett angivet värde, inom typen: Integer Succ(23) 24 Boolean Pred(true) false InstId Succ(Inst) IFM InstId Pred(IDA) exekveringsfel! Attributet Image ger den text som representerar ett givet värde: Integer Image(125); " 125" Boolean Image(1 < 2); "TRUE" InstId Image(Inst) "IEI" Kort om subtyper Månad : Integer; -- Månadsnummer 1-12 är att skjuta över målet! Ett månadsnummer kan inte ha vilket Integer-värde som helst! Man kan lätt av misstag placera ett ogiltigt värde i variabeln Månad! Inför i stället en subtyp: subtype Månadsnummer is Integer range 1.. 12; Månad : Månadsnummer; Månad kan nu bara anta värden i 1.. 12. Om man försöker ge den andra värden blir det exekveringsfel! Däremot kan man göra operationer mellan Månad och vanliga Integers. Antag att nm är en Integer-variabel: -- Stega Månad nm månader framåt: *) if Månad + nm <= 12 then Månad := Månad + nm; Månad := (Månad - 1 + nm) mod 12 + 1; En bra regel: Försök alltid åstadkomma så naturtrogna datatyper som möjligt! *) Hela if-satsen skulle faktiskt kunna ersättas av Månad := (Månad - 1 + nm) mod 12 + 1; TDDB53 - Fö3 Sammanfattning 17 TDDB53 - Fö3 Sammanfattning 18 For-satsens range, igen Det finns tydligen flera sätt att skriva den. Några olika exempel: for index in 1.. 50 loop for i in -10.. slut_värde loop for value in min.. max * 2-1 loop for p in false.. true loop for p in Boolean Range loop for p in Boolean loop for mnr in Månadsnummer loop for col in Color loop for i_id in InstId First.. Inst Pred(InstId Last) loop Tänkbar typ av tentafrågor: Nedan är x en positiv Float. Beskriv med ord vilken funktion av x som uttrycket utgör. Eller: vilken karaktäristisk egenskap hos x som uttrycket beskriver. Det är inte detaljerna i beräkningen frågan gäller, utan en beskrivning av helheten, utifrån betraktat, och lite abstrakt. Integer(Float Truncation(10.0 * x)) mod 10 I koden nedan är v deklarerad som Integer. Vilka värden kommer v att ha, i tur och ordning, när avsnittet markerat med utförs? for s in reverse 1.. 5 loop v := s; while v <= 10 loop v := v + s; Antag att DT är namnet på någon uppräkningsdatatyp. Beskriv vilka värden v kommer att anta i for v in DT Succ(DT First).. DT Last loop TDDB53 - Fö3 Sammanfattning 19 TDDB53 - Fö3 Sammanfattning 20