OBS! All teori i detta och följande dokument kompletteras med genomgångar på lektionerna. Så det är viktigt att närvara och göra egna anteckningar.



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

C++ Funktioner 1. int summa( int a, int b) //funktionshuvud { return a+b; //funktionskropp } Värmdö Gymnasium Programmering B ++ Datainstitutionen

TDIU01 - Programmering i C++, grundkurs

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

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

C++ Slumptalsfunktioner + switch-satsen

Inledning. Vad är ett datorprogram, egentligen? Olika språk. Problemlösning och algoritmer. 1DV433 Strukturerad programmering med C Mats Loock

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

Operatorer Tilldelning Kodblock { } if satsen Logiska uttryck Att programmera

Programmering A. Johan Eliasson

TDIU01 - Programmering i C++, grundkurs

TDIU01 (725G67) - Programmering i C++, grundkurs

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

Skolverket Workshop i kursen TIATIL00S Tillämpad Programmering

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

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

Introduktion till algoritmer - L0 - Grunder i C++ Matematikgymnasiet, Läsåret L0 - Grunder i C++

Boken?!?! Vad är ett program? Kompilerande-Interpreterande Programmeringsmiljö Hello World! Att programmera och ett enkelt program Variabler printf

Objektorienterad Programmering (TDDC77)

Programmering, grundkurs, 8.0 hp, Elektro, KTH, hösten Programmering: att instruera en maskin att utföra en uppgift, kräver olika språk:

Linjär algebra med tillämpningar, lab 1

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

Introduktion till algoritmer - Lektion 1 Matematikgymnasiet, Läsåret Lektion 1

1 Språket C Valet av språket C++ för kompendiet. 1.2 Språket. 1.3 Att programmera. 1.4 Hello World Börja programmera

Programmering B med Visual C

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

Programmering för språkteknologer I, VT2012. Rum

C++ Lektion Tecken och teckenfält

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

NetBeans 7. Avsikt. Projektfönster

Övning2. Variabler. Data typer

Parameteröverföring. Exempel. Exempel. Metodkropp

Laboration 1. "kompilera"-ikonen "exekvera"-ikonen

OOP Objekt-orienterad programmering

Extramaterial till Matematik Y

Eclipse. Avsikt. Nu ska ett fönster liknande figuren till höger synas.

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

Enkla datatyper minne

Johan Karlsson Datavetenskap för teknisk kemi, 10p, moment 1 Datavetenskap Umeå Universitet. Tentamen

Klassdeklaration. Metoddeklaration. Parameteröverföring

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.

Uttryck och villkor. Föreläsning 2

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

Alla filer som bearbetar PHP script ska avslutas med ändelsen.php, exempelvis ska en indexsida till en hemsida heta index.php

Programmering, grundkurs, 8.0 hp HI1024, HI1900 etc., Tentamen TEN1. Måndagen den 10 januari 2011,

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

EDAA20 Programmering och databaser. Mål komprimerat se kursplanen för detaljer. Checklista. Föreläsning 1-2 Innehåll. Programmering.

Instuderingsfrågor till Steg 1

NetBeans 5.5. Avsikt. Projektfönster

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

Introduktion till programmering och Python Grundkurs i programmering med Python

Att komma igång. Föreläsning 1

Lektion 1 - Steg 1. Introduktion. Hello World

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

C++ - En introduktion

F4. programmeringsteknik och Matlab

Programmeringsteknik med C och Matlab

Uttryck och villkor. Föreläsning 2

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

LÖSNINGSFÖRSLAG TILL Tentamen i objektorienterad programmering i C++ I

EDAf30: Programmering i C++, 7.5 hp. EDAf30: Programmering i C++, 7.5 hp Administration. EDAf30: Programmering i C++, 7.5 hp Obligatoriska moment

Laboration 1. "kompilera"-ikonen "exekvera"-ikonen

(Man brukar säga att) Java är... Denna föreläsning. Kompilering av Java. Historik: Java. enkelt. baserat på C/C++ Allmänt om Java

Vem är vem på kursen. Objektorienterad programvaruutveckling GU (DIT011) Kursbok Cay Horstmann: Big Java 3rd edition.

PROGRAMMERING 2 GRUNDLÄGGANDE SEMANTIK 4

SMD 134 Objektorienterad programmering

