webForumDet fria alternativet

komprimera kod

6 svar · 255 visningar · startad av danii

daniiMedlem sedan sep. 2004215 inlägg
#1

Hur kan denna kod förbättras?
Jag skulle även vilja veta vad som är så viktigt med &. Varför funkar inte koden utan &?

#include <iostream>
using namespace std;

void omvandling(int& h, int& min, int& sec);

int main(){
    int h = 0;
    int min = 0;
    int sec = 300;
    int t;
    
    omvandling(h, min, sec);
    
    cout << h << "h " << min << "min " << sec << "sec";
    
    cin >> t;
    return 0;
}    

void omvandling(int& h, int& min, int& sec){
    
    h = sec/3600;
    min = (sec%3600)/60; 
    sec = sec%60;
}
Mc FettoMedlem sedan nov. 20022 355 inlägg
#2

För att du skickar in variablerna som referenser till minnesplats och de ändras i funktionen "omvandling" tar du bort & så finns det ingen referens och då spelar det ingen roll att du manipulerar dem i din funktion (de finns endast i funktionen då).

daniiMedlem sedan sep. 2004215 inlägg
#3

med andra ord så går det att manipulera/ändra ngt när man använder & medans man inte kan rucka variabeln om man inte har med &?

lunaMedlem sedan juli 2004181 inlägg
#4

så kan man säga...

när du skickar in en referens i en funktion så är det samma objekt du manipulerar som det du skickar in.

om du inte skickar in en referens så får du en kopia av objektet som enbart "lever" så länge funktionen körs.

Mc FettoMedlem sedan nov. 20022 355 inlägg
#5

danii skrev:

med andra ord så går det att manipulera/ändra ngt när man använder & medans man inte kan rucka variabeln om man inte har med &?

Precis, vill du inte ha referenser till variabler (minnesplats), så måste du skapa funktioner som returnerar värdet och som du då tar hand om i funktionsanropet:


int main(){
 
    int h = 10;
    int x;
    x =   omvandling(h);

    return 0;
}  

int omvandling(int val){
    val = val - 5;
    return val;
}

Dåligt exempel kanske men jag är trött..
x kommer nu ha värdet 5 efter funktionsanropet :)

daniiMedlem sedan sep. 2004215 inlägg
#6

Funkar inte & på fält?

#include <iostream>
using namespace std;

void statistik(int falt[]);
void mata_in(int& falt[]);

int falt[100];

int main(){
    
    int b;
    int t;
    
    do{
    cout << endl << "Meny\n___________________________" << endl;
    cout << "1 Presentera Statistik\n2 Mata in nya uppgifter\n3 Avsluta" << endl;
    cin >> b;
    
    switch(b){
        case 1:
            statistik(falt);
            break;
            
        case 2:
            mata_in(falt);
            break;
            
        default:
            break;
            
        
    }    
    }
    while(b != 3);    
    
    cin >> t;
    return 0;
}

void statistik(int falt[]){
    int i = 0;
    int b;
    int f;
    
    while(falt[i] > 0){     
        b += falt[i];
        i++;
    }
            
    f = (b == 0) ? 1 : i;
    cout << endl << "Antalet anst\x84llda : " << i << endl << "Medell\x94nen : " << b/f << endl;
}

void mata_in(int& falt[]){
    
    bool a = true;
    int c;
    int d;
    int j = 0;
    
    while(a){
        cout << "Mata in den anställdes lön : ";
        cin >> d;
        
        if(d == 0){
            a = false;
        }
        else{
            while(falt[j] > 0){
                    j++;
            }
            falt[j] = d;
        }
    }
}
Sang-draxMedlem sedan juli 2002581 inlägg
#7

danii skrev:

Funkar inte & på fält?

Jo då, men då skriver man

void minFunktion( int (&falt)[10] );

Dock är fält lite speciella och du kan ändra i dem även om du skriver

void minFunktion(int falt[]);
133 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
129 ms — hämta tråd, inlägg och bilagor (db)