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

vad har gått fel?


Serenity28

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;
}
 
Länk till kommentar
Dela på andra webbplatser

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

Länk till kommentar
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;
}
Länk till kommentar
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.

Länk till kommentar
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;
 
    }
Länk till kommentar
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?

Länk till kommentar
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;
}
Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...