Jeg vil nu give dig som nybegynder, en god basis viden for programmering, samt give dig det teoretiske indblik i forskellige begreber indenfor C++. Jeg vil lære dig om principper som løkker, logiske udtryk, variabler mm. Derefter vil jeg selvfølgelig fortælle dig hvordan, hvor og hvornår du kan bruge sproget C++.
Jeg betragter en nybegynder som en der ikke kender computerens historie, men en der kan finde ud af at bruge computeren til at gå på internettet, samt sende mails. Samtidig også at nybegynderen skal vide hvad forskellen på skærm og computer er ;)
Historien
Lige siden den elektroniske computers opfindelse i slutningen af 1940, har det været muligt at få en computer til at beregne ting.
En elektronisk computer er bygget op af elektroniske komponenter, som Motherboardet der forbinder alle øvrige komponenter med hinanden, som RAM (Random Access Memory) hvor programmer kan gemme deres midlertidige hukommelse, som CPU'en (Central processing unit) der er selve computerens hjerne, som Harddisken der lagrer ens billeder, videoer og film, som grafik kortet og meget mere.
Inde i computerens RAM, er der milioner, bilioner af transistore, som tilsammen danner rigtig mange kredsløb som enten kan være tændte eller slukkede. Det er sådan computeren midlertidigt husker. Hermed kan computeren kun forstå tændt eller slukket. Man siger at tallet 1, indikerer tændt og 0 indikerer slukket.
De første programmører var derfor nød til at skrive nuller og ét taller til computeren, for at få den til at beregne forskellige regnestykker. Og dette kalder man for maskinkode.
En dag var der nogle kloge hoveder som kom til at tænke over om de kunne gøre det nemmere for mennesker at få computeren til at gøre forskellige ting. Dertil opfandt de nemlig et programmeringsprog (Plankalkül). Denne opfindelse fik dannet en helt ny æra indenfor computer teknologier.
Et programmeringssprog går ud på at et menneske kan skrive menneske læselige tegn, som senere kan laves om til nuller og ét taller som computeren kan forstå. Selve den process at lave den menneske læselige kode om til nuller og ét taller kalder man kompilation.
Så når du skriver din kode til computeren har du brug for noget som kan oversætte, i dit tilfælde C++ til nuller og ét taller. Dette kan gøres med en såkaldt Compiler som kompilerer din kode til maskinkode.
I 1979 opfandt danskeren Bjarne Stroustrup sproget C++, som du nu kommer til at lære. Dette sprog satte nye standarder for programmeringen i hele verden, og blev derfor også meget populært.
Bjarne definerede også måden hvorpå C++ skulle skrives. Måden hvorpå koden skal skrives, for at den kan blive oversat til maskinkode(0 og 1 taller), kalder man for sprogets syntaks.
Kode sætninger
Når man vil have en computer til at gøre ting, vil man gerne kunne få den til at udføre enkelte ting ad gangen, det gør man med noget der hedder: kode sætninger.
I C++ kan man få computeren til at gøre ting ved at skrive sætninger. I C++ og andre moderne sprog kalder man dem for kode-sætninger. Fuldstændigt ligesom man på Dansk skriver sætninger bare med en anderledes syntaks. Hvis du nu ville få computeren til at regne ud hvad 5 + 5 er og skrive det på skærmen kunne man skrive:
Spørg brugeren om et tal;
Spørg brugeren om et andet tal;
Regn summen af de to tal ud;
Skriv summen på skærmen;
Læg mærke til semikolonet (;), som står som afslutning bag hver kodesætning. På dansk og mange andre sprog afslutter man sin sætning med et punktum. I C++ afslutter man en sætning med semikolon (;).
Compileren vil kigge på ovenstående kode og derefter udføre, eksekvere hver kode sætning i den rækkefølge de står. Men hvad nu hvis man gerne vil have at flere sætninger skal behandlet som en.
Her har Bjarne så pænt defineret at kode sætninger indeni tuborgklammer ({}), skal eksekveres sammen. Dvs. at vi kan putte ovenstående kode eksempel ind i tuborgklammer, og compileren og du vil så betragte disse omklamrede sætinger som én del:
{
Spørg brugeren om et tal;
Spørg brugeren om et andet tal;
Regn summen af de to tal ud;
Skriv summen på skærmen;
}
Når man sætter sætninger ind imellem tuborgklammer, kalder man for en blok. En samling af sætninger man putter ind i en blok, som dermed bliver behandlet som en sætning.
Variablen
En anden sjov ting man f.eks også gerne vil have computeren til, er at kunne gemme brugerens navn, redigere i det så det står bagvendt og derefter skrive det ud på skærmen. Dette kan man gøre med variabler.
Hvordan ville du gribe sådan et problem an?
1. Du kunne først spørge brugeren om hans/hendes navn
2. For at kunne redigere i hans/hendes navn skal du på en eller anden måde kunne huske det, så det gør du.
3. Derefter vender du hans/hendes navn om
4. Skriver navnet på skærmen
Når brugeren så lukker programmet igen vil navnet forsvinde fra hans/hendes skærm igen.
Det er sådan en variabel fungerer. Forestil dig at en variabel er en lille kasse. I den kasse kan man lægge en ting ned i. Man kan sætte et lille mærkat på kassen så man ved hvad der er nede i kassen.
Samtidigt kan man gøre det endnu nemmere for en selv at huske hvad der er i kassen ved at give kassen en type. F.eks. kan du give kassen en type som: MusikCD'er. Tingen man vælger at putte ned i kassen kalder man for værdien af kassen.
En sådan lille kasse hvori man kan putte alt muligt sjovt kalder man for en variabel, når vi snakker om programmering.
Grunden til at det hedder en variabel er at man kan tage en ting ud af kassen og man kan lægge en anden ting derned. Dermed er det forskellige ting man kan putte derned(Variabelt).
Bjarne har heldigvis defineret syntaksen, dvs. den måde man definerer en variabel på, for os:
Type Mærkat = Værdi;
Læg mærke til ligmed tegnet. Dette tegn fungerer ikke som normalt forventet. Det tjekker nemlig ikke om noget er lig noget andet. Dette tegn definerer nemlig at alt på højre side af lighedstegnet skal puttes ned i kassen(variablen), med det specificerede mærkat og type. Husk dog også på at da det er en kode sætning til compileren, skal den afsluttes med et semikolon, og ikke med punktum.
Nu har du fået en forståelse for syntaksen af en variabel, men spørgsmål du kunne stille dig selv kunne være, Hey hvilke typer kan jeg benytte mig af? Hvilket mærkat skal jeg putte på min kasse? Og hvad skal jeg putte derned?
Variablen - Typerne
I C++ har Bjarne defineret de såkaldte primitive typer. Grunden til at de bliver kaldt primitive typer er ganske enkelt bare at de er bygget ind i selve sproget, at de ikke er lavet af en tredjepart.
Her er en oversigt over de primitive typer i C++:
Type | Hele ordet | Dansk = Hvad kan det være?
-------------------------------------------------------
int | Integer | Heltal = 1,2,3,4,5,6,7......
float | Float | Flydende = 1.0,1.1,1.2......
double | Double | Dobbelt = 1.0,1.1,1.2.......
char | Character | Bogstav = A,B,C,D...........
-------------------------------------------------------
Som det fremgår af tabellen kan du se en kolonne med navnet Type. Det er de forkortelser som man har givet typerne, og det er dem man benytter sig af når man skriver koden.
Dvs. at når du skal lave en variabel med en type, skriver du ikke Integer, men int i stedet for. Det gør det både lettere og hurtigere at skrive.
Kolonnen "Hele ordet" er der hvor du kan se hvad forkortelsen står for. F.eks. står forkortelsen int for Integer, som på dansk betyder heltal.
Kolonnen "Dansk = Hvad kan det være?" Specificerer to ting. Det på venstre side af lighedstegnet er Det danske ord for forkortelsen, mens den højre side er de tal man kan putte ned i variablen, adskilt med komma.
Du tænker måske hvad man skal bruge heltal til når man bare kan bruge double til at tælle alle tal også komma tal. Dertil er det en formidabel sætning du skal huske "Hvis du undre dig om hvor meget? SKAL du bruge double", "Hvis du undre dig om hvor mange? SKAL du bruge int".
Jeg vil ikke komme ind over hvordan disse typer fungerer forhold til hinanden, og hvorfor det f.eks hedder en double.
Variablen - Mærkatet
Nu da du har fået en forståelse for hvilke typer din variabel kan bestå af, er det på tide at snakke om hvilket mærkat du kan sætte på kassen.
I C++ kan dit mærkat være alle bogstaver fra A-Z, dvs intet æ-ø-å:
MånensTyngdeKraft = Forkert!!!
MaanensTyngdeKraft = Rigtigt!!!
Det kan ikke starte med et tal, men ellers kan du selv bestemme hvor tallet skal være:
1MaanensTyngdeKraft = Forkert!!!
MaanensTyngdeKraft1 = Rigtigt!!!
Der må ikke være specielle tegn men der må godt være underscore (_) :
-Maanens/Tyngde+Kraft = FOKERT!!!
_MaanensTyngdeKraft = Rigtigt!!!
Nu kender du typerne du kan gøre brug af og du ved hvordan du skal lave dine mærkater. Nu skal du bare vide hvad du skal putte ned i dine variabler(kasser). Dette er meget simpelt. Det hele afhænger af typen. Hvis typen af din variabel er int, dvs. et heltal, kan værdien kun være heltal. Dvs. 1,2,3,4,5...... Og derudaf. Du kan bare benytte dig af ovenstående tabel for at se hvad du kan putte i de forskellige typer af variabler.
Nu er det tid til at gå tilbage til syntaksen af en variabel som var:
Type Mærkat = Værdi;
Og nu skal vi så erstatte disse pseudo ord med noget som compileren kan forstå og oversætte til maskinkode. Vi vil gerne have en kasse hvori vi kan gemme min alder. Og vi vil gerne lave et mærkat som hedder Magnus_Alder. Og ned i variablen putter vi heltallet 15. Dvs. at vores type skal være int, mærkat Magnus_Alder og værdien er 15:
Type Mærkat = Værdi; // Pseudo
int Magnus_Alder = 15; // Den egentlige syntaks
Husk at se bort fra de to skråstreger og teksten til højre for dem. De har intet med koden at gøre men forklarer bare hvad der står på linjen.
Kommentarer - Gør livet lidt lettere
Netop dette leder til mit næste emne: Kommentarer.
Nu er vi jo trods alt mennesker, og selvom programmeringskode idag er meget menneske læseligt, er der stadig problemer selv for proffessionelle programmører med at gennemskue store mængder kode.
Derfor har Bjarne defineret at hvis man i sin kode skriver to skråstreger, så er al tekst bag disse ignoreret af compileren. Dvs. at compileren ikke prøver at oversætte dine kommentarer til maskinkode (0 | 1 taller).
Der er to forskellige måder at skrive sine kommentarer på. Der er fler-linje kommentarer, og der er en linjes kommentarer.
To skråstreger efterfulgt af noget tekst er en linjes kommentarer. Dvs. at du ikke kan gøre sådan her:
// Her er min kommentar
den er meget flot
Her vil compileren tro at den skal oversætte "den er meget flot" til maskinkode.
Derfor har Bjarne også defineret at man skal kunne lave flerlinjes kommentarer, så man kan skrive hele romaner hvis man har lyst. Dette gør man lidt anderledes:
/*
Her er min kommentar
den er meget flot
og kan spænde over så mange linjer jeg vil
så længe jeg slutter med:
*/
Læg mærke til at skråstreg efterfulgt af stjerne siger at her starter kommentaren, mens stjerne efterfulgt af skråstreg siger at her slutter kommentaren.
Som sagt er kommentarer meget nyttige. Hvis du har lavet en kode for et halvt år siden kan du sikkert ikke huske hvad det var de forskellige kodesætninger gjorde. Derfor er det en god ide at skrive kommentarer, så når du og andre skal gennemgå koden igen, er det meget lettere.
Logiske udtryk - Er jeg større end dig?
I computerprogrammering får man i høj grad brug for at tjekke bruger input. "Bruger input"? Bruger input er simpelt nok, det som brugeren giver af oplysninger til programmet. Og nogle gange får man brug for at tjekke om det input nu er rigtigt. Jeg kommer indpå senere hvordan du får bruger input til dit program.
Du kunne f.eks. spørge brugeren: Hvad er 5 + 5?
Og derefter vil du tjekke om deres svar er rigtigt. Dette gør man med de såkaldte logiske udtryk. Hvordan man gør det i C++ vil jeg nu fortælle.
Vi tager udgangspunkt i eksemplet ovenfor. Du indhendter brugerens svar og putter det ind i variablen du kalder Bruger_Svar. Derefter vil du tjekke om dette er rigtigt så du gør således:
Bruger_Svar == 10
Dette er et logisk udtryk, da det enten kan være Rigtigt eller Forkert, True eller False. Det skarpe øje vil nok undre sig over om det er en fejl at jeg har sat to lighedstegn.
Nej det er det ikke. Fordi som du så tidligere ser syntaksen på når man skal lave en variabel sådan her ud:
Type Mærkat = Værdi;
Og dertil forklarede jeg at lighedstegnet definerer at alt på højre side af det, skal puttes ind i det til venstre. Men jeg fortalte ikke hvad det var. Lighedstegnet her er en tildelingsoperator. Lad dig ikke forvirre af sådan et fancy't ord. Tildeling betyder at give noget en værdi, og det er jo hvad man gør når man giver an variabel en værdi. Det tildelingsoperatoren gør er at operere(at gøre noget) for en, deraf navnet operator.
Og da ét ligheds tegn betyder tildelingsoperator for compileren, måtte man jo finde på noget andet til, ligheds operatoren, som tjekker om noget er ens. Derfor besluttede man at == tjekker om noget er lig med noget andet.
Der er også andre operatorer såsom større end (>), mindre end (<), ikke lig med (!=).
Her er et eksempel: Du vil gerne tjekke om min alder er større end din, men samtidigt vil du også tjekke om min alder er mindre end din fars alder, og hvis alt dette er opfyldt vil du skrive "du er ældre end mig, men ikke min far".
Hvordan vil du gøre det med den viden du lige har fået? Det kan du ikke fordi du ikke kender de logiske operatorer som er:
(&&) det betyder OG.
(||) det betyder ELLER.
Så nu kan du sammensætte et udtryk som passer på eksemplet ovenfor:
(Min_Alder > Din_Alder && Min_Alder < Din_Fars_Alder)
<, && og > kalder man for operatorerne og alt ovenfor kalder man for et udtryk. Da det enten kan udtrykke Rigtigt eller Forkert. Hvad vil ovenstående Udtryk blive hvis min alder er 15, og din fars 65?
Hvad nu hvis...
Nu har du lært hvordan man kan sammenligne værdier, hvordan man tjekker om en værdi er større end en anden osv. Men du har ikke lært syntaksen for hvordan man gør dette i C++.
I C++ er der noget der hedder en "If sætning". Det er et sted hvori man kan tjekke om et udtryk er sandt eller falsk.
Syntaksen er således:
if(Udtryk)
{
Hvis Udtryk er sandt så gør det inde i denne blok;
}
else
{
Ellers gør det inde i denne blok.
}
Læg mærke til at vi putter udtrykket ind imellem parenteser, så compileren ved hvornår udtrykker starter og slutter.
Hvis vi kigger på ovenstående kode kan vi sige: if(Hvis), udtrykket er korrekt, så gør det der står i første blok, else(Ellers) gør det i anden blok.
Denne "If sætning" er nok den vigtigste del af programmeringssproget C++ at kunne. Så vi tager lige et konkret eksempel mere:
if(5 > 6)
{
Så skriv: Det er sgu da mærkeligt;
}
else
{
Ellers skriv: Det regnede jeg også med;
}
Ovenfor kan du se at vi tjekker om 5 er større end 6, og hvis det er sandt bliver vi mærkelige i hovedet, ellers bliver glade for det var jo hvad vi regnede med :)
Løkken - Igen og igen....
En dag vil man også gerne have computeren til at gøre en ting flere gange, eller bare uendeligt. Dertil har Bjarne så pænt defineret løkken.
En løkke er noget der bliver udført igen og igen. Som sagt kan man tage sine kodesætninger og putte dem ind i tuborgklammer. Når man gjorde dette hed det en blok. I C++ definerer man først hvor mange gange computeren skal gøre en ting. Derefter skriver man den blok der skal udføres de specificerede gange.
Der er tre måder hvorpå du i C++ kan lave en løkke. Jeg har valgt at fortælle de to. Det er "while" løkken og "for" løkken.
While løkken bruger man hvis man ikke ved det præcise antal gange noget skal udføres. Man bruger også while løkken når noget skal køre uendeligt.
For løkken bruger man når man kender det antal gange noget skal udføres. Og når man skal gennenmgå store længde definerede data.
Her kommer der et While løkke eksempel:
while(Min_Alder < 18)
{
Så skriv: DU er ikke myndig endnu!;
}
Tildette eksempel kunne man sige: så længe(while) min alder er mindre end 18. Så skriv at jeg ikke er myndig endnu. Læg mærke til at det er samme syntaks som da vi gennemgik "if sætningen", det eneste der er anderledes er at vi har byttet if ordet ud med while.
Men en "For løkke" har ikke samme syntaks som en while løkke. "For løkkens" syntaks er som følgende:
for(Initialisering; Udtryk; Inkremmentering)
{
Blokken der bliver udført det bestemte antal gange;
}
Her er der tre fancy ord.
Initialisering = Det betyder at man giver en variabel en værdi før programmet starter.
Udtryk = Det er er man skriver det udtryk der skal tjekkes for Rigtigt eller forkert. Lige så længe udtrykket er falskt, vil løkken køre.
Inkrementering = Det betyder at lægge noget oveni. Det er her man inkrementere et tal, hver gang løkken har kørt, simpelthen for at holde styr på hvor mange gange løkken har været udført.
Initialisering, Udtryk og Inkremmentering er alle indeni en parentes og de er delt af semikolon.
Et konkret eksempel ville være:
for(int Min_Alder = 0; Min_Alder < 18; Min_Alder++)
{
Jeg vokser!!!;
}
I inkrementeringsdelen laver vi en variabel(kasse) hvori vi lægger værdien 0.
I udtryksdelen tjekker vi om variablens værdi er mindre end 18. Dvs. at løkken vil køre så længe dette er falsk.
I inkrementeringsdelen lægger vi hele tiden 1 oveni Min_Alder for hver gang løkken har kørt.
Nu ved du at variabler er der man gemmer ting i, og du ved hvordan deres syntaks er.
Du ved at operatorer er dem som sammenligner og gør ting for dig.
Du ved at ved at lave kommentarer i kode, gør du det nemmere for andre og dig selv at læse det på et senere tidspunkt.
Nu sidder du nok tilbage med en flad fornemmelse af, at du for det første ikke ved hvor du skal putte al denne kode hen. For det andet ved du ikke hvad du skal bruge det til og for det tredje mangler du et konkret eksempel du bare kan copy paste og se det virke.
Men du må vente lidt endnu. Holde ud!
Fordi nu kender du basis syntaksen for C++. Og du kender forskellige begreber som Løkker, variabler osv. Men du mangler lige det sidste.
Hvad skal jeg gøre?
Når du skriver din kode, og skal lave store projekter engang. Får du brug for at dele din kode op i flere filer. Men compileren som skal oversætte din kode til nuller og et taller, bliver nød til at kende disse filer før at den kan sætte dem sammen til ét helt program.
Derfor har C++ compileren, en preprocessor indbygget. En preprocessor er et lille program som erstatter dette:
#include <iostream>
med den aktuelle kode som compileren kan forstå. Så inden at compileren begynder at oversætte til maskinkode køre "pre" processoren, og erstatter preprocessor sætninger med den reelle kode.
For at preprocessoren ved at sætningen er tilrettelagt til lige netop den, skriver man en firkant foran sætningen. Husk at preprocessoren ikke skal have et semikolon bagved sætningen.
Vi tager udgangspunkt i denne sætning:
#include <iostream>
(#) definerer at det er preprocessoren og ikke compileren der skal kigge på sætningen.
(include) fortæller preprocessoren at den skal inkludere en anden fil i denne fil.
Alt mellem < og > er den fil som preprocessoren skal lede efter. Altså den fil som den skal inkludere.
(iostream) Står for "In and Out stream". Det er en standard fil, hvori Bjarne og hans folk heldigt nok har defineret metoder til at få tekst fra brugeren (In), skrive tekst på skærmen (Out), og dette sker i en bestemt rækkefølge (stream)
Et spørgsmål der nu kommer op er hvor starter mit program, og hvordan ved compileren hvor det starter.
Så er vi der næsten...
Det du lige nu har brug for er en compiler, den som oversætter din kode til maskin kode. Du kan downloade den jeg bruger her:
http://www.codeblocks.org/ (...)
Når du har downloadet setupfilen kan du prøve at kigge på denne youtube video som vil vise dig hvordan du installerer og opretter et nyt projekt i CodeBlocks programmet:
http://www.youtube.com/ (...)
Indsæt denne kode og kompiler på F9 knappen og du er "Good to go":
#include <iostream>
using namespace std;
int main()
{
cout << "Hello world!" << endl;
return 0;
}
Nu kan du selv eksperimentere med koden og ændre Hello World teksten til noget andet. DU kan prøve at lave løkker så den skriver det flere gange:
#include <iostream>
using namespace std;
int main()
{
for(int i = 0;i<5;i++)
{
cout << "Hello world!" << endl;
}
return 0;
}
Du kan lave variabler og udskrive dem:
#include <iostream>
using namespace std;
int main()
{
string hej = "Hej med dig";
cout << hej << endl;
return 0;
}
Og meget meget mere. Prøv dig frem! Held og lykke.