Labb i Datorsystemteknik och programvaruteknik Programmering av kalkylator i Visual Basic

Föreläsning 1: Momstabellen i C++

Tentamen i. för D1 m fl, även distanskursen. lördag 28 maj 2011

Inledande programmering med C# (1DV402) 85/2=42. OBS! Heltal 1 (13)

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.

*Pekarvärden *Pekarvariabler & *

TDDD78, TDDE30, 729A Introduktion till Java -- för Pythonprogrammerare

I denna laboration undersöker vi hur aritmetiska beräkningar utförs. Vi tittar på olika variabeltyper: 8-bitars, 16-bitars, 32-bitars och flyttal.

Program & programmering

Att komma igång. Föreläsning 1

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

Uppgift 1 ( Betyg 3 uppgift )

Lektion Java Grunder. Javas historia. Programmeringsspråket Java. Skillnaderna mellan Java och C++ JVM (Javas Virtuella Maskin)

Objektorienterad programmering Föreläsning 2

TDDC77 Objektorienterad Programmering

Objektorienterad programmering Föreläsning 4

Statistik över heltal

Värmedistribution i plåt

Grundkurs i programmering - intro

Inledande programmering med C# (1DV402) Introduktion till C#

Innehåll. EDAf30: Programmering i C++, 7.5 hp. EDAf30: Programmering i C++, 7.5 hp Viktiga skillnader mot Java

EDAA20 Programmering och databaser. Mål komprimerat se kursplanen för detaljer. Om att lära sig programmera. Föreläsning 1-2 Innehåll.

Föreläsning 2. Operativsystem och programmering

Extramaterial till Matematik Y

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

TDDD78, TDDE30, 729A Introduktion till Java -- för Pythonprogrammerare

Objektorienterad programmering i Java

Repetition C-programmering

Laboration 1 Introduktion till Visual Basic 6.0

TDIU01 - Programmering i C++, grundkurs

2.1 Variabler. 2.2 Regler för namngivning i C. Programmering, grundkurs, 8.0 hp, Elektro, KTH, hösten Föreläsning 2

Föreläsning 1: Intro till kursen och programmering

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

Datorövning 1 Calc i OpenOffice 1

Transkript:

Värmdö Gymnasium Programmering A 110123 Lektion C1 Grunder Att programmera handlar mycket om att lära sig att analysera det problem eller den funktion man vill att programmet ska ha, och översätta det från talspråk till programkod. Många tar vägen över denna via s.k. pseudokod, ett mellanting mellan vanligt språk och programkod. I dagens första lektion ska du dels bekanta dig med de verktyg du ska använda för att skriva dina program, dels lära dig de första stegen i det programmeringsspråk som kallas C++. Men allra först programspråkens historia. OBS! All teori i detta och följande dokument kompletteras med genomgångar på lektionerna. Så det är viktigt att närvara och göra egna anteckningar. Programspråk (de större) FORTRAN 1954 1:A HÖGNIVÅSPRÅKET COBOL 1959 ekonomi ALGOL 1960 påverkat senare språk SIMULA 1967 möjligt att skriva objektorienterade program PASCAL 1971 undervisningsspråk, TURBOPascal C ca 1973 högnivåspråk på låg nivå Smalltalk 1980 objektorienterande, interpreteras Ada 1983 amerikanska försvaret, ISO-standard C++ 1985 utökning av C, Bjarne Stroustrup (AT&T) JAVA 1995 Sun Microsystem, plattformsoberoende, interpreteras, C++ förebild Börja programmera Nu ska du börja så smått med att programmera. Programmering innebär 1. att du först gör klart för dig vilket problem som ska lösas. Vad ska programmet göra? Vilka data ska matas ut från programmet? Vilka data måste matas in i programmet för att det ska fungera? 2. att du därefter tänker igenom hur programmet ska konstrueras (i stora drag) och gör en stegvis beskrivning, en s.k. algoritm, som datorn kan använda sig av för att ge rätt utdata från de indata du matar in. En sån beskrivning kallas ofta för pseudokod. 3. att du till sist skriver själva koden i programmeringsspråk, samt testkör och dokumenterar programmet. Dokumentationen bör dels innehålla en handledning för användaren, dels en konstruktionsbeskrivning som underlättar för den som ska underhålla programmet. Första programmet Vi kommer i denna kurs att ta hjälp av en färdig miljö där många saker är tillrättalagda. På samma sätt som när vi ska skriva vanlig textdokument så utnyttjar vi t ex Word-programmet. Här använder vi ett freewareprogram som heter Dev-C++ från Bloodshed. Till din hjälp för att komma in i miljön se häftet Snabbintro Dev-C++. Vårt första program: #include <iostream> //inkludera ett paket med saker för utskrift och inläsning #include <stdlib.h> // inkludera ett paket med bl a hantering av system("pause") using namespace std; // för att komma åt de nya standardpaketen utan.h-ändelser cout<<"hej svejs!"<<endl; //utskrift på skärmen system( PAUSE ); //så att fönstret ligger kvar till man tycker på en tangent Sida 1 (7)

