Lektion 1 - Steg 1. Introduktion. Hello World

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

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

TDIU01 - Programmering i C++, grundkurs

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

Det finns många flaggor till g++,

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.

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

Så här skriver du ditt första program i C++

TDDC76 - Programmering och Datastrukturer

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

Enkla datatyper minne

Instuderingsfrågor till Steg 1

Innehåll. Introduktion till objektorientering. OOP (objektorienterad programmering) Objekt, instanser, klasser

Programmeringsteknik med C och Matlab

Föreläsning 3. Programmering, C och programmeringsmiljö

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

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

Introduktion till programmering och Python Grundkurs i programmering med Python

Objektorienterad Programmering (TDDC77)

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

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

TDIU01 - Programmering i C++, grundkurs

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

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

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

1 Funktioner och procedurell abstraktion

Programmering i C++ Kompilering från kommandoraden

Föreläsning 2. Operativsystem och programmering

TDIU01 - Programmering i C++, grundkurs

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

Föreläsning 3. Programmering, C och programmeringsmiljö

Föreläsning 5: Introduktion av pekare

TDIU01 - Programmering i C++, grundkurs

Innehålls förteckning

Objektorienterad programmering Föreläsning 2

Instruktioner för att kunna programmera på skolans datorer

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

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

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

NetBeans 5.5. Avsikt. Projektfönster

C++ - En introduktion

TDDC76 - Programmering och Datastrukturer

Inledande programmering med C# (1DV402) Ditt första C#-program med Visual Studio

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

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

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

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

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

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

Användarhandledning Version 1.2

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

Grundkurs i programmering - intro

Programmering A med Visual C

Värmedistribution i plåt

Programsystemkonstruktion med C++: Övning 1. Karl Palmskog september 2010

Introduktion C-programmering

*Pekarvärden *Pekarvariabler & *

2 INNEHÅLLSFÖRTECKNING

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

Python. Python är, som Scheme, ett interpreterat språk men det finns kompilatorer för Python.

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

Labb i Datorsystemteknik och programvaruteknik Programmering av kalkylator i Visual Basic

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

Python. Python är, som Scheme, ett interpreterat språk men det finns kompilatorer för Python.

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

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

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

NetBeans 7. Avsikt. Projektfönster

PROGRAMMERING 2 GRUNDLÄGGANDE SEMANTIK 4

TDP004. Minne och pekare. Eric Elfving Institutionen för datavetenskap

Editering, Kompilering och Exekvering av Javaprogram

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

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

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

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

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

TDIU01 - Programmering i C++, grundkurs

MATLAB. Python. Det finns flera andra program som liknar MATLAB. Sage, Octave, Maple och...

LEU240 Mikrodatorsystem

Föreläsning 10 Datalogi 1 DA2001. Utskrift på skärmen. Syntax. print( Hej ) Hur är det? Hej. print( Hej,end= ) print( Hur är det? ) HejHur är det?

Funktionens deklaration

Laboration 1 Introduktion till Visual Basic 6.0

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

C++ Slumptalsfunktioner + switch-satsen

Repetition C-programmering

Planering Programmering grundkurs HI1024 HT data

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

Objektorienterad programmering i Java

Objektorienterad programmering i Java I. Uppgifter: 2 Beräknad tid: 5-8 timmar (OBS! Endast ett labbtillfälle) Att läsa: kapitel 5 6

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.

Minnestilldelning (allokering) och frigörande (avallokering) av minne

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

OOP Objekt-orienterad programmering

TDP005 Projekt: Objektorienterat system

729G74 IT och programmering, grundkurs. Tema 1, Föreläsning 2 Jody Foo,

C++ Lektion Tecken och teckenfält

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

SMD 134 Objektorienterad programmering

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

Programmering A. Johan Eliasson

Transkript:

