Kan inte få till statistiken som i min inlämninguppgift i c++ (frågade läraren men fick inget svar)

Permalänk
Medlem

Kan inte få till statistiken som i min inlämninguppgift i c++ (frågade läraren men fick inget svar)

vi ska skriva in användarens poäng i fem ämnen,
omvandla poängen till A-F betyg,
samt skriva ut betygen,
sen beräkna hur många A, C & F som användaren har angett <--------- här är mitt problem
även räkna ihop totalpoängen.

Frågade lärare om hjälp om vilken metod jag skulle använda, men fick inget svar på det!

Helt ny på detta & känner mig väldigt frustrerad & dålig när jag inte kan.

detta har jag fått till:
(har lite på slutet som jag försökt med som inte funkar)

#include <iostream> #include <array> #include <cmath> using namespace std; int main() { string amnen[5] = { "Matematik", "Svenska", "Engelska", "Historia", "Fysik " }; int poang[5]{}; char betyg[6] = {'A', 'B', 'C', 'D', 'E', 'F'}; betyg[0] = 90-100; betyg[1] = 80-89; betyg[2] = 70-79; betyg[3] = 60-69; betyg[4] = 50-59; betyg[5] = 1-49; int antal = 0; cout << "Valkommen till ditt betyg\n"; cout << "Ange ditt poangbetyg (1-100) i " << amnen[0] << " : "; //lasPoang cin >> poang[0]; cout << "Ange ditt poangbetyg (1-100) i " << amnen[1] << " : "; cin >> poang[1]; cout << "Ange ditt poangbetyg (1-100) i " << amnen[2] << " : "; cin >> poang[2]; cout << "Ange ditt poangbetyg (1-100) i " << amnen[3] << " : "; cin >> poang[3]; cout << "Ange ditt poangbetyg (1-100) i " << amnen[4] << " : "; cin >> poang[4]; float total = 0; total = poang[0] + poang[1] + poang[2] + poang[3] + poang[4]; cout << " \n"; cout << " ==== Ditt Betyg ====\n"; // skrivUtBetyg cout << " --------------------------- \n"; for (int i = 0; i < 6; i++) { if (betyg[0] = poang[i] >= 90 && poang[i] <= 100) { cout << " " << amnen[i] << " | A \n"; cout << " --------------------------- \n"; } else if (poang[i] >= 80 && poang[i] < 90) { cout << " " << amnen[i] << " | B \n"; cout << " --------------------------- \n"; } else if (poang[i] >= 70 && poang[i] < 80) { cout << " " << amnen[i] << " | C \n"; cout << " --------------------------- \n"; } else if (poang[i] >= 60 && poang[i] < 70) { cout << " " << amnen[i] << " | D \n"; cout << " --------------------------- \n"; } else if (poang[i] >= 50 && poang[i] < 60) { cout << " " << amnen[i] << " | E \n"; cout << " --------------------------- \n"; } else if (poang[i] >= 1 && poang[i] < 50) { cout << " " << amnen[i] << " | F\n"; cout << " --------------------------- \n"; } } cout << "Totalt har du " << total << " poang\n"; // cout << "skriv ut " << betyg[1] << " nu \n"; /* for (int i = 0; i < 3; i++){ if (poang[i] = betyg[0]) { antal = antal + 1; cout << "Du har " << antal << " " <<betyg[0] << " st A\n"; } else if (betyg[2] = sum[1] + 1) { // har med 3 olika sum tidigare cout << "Du har " << sum[1] << " st C\n"; } else if (betyg[5] = sum[2] +1) { cout << "Du har " << sum[2] << " st F\n"; } } cout << "Totalt har du " << antal[0] << " poang\n"; cout << "Totalt har du " << antal[1] << " poang\n"; cout << "Totalt har du " << antal[2] << " poang\n"; */ return 0; }

Permalänk
Medlem

[ code] [ /code] utan mellanslag runt koden så är det lättare att läsa

Du måste spara antalet av alla olika betyg någonstans sedan måste du räkna ihop

Visa signatur

"One is always considered mad, when one discovers something that others cannot grasp."
- Ed Wood

Permalänk
Medlem

ja, men hur? får inte till det....

fick den att skriva ut det uträknade betyget (isf som jag nu har det sparat "som tex A" i cout.) men sen fick jag så många fel att jag var tvungen att ta tbx allt jag provat för att det ens skulle funka igen.....

Permalänk
Medlem
Skrivet av Marica:

ja, men hur? får inte till det....

