Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Artiklar / Titel på artikeln

Kontrollstrukturer i C++

Postad 2003-10-12 av Per Malmén i sektionen ASP.NET, C#, Okategoriserat med 0 Kommentarer | Läst av: 9751, Betyg: 77%

Förord

Jag insåg att jag i min introduktion till C++ förutsätter att man behärskar alla de styrstrukturer som finns i C/C++/Java. Eftersom kursen riktar sig till nybörjare vill jag rätta till det men en liten artikel om styrstrukturer som kan användas som referens till min första artikel.
Innehåll
  » Programflöde
  » Boolska villkor
  » Jämförelser i C++
  » if
  » Slingor
  » while
  » for
  » Utbytbara
  » Övrigt
Relaterade artiklar
  » Introduktion till C++


Programflöde

Det är inte många program som bara går igenom en lista med operationer för att när det är färdigt med det avslutas. Oftast finns det saker man vill ska utföras bara om vissa villkor är uppfyllda eller saker man vill göra flera gånger. Då används styrstrukturer så att programmets beteende inte är så statiskt. Styrstrukturer finns i alla språk men här går jag igenom vad som gäller för C++. Jag kommer inte att behandla strukturer som är föråldrade och jag inte vill uppmuntra till användning av. Jag nämner ovan att man kan få saker att utföras bara om ett villkor är uppfyllt. Men vad är egentligen ett villkor?


Boolska villkor


Där det i koden ovan står villkor kan egentligen vilket uttryck som helst förekomma men klart vanligast är ett boolskt uttryck. Boolsk algebra är det man gör när man bara räknar med sant och falskt och uppfanns av George Boole. Med boolska variabler (av typen bool i C++) kan man utföra vissa operationer: logiskt och, logiskt eller och negation. Effekten av var och en av dessa brukar sammanställas i en sk. sanningstabell. I tabellerna skriver jag 0 för falskt (false) och 1 för (true). Denna omvandling går också att göra i C++.

Och (AND) skrivs && i C++

Värde på A Värde på B Resultat

0 0 0
0 1 0
1 0 0
1 1 1

Eller (OR) skrivs || i C++

Värde på A Värde på B Resultat

0 0 0
0 1 1
1 0 1
1 1 1

Icke (NOT) skrivs ! i C++
Värde på A Resultat

0 1
1 0

Förutom de boolska operationerna måste man kunna jämföra saker, det görs med jämförelseoperatorerna.


Jämförelser i C++































UttryckSyntax
Är lika med==
Mindre än<
Större än>
Mindre än eller lika med<=
Större än eller lika med>=
Skiljt från!=


Med hjälp av dessa operationer och jämförelser kan man skriva uttryck som beskriver villkor. (age>40) && (bodyType == OVERWEIGHT) // parenteser för att klargöra vad som menas är sant endast då värdet på variabeln age är större än 40 OCH värdet på bodyType är lika med OVERWEIGHT (som nog är en konstant variabel).


if


if-satser (statements) används för att utföra operationer bara om ett villkor är uppfyllt. Syntaxen för en if-sats är:

if (villkor) {
// flera programsatser tex.
cout << "Inne i if-satsens kropp" << endl;
}


I koden ovanför kommer raderna mellan klamrarna ("måsvingar" {}) att utföras bara om villkoret inom parentesen efter if är sant. Man kan även vilja göra något annat om villkoret inte är uppfyllt.

if((age>40) && (bodyType == OVERWEIGHT)) {
cout << "Personen är i riskzonen" << endl;
} else {
cout << "Ingen fara på taket" << endl;
}

Man kan också välja att stapla if satser på varandra.

if(villkor) {
// gör saker
} else if(ettAnnatVillkor) {
// gör andra saker
} else if(ettTredjeVillkor) {
// annat
} else {
// om inget villkor ovan är uppfyllt
}

En viktig detalj är att villkoren i en if-sats inte kommer göra fler jämförelser än nödvändigt Så om personen inte är över 40 år körs inte ens testet om han är överviktig och en operation sparas in.




Slingor



while


while-slingan (loopen) har följande syntax

while(villkor) {
// flera programsatser tex
cout << "Görs varje varv" << endl;
}

Här kommer koden mellan klamrarna göras så länge som villkoret är uppfyllt. While används oftast när man inte vet exakt hur länge man kommer upprepa sig.

int number = 0;
while(number > 0) {
cout << "Talet är " << number << endl;
cout << "Mata in ett nytt tal :";
cin >> number;
cout << endl;
}

Slingan ovan bryts först när användaren matar in ett nagativt tal.


for


for-slingor används oftast istället för while när man vet innan hur länge en sak måste upprepas.
Syntaxen är

for(initiera;villkor;varjeVarv) {
// programsatser
}

Initiera är en sats som görs första gången innan slingan körs. Villkor anger att slingan ska köras så länge villkoret är uppfyllt.
varje varv anger en operation som ska utföras varje varv efter slingan. Exempelvis kan man gå igenom alla tal i en array.

int length = 4;
int tal[length] = {2,4,6,8};

for(int i = 0;i < length;i++) {
cout << tal[i] << " är på plats " << i << endl;
}


Koden ovanför kommer att skriva ut talen i arrayen ett efter ett tills i är lika med 4. Då kommer slingan avbrytas och vi kommer alltså inte försöka skriva ut tal[4] som ju inte är definierat (eftersom arrayer är nollräknade). i++ är ett kortsätt att skriva i = i + 1. (för dom som är petiga kan man även skriva det ++i som i många fall är effektivare eftersom en temporär variabel inte behöver skapas. Men detta är överkurs och förvirrar nog bara just nu.)


Utbytbara


Man kan göra precis samma saker med while och for-slingor, det är bara en fråga om tycke och smak. Själv tycker jag som sagt att while används när man inte vet exakt hur länge man ska göra något medans for används för att tex gå igenom alla element i någon lista. While-slingan ovan kan skrivas

int number = 0;
for(;number > 0;) { //tom initiering och varjeVarv
cout << "Talet är " << number << endl;
cout << "Mata in ett nytt tal :";
cin >> number;
cout << endl;
}


Precis som for-slingan tidigare kan skrivas som

int length = 4;
int tal[length] = {2,4,6,8};
int i = 0;
while(i < length) {
cout << tal[i] << " är på plats " << i << endl;
i++;
}


En nackdel med while-versionen ovan är att variabeln i nu är definierad i hela kodsnutten och inte bara inom slingan. Men det är också överkurs.


Övrigt

Det finns en del styrstrukturer som jag inte har nämnt, däribland switch. Men jag anser inte att de övriga tillför så mycket och nybörjaren klarar sig utmärkt med de jag har beskrivit. Exempelvis kan ju en switch-sats skrivas om som flera if-satser utan att förlora i effektivitet.
Upp

0 Kommentarer

Skriv en kommentar på artikeln

Ditt betyg på artikeln



Kommentar:





Nyligen

  • 14:39 Rainbet Casino
  • 13:47 Professional mining software
  • 13:18 Website builder
  • 17:03 Getmancar your go-to carsharing
  • 14:07 Games
  • 17:54 Vegastars New Zealand
  • 16:56 Verde Casino Danmark
  • 13:54 Vegastars: Top Australian Online C

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 571 463
27 965
271 788
738
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies