Vinnaren i pepparkakshustävlingen!
  • 1
  • 2
2021-07-25, 11:48
  #1
Medlem
Hej!

Jag går just nu en kurs i C++ och vi har fått en uppgift att skapa ett program byggt med funktioner för att beräkna två stycken heltal.

man ska välja en av tre operatorer för att programmet ska välja vilken beräkning som ska användas.

vid a;
så ska de två heltalen adderas i följd,
t.ex om man har valt 1 och 5
så beräknas -->
1+2+3+4+5

vid m
så ska talen multipleceras
--> 1*2*3*4*5

vid k
--> 1^2^3^4^5


Jag har lyckats med alla funktioner förutom beräkna funktionen, har suttit fast i 2 veckor nu och kan verkligen inte förstå hur jag ska gå tillväga, någon här som har en idé hur man kan lösa detta?

Kod:
#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;
    }
    cout << min << " och " << max;
}
 
int berakna(int& min, int& max, char op)
{
    int svar = 0;
    
    for (int& min =1; min<max; min++)
    
        
    
    
    

    
    return svar;
}


    
    
    void skrivResultat (int svar)
{
    cout<<" Resultatet är: "<<svar<<endl;
}
__________________
Senast redigerad av Proton 2021-07-25 kl. 12:08.
Citera
2021-07-25, 11:55
  #2
Medlem
karlskrona1234s avatar
kan ej progga så jag kan inte vara till så stor hjälp

använd codetaggar för bövelen

använd för 1+2+3+4+5 5(1+5)/2=15.
(n/2)(a0+an) artimetisk summa
an första talet i summan, an sista talet i summan.
__________________
Senast redigerad av karlskrona1234 2021-07-25 kl. 11:58.
Citera
2021-07-25, 12:06
  #3
Medlem
Hmm, testade som du sa, men verkar inte fungera kodmässigt, annars är ju såklart matten helt korrekt.
Kod:
#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()  // här matar man in talen
{
    int nr;
    cout<<"Mata in tal ";
    cin>>nr;
     return nr;
}
 
char lasOp()  // här väljer man vad som ska beräknas
{
 
    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) // ordnar talen i följd, så att man får rätt ordning även om man väljer det stora talet först
{
   
    if (tal1<tal2)
    {
        min=tal1;
        max=tal2;
    }
    else
    {
        min=tal2;
        max=tal1;
    }
    cout << min << " och " << max;
}
 
int berakna(int& min, int& max, char op)  // beräknar svaret
{
    int svar = 0;
    
    {
        svar = max * (min + max);
    }
    
    
    
    
    
        
    
    
    

    
    return svar;
}


    
    
    void skrivResultat (int svar)
{
    cout<<" Resultatet är: "<<svar<<endl;
}
Citera
2021-07-25, 12:09
  #4
Moderator
Protons avatar
TS uppmanas läsa https://www.flashback.org/announcement.php?f=205 inför nästa inläggs postande.

/Moderator
Citera
2021-07-25, 12:12
  #5
Medlem
Kod:
#include <iostream>
 