Vägen till ett körbart program Editorn här skriver vi programtexten, dvs källkoden sparar som en *.cpp fil Kompilatorn kollar att syntaxen stämmer med givna regler och en *.obj fil skapas översätter koden till en objektfil, den vanliga texten (källkoden) översätts till maskinkod Länkaren sätter ihop flera objektfiler till ett körbart program, dvs en exekverbar fil den exekverbara filen startas och programmet körs en *.exe fil skapas Andra programmet Ex. Du vill skriva ett program som ska räkna ut kostnaden för en bokbeställning. Här vill vi mata in antal och pris. En expeditionsavgift på 50 kr ska också läggas till. Slutligen ska kostnaden skrivas ut. 1. Indata i detta fall: antal och pris, som vi förkortar a respektive p. Utdata är kostnaden, som vi förkortar k. Problemställningen framgår av texten ovan. 2. Algoritm (pseudokod): Mata in antal a och priset p Kostnaden k beräknas som a p+50 Skriv ut k 3. Nu börjar vi översätta pseudokoden till programkod. Variabeltyper Här kommer en lista på några typer av variabler som man kan deklarera, och vilka sorts tal de kan lagra: Typ Betyder Talområde Antal bytes long double flyttal, reellt tal (decimaltal) 16 double flyttal, reellt tal (decimaltal) ca. 2,2*10-308 1,8*10 308 15 siffrors noggrannhet 8 float flyttal, reellt tal (decimaltal) 4 long int heltal (positiva och negativa) 4 int heltal (positiva och negativa) Här: -2147483648 till 2147483647 2 eller 4 * här: 4 short int heltal (positiva och negativa) -32768 32767 2 signed char Tecken men lagras som heltal -128 127 1 * Antal bytes beror på implementationen i varje dator. För heltalen finns också varianter som bara hanterar positiva tal, dessa har unsigned framför sig som t.ex. unsigned char och unsigned int. Det är viktigt att du håller koll på att dina tal håller sig innanför variabeltypens gränser, eftersom kompilatorn i allmänhet inte gör det. Skulle dina beräkningar råka överskrida dessa, kan du få oväntade resultat.. (T ex när short int används.) Sida 2 (7)

Andra programmet, koden Pseudokoden i exemplet ovan blir följande programkod (kallas ofta för källkod). //Exempel 2 #include <iostream> //inkludera ett paket med saker för utskrift och inläsning #include <stdlib.h> // inkludera ett paket med bl a hantering av system("pause") using namespace std; // för att komma åt de nya standardpaketen utan.h-ändelser //huvudfunktionen, endast ett per program int a; //deklaration av en variabel för heltal double p, k; //deklaration av variabler för flyttal cout << Mata in antal böcker : ; //skriv på skärmen cin >> a; //läs in från skärmen cout << Mata in bokpriset : ; cin >> p; k=a*p+50; //gör en beräkning och lagra resultatet i variabeln k cout << Kostnaden blir << k << kronor << endl; system( PAUSE ); //skriv ut För att en programsnutt ska bli mera lättläst (framför allt för någon som inte skrivit programmet), kan man lägga in s.k. kommentarer i programmet, som inte kompilatorn bryr sig om när man kompilerar koden. För att få kompilatorn att strunta i resten av raden, skriver man // (dubbelt snedstreck). Allt som står efter detta kommer då att hoppas över. Om man istället vill lägga in en lång kommentar som sträcker sig över flera rader, kan man inleda med /* och avsluta med */. Allting mellan dessa två markeringar kommer då att ignoreras av kompilatorn. Prioritet När du skriver matematiska uttryck så har olika operatorer olika prioritet, dvs behandlas av datorn i en viss förutbestämd ordning. (Samma som i matematiken.) Prioritetsnivå Operator 1 (högst prioritet) ( ) 2 * / 3 + - 4 < > 5 (lägst) = tilldelning Operatorer på samma nivå har samma prioritet. För operatorer på samma nivå utförs de i ordningen vänster till höger, utom för tilldelningsoperatorn där de utförs från höger till vänster. Parenteser kan på vanligt sätt bryta ordningen. Ex 1 x=2,5 + 12,0 / 2,0 / (2,0 + 1,0) x= z=y=3+2 z= y= Sida 3 (7)