fick den att skriva ut det uträknade betyget (isf som jag nu har det sparat "som tex A" i cout.) men sen fick jag så många fel att jag var tvungen att ta tbx allt jag provat för att det ens skulle funka igen.....

Problemet är lite att för att du ska lära dig kan ingen ge dig svaret rakt av, därav lättast om du först skriver in koden i [ code ] block så det blir lättare att läsa, sedan går igenom steg för steg vad du gör i varje metod, samt vad du vill att den ska göra och vad du verkar få för svar. Sedan efter det så ställ specifika frågor, det hjälper ofta att stega igenom koden och fundera på vad som händer i varje steg, det gör man även när man jobbar med avancerad kod för att hitta fel.

Visa signatur

"One is always considered mad, when one discovers something that others cannot grasp."
- Ed Wood

Permalänk
Medlem

Men jag har provat/letat i 2 dagar på hur jag ska får fram mitt omvandlat resultat, så jag kan räkna det antal av varje betyg men jag går ju bet, det bara far runt i hela huvudet....

Ska jag spara det i en ny array eller kan jag plocka det från minnet ovan?
Ska jag använda en ny for eller if eller nåt annat?

Permalänk
Medlem

Du räknar ju redan ut vilket betyg man får, ett enkelt sätt är ju att spara den informationen i en array.

Permalänk
Medlem

Kan inte C++ men du listar ju ut vilka betyg varje ämne har, skulle du kunna spara den informationen för de relevanta betygen på något sätt kanske? Utöver att skriva ut dem då.

Visa signatur

Primär: R9 3900X | ASUS X570-F Gaming | NH-D15 | 64GB@3200MHz | RTX 3080 10GB | Seasonic 850W | Fractal Define R6 |
Gamla bettan: i5 750@3.8GHz | 8GB | HD5770 | Corsair VS 550W | FD R2 |

Permalänk
Moderator
Festpilot 2020, Antiallo

@Marica: Jag har fixat till Code-taggar och flyttat tråden till rätt subforum.

Visa signatur

 | PM:a Moderatorerna | Kontaktformuläret | Geeks Discord |
Testpilot, Skribent, Moderator & Geeks Gaming Huvudadmin

Permalänk
Medlem
Skrivet av Mr.W:

Du räknar ju redan ut vilket betyg man får, ett enkelt sätt är ju att spara den informationen i en array.

har provat lite nu & sett nu att inget sparas i betyg alls, all info går bara från if-satsen.
hur får jag infon dit?

provade att stoppa in betyg i else if-satsen så här: men det gjorde ingen skillnad

