Introduktionslaboration

Relevanta dokument
Introduktionslaboration

TDIU01 - Programmering i C++, grundkurs

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

TDIU01 - Programmering i C++, grundkurs

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

C++ - En introduktion

TDIU01 - Programmering i C++, grundkurs

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

TDIU01 - Programmering i C++, grundkurs

C++ Lektion Tecken och teckenfält

Programmeringsteknik med C och Matlab

TDDC76 - Programmering och Datastrukturer

Nedan skapar vi klassen Person innehållande datamedlemmar för förnamn, efternamn, ålder, längd och vikt:

C++ - En introduktion

1 Texthantering. 1.1 Typen char. Exempel, skriv ut alfabetet

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

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

TDIU01 - Programmering i C++, grundkurs

Programmering i C++ EDA623 Strömmar och filer. EDA623 (Föreläsning 9) HT / 19

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

Övning från förra gången: readword

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

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

TDDC76 - Programmering och Datastrukturer

Typkonvertering. Java versus C

TDIU01 - Programmering i C++, grundkurs

*Pekarvärden *Pekarvariabler & *

TDDC77 Objektorienterad Programmering

C++ Slumptalsfunktioner + switch-satsen

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

1 Funktioner och procedurell abstraktion

Föreläsning 3-4 Innehåll

TDIU01 Programmering i C++

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

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

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

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

SMD 134 Objektorienterad programmering

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

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

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

Funktionens deklaration

Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList.

Att använda pekare i. C-kod

Övningsuppgifter. TDIU04 Programmering i C++, standardbibliotek. Innehåll. Vt Lektion Lektion Lektion Lektion 4...

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

Innehåll. Pekare Syntax

Objektorienterad Programmering (TDDC77)

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

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

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

C-programmering, föreläsning 1 Jesper Wilhelmsson

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

Programmering i C++ EDAF hp. EDAF30 (Föreläsning 2) HT / 18

TDIU01 - Datortenta (DAT2)

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

Övningar Dag 2 En första klass

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

Backcode. Jonathan Crusoe TDP019 Projekt: Datorspråk Linköpings universitet

Att deklarera och att använda variabler. Föreläsning 10. Synlighetsregler (2) Synlighetsregler (1)

Översikt MERA JAVA OCH ECLIPSE. Uttryck och tilldelning. Uttryck och tilldelning. Uttryck och tilldelning. Uttryck och tilldelning

Bankkonto - övning. Övning 2 Skriv en metod, geträntan, som returnerar räntan.

Frekvenstabell över tärningskast med C#

TDDI14 Objektorienterad programmering

Anteckningar 1: Grundläggande saker

TDDC76 - Programmering och Datastrukturer

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

C-programmering, föreläsning 2 Jesper Wilhelmsson

Innehållsförteckning. 9 Större projekt Övningsuppgifter...32

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

TUTORIAL: KLASSER & OBJEKT

Planering Programmering grundkurs HI1024 HT 2014

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

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

Java, klasser, objekt (Skansholm: Kapitel 2)

Det finns många flaggor till g++,

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

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

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