Introduktion Kursen är utvecklad som ett projekt med syfte att stödja ett flexibelt lärande. Idéerna bakom den successiva examinationen är att synliggöra de enskilda inlärningsstegen i kursen. Tanken är att du ska få större möjlighet att kontrollera dina framsteg och därmed också planera dina självständiga studier så bra som möjligt. Vi hoppas att en större valfrihet bland de praktiska tillämpningarna ska upplevas stimulerande, samtidigt som varierat material och olika svårighetsnivåer tillgodoser flera målgrupper. Det ska kännas lagom utmanande för både dig som är nybörjare och för dig som redan tidigare programmerat. En översiktlig beskrivning av kursupplägget och de olika kursstegen hittar du på kurswebbens Om kursen. Den kurswebbsida du ska utgå från just nu är Steg1, där du i högerkolumnen hittar "Förslag till arbetsgång", vilken du bör följa. Under denna finns stegets aktuella studie- och arbetsmaterial, bl.a. praktiska tillämpningar samt ytterligare kompletterande material på förenklande eller fördjupande nivå. Var uppmärksam på att instuderingsfrågorna är till för att hjälpa dig läsa boken och kontrollera att du förstått innehållet. De innehåller också en del kompletterande teori. I Steg 1 är detta kanske framför allt kunskapen om att en variabel både är en synonym för en adress i datorns minne (l-value) och det data man kan lagra där (r-value). Till höger på kurswebbens Steg 1 hittar du Mappstruktur för programmeringsuppgifter (1DV433(cpp) som du bör använda för de praktiska tillämpningarna. Packa inför första programmeringsuppgiften upp denna på P: om du använder skolans datorer eller på t ex C: om du använder egen dator. Där finns en färdig samling av mappar för dina laborationsuppgifter samt programkod för 0-poängarna och de obligatoriska uppgifterna. Eftersom kursen läses av både svensk- och engelskspråkiga studenter, kan tillgängliga dokument i viss mån skilja sig mellan de båda versionerna av kurswebbplats. För dig som läser den svenska kursen finns exempelvis visst inspelat lektionsmaterial ( föreläsningar, eller programmerings-demonstrationer som härrör från tidigare kursomgångar). Dessa är inte tillgängliga på engelska. Å andra sidan har vi i stor omfattning valt att använda engelska för språket i den kod som du kan stöta på i materialet, eftersom det underlättar en enhetlig tolkning kring ev. gemensamma arbetsuppgifter. Kursens teoretiska examination de stegtest som sker i slutet av varje steg, sker på engelska. För de programmeringstekniska koncept som kursen behandlar, finns svenska översättningsförsök av varierande art, men svenska begrepp är inte alltid entydiga eller vedertagna. För att undvika feltolkningar och underlätta användning av din engelskspråkiga litteratur, så är därför stegtestens frågor på engelska, vilket många kursdeltagare har efterlyst. Testbanken (såväl som QuizMaster-programmet) är skapad av förlaget Pearson Education. Var noga med att, i god tid före det första stegtestet, läsa den (viktiga) information som finns under menyrubriken Examination på kurswebbplatsen! Hello World Vi ska skapa ett program som skriver ut Hello World på skärmen. Detta är en tradition, att visa hur ett "Hello World"-program ser ut i ett nytt språk. Källkoden skriver vi in i en editor t ex Notepad eller EDIT. Den fullständiga koden ser ut så här: /* --------------------------------------------------------------------------------- File: Hello.cpp Purpose: Prints Hello World on the screen Ver : 2005-10-31 Author: Tommy Löfqvist ------------------------------------------------------------------------------------- */ #include <iostream> // For the use of cout using namespace std; // We use the namespace std // Returns 0 to the calling Operating System, ie Windows /* --------------------------------------------------------------------------------- File: Hello.cpp Purpose: Prints Hello World on the screen

Ver : 1 Author: Tommy Löfqvist ------------------------------------------------------------------------------------- */ #include <iostream> // For the use of cout using namespace std; // We use the namespace std // Returns 0 to the calling Operating System, ie Windows

Kommentarer till programkoden. För att vi ska veta vad programmet gör skriver vi en kommentar i början. All text mellan /* och */ ignoreras av kompilatorn (översättaren) och är bara till för programmeraren som läser koden. Längre ner i koden finns exempel på enradskommentarer, //, som endast gäller raden ut. Använd helst enradskommentarer i koden så kan man kommentera bort större (felaktiga?) avsnitt med /* och */ Utskriftsfunktioner t ex cout ingår inte i själva språket utan är en biblioteksrutin. För att kompilatorn ska veta hur den ska tolka funktionen cout inkluderas information om hur cout är definierad. <iostream> är en s.k. headerfil för in/out funktioner. Där finns nödvändig information om hur cout ska tolkas. Observera att de nya biblioteken till C++ använder namn utan ändelsen.h, t ex <iostream.h> som var vanligt tidigare. using namespace std talar om att cin hör till C++ standard namnrymd (namespace), där finns alla funktioner som hör till C++ standard bibliotek. Det är en slags klassning av funktioner som hör ihop. Detta används för att undvika namnkollisioner. Det är möjligt att du eller någon annan vill skapa en funktion som heter cout, den måste i så fall läggas i en annan namnrymd, annars vet inte kompilatorn vilken funktion som ska användas. Ett annat sätt är att i stället skriva std::cout << "Hello World" ; Om du vill använda någon annan version av cout skriver man mynamespace::cout << "Hello Word"; All exekverbar kod i C++ måste skrivas i en funktion. (Nästan) alla C++ program ska ha en funktion som heter main(). Programkörningen startar alltid i main() från första raden och nedåt. Programmet avslutas med som returnerar värdet 0 till anroparen, dvs. operativsystemet eller något annat program. Om det uppstår ett fel ska man se till att returnera en felkod, dvs. ett tal som är större än 0. (Vi returnerar vanligen 0 i våra övningsprogram) Koden mellan klamrarna och dras ALLTID in ett tab-steg. Detta kallas indentering och används för att göra koden mer läsbar. Detta kommer du att förstå senare när koden blir mer komplicerad. Kompilering och länkning Källkoden beskriven ovan kan inte köras av processorn utan måste först översättas (kompileras) till maskinkod. Vi kommer att kompilera, länka och köra vårt första program från kommandotolken som följer med utvecklingsmiljön Visual Studio. I katalogstrukturen som nämns ovan, kan du hitta en beskrivning över hur du (bl.a.) öppnar denna, i en textfil med namnet ReadMe. (Titta efter den i mappen Step1->3_CompileError eller Step1->4_LogicalError.) Vi skriver cl -c -EHsc hello.cpp för att kompilera koden. (Kompilera = översätta till maskinkod) Vi får då en objektfil, hello.obj, som innehåller en något ofullständig maskinkod. Eftersom programmet anropar biblioteksrutiner vet inte kompilatorn exakt var dessa finns i minnet utan det finns bara referenser till dessa. Det blir sedan länkarens uppgift att lägga in rätt adress till dessa biblioteksrutiner i koden och bilda en körbar.exe fil som enbart består av maskinkod som kan köras av processorn. Vi länkar med kommandot: link hello.obj Lite experiment Det känns lite torftigt att skriva ett program som bara skriver ut ett enda Hello World på skärmen, därför testar vi for-satsen som har möjlighet att upprepa utskriftraden hur många gånger vi vill. Vi gör följande ändringar i main: for (int i = 0; i < 10; ++i) Och får 10 st Hello World under varandra i=0; false i<10 true cout << "Hello World" ++i;

for-satsen fungerar så här: i är en variabel, ett reserverat minnesutrymme i datorn där man kan spara ett heltal, (int = integer = heltal) som från början initieras till 0. Därefter kontrolleras om villkoret i < 10 är sant (vilket det är från början), då utförs alla satser som finns i blocket, dvs. mellan och. Sedan utförs uppdateringsuttrycket ++i vilket ökar i med 1. Nu testas åter uttrycket i < 10, om detta är sant utförs åter satserna i blocket avslutat med ++i. Till slut blir i lika med 10 och repetitionen avslutas. I samband med variabeln tittade vi på hur variabeln lagras i minnet. Det finns beskrivet i instuderingsuppgifterna. Intressanta effekter 1) Skriv ut värdet på i så får vi numrerade Hello World-rader for (int i = 0; i < 1000; ++i) cout << i << " Hello World\n"; 2) Tag bort nyradtecknet så får vi hela skärmen full med Hello World for (int i = 0; i < 1000; ++i) cout << "Hello World "; Programutveckling består av ett antal steg 1. Analys - Vad ska vi göra 2. Design - Hur ska vi göra det 3. Implementation - Koda 4. Test 5. Leverans Vi ska göra ett program som beräknar hyrkostnaden för en bil (precis som den animerade filmen om problemlösarna som du hittar i högerkolumnen på hemsidan) ========== 1) Analys Grundfakta: Fast avgift: 100kr/dag Rörlig avgift 25kr/mil (heltal) (flyttal) Vi behöver veta antal dagar och mil för att beräkna kostnad. Kostnaden = 100*dagar + 25*mil (flyttal) Ange antal dagar : 3 Ange antal mil : 40 ===================== Kostnad : 1300 k Skiss av skärmbilden underlättar förståelse av vad som ska ske! Start 2) Design Skapa algoritm! Här visas några alternativa sätt! a) Flödesschema - - - - - -> b) Pseudokod Skriv rubrik Läs dagar (int) Läs mil (double) Beräkna kostnad (double) enl. formel Rita streck Skriv kostnad Skriv rubrik Läs dagar Läs mil kostnad = dagar*100 + mil*25 Rita streck Skriv kostnad Stopp

