CPP Treningsoppgave

Denne treningsoppgaven er spesielt tilpasset elektrofagene.

VG1 elektrofag er kjent for å inneholde en del elektrotekniske beregninger som kanskje kan være litt vanskelige, hvis man ikke har god trening i å utføre slike beregninger.

Vi kan utvikle et program i C++ som utfører de fleste av disse beregningene automatisk, bare ved å taste inn data. For å utvikle dette programmet, og kanskje også for å bruke det så behøver man en god forståelse av hvordan beregningene skjer, men det er kanskje ikke nødvendig å huske så mange detaljer og anatallet feilkilder blir kanske færre.

Det er jo fritt fram for å videreutvikle programmet til å inneholde alle de formelene og de elektrotekniske beregningene som dere måtte ønske og som dere måtte synes at dere har bruk for, men vi kan jo starte opp med et felles «rammeverk».

Beskrivelse av programmet:

Når man starter opp programmet, så kommer man inn i en meny, der man kan velge fra følgende alternativer:

Hovedmeny

***********************

Ohm lov:

1. Beregne spenningen U (R og I er kjent.)
2. Beregne strømmen I (U og I er kjent.)
3. Bregene resistansen R (U og I er kjent.)

Effektformelen:

4. Beregne P (U og I er kjent.)
5. Beregne I (P og U er kjent.)
6. Beregne U (P og I er kjent.)

Resistans i kobberleder:

7. Beregne resistansen R. Lengde l og tverrsnitt A er kjent.
8. Beregne lengden l. Tversnitt A og resistans R er kjent.
9. Beregne tversnittet A. Lengden l og resistansen R er kjent.

Effekt og strøm

10. Beregne belastningsstrømmen i for en enfase resistiv belastning.
11. beregne belastningsstrømmen for en 3-fase resistiv belastning.
12. Beregne belastningsstrømmen for en 3-fase motorbelastning

0. Avslutt programmet

***********************

Så lenge brukeren ikke taster «0» så skal vedkommende helt tiden få opp et tilbud om å utføre en ny beregning, med andre ord menyen for beregninger skal komme opp.

Designprinsipp for programmet:

uten at vi på en eller annen måte deler opp programmet i mindre deler i form av «metods» som utfører forholdsvis mindre deler av oppgaven, og vi gjennomfører det som vi kansje kan kalle for «strukturert progtammering» så kan dette bli en veldig stor og innviklet oppgave.

Vi kan for eksempel utarbeide er hovedprogram, man() som vi kan gi til oppgave å la brukeren velge den beregningen som brukeren ønsker å utføre. På basis av dette valget så kan da dette hovedprogrammet «kalle opp» ulike «methods» som har til oppgave å hente inn de nødvendige data fra brukeren og så utføre de forskjellige beregningene. Når brukeren taster tallet «0» fra valgmenyen så skal programmet avsluttes.

Jeg har utarbeidet en «mal» eller det som kan være et «byggetrinn 1» for å komme i gang med utviklingen av programmet.

Hvis dere er flere som jobber sammen så kan det også gå fint å dele programmeringsoppgaven opp i flere delprosjekter, slik at for eksempel et «elevteam» kan utvikle hver sin «method» som ivaretar hver sin beregningsoppgave.

Jeg har utarbeidet en «mal» eller det som kan være et «byggetrinn 1» for å komme i gang med utviklingen av programmet. Det er fritt fram for å eksperiemtere og teste ut, slik som dere måtte ønske det, i forbindelse med gjennomføringen av oppgaven.

 


#include <iostream>
#include <cstdlib>

using namespace std;

// Her starter en method for å beregne spenningen

void ohms_lov_beregne_u()
{
double spenning;
double strom;
double resistans;
char fortsette;

system("CLS");

cout << endl << "Ohms lov - Spenning over R:" << endl << endl;

cout << endl << "Tast inn resistansen: "; cin >> resistans;

cout << endl << "Tast inn verdien for strom: "; cin >> strom;

spenning = resistans * strom;

cout << endl << "Spenningen over R: " << spenning << " V" << endl << endl;

system("pause");

system("CLS");

}


// Her starter hovedprogrammet

int main()

{
int valg = 99;

while (valg != 0) {

system("CLS");

cout << endl << endl << "*** Ohms lov ***" << endl << endl;

cout << "1. Beregn U, I og R er kjent:" << endl << endl;
cout << "0. Avslutt" << endl;

cout << endl << "Tast inn ditt valg: "; cin >> valg;

if (valg == 1) {

ohms_lov_beregne_u();
}

}

return 0;
}


Hvis oppgaven blir for omfattende, så er det for eksempel også mulig å dele opp oppgaven i flere mindre programmer, for eksempel et program som bare beregner ut i fra Ohms lov, ett som bare beregner ut i fra effektformelen, osv.

Det skal ellers være mulig å gjennomføre en «copy-paste» av programmet over inn i Codeblock, slik at dere kommer hurtig i gang.

Kjørbart programeksempel ut i fra «rammeverket» over:

Eksempel på «rammeverk» for et hovedprogram som skal kalle opp et antall funksjoner/methods:


#include <iostream>
#include <cstdlib>

using namespace std;

void funksjon_1()
{

    system("CLS");

    cout << endl << "Funksjon 1!" << endl << endl;

    system("pause");

    system("CLS");

}

void funksjon_2()
{

    system("CLS");

    cout << endl << "Funksjon 2!" << endl << endl;

    system("pause");

    system("CLS");

}


int main()

{
    int valg = 99;


    while (valg != 0) {

        system("CLS");

        cout << endl << endl << "* Hovedmeny *" << endl << endl;

        cout << "1. Funksjon 1:" << endl;
        cout << "2. Funksjon 2:" << endl << endl;

        cout << "0. Avslutt" << endl;

        cout << endl << "Tast inn ditt valg: "; cin >> valg;

        if (valg == 1) {

            funksjon_1();
        }

        if (valg == 2) {

            funksjon_2();
        }


    }

    return 0;
}


Eksempel på program som beregner spenningen over en motstand vha ohms lov:

 

#include <iostream>
#include <cstdlib>
 
using namespace std;

int main()

{

double spenning;
double strom;
double resistans;
char fortsette;

system("CLS");

cout << endl << "Ohms lov - Spenning over R:" << endl << endl;

cout << endl << "Tast inn resistansen: "; cin >> resistans;

cout << endl << "Tast inn verdien for strom: "; cin >> strom;

spenning = resistans * strom;

cout << endl << "Spenningen over R: " << spenning << " V" << endl << endl;

system("pause");

system("CLS");

}

Det skulle altså være mulig å utarbeide en liten serie med selvstendige små programmer som løser hver sin oppgave. Etter at disse programmene er utarbeidet og testet hver for seg, så skulle det være mulig å «sette sammen» innholdet i alle de små programmene til et stort program, slik at innholdet i de små programmene blir til «methods» i det store programmet. Ved hjelp av et hovedprogram så kan vi så «kalle opp» hver av de ulike «methods» som står for gjennomføringen av de ulike beregningene.

Et elevteam kan for eksempel ha ansvaret for hovedprogrammet og det som går på integrasjon av de ulike programmodullene. De andre elevteamene kan så ha ansvaret for å utvikle og programmere hver enkelt av de funksjonene som inngår i det store programmet.

Kan dere gå i gang med å få til dette?