(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

Övningsuppgifter kapitel 8

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

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.

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

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

Uttryck, satser och strömhantering

Datorövningar. Grunderna i C/C++

Skizz till en enkel databas

Objektorienterad programmering

Föreläsning 5-6 Innehåll. Exempel på program med objekt. Exempel: kvadratobjekt. Objekt. Skapa och använda objekt Skriva egna klasser

Tentamen i. för D1 m fl, även distanskursen. fredag 13 januari 2012

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

2D1339 Programkonstruktion för F1, ht 2004

F4. programmeringsteknik och Matlab

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

Föreläsning 5-6 Innehåll

Programmering B med Visual C

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

FÖRSLAG TILL LÖSNING AV Tentamen i Objektorienterad programmering C++ I

Kompilera och exekvera Javakod

Transkript:

LINKÖPINGS TEKNISKA HÖGSKOLA Institutionen för datavetenskap Avdelningen för programvara och system (SaS) Tommy Olsson 2006-08-31 TDIU06 Programmering g.k Introduktionslaboration Ht1, 2006 Detta häfte innehåller en introduktionslaboration som ska göras i samband med att programmeringen startar ett par veckor in i läsperiod Ht1. Laborationerna som ingår i examinationsmomenten LAB1och LAB2 finns separat. Se även de allmäna anvisningarna och laborationsmaterial på webben: http://www.ida.liu.se/~tdiu06/lab/. Introduktionslaborationens syfte Denna laboration är en av de allra första aktiviteterna i kursens programmeringsdel och den syftar till att introducera programspråket C++, programmeringsmiljön (GNU GCC) och ta upp en grundläggande begrepp och termer.de fem övningarna omfattar bl.a. följande: Hur du skriver enkla program i C++. Hur du översätter (kompilerar) källkod till objektkod och körbar kod med kompilatorn g++. Hur du kör (exekverar) program. Hur du använder standardbiblioteket för C++, bl.a.strömbiblioteket för in- och utmatning. Exempel på uttryck och operatorer. Exempel på satser (if, for). Exempel på funktioner och funktionsparametrar. Exempel på in- och utmatning med strömbiblioteket. Begrepp och termer! Hur du kan hitta information på systemet (man-sidor). Det förväntas inte att du i nuläget förstår allt i denna övning. Om du inte hinner alla uppgifter under laborationstiden, ska du ändå börja med de ordinarie laborationsuppgifterna nästa gång det är schemalagd laboration. Du kan nog hitta en och annan sak i dessa exempel som kan vara av intresse för de ordinarie laborationerna Det är ingen redovisning av denna laboration.

2 Laborationshandledning TDIU06 1. Ett enkelt program Starta Emacs, skriv följande program och spara det på en fil med namnet program1.cc. /* * Programmet skriver ett meddelande på standard utmatningsfil. */ cout << "C++ is so cool!" << endl; Kompilera källkodsfilen med skalkommandot: g++ program1.cc Kör programmet med skalkommandot: a.out Vad kan man lära sig av detta, förutom hur man kompilerar och kör ett C++-program? Ett program består alltid av en eller flera funktioner. I detta fall en enda funktion som heter main. Ett program ska alltid ha en funktion som heter main. Det är alltid i main som exekveringen (körningen) av ett program startar. Du kan se det som om exekveringssystemet anropar main. main ska alltid returnera (return) ett heltalsvärde (int); värdet 0 betyder att allt gått väl. Inkluderingen (#include) av iostream ger tillgång till den del av standardbiblioteket som kallas strömbiblioteket. Detta används för att läsa och skriva s.k. strömmar. Standardströmmen för utskrift heter cout. När man skriver text i cout med operatorn << (utskriftsoperatorn), skrivs texten ut i det terminalfönster där programmet körs. endl tillhör också strömbiblioteket och är en s.k. manipulator. Den har den manipulativa effekten att sätta in ett nyradstecken i strömmen, dvs ger ny rad i utskriften i terminalfönstret. /* */ är en form av kommentar, där /* inleder kommentaren och */ avslutar; all text däremellan utgör kommentar, vilket endast är till för den mänskliga läsaren av programkoden. Alla namn i standardbiblioteket är kapslade i en namnrymd som heter std. En namnrymd är en slags modul som innesluter de deklarationer som ingår i namnrymden så att de inte är direkt synliga. Ett sätt att göra namnen i en namnrymd synliga i ett program är att öppna namnrymden med using namespace. Städa filkatalogen och kompilera om programmet med kommandona: clean g++ -o program1 program1.cc Det körbara programmet erhålls nu på en fil med namnet program1. Kör programmet! Vad tar kommandot clean bort för filer? Ändra i programmet så det skrivs ut en tom rad både före och efter meddelandet som skrivs ut.

TDIU06 Laborationshandledning 3 2. Variabler och deklarationer Kopiera filen program1.cc till en ny fil med namnet program2.cc. Ändra koden enligt följande: // Skriver ett meddelande på standard utmatningsfil. #include <string> string message = "C++ is so cool!"; cout << endl << message << endl << endl; Kompilera programmet så att det körbara programmet får namnet message och provkör sedan. Vad kan man få ut av detta program? Vi ser ett exempel på den andra formen av kommentar som finns, en s.k. radslutskommentar. En sådan inleds med // och avslutas då raden tar slut. Inkluderingen av string behövs för datatypen string, som användas i programmet. Ävenstring tillhör standardbiblioteket och blir synlig genom using namespace std. string är en datatyp för variabler (och konstanter) som ska innehålla textsträngar, dvs en följd av tecken av typen char. "C++ is so cool!" är ett uttryckligt strängvärde. Ett sådant uttryckligt (bokstavligt) strängvärde kallas för en stränglitteral. Alla variabler i ett program måste deklareras. Variabeln message deklareras i detta fall som en lokal variabel i funktionen main, vilket betyder att den har sin räckvidd inom main och inte är synlig eller åtkomlig utanför main. message initieras (ges ett värde) direkt i samband med deklarationen, vilket är något man om möjligt alltid bör göra med variabler. Ett, i detta fall, sämre alternativet vore att först deklarera variabeln och sedan tilldela den ett värde i en efterföljande tilldelning: string message; message = "C++ is so cool!"; Variabler kan initieras automatiskt. Det finns regler för i vilka sammanhang variabler initieras automatiskt och i så fall med vilket värde de initieras (i princip ett nollvärde för datatypen ifråga). En datatyp som string är en avancerad typ och dess variabler initieras alltid automatiskt till tomma strängen, dvs en sträng som inte innehåller något tecken och alltså motsvarar stränglitteralen. Ändra i programmet så att utskriften blir: Message of the day: C++ is so cool!

4 Laborationshandledning TDIU06 3. Inmatning via tangentbordet Städa i filkatalogen. Kopiera sedan föregående program till en fil med namnet program3.cc och ändra enligt följande: #include <string> const string message = "C++ is so cool!"; string first_name; cout << "Skriv ditt förnamn: "; cin >> first_name; cout << first_name << " says: " << message << endl; Kompilera och provkör programmet. Prova olika sätt att mata in ditt förnamn, t.ex. genom att skriva mellanrumstecken och även slå RETURN-tangenten innan du skriver ditt namn. Vad är nytt i detta program? Vi har gjort message till en konstant sträng genom att deklarera const före datatypen string. En konstant måste alltid initieras i sin deklaration och kan sedan inte ändras. message är ett namngivet konstant värde, en symbolisk konstant, till skillnad från "C++ is so cool!" som är en litteral konstant. Konstanten message har flyttats ut ur funktionen main och deklarerats på filnivå. Genom detta är dess räckvidd potentiellt hela programmet, en global variabel. Det betyder att om det skulle finnas fler funktioner i programmet kan message kommas åt från samtliga funktioner, även sådana som finns i andra filer som tillhör programmet. Vi har deklarerat en variabel first_name, för att lagra ett förnamn. cin är standardströmmen för inmatning och den är kopplad till tangentbordet. För att läsa data från cin använder vi inläsningsoperatorn >> och får det inlästa värdet i variabeln first_name. Operatorerna << och >> gör s.k. formaterad utskrift respektive formaterad inläsning. Det innebär i detta fall, då vi läser strängvärden: 1) först läses eventuella inledande vita tecken (mellanrum, tabulertecken, radslut) som skrivits i inströmmen förbi, 2) sedan läses tecken för tecken och lagras i variabeln, till dess det kommer ett vitt tecken eller det kommer ett filslut i inströmmen. Vi har delat upp koden i main i fyra avsnitt med hjälp av tomma rader: variabeldeklaration, inläsning av förnamnet, utskrift av meddelandet, samt avslutning. Detta ökar läsbarheten, genom att vi enkelt kan urskilja de fyra delmomenten. Ändra i programmet så att du kan mata in både ditt för- och efternamn, i var sin variabel. Låt programmet skriva ut dessa snyggt i meddelandet. Prova olika sätt att skriva in ditt för- och efternamn, t.ex. på samma rad med ett eller flera mellanrum före, emellan och efter namnen, skriva namnen på olika rader, etc.

TDIU06 Laborationshandledning 5 4. Funktioner och funktionsparametrar Skriv följande program på en fil med namnet program4.cc:, kompilera och provkör. #include <iomanip> void print_squares(int n) cout << endl << setw(6) << "i" << setw(12) << "i * i" << endl << endl; for (int i = 1; i <= n; ++i) cout << setw(6) << i << setw(12) << i * i << endl; int x; cout << "Ge ett positivt heltal: " << endl; cin >> x; if (x < 1) cout << "Det var inget positivt heltal!" << endl; else print_squares(x); Vad är nytt? Programmet ovan består av två funktioner, main och print_squares som anropas i main. Returtypen void innebär att funktionen print_squares inte returnerar något värde. Parametern n till print_squares är av typ int, enheltalstyp som tillhör de enkla datatyperna i C++. Strömmanipulatorn setw(fältvidd) bestämmer fältvidden för den efterföljande utskriften. Värdet skrivs normalt ut högerjusterat i fältet. Vi måste inkludera iomanip då vi använder parametriserade manipulatorer, som setw, däremot inte för oparametriserade manipulatorer, som endl. for-satsen är ett exempel på en repetitionssats (iterationssats). Den används ofta för att stega igenom en följd av värden, som i detta fall att stega styrvariabeln i från 1 till värdet i parametern n. if-else-satsen är ett exempel på en selektionssats. Sådana satser används för att styra vilken väg programexekveringen ska ta, i detta fall om en felutskrift ska göras eller om print_squares ska anropas. Det uttryck som står mellan parenteserna efter if är styruttrycket: om det blir sant utförs satsen efter if, om det blir falskt utförs satsen efter else. I detta fall är styruttrycket ett relationsuttryck med operatorn < (mindre än). Iif-satsens else-gren finns anropet av print_squares, där variabeln x ges som argument till parametern n. I detta fall kopieras x:s värde till parametern n i samband med anropet. Provkör med ett stort heltalsvärde och notera vad som skrivs ut. Kan du förklara resultatet? Ändra i print_squares, så att utskrift endast görs om n är mindre än eller lika med något bra värde.

6 Laborationshandledning TDIU06 5. Kommandoradsargument Skriv följande program och spara på filen program5.cc. int main(int argc, char* argv[]) if (argc == 1) cout << "C++ is so cool!" << endl; else for (int i = 1; i < argc; ++i) cout << argv[i] << endl; Kompilera programmet och provkör det på två sätt: program5 program5 C++ är så koolt! Vad är nytt? main har i detta fall försetts med två parametrar, argc och argv. Det är definierar i språket att main kan ha dessa två parametrar (och även en tredje vid behov men även inga, som du sett i tidigare programexempel). Genom argc och argv överförs värden till main från kommandoraden. Via parametern argc ( argument count ) och argv ( argument vector ) kan programmet komma åt text som skrivits på kommandoraden, inklusive själva programnamnet. argc anger hur många ord som skrivits på kommandoraden. Varje ord finns som en separat C-sträng (se nedan) i fältet argv. Ett fält (eng. array ) är en sammansatt datatyp där elementen är av samma typ. I detta fall är elementtypen char*, pekare till tecken. Endimensionella fält definieras på formen: elementdatatyp fältnamn[dimension] När man deklarerar ett fält, som i fallet med den formella parametern argv, behöver man för ett endimensionellt fält inte ange dimension. De enskilda elementen i ett fält åtkoms via indexering med indexoperatorn []. Första index i ett fält är alltid 0 (det förklarar styruttrycket i < argc i for-satsen; de argc stycken orden på kommandoraden finns på index 0 till argc-1 i fältet argv). char* är en strängdatatyp som typmässigt betyder pekare till tecken men normalt pekar en sådan pekare (adress) på det första tecknet i en textsträng av typen char[], fält av tecken ; en s.k. C-sträng. char*/char[] är lågnivåsträngtyper och en ökänd felkälla i C- och C++-program. Dessa har i C++ kompletterats (läs gärna ersatts) med den fullfjädrade och mer tillförlitliga strängtypen string. Vad innebär det att argc är lika med 1 när man kör ett program? Ändra i programmet, så att alla kommandoradsargument skrivs ut på en enda rad, med ett mellanrumstecken mellan varje argument. Ändra i programmet, så att alla kommandoradsargument skrivs ut på en enda rad, men i omvänd ordning