Omvandlingar Om vi blandar olika typer i uttryck sker omvandlingar enligt nedanstående regler. X op Y med op menas här en aritmetisk operator som t ex +-/* dvs X+Y, X-Y, X/Y, X*Y Om X och Y är av samma typ blir resultatet av den typen. Om X och Y är av olika typ omvandlas den lägre typen (den som står under i tabellen Variabeltyper) till den högre. Därefter sker beräkningen och resultatet blir av den högre typen. T ex 4,5 + 4 (decimaltal + heltal) ger efter hopslagning ett decimaltal eftersom double står ovanför int X = Y dvs vid tilldelning Om X och Y är av olika typ omvandlas Y till X s typ. (Konstigheter kan uppstå om man överskrider talområdet vid omvandlingen.) T ex : int x; double y; y=44,5; x=y; // Här får x värdet 44 eftersom ett decimaltal omvandlas till heltal genom att decimalerna suddas bort Ex.2 double x; x=8,0/3 + 8/3 x= /* Ledtråd: 8,0/3 8,0/3,0 2,666 8/3 2 (typen heltal, resultatet trunkerat, dvs decimalsiffrorna stryks) */ Ex3 double d=0, b=0; d=d+1/100; detta ger d= b=b+1,0/100; detta ger b= Svar till ovanstående exempel: Ex1 : x=4,5 z=5, y=5 Ex2 : x=4,666 Ex3 : d=0 b=0,01 Extra för den snabbe, hit kan du återkomma senare i kursen om du inte hinner med detta just nu Standardfunktioner i biblioteket math För att komma åt dessa inkluderas cmath (#include <math.h>). Alla funktioner returnerar ett flyttal ( t ex double). Både x och y ska vara av typen flyttal. pow(x,y) x y ( t ex z=pow(x,y); ) sqrt(x) roten ur x sin(x), cos(x), tan(x) x anges i radianer exp(x) e x (exponentialfunktionen) Sida 4 (7)

Övningar Övning C1.1 Du ska få börja med att skriva ett mycket enkelt program, som ska skriva ut ditt namn på skärmen. Skriv in programmet och gör nödvändiga ändringar. //Ett enkelt program som skriver ut ditt namn #include <iostream> #include <stdlib.h> using namespace std; cout << Kalle Kula ; system( PAUSE ); När du skrivit in programmet är det dags att köra det. Kör aldrig ett program som du skapat eller ändrat utan att först sparat dina ändringar (ibland råkar man tyvärr ut för att datorn kraschar, och då kan det vara lite tråkigt om man inte sparat på länge ). Spara programmet som namn.cpp. Programmet kompileras, (länkas) och körs om det inte finns några syntaxfel (språkfel). Övning C1.2 Skriv in följande enkla program och spara det med namnet prod1.cpp. Kör sedan programmet och kontrollera att du får en korrekt utskrift. Pröva sedan med några andra värden för tal1 och tal2. Får du alltid en korrekt produkt? //Ett enkelt program med heltalsvariabler #include <iostream> #include <stdlib.h> using namespace std; int tal1, tal2, produkt; tal1=5; tal2=11; produkt=tal1*tal2; cout << Produkten är <<produkt; system( PAUSE ; Övning C1.3 Ändra i föregående program så att du får lite mera utskrift. Spara sedan programmet som prod2.cpp. Du ska få följande utskrift när du kör programmet (om du har samma tal som i övningen ovan). RESULTAT ============ Produkten är 55 Övning C1.4 Du ska nu förbättra programmet ytterligare. Den stora nackdelen med programmet är att man som användare inte kan påverka vilka tal som multipliceras med varandra. Ändra programmet så att man själv får mata in tal1 och tal2, och spara sedan programmet som prod3.cpp. En körning av programmet ska se ut enligt följande: Ange första talet: (Här ska man få skriva in ett tal, t.ex. 24, och trycka RETUR) Ange andra talet: (Samma sak här, t.ex. 17 och sedan ska resultatet skrivas ut:) RESULTAT ============ Produkten av 24 och 17 är 408 Sida 5 (7)

Övning C1.5 Du ska nu ändra ännu mer i programmet, så att man förutom produkten av talen får ut även summan, differensen och kvoten av dessa. Spara programmet som uppg5.cpp. Om du t.ex. matar in 30 och 10 ska du få följande utskrift: RESULTAT ============ Produkten : 30 * 10 = 300 Summan : 30 + 10 = 40 Differensen : 30 10 = 20 Kvoten : 30 / 10 = 3 Testa programmet och kontrollera om det verkligen fungerar för alla tal. Om inte (det gör det inte), försök fundera ut varför. Övning C1.6 Läs in tre decimaltal a, b och c och beräkna och skriv ut deras medelvärde (a+b+c)/3. Övning C1.7 Läs in ett belopp och aktuell momssats i procent. Skriv ut momsbeloppet. Övning C1.8 Deklarera två variabler A och B och tilldela dessa värden. Skriv sedan de satser som gör att A och B byter värde med varandra. Ledtråd: Det måste till någonting extra. NU KOMMER 3 SVÅRA UPPGIFTER Övning C1.9 Den här uppgiften behöver du inte skriva något program till, bara med hjälp av tidigare teori i detta häfte ta reda på svaren. Ange resultat och typ för vart och ett av de aritmetiska uttrycken nedan. Tal skrivna utan decimaler är heltal. Operatorn % heter modulo och betyder resten vid heltalsdivision. T ex 7%3 blir 1 (3 tas bort 2 gånger, då återstår 1). a) 17/5 b) 17%5 c) 39/3 d) 15/0 e) 3/2*2 f) 18.0/5 g) 15.0/5 h) 18.0/5 i) sqrt(25) Övning C1.10 Skriv ett program som läser in ett datum som ett åttasiffrigt tal, t.ex. 20000107, och skriver ut datumet på följande sätt: 7/1-2000. Övning C1.11 Skriv programkod för att beräkna följande uttryck i C++. Deklarera variabler som flyttal. Läs in lämpliga värden och beräkna resultatet. (Kolla att programmet räknar rätt!!) 2 4x a) v = 2 y + 3 b) s = 1+ sin x x+3 c) t = e Sida 6 (7)

