Programmering i C++ En manual för kursen Datavetenskaplig introduktionskurs 5p Skriven av Michael Andersson
Introduktion Programmering I högnivåspråk fokuserar på själv problemet (algoritmen) istället för koden. C++ är ett högnivåspråk som har stöd för objektorientering. Språket är en vidareutveckling av språket C. I denna kurs behandlas inte objektorienterad programmering utan traditionell funktionell programmering. Ett program byggs upp av en eller flera funktioner, det måste finnas åtminstone en funktion i programmet som heter main. I main-funktionen startar exekveringen #include <iostream> using namespace std; return 0; En funktion har en kropp (body) som skrivs inom och ett huvud där in och utmatning från funktionen specificeras. Ett högnivåspråk som C++ har en syntax (reserverade ord och regler för hur språket får skrivas). Ett program skrivs i texteditor, koden som du skriver kallas källkod och är ren text. Källkoden översätts till maskinkod av kompilaton. En kompilator är ett program som kontrollerar att koden du skrivit är syntatix korrekt och över sätter sedan koden till maskin kod. Kompileras till maskinkod Källkoden Maskinkod Skrivet av Michael Andersson 2
En kompilering sker i flera steg översättningen till maskinkoden är det sista steget. Varje språk har förutbestämda regler (syntax) som måste följas. I språket finns fördefinerad ord (reserverade ord) som ingår i språket. Reserverade ord skrivs ofta med fetstil eller med någon färg (blå är vanlig). Koden som du kommer att skriva i denna kurs skrivs inom main-funktionen inom. Symbolerna kallas ofta för fiskmåsar och beskriver början respektive slut på ett block av kod. #include <iostream> using namespace std; Koden skriver du inom blocket cout << Datavetenskaplig introduktionskurs 5p << endl; return 0; Ovanför main-funktionen står direktiv för att komma åt funktioner som in- o ut-matning. I den här kursen kommer du bara skriva koden som står inom main-funktionen. In- och ut-matning i C++ In- och ut-matning i c++ sker genom strömmar. Strömmar kan ses som rör som tecken skickas in eller plockas ut från. Vanligast är att inläsning sker ifrån tangentbordet och utmatning sker till bildskärmen. I C++ används cin för inläsning, c(onsole)in läser ifrån inströmmen in till en variabel. Utmatning sker med cout som skriver till bildskärmen. cout << Datavetenskaplig << endl; return 0; För utmatningen ovan används cout och << (pilar) som anger att det som står till höger skall matas till cout strömmen (bildskärmen). Texten som matas ut kommer ut i den ordning den står (vänster till höger). Endl är ett formatering för att programmer skall göra en radbrytning. Skrivet av Michael Andersson 3
För att förstå inläsning måste begreppet variabler förklaras. Variabler En variabel är ett minnesutrymme där data kan sparas. När du skapar en variabel så ger den en datatyp och ett namn. Datatyp namn Datatyp anger vad för typ av data som variablen kan spara Datatyp Förklaring Exempel Int Heltal positiva och negativa -123, 0, 5, 23232553 Char Tecken och symboler A, #,!, 0, x, q Double Flyttal -12.34, 0.003, 3.1415, 3434.0 int, char, double är exempel på datatyper i C++ och är reserverade ord. En variabel har ett namn som används när man vill läsa eller skriva data till minnesutrymmet. Det finns regler för hur ett variabelnamn kan se ut, grundprincipen är att det ska börja med en bokstav (a-z eller A-Z)och får inte vara något reserverat ord. int tal; Deklarerar en variabel som kallas tal och kan spara heltal (integer). Variabelns namn tal används när man vill tilldela den ett värde eller skriva ut värdet. En bra regel är att namnge variabler till det vad används för eller innehåller. Exempel int antaltecken; char tecknet; double rantan; En annan bra regel som gäller generellt när kod skrivs är att skriva koden så att den blir lätt att förstå för andra personer. Skrivet av Michael Andersson 4
int tal; cin >> tal; cout << tal << endl; return 0; I koden skapas först en variabel tal (heltal), på nästa rad läses ett värde in från tangentbordet till variabeln tal. >> (pilarna) anger att data tas från inströmmen (cin tangentbordet) in till variabeln tal. Vid inläsning väntar programmet på att användarna skall mata in ett värde. På tredje raden sker utskriften av variabelnsvärde på bildskärmen. I exemplerna ovan avslutas många rader med ; (semikolon), de används för att markera slutet på en sats (t.ex. utmatning av text). Variabeldeklaration Variabler måste deklareras innan de används, när en variabel deklareras anges datatyp och namn. int tal; cin >> tal; Det går att deklarera flera variabler av samma datatyp efter varandra. int tal1,tal2,antal; char tecknet, resultat; När en variabel deklareras är dess värde odefinerat, därför brukar man ofta sätta värdet vid deklarationen. int tal=3,res=4,summa=0; Variabler används för att spara data som lästs in, men även för att spara resultat av beräkningar. Skrivet av Michael Andersson 5
int bredd=0, hojd=0, area=0; Cout << Ange bredd ; cin >> bredd; cout << Ange hojd ; cin >> hojd; area = hojd * bredd; cout << area = << area << endl; return 0; Programmet ovan låter användaren mata in höjd och bredd på en rektangel och räknar sedan ut arean genom att multiplicera. Variabeln area används för att spara resultatet av beräkningen. Vid utskrift (cout) är viktigt att tänka på att det som skall skrivas ut som text måste skrivas inom cout << area << area << endl; Först skrivs ordet area ut sedan kommer innehållet i variabeln area att skrivas ut. cout << 5*6 << 5*6 << endl; Om en variabel eller annat uttryck (5*6) står med i en utskrift beräknas resultatet innan utskriften sker. I exemplet ovan kommer multiplikationen 5*6 att utföras innan utskriften sker, det som står inom kommer inte att beräknas, resultatet blir 5*630 Olika datatyper används vid olika tillfällen I exemplen som visats har heltal (int) används, vill man använda decimaler måste datatypen double användas. Double har en heltals del och en decimaldel. int diametern=4; double PI = 3.1415, omkretsen = 0; omkretsen = diametern * PI; Skrivet av Michael Andersson 6
I exemplet bräknas omkretsen för en cirkel. Pi är inte fördefinerat utan vi sätter variabeln till 3.1415. Eftersom PI har decimaler kommer omkretsen att bli ett decimaltal. Villkor (if satser) Ett program körs rad för rad uppifrån och ner. För att göra kontroller i ett program går att skapa if-satser som innehåller villkor. En användning av villkor är att testa om en användare matat in ett korrekt värde eller ej. int tal=0; cout << Mata in ett tal > 0 ; cin >> tal; if(tal < 1) cout << Felaktig inmatning << endl; Programmet låter användare mata in ett tal, därefter sker en test med villkoret om tal < 1. Ett villkor testas alltid om det är sant eller falskt, alltså om innehållet i tal är mindre än 1. Om villkoret blir sant körs koden som ligger inom blocket under if-satsen if(tal < 1) cout << Felaktig inmatning << endl Koden som ligger mellen körs bara om villkoret är sant. Med if-satser går det att styra flödet genom programmet. En if-sats kombineras ofta med en else-sats som körs om villkoret i if-satsen är falskt. if(saldo < 0) cout << Konto övertrasserat << saldo << endl; else cout << Ditt saldo är << saldo << endl; Skrivet av Michael Andersson 7
I koden körs blocket som står under if-satsen om saldo mindre än 0 (negativt) annars körs koden som står under else delen. För en if-else sats så körs bra en av dem aldrig båda. Efter en if eller if-else sats körts fortsätter programmet rad för rad. Indentering och kommentarer Programkoden som man skriver ska skrivas så att den är lätt att förstå för andra personer. Det finns inom programutveckling många regler som om alla följer dem blir programen lättare att läsa. En sån regel är indentering, vilket innebär att när ett nytt block påbörjas ska man flytta in alla rader några blanksteg åt höger tills blocket tar slut. if (tal>0) tal = tal + 1; cout << tal << endl; Genom att använda indentering blir programkoden mycket lättare att läsa. if (tal>0) tal = tal + 1; if (tal2 > 0) tal2 = tal1 + tal2; cout << tal2 << endl; Även om man väljer bra namn på varibaler så måste man ibland lägga till yttligare kommentarer för att öka förståelsen av koden. Kommentarer skrivs med // och allt står till höger är en kommentar. Kommentarer är till för den som läser koden kompilatorn bryr sig inte om kommentarer. Det finns två varianter av kommentarer. // komenterar en rad. /* kommenterar tills kombinationen */ Skrivet av Michael Andersson 8
Exempel 1) // Testar om talet större än 0 if (tal>0) tal = tal + 1; // Ökar värdet på tal med 1 cout << tal << endl; Exempel 2) /* Detta program är skrivet av Michael Andersson på mitthögskolan den 7 oktober 2004 */ version 1.0b #include <iostream>... Det första exemplet visar kommentarer som sträcker sig en rad. Obs att allt som står före // på en rad ej är kommentar. Det andra exemplet visar en kommentar som sträcker sig över flera rader, det är ett exempel på hur källkodsfiler kan se ut. Iteration (repetion) Koden som du skriver körs rad för tills slutet på funktionen. Ofta i ett program behöver en del av koden repeteras ett antal gånger eller tills ett villkor uppfylls. I C++ finns två typer typer av repetion (loopar) while och for while-loopen upprepar det block () som står under sig tills villkoret blir falskt. int tal=0; while(tal < 2) cout << tal << endl; tal = tal + 1; Skrivet av Michael Andersson 9
I exemplet skapas en variabel tal som sätts till 0. I while-loopen testas först om villkoret (tal < 5) är sant, sedan körs koden cout << tal... När exekveringen kommer till slutet av blocket hoppar den tillbaka till början på whileloopen och en ny test utförs. En while-loop fungerar på samma sätt som en if-sats med skillnaden att den kan upprepas. int tal=0; while(tal < 10) cout << * ; tal = 0; while(tal < 5) cout << * ; Det som tagits upp i detta dokument är bara en introduktion av C++ för att du skall kunna komma igång med programmeringen, vill du har mer information finns det många böcker skrivna om C++. Skrivet av Michael Andersson 10