Print

Förgrening Baserad På Relationsoperatorer

Written by Super User. Posted in Programming

Programmet ber användaren om poängen för två fotbollslag, vilka sedan lagras i två heltalsvariabler. Variablerna i if-satserna på raderna 15, 18 och 23. Om ett lag har mer poäng än det andra skrivs ett meddelande ut. Om de har samma poäng utförs koden som börjar på rad 23 och slutar på rad 37. Den andra poängen matas in igen, och sedan görs en ny jämförelse. 

Observera att om den första AIK-poängen är högre än IFK-poängen, skulle if-satsen på rad 15 utvärderas till falsk, och rad 16 utförs inte alls. Testet på rad 18 utvärderas till sant, och satsen på rad 20 utförs. Därefter testas if-satsen på rad 23, och resultatet blir falskt (om rad 15 var sann). Därför skulle programmet hoppa över hela blocket och fortsätta till rad 37.

I det här exemplet hindrar inte ett sant resultat för någon av if-satserna att andra if-satser utvärderas.

#include <iostream>

using namespace std;

int main()
{
    int IFKScore, AIKScore;
    cout << "Skriv in antal mål för IFK Göteborg: ";
    cin >> IFKScore;
    cout << "Skriv in antal mål för AIK: ";
    cin >> AIKScore;

    cout << endl;

    if (IFKScore > AIKScore)
    cout << "Heja IFK!" << endl;

    if (IFKScore < AIKScore)
    {
        cout << "Heja AIK!" << endl;
    }

    if ( IFKScore == AIKScore)
    {
        cout << "Oavgjort? Nej, du måste skämta!" << endl;
        cout << "Mata in den rätta poängen för AIK: ";
        cin >> AIKScore;

        if (IFKScore > AIKScore)
        cout << "Det visste jag väl! Heja IFK!";

        if (AIKScore > IFKScore)
        cout << "Det visste jag väl! Heja AIK!";

        if (AIKScore == IFKScore)
        cout << "Jösses, det blev verkligen oavgjort!" << endl;
    }

    cout << "Tack för att du berättade." << endl;
    return 0;
}
Print

if-satsen

Written by Super User. Posted in Programming

Normalt utförs ditt programflöde rad för rad i den ordning de står i källkoden. Med if-satsen kan du testa ett villkor (t ex om två variabler har samma värde) och sedan gå till olika delar av koden beroende på resultatet.

if (uttryck)
   sats;

Uttrycket inom parenteserna kan vara vilket uttryck som helst, men det innehåller för det mesta en av relationsoperatorerna. Om uttrycket har värdet false hoppas satsen över. Om värdet är true utförs satsen.

if (bigNumber > smallNumber)
    bigNumber = smallNumber;

Den här koden jämför bigNumber med smallNumber. Om bigNumber är större sätter rad två dess värde till samma värde som smallNumber har. Eftersom ett block av satser som omges av klamrar är samma sak som en enkel sats kan följande typ av förgrening vara både stor och kraftfull.

if (uttryck)
{
   sats1;
   sats2;
   sats3;
}

------------------------------------------------------

if (bigNumber > smallNumber)
{
   bigNumber = smallNumber;
   cout << "bigNumber: " << bigNumber << endl;
   cout << "smallNumber: " << smallNumber << endl;
}

Om bigNumber är större än smallNumber sätts variabeln till samma värde som smallNumber, och ett meddelande skrivs ut.

Print

Relationsoperatorer

Written by Super User. Posted in Datacommunication

Name      Operator Exempel      Utvärderas till
Lika med      == 100 == 50; 50 == 50;      false true
Skilt från      != 100 != 50; 50 != 50;      true false
Större än      > 100 > 50; 50 > 50;      true false
Större än eller lika med      >= 100 >= 50; 50 >= 50;      true true
Mindre än      < 100 < 50; 50 < 50;      false false
Mindre än eller lika med      <= 100 <= 50; 50 <= 50;      false true
Print

Nästla Parenteser

Written by Super User. Posted in Programming

I särskilt komplicerade uttryck kan det vara nödvändigt att sätta parenteser inuti varandra, att kapsla dem. Det kan vara nödvändigt att beräkna antal sekunder och sedan beräkna hur många personer som är inblandade innan sekunder och personer multipliceras med varandra:

TotalPersonSeconds = ( ( (NumMinutesToThink + NumMinutesToType) * 60) * (PeopleInTheOffice + PeopleOnVacation) )

Tolka uttrycket inifrån och ut. Först läggs NumMinutesToThink och NumMinutesToType ihop eftersom de befinner sig innanför de innersta parenteserna. Summan multipliceras med 60. Därefter läggs PeopleInTheOffice och PeopleOnVacation ihop. Till sist multipliceras antal personer med det totala antalet sekunder. Exemplet ovan tar upp en intressant frågeställning. Uttrycket är enkelt för en dator att beräkna, men svårt för en människa att läsa, förstå och ändra. Här är samma uttryck, omskrivet och utrustat med temporära heltalsvariabler:

TotalMinutes = NumMinutesToThink + NumMinutesToType;
TotalSeconds = TotalMinutes * 60;
TotalPeople = PeopleInTheOffice + PeopleOnVacation;
TotalPersonSeconds = TotalPeople + TotalSeconds;

Den här koden tar längre tid att skriva och använder flera temporära variabler, men är i gengäld mycket enklare att förstå.

Print

Operatorprioritet

Written by Super User. Posted in Programming

Vilket utförs först i följande sats? Additionen eller multiplikationen?

x = 5 + 3 * 8;

Om additionen utförs först blir resultatet 8*8 dvs 64. Om multiplikationen utförs först blir resultatet 5+24, dvs 29. Operatorerna har en inbördes rangordning. Multiplikationen har prioritet framför addition, vilket ger värdet 29 i satsen ovan. Om två matematiska operatorer båda har samma prioritet utförs beräkningen från vänster till höger. I satsen

x = 5 + 3 + 8 * 9 + 6 * 4;

utvärderas först multiplikationen, från vänster till höger. 8*9 är 72, och 6*4 blir 24:

x = 5 + 3 + 72 + 24;

Additionen utförs från vänster till höger, 5+3=8; 8+72=80; 80+24=104. Obs! En del operatorer, t ex tilldelning, utförs från höger till vänster! Men vad händer om prioritetsordningen ändå inte uppfyller dina behov?

TotalSeconds = NumMinutesToThink + NumMinutesToType * 60

I det här uttrycket vill vi inte multiplicera NumMinutesToType med 60 och sedan addera värdet till NumMinutesToThink. Vi vill lägga ihop de två variablerna för att få antalet minuter och sedan multiplicera resultatet med 60 för att få antalet sekunder. I detta fall använder vi parenteser för att ändra prioritetsordningen. Objekt inom parenteser har prioritet framför alla matematiska operatorer.

TotalSeconds = (NumMinutesToThink + NumMinutesToType) * 60

Satsen ger oss rätt resultat.