Minitest G-nivå: 1. Nämn 3 högnivåspråk. 2. Vilka är de tre stegen till ett körbart program? Vilka filer skapas? 3. Vad är pseudokod? Ge ett exempel. 4. Vilken variabeltyp är vanligast för heltal? 5. Vilken variabeltyp är vanligast för decimaltal? 6. Vad blir x i följande programkod: x=2,5 + 12,0 / 2,0 / (2,0 + 1,0)' 7. Vad blir x i följande programkod: x=8,0/3 + 8/3 8. Skriv ett program som läser in tre decimaltal a, b och c och beräkna och skriver ut medelvärdet (a+b+c)/3. VG-nivå: 1. Vilket var det första högnivåspråket. 2. Vilka två högnivåspråk är vanligast(används mest) idag? 3. Vad är kompilatorns respektive länkarens uppgift? 4. Ange resultat och typ för vart och ett av de aritmetiska uttrycken nedan. Tal skrivna utan decimaler är heltal. a) 17/5 b) 17%5 c) 18.0/5 5. Skriv ett program som läser in ett datum som ett åttasiffrigt tal, t.ex. 20000107, och skriver ut datumet på följande sätt: 7/1-2000. 6. Skriv programkod för följande uttryck i C++. Deklarera variablerna x, y, ARC som flyttal. 3 2 4x ARC = 2 y + 3 Läxa Läs detta häfte och gör minitestet.. Lös övningarna genom att skriva kod på papper eller programmera på datorn. Sida 7 (7)