c) Strukturdiagram Strukturdiagram ritas med datastruktur (hur data är organiserat) som grund Skriv upp alla operationer som behöver göras i valfri ordning 1. Rubrik 2. Läs dagar (int) 3. Läs mil (double) Indata Beräkning 4. Rita streck 5. Skriv kostnad 6. Beräkna kostnad Utskrift Tid Placera in operationerna logiskt i strukturdiagrammet. Var ska rubriken skrivas - I början av Indata Var ska dagar och mil läsas - Efter rubriken Var ska strecket ritas - I början av utskrift Var ska kostnaden skrivas - I slutet av utskrift Var ska kostnaden beräknas -I beräkning Indata Beräkning Utskrift 1 2 3 6 4 5 3. Implementation - Första versionen #include <iostream> using namespace std; // Definition av (lokala) variabler int dagar; double mil; double kostnad; // Indata cout << "Bilkostnad\n"; cout << "==========\n\n"; cout << "Ange antal dagar : "; cin >> dagar; cout << "Ange antal mil : "; cin >> mil; Programmet skapades i Visual Studios utvecklingsmiljö och placerades i egen mapp under STEG1. Det finns en grundlig Introduktion till Visual Studio 2013 i högerkolumnen till STEG 1 som visar hur det går till att skapa det första projektet med sin källkodsfil. // Beräkning kostnad = dagar*100 + mil*25; // Utskrift cout << "==========================\n"; cout << "Kostnad : " << kostnad << " kr" << endl;