Just nu i M3-nätverket
Gå till innehåll
Serenity28

vad har gått fel?

Rekommendera Poster

Hej!

 

Jag håller på att göra en uppgift i funktioner. den går ut på att skriva in två heltal som ska adderas, multipliceras eller kvadreras i ordningsföljd. I följande kod (som är en liten del av uppgiften) ska de två talen som angetts ordnas i ordningsföljd. Men hur jag än gör så blir det inte de siffrorna jag matar in, utan stora tal. vad har gått fel? behöver ni kanske mer info?

 

void ordna (int tal1, int tal2, int min, int max)
{
 
    if (tal1<tal2)
    {
        min=tal1;
        max=tal2;
    }
    else
        min=tal2;
        max=tal1;
 
    cout << min << "och" << max;
}
 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
Postad (redigerade)

Nu var det länge sedan jag skrev C++, men måste du skicka in min och max som parametrar till funktionen? Kan du inte definera dessa lokalt?

 

I övrigt så har du glömt måsvingar efter else så max sätts antagligen inte korrekt där.

 

Det här sattes ihop efter minne, då jag tydligen inte har en C++ kompilator i min dator längre, så det kanske inte fungerar. Men det är antagligen hur jag hade löst det.

void ordna (int tal1, int tal2)
{
    int max, min;
    if (tal1<tal2)
    {
        min=tal1;
        max=tal2;
    }
    else
    {
        min=tal2;
        max=tal1;
    }
    cout << min << "och" << max;
}

Jag hittade en online C++ kompilator, så här är mitt test av funktionen.

http://www.cpp.sh/4obv

Redigerad av .M

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

tack för din hjälp!

Jag har försökt att bygga på mitt program. Men funktionen "lasOp" upprepas två gånger utan att göra någon nytta. Jag får inget resultat. Det är precis som att variabeln op inte skickas till funktionen beräkna. 

 

#include <iostream>
 
using namespace std;
void skrivInfo ();
int lasEttTal();
char lasOp();
void ordna (int tal1, int tal2, int min, int max);
int berakna(int min, int max);
void skrivResultat (int result);
int main()
{
int tal1, tal2, min, max, svar;
char op;
skrivInfo();
 
tal1 = lasEttTal();
tal2 = lasEttTal();
op=lasOp();
ordna(tal1, tal2, min, max);
svar = berakna(min,max);
 skrivResultat(svar);
return 0;
}
 
void skrivInfo ()
{
    cout << "Hej och välkommna! Programmet gör enkla beräkningar med de tal som matas in" << endl;
}
int lasEttTal()
{
    int nr;
    cout<<"Mata in tal ";cin>>nr;
     return nr;
}
 
char lasOp()
{
 
    char op;
    cout<<"Gör val för typ av beräkning."<<endl;
    cout<<"Skriv a för addera"<<endl;
    cout<<"Skriv m för multiplicera"<<endl;
    cout<<"Skriv k för kvadratsumman"<<endl;
    cin>>op;
    return op;
}
void ordna (int tal1, int tal2, int min, int max)
{
 
    if (tal1<tal2)
    {
        min=tal1;
        max=tal2;
    }
    else
    {
        min=tal2;
        max=tal1;
    }
}
 
int berakna (int min,int max)
{
 
    int i;
    int svar=0;
 
 
    switch (lasOp())
    {
        case 'a':
            for (i=min;i<=max;i++)
            svar=svar+i+i;
        break;
 
        case 'm':
        for (i=min;i<=max;i++)
            svar=(svar*1)*i*i;
        break;
 
        case 'k':
        for (i=min;i<=max;i++)
            svar=svar*i;
        break;
    }
return svar;
}
void skrivResultat (int svar)
{
    cout<<"Resultatet är"<<svar<<endl;
}

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

I din ordna-funktion är min och max in-parametrar och returnerar inga värden.

 

 

case 'm':

        for (i=min;i<=max;i++)
            svar=(svar*1)*i*i;

Blir ju inte mycket som händer där eftersom "svar" har värdet 0.

 

Gör en skrivbordsdebuggning, dvs sitt med ett papper och skriv upp för varje rad i programmet vad de olika variablerna får för värden.

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Du gör även en switch(lasOp()) trots att du redan gjort en op = lasOp() tidigare i programmet.

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

helst vill jag använda mig av en for loop men det fungerade inte i heller. Jag fick inget svar. Den här använde jag mig av innan. Men samma sak där.

 
int berakna (int min, int max, char op)
{
 
    int i;
    int svar = 0;
 
 
    if (op == 'a'){
 
    for (i=min;i<=max;i++)
    {
      svar=svar+i+i;
 
    }

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

I din ordna-funktion är min och max in-parametrar och returnerar inga värden.

 

Blir ju inte mycket som händer där eftersom "svar" har värdet 0.

 

Gör en skrivbordsdebuggning, dvs sitt med ett papper och skriv upp för varje rad i programmet vad de olika variablerna får för värden.

Jag upptäckte det också att det blir ju samma sak, svar är fortfarande noll. Menar du att jag behöver returnera parametrarna min och max?

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Du kan göra använda min och max funktioner. Borde finnas inbyggt i något C++ bibliotek, men annars är det enkelt att sätta ihop själv.

int min(int a, int 
{
    if(a < 
        return a;
    return b;
}

int max(int a,int 
{
    if(a < 
        return b;
    return a;
}

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Skapa ett nytt konto på vårt forum. Det är lätt!

Registrera ett nytt konto

Logga in

Redan medlem? Logga in här.

Logga in nu



×
×
  • Skapa nytt...