if (betyg[0] = poang[i] >= 90 && poang[i] <= 100) {

cout << " " << amnen[i] << " | A \n";
cout << " --------------------------- \n";
else if (betyg[1] = poang[i] >= 80 && poang[i] < 90) {

cout << " " << amnen[i] << " | B \n";
cout << " --------------------------- \n";

Permalänk
Medlem
Skrivet av Daz:

Kan inte C++ men du listar ju ut vilka betyg varje ämne har, skulle du kunna spara den informationen för de relevanta betygen på något sätt kanske? Utöver att skriva ut dem då.

ja, det är det jag lurar på nu, men har inte fått dit det ännu, tyvärr

Permalänk

Ingen kommer att göra uppgiften åt dig, lyssna på vad Ferrat har sagt. Kolla genom din kod, sätt breakpoint och undersök vart felet sker och tänkte på stegen du går genom innan dess.

Programmet gör endast och bara exakt det du säger åt det att göra.

Jag ser många fel och förbättringar som skulle kunna göras. Kolla upp och läs på vad dom olika variabeltyperna är för något och vad dom används till.

Permalänk
Medlem
Skrivet av Marica:

Ska jag spara det i en ny array eller kan jag plocka det från minnet ovan?
Ska jag använda en ny for eller if eller nåt annat?

Du kan lösa det på båda sätten. Du kan lösa det utan en array genom att gå igenom arrayen med poäng och kolla hur många som motsvarar A och skriva ut det, sen gå igenom den igen och kolla hur många som motsvarar C och skriva ut det, o.s.v.

Det andra sättet är att ha en array där t.ex. första elementet är hur många A det finns, o.s.v. Då behöver du bara gå igenom poängen en gång och öka rätt element i arrayen för varje betyg du hittar. Fördelen med denna lösning är att den är snabbare eftersom du inte behöver gå igenom poängen flera gånger, vilket inte spelar någon roll i en sån här uppgift men ändå bra att tänka på för framtiden.

Lite andra saker att tänka på är att du verkar förvirrad över vad syftet med betyg-arrayen egentligen är. Du initialiserar den med bokstäverna A till F, sen skriver du direkt över den med siffror (där t.ex. 90-100 = -10). Är det kanske tänkt att du egentligen ska använda den arrayen för att räkna antalet av varje betyg?

Tänk också på att = är en tilldelning medan == är en likhetsjämförelse. Så när du skriver t.ex. if(poang[i] = betyg[0]) så skriver du över poang[i] med värdet av betyg[0], vilket sen kommer vara falskt om värdet är 0 och sant annars. Så många av dina if-satser gör inte vad du tänkt att de ska göra.

Permalänk
Medlem
Skrivet av perost:

Du kan lösa det på båda sätten. Du kan lösa det utan en array genom att gå igenom arrayen med poäng och kolla hur många som motsvarar A och skriva ut det, sen gå igenom den igen och kolla hur många som motsvarar C och skriva ut det, o.s.v.

Det andra sättet är att ha en array där t.ex. första elementet är hur många A det finns, o.s.v. Då behöver du bara gå igenom poängen en gång och öka rätt element i arrayen för varje betyg du hittar. Fördelen med denna lösning är att den är snabbare eftersom du inte behöver gå igenom poängen flera gånger, vilket inte spelar någon roll i en sån här uppgift men ändå bra att tänka på för framtiden.

Lite andra saker att tänka på är att du verkar förvirrad över vad syftet med betyg-arrayen egentligen är. Du initialiserar den med bokstäverna A till F, sen skriver du direkt över den med siffror (där t.ex. 90-100 = -10). Är det kanske tänkt att du egentligen ska använda den arrayen för att räkna antalet av varje betyg?

Tänk också på att = är en tilldelning medan == är en likhetsjämförelse. Så när du skriver t.ex. if(poang[i] = betyg[0]) så skriver du över poang[i] med värdet av betyg[0], vilket sen kommer vara falskt om värdet är 0 och sant annars. Så många av dina if-satser gör inte vad du tänkt att de ska göra.

Tack, ska prova det

Permalänk
Medlem
Skrivet av Marica:

ja, det är det jag lurar på nu, men har inte fått dit det ännu, tyvärr

Du kan nog göra mer i en IF-sats än du redan gör. När du upptäcker ett C t.ex. så skulle du kunna komma ihåg det någonstans. En simpel lösning vore troligen att bara ha en räknare som heter antalC och när du stöter på ett C så kör du +1 i den. En snyggare lösning är nog en array med antalet av alla betygssteg i sig men det verkar inte vara ett krav för uppgiften.

Visa signatur

Primär: R9 3900X | ASUS X570-F Gaming | NH-D15 | 64GB@3200MHz | RTX 3080 10GB | Seasonic 850W | Fractal Define R6 |
Gamla bettan: i5 750@3.8GHz | 8GB | HD5770 | Corsair VS 550W | FD R2 |

Permalänk
Medlem
Skrivet av Daz:

Du kan nog göra mer i en IF-sats än du redan gör. När du upptäcker ett C t.ex. så skulle du kunna komma ihåg det någonstans. En simpel lösning vore troligen att bara ha en räknare som heter antalC och när du stöter på ett C så kör du +1 i den. En snyggare lösning är nog en array med antalet av alla betygssteg i sig men det verkar inte vara ett krav för uppgiften.

Så i varje if-sats så kan jag alltså lägga till i antalA/C/F
men skriver man bara den som:

antalA = antalA +1;

& sen kör man bara cout på antalA?

Vet inte om jag skulle ha det på ett annat sätt med utskriften, så där fick jag till det! ~
var bara så nöjd när det funkar.....

Permalänk
Medlem

++

Skrivet av Marica:

sen beräkna hur många A, C & F som användaren har angett <--------- här är mitt problem

Hade lite svårt att tolka. Men jag antar att du vill räkna ut antalet A,C samt F som man uppnått.

Skapa en variabel för varje betyg t.ex;

int aBetyg = 0;
int cBetyg = 0;
int fBetyg = 0;

Sedan efter man matat in poängen så kollar ju redan programmet vilket betyg man uppnått.
Har man uppnått "A", så öka bara variabeln "aBetyg" med 1(ett).
Dvs. Direkt efter att du kollat om man når upp till A så låt "aBetyg" öka med 1(ett).
Dvs. aBetyg++;

#include <iostream> #include <array> #include <cmath> using namespace std; int main() { string amnen[5] = { "Matematik", "Svenska", "Engelska", "Historia", "Fysik " }; int poang[5]{}; char betyg[6] = {'A', 'B', 'C', 'D', 'E', 'F'}; betyg[0] = 90-100; betyg[1] = 80-89; betyg[2] = 70-79; betyg[3] = 60-69; betyg[4] = 50-59; betyg[5] = 1-49; int antal = 0; int aBetyg = 0; int cBetyg = 0; int fBetyg = 0; cout << "Valkommen till ditt betyg\n"; cout << "Ange ditt poangbetyg (1-100) i " << amnen[0] << " : "; //lasPoang cin >> poang[0]; cout << "Ange ditt poangbetyg (1-100) i " << amnen[1] << " : "; cin >> poang[1]; cout << "Ange ditt poangbetyg (1-100) i " << amnen[2] << " : "; cin >> poang[2]; cout << "Ange ditt poangbetyg (1-100) i " << amnen[3] << " : "; cin >> poang[3]; cout << "Ange ditt poangbetyg (1-100) i " << amnen[4] << " : "; cin >> poang[4]; float total = 0; total = poang[0] + poang[1] + poang[2] + poang[3] + poang[4]; cout << " \n"; cout << " ==== Ditt Betyg ====\n"; // skrivUtBetyg cout << " --------------------------- \n"; for (int i = 0; i < 6; i++) { if (betyg[0] = poang[i] >= 90 && poang[i] <= 100) { aBetyg++; cout << " " << amnen[i] << " | A \n"; cout << " --------------------------- \n"; } else if (poang[i] >= 80 && poang[i] < 90) { cout << " " << amnen[i] << " | B \n"; cout << " --------------------------- \n"; } else if (poang[i] >= 70 && poang[i] < 80) { cBetyg++; cout << " " << amnen[i] << " | C \n"; cout << " --------------------------- \n"; } else if (poang[i] >= 60 && poang[i] < 70) { cout << " " << amnen[i] << " | D \n"; cout << " --------------------------- \n"; } else if (poang[i] >= 50 && poang[i] < 60) { cout << " " << amnen[i] << " | E \n"; cout << " --------------------------- \n"; } else if (poang[i] >= 1 && poang[i] < 50) { fBetyg++; cout << " " << amnen[i] << " | F\n"; cout << " --------------------------- \n"; } } cout << "Totalt har du " << total << " poang\n"; // cout << "skriv ut " << betyg[1] << " nu \n"; /* for (int i = 0; i < 3; i++){ if (poang[i] = betyg[0]) { antal = antal + 1; cout << "Du har " << antal << " " <<betyg[0] << " st A\n"; } else if (betyg[2] = sum[1] + 1) { // har med 3 olika sum tidigare cout << "Du har " << sum[1] << " st C\n"; } else if (betyg[5] = sum[2] +1) { cout << "Du har " << sum[2] << " st F\n"; } } cout << "Totalt har du " << antal[0] << " poang\n"; cout << "Totalt har du " << antal[1] << " poang\n"; cout << "Totalt har du " << antal[2] << " poang\n"; */ return 0; }

Visa signatur

[IT-Dept]
Ryzen 1700 OC - 32 - 1070

Permalänk
Medlem
Skrivet av Daz:

Du kan nog göra mer i en IF-sats än du redan gör. När du upptäcker ett C t.ex. så skulle du kunna komma ihåg det någonstans. En simpel lösning vore troligen att bara ha en räknare som heter antalC och när du stöter på ett C så kör du +1 i den. En snyggare lösning är nog en array med antalet av alla betygssteg i sig men det verkar inte vara ett krav för uppgiften.

Tackar så mycket för hjälpen! Det funkade!
Hoppar glädjeskutt nu!
Trevlig helg!

Permalänk
Medlem
Skrivet av Marica:

Tackar så mycket för hjälpen! Det funkade!
Hoppar glädjeskutt nu!
Trevlig helg!

Posta gärna din slutgiltiga kod, inom code-taggar, så alla kan se den. Alltid kul att lära sig nya saker

Visa signatur

Primär: R9 3900X | ASUS X570-F Gaming | NH-D15 | 64GB@3200MHz | RTX 3080 10GB | Seasonic 850W | Fractal Define R6 |
Gamla bettan: i5 750@3.8GHz | 8GB | HD5770 | Corsair VS 550W | FD R2 |