using namespace std;
void skrivInfo ();
int lasEttTal();
char lasOp();
void ordna (int tal1int tal2intminintmax);
int berakna(intminintmax);
void skrivResultat (int result);
int main()
{
    
int tal1tal2minmaxsvar;
char op;
skrivInfo();
 
tal1 lasEttTal();
tal2 lasEttTal();
op=lasOp();
ordna(tal1tal2minmax);
    
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()  // här matar man in talen
{
    
int nr;
    
cout<<"Mata in tal ";
    
cin>>nr;
     return 
nr;
}
 
char lasOp()  // här väljer man vad som ska beräknas
{
 
    
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 tal1int tal2intminintmax// ordnar talen i följd, så att man får rätt ordning även om man väljer det stora talet först
{
   
    if (
tal1<tal2)
    {
        
min=tal1;
        
max=tal2;
    }
    else
    {
        
min=tal2;
        
max=tal1;
    }
    
cout << min << " och " << max;
}
 
int berakna(intminintmaxchar op)  // beräknar svaret
{
    
int svar 0;
    
    {
        
svar max * (min max);
    }
    
    
    
    
    
        
    
    
    

    
    return 
svar;
}


    
    
    
void skrivResultat (int svar)
{
    
cout<<" Resultatet är: "<<svar<<endl;

Citera
2021-07-25, 12:13
  #6
Moderator
Protons avatar
Citat:
Ursprungligen postat av Flightmodee

Jag har lyckats med alla funktioner förutom beräkna funktionen, har suttit fast i 2 veckor nu och kan verkligen inte förstå hur jag ska gå tillväga, någon här som har en idé hur man kan lösa detta?


Citat:
Ursprungligen postat av Flightmodee
Hmm, testade som du sa, men verkar inte fungera kodmässigt, annars är ju såklart matten helt korrekt.
Vi har förstått vid det här laget att något inte funkar som det ska.

VAD funkar inte som det ska? Riskerar du åtal om du talar om det?

Om du berättar istället vad du förväntar dig för resultat och vad du får ut istället blir det ju mycket enklare att hitta problemet, tror du inte det med?
Citera
2021-07-25, 12:22
  #7
Medlem
Jag är extremt dålig på detta, det som inte funkar är helt enkelt att jag inte vet hur jag ska skriva en kod för att beräkna de tre olika svaren.

När man kör programmet nu och väljer a så blir inte svaret korrekt.
Om man väljer 1 och 5, så ska svaret bli 15.
1 + 2 + 3 +4 +5 = 15

Programmet får det till 6 och man väljer tal 1 till 1 och tal2 till 5.
Och om man kör tal 1 = 5 och tal 2 = 1 så blir svaret 30.

Har ändrat lite misstag som gjorde att förra koden inte kunde kompileras.

Har ni något förslag på en funktion som kan beräkna det jag är ute efter?
alltså att talen ska adderas i följd, oberoende om man väljer det stora talet först eller sist, eftersom det finns en funktion som ska ordna talen i min och max.

Kod:
#include <iostream>
 
using namespace std;
void skrivInfo ();
int lasEttTal();
char lasOp();
void ordna (int tal1int tal2intminintmax);
int berakna(int tal1int tal2char op);
void skrivResultat (int result);
int main()
{
    
int tal1tal2minmaxsvar;
char op;
skrivInfo();
 
tal1 lasEttTal();
tal2 lasEttTal();
op=lasOp();
ordna(tal1tal2minmax);
    
svar berakna(tal1,tal2,op);
 
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()  // här matar man in talen
{
    
int nr;
    
cout<<"Mata in tal ";
    
cin>>nr;
     return 
nr;
}
 
char lasOp()  // här väljer man vad som ska beräknas
{
 
    
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 tal1int tal2intminintmax// ordnar talen i följd, så att man får rätt ordning även om man väljer det stora talet först
{
   
    if (
tal1<tal2)
    {
        
min=tal1;
        
max=tal2;
    }
    else
    {
        
min=tal2;
        
max=tal1;
    }
    
cout << min << " och " << max;
}
 
int berakna(int tal1int tal2char op)  // beräknar svaret
{
    
int svar 0;
    
    {
        
svar tal1 * (tal1 tal2);
    }
    
    
    
    
    
        
    
    
    

    
    return 
svar;
}


    
    
    
void skrivResultat (int svar)
{
    
cout<<" Resultatet är: "<<svar<<endl;

Citera
2021-07-25, 12:32
  #8
Medlem
Tack Karlskrona! Har börjat få ordning på detta nu,
nu fungerar både addition och multiplikation, det som återstår är kvadratsumman,

Om man väljer 3 och 5, så ska programmet beräkna ( 3*3 + 4*4 + 5*5)

Kod:
#include <iostream>
 
using namespace std;
void skrivInfo ();
int lasEttTal();
char lasOp();
void ordna (int tal1int tal2intminintmax);
int berakna(int tal1int tal2char op);
void skrivResultat (int result);
int main()
{
    
int tal1tal2minmaxsvar;
char op;
skrivInfo();
 
tal1 lasEttTal();
tal2 lasEttTal();
op=lasOp();
ordna(tal1tal2minmax);
    
svar berakna(tal1,tal2,op);
 
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()  // här matar man in talen
{
    
int nr;
    
cout<<"Mata in tal ";
    
cin>>nr;
     return 
nr;
}
 
char lasOp()  // här väljer man vad som ska beräknas
{
 
    
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 tal1int tal2intminintmax// ordnar talen i följd, så att man får rätt ordning även om man väljer det stora talet först
{
   
    if (
tal1<tal2)
    {
        
min=tal1;
        
max=tal2;
    }
    else
    {
        
min=tal2;
        
max=tal1;
    }
    
cout << min << " och " << max;
}
 
int berakna(int tal1int tal2char op)  // beräknar svaret
{
    
int svar 0;
    
    if (
op == 'a')
    {
        
svar tal1 * (tal1 tal2) / ;
    }
    
    else if (
op == 'm')
    
    {
        
svar 1;
        for (
int x tal1<= tal2x++)
            
svar *= x;
    }
    
    else if (
op == 'k')
    
    {
        
svar 1;
        for (
int x tal1<= tal2x++)
            
svar ^= x;
    }
    
    
    
        
    
    
    

    
    return 
svar;
}


    
    
    
void skrivResultat (int svar)
{
    
cout<<" Resultatet är: "<<svar<<endl;

Citera
2021-07-25, 12:35
  #9
Moderator
Protons avatar
Citat:
Ursprungligen postat av Flightmodee
Jag är extremt dålig på detta, det som inte funkar är helt enkelt att jag inte vet hur jag ska skriva en kod för att beräkna de tre olika svaren.

När man kör programmet nu och väljer a så blir inte svaret korrekt.
Om man väljer 1 och 5, så ska svaret bli 15.
1 + 2 + 3 +4 +5 = 15

Programmet får det till 6 och man väljer tal 1 till 1 och tal2 till 5.
Och om man kör tal 1 = 5 och tal 2 = 1 så blir svaret 30.

Har ändrat lite misstag som gjorde att förra koden inte kunde kompileras.

Har ni något förslag på en funktion som kan beräkna det jag är ute efter?
alltså att talen ska adderas i följd, oberoende om man väljer det stora talet först eller sist, eftersom det finns en funktion som ska ordna talen i min och max.

Kod:
#include <iostream>
 
using namespace std;
void skrivInfo ();
int lasEttTal();
char lasOp();
void ordna (int tal1int tal2intminintmax);
int berakna(int tal1int tal2char op);
void skrivResultat (int result);
int main()
{
    
int tal1tal2minmaxsvar;
char op;
skrivInfo();
 
tal1 lasEttTal();
tal2 lasEttTal();
op=lasOp();
ordna(tal1tal2minmax);
    
svar berakna(tal1,tal2,op);
 
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()  // här matar man in talen
{
    
int nr;
    
cout<<"Mata in tal ";
    
cin>>nr;
     return 
nr;
}
 
char lasOp()  // här väljer man vad som ska beräknas
{
 
    
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 tal1int tal2intminintmax// ordnar talen i följd, så att man får rätt ordning även om man väljer det stora talet först
{
   
    if (
tal1<tal2)
    {
        
min=tal1;
        
max=tal2;
    }
    else
    {
        
min=tal2;
        
max=tal1;
    }
    
cout << min << " och " << max;
}
 
int berakna(int tal1int tal2char op)  // beräknar svaret
{
    
int svar 0;
    
    {
        
svar tal1 * (tal1 tal2);
    }
    
    
    
    
    
        
    
    
    

    
    return 
svar;
}


    
    
    
void skrivResultat (int svar)
{
    
cout<<" Resultatet är: "<<svar<<endl;

Ett vanligt nybörjarmisstag som du själv just nu gör är att ta ALLDELES för stora tuggor i taget, dvs du försöker lösa alla problemen på en och samma gång. Foka på ett i taget så kommer ditt liv bli enklare.

Om vi börjar med din beräknafunktion ser den för tillfället skitkonstig ut och den kommer inte på något sätt leverera det du vill ha för addition.

Om vi börjar med additionen för att göra det enkelt för oss, vad är det du behöver göra för att få den att addera alla tal mellan min och max?

Hade jag varit du hade jag konstuerat en loop som får köra antalet steg mellan min och max och sen spara undan värdet i nån variabel som du returnerar.

Börja alltså med att få additionen att funka, sen kan du fundera på hur din subtraktion ska funka, ok?
Citera
2021-07-25, 12:44
  #10
Medlem
Citat:
Ursprungligen postat av Proton
Ett vanligt nybörjarmisstag som du själv just nu gör är att ta ALLDELES för stora tuggor i taget, dvs du försöker lösa alla problemen på en och samma gång. Foka på ett i taget så kommer ditt liv bli enklare.

Om vi börjar med din beräknafunktion ser den för tillfället skitkonstig ut och den kommer inte på något sätt leverera det du vill ha för addition.

Om vi börjar med additionen för att göra det enkelt för oss, vad är det du behöver göra för att få den att addera alla tal mellan min och max?

Hade jag varit du hade jag konstuerat en loop som får köra antalet steg mellan min och max och sen spara undan värdet i nån variabel som du returnerar.

Börja alltså med att få additionen att funka, sen kan du fundera på hur din subtraktion ska funka, ok?


Tack!
Har gjort om beräkna funktionen och nu fått addition och multiplikationen att fungera,

Kod:
int berakna(int tal1, int tal2, char op)  // beräknar svaret
{
    int svar = 0;
    
    if (op == 'a')
    {
        svar = tal1 * (tal1 + tal2) / 2 ;
    }
    
    else if (op == 'm')
    
    {
        svar = 1;
        for (int x = tal1; x <= tal2; x++)
            svar *= x;
    }

Det som återstår är alltså att beräkna kvadrering,
Om man väljer 3 och 5 så ska programmet beräkna:
( 3*3 + 4*4 + 5*5) = 50
Citera
2021-07-25, 12:49
  #11
Moderator
Protons avatar
Citat:
Ursprungligen postat av Flightmodee
Tack!
Har gjort om beräkna funktionen och nu fått addition och multiplikationen att fungera,

Kod:
int berakna(int tal1, int tal2, char op)  // beräknar svaret
{
    int svar = 0;
    
    if (op == 'a')
    {
        svar = tal1 * (tal1 + tal2) / 2 ;
    }
    
    else if (op == 'm')
    
    {
        svar = 1;
        for (int x = tal1; x <= tal2; x++)
            svar *= x;
    }

Det som återstår är alltså att beräkna kvadrering,
Om man väljer 3 och 5 så ska programmet beräkna:
( 3*3 + 4*4 + 5*5) = 50
Samma fenomen där. Titta på talserien och fundera på vad du behöver göra. En loop ser ju till exempel ut att kunna komma till din räddning här med, eller hur?

Vad är det du upplever som svårt med din kvadrering? Det kanske till och med är så att om du förklarar vad som strular lyckas du samtidigt se lösningen på problemet?

"Den funkar inte" är alltså inget bra svar på de frågorna.
Citera
2021-07-25, 13:00
  #12
Medlem
Citat:
Ursprungligen postat av Proton
Samma fenomen där. Titta på talserien och fundera på vad du behöver göra. En loop ser ju till exempel ut att kunna komma till din räddning här med, eller hur?

Vad är det du upplever som svårt med din kvadrering? Det kanske till och med är så att om du förklarar vad som strular lyckas du samtidigt se lösningen på problemet?

"Den funkar inte" är alltså inget bra svar på de frågorna.


Jag vet ärligt talat inte var jag ens ska börja för att beräkna det,

Testade med detta men det blir helt fel

Kod:
else if (op == 'k')
    
    {
        svar = 1;
        for (int x = tal1; x <= tal2; x++)
            svar = (x^x) + (x++^x++);
    }
Citera
  • 1
  • 2

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback