9 svar
611 visningar
Kaptenstein är nöjd med hjälpen
Kaptenstein 14
Postad: 16 dec 2021 22:57 Redigerad: 17 dec 2021 11:02

Läsa in och omvandla poäng till betyg

Uppgiften lyder som följer.

Skriv en metod LäsPoäng för att läsa elevens betygspoäng i de olika ämnena.Poängen ska du spara i en array, vektor eller lista.
När metoden anropas så ska användaren få mata in ett antal betygspoäng.
Vilka betygspoäng som ska matas in styrs avinnehållet i fältet ämnen.

Skriv en metod som ska omvandla poängen till betyg enligt skalan A-F.
Betyget A motsvarar 100 poäng. Betygen ska du lagra i ett fält (array, vector eller list).

Som sagt jag är helt ny och fattar inte hur jag ska få till så att siffrorna blir bokstäverna så att säga.

 

Här kommer min kod.. Hoppas någon kan förklara för mig så jag förstår.

jag vill inte bara att någon löser det åt mig men förklarar och ger tips så jag kan lära mig :D tack för hjälpen!

#include <iostream>
#include <cmath>
#include <array>
#include <string>

using namespace std;

 


void lasPoang(string amnen [], int poang [], int n, char betyg[]){
int poangen;

for (int i = 0; i < n; i++){
cout << "Mata in poängen mellan 0-100 för " << amnen[i] << ": ";
cin >> poangen;
poang[i] = poangen;

}

}

void skrivUt(string amnen[], char betyg[], int antal) {


for(int i = 0; i < antal; i++){ 
cout << "Betyg i " << amnen[i] << ": "<< betyg[i] << endl;

}
}


int main()
{
string amnen [5] = {"Matematik","Svenska","Engelska","Historia","Fysik"};
int poang [6] = {100 <= 90, 90 <= 80, 80 <= 70, 70 <= 60, 60 <= 50, 50 <= 0};
char betyg [6] = {'A', 'B', 'C', 'D', 'E', 'F'};
int antal;

 

 


lasPoang(amnen, poang, 5, betyg);
for (int i = 0; i < 5; i++){
cout << amnen[i] << " : ";
cout << poang[i] << " ";


}

 

skrivUt(amnen, betyg, antal);

return 0;
}


Rubrik ändrad från "Tjenare! Jag är helt ny på programmering." till nuvarande. En beskrivande rubrik underlättar för de som svarar, och hjälper till att skilja trådar från varandra. Läs gärna mer om rubriksättning här. /Smutstvätt, moderator 

Programmeraren 3387
Postad: 17 dec 2021 15:15

Metoden lasPoang() lagrar poängen för varje ämne i arrrayen poang (index är samma som i amnen[]).

Du behöver en ny metod som går igenom poang-arrayen och fyller i en array (av samma längd) med bokstavsbetyg.

Själva "översättning" från poäng till bokstav gör du enklast med if-satser som kontrollerar poängintervallen.

Laguna Online 28562
Postad: 17 dec 2021 15:38

Den där int poang[6] innehåller bara nollor, för elementen är resultat av jämförelser. T.ex. ger "100 <= 90" värdet 0.

Kaptenstein 14
Postad: 18 dec 2021 09:49

Okej, tack för svar! 
hur ska jag skriva int poang[6] för att det ska bli rätt liksom?

jag vill ju ha så att om man skriver mellan 100-90 så ska de bli ett A. 
tänker att det blir ju avgörande för hur if-satsen ska skapas. 
har testat if( poang[i]=90<=100)

                       Betyg[i] = ’A’;

osv men det har inte funkat..                                     

Laguna Online 28562
Postad: 18 dec 2021 09:54

Nej, intervall som begrepp finns inte i C++. Du får uttrycka "x ligger i (80, 90)" som "x > 80 och x < 90".

Det finns säkert någon praktisk implementation av intervall i något bibliotek, kanske t o m standardbiblioteket, men inte i själva språket.

Kaptenstein 14
Postad: 19 dec 2021 12:39

Jag kanske är trög och så men hur ska jag skriva den metoden? hur ser for-loppen ut ut för en sådan?

Sen har jag skrivit en if-sats men den vill inte funka ändå sen vet jag inte vart i koden jag ska lägga den för att den ska funka liksom.. 

Tacksam för alla svar ni redan skrivit men får inte ihop det..

if(poang[6] < 90 && poang[6] == 100)
betyg[6] = 'A';
else if(poang[6] < 80 && > 90)
betyg[6] = 'B';
else if(poang[6] < 70 && > 80)
betyg[6] ='C';
else if(poang[6] < 60 && > 70)
betyg[6] = 'D';
else if(poang[6] = < 50 && > 60)
betyg[6] = 'E';
else if(poang[6] = > 50)
betyg[6] = 'F';

Programmeraren 3387
Postad: 19 dec 2021 13:14

För att testa ett intervall måste du jämföra med båda gränserna, t ex:

if (poang[i] >= 70  &&  poang[i] < 80)
  betyg[i] = 'C';

Använde index i eftersom du avser att loopa igenom alla dina insamlade poäng.

Peter_ 470 – Avstängd
Postad: 19 dec 2021 13:32 Redigerad: 19 dec 2021 16:27

Varför intervalltest när det räcker med en jämförelse per betygsnivå:

betyg[i] = 'A';       // Antag >= 90
if (poang[i] < 90)
betyg[i] = 'B';
if (poang[i] < 80)
betyg[i] = 'C';
if (poang[i] < 70)
betyg[i] = 'D';
if (poang[i] < 60)
betyg[i] = 'E';
if (poang[i] < 50)
betyg[i] = 'F';

Detta går självklart att skriva betydligt elegantare men för frågan så funkar lösningen!

Kaptenstein 14
Postad: 19 dec 2021 18:18

Tack Peter!

det funkar när jag testar den i ett annat blankt program men nu ska jag få in den under en funktion som sparar allt i en array, då är min nästa fråga hur man kan skriva den funktionen?

Jag försöker kolla runt på youtube osv men hittar inte vad jag vet rätt men så tänker jag så här.

void omvandlaPoang(char betyg[], int poang[], int 6) {

for(int i = o; i<6; i++) {

betyg[i] = 'A';

if (poang[i] < 90)

osv osv eller tänker jag helt fel då?

Kaptenstein 14
Postad: 19 dec 2021 19:16

Fick den att funka! Jag tackar alla som hjälpt mig genom att svara och gjort så jag förstod! Tack återigen!

Svara Avbryt
Close