6 svar
1497 visningar
elmo111 är nöjd med hjälpen
elmo111 20
Postad: 2 dec 2021 21:56

Omvandla betygspoäng till betyg.

Hej.

Sitter lite fast med en uppgift. Man ska göra om betygspoäng till en bokstav med betyget. Man ska använda sig av metoder och arrayer.

Mitt problem: Man ska ha en metod för att omvandla poängen till en bokstav med betyg. Och en metod för att skriva ut betygen. Jag vet inte riktigt hur detta ska ske. Jag har en tanke som ni kan se på bilden nedan. Men vet inte riktigt vad jag ska skriva för något inuti betyg[] för att det ska bli rätt. Kan någon snälla snälla hjälpa??
 Länk till hela koden: https://pastebin.com/qpTXYB44

Lindehaven 820 – Lärare
Postad: 3 dec 2021 16:26

Din tanke är riktig, det är endast små detaljer som inte stämmer.

Din for-loop i läsPoäng() går ju igenom samtliga ämnen[i] så att poängen för respektive ämne sparas i poäng[i]. Du kan förbättra den genom att låta for-loopen vara den yttre slingan och while-loopen vara den inre. DÅ slipper användaren börja om från början om den skriver fel.

Att omvandla poäng till betyg för respektive ämne är inte svårare än att spara rätt bokstav för betyget i betyg[i]. De där Convert.ToChar() behövs inte och du ska inte spara betyget i poäng[i].

Vid utskrift i skrivUtBetyg() behöver du indexera betyg[] med betyg[i]. Annars går koden inte igenom kompilering.

using System;

namespace Betyg
{
    class Program
    {
        static void Main(string[] args)
        {
            string[] ämnen = { "Matematik", "Svenska", "Engelska", "Historia", "Fysik" };
            int[] poäng = new int[5];
            char[] betyg = { '-', '-', '-', '-', '-' };
            läsPoäng(ämnen, poäng);
            omvandlaPoäng(ämnen, poäng, betyg);
            skrivUtBetyg(ämnen, betyg);
            Console.ReadLine();
        }

        static void läsPoäng(string[] ämnen, int[] poäng)
        {
            bool rättSumma = true;
            int poangen;
            do
            {
                for (int i = 0; i < ämnen.Length; i++)
                {
                    Console.Write("Mata in poängen mellan 0-100 för " + ämnen[i] + ": ");
                    poangen = Convert.ToInt32(Console.ReadLine());
                    poäng[i] = poangen;
                    if (poäng[i] > 100 || poäng[i] < 0)
                    {
                        rättSumma = false;
                        Console.WriteLine("Ogiltig poängsumma. Poängen ska vara mellan 0-100.");
                        break;
                    }
                    else
                    {
                        rättSumma = true;
                    }
                }
            } while (!rättSumma);
        }

        static void omvandlaPoäng(string[] ämnen, int[] poäng, char[] betyg)
        {
            for (int i = 0; i < ämnen.Length; i++)
            {
                if (poäng[i] > 90 && poäng[i] <= 100)
                    betyg[i] = 'A';
                else if (poäng[i] > 80)
                    betyg[i] = 'B';
                else if (poäng[i] > 70)
                    betyg[i] = 'C';
                else if (poäng[i] > 60)
                    betyg[i] = 'D';
                else if (poäng[i] >= 50)
                    betyg[i] = 'E';
                else if (poäng[i] >= 0)
                    betyg[i] = 'F';
                else
                    betyg[i] = '!';
            }

        }

        static void skrivUtBetyg (string[] ämnen, char[] betyg)
        {
            Console.WriteLine("\n");
            for (int i = 0; i < ämnen.Length; i++)
                Console.WriteLine("Betyg för ämnet " + ämnen[i] + " : " + betyg[i]);
        }

    }

}
elmo111 20
Postad: 8 dec 2021 09:28
Lindehaven skrev:

Din tanke är riktig, det är endast små detaljer som inte stämmer.

Din for-loop i läsPoäng() går ju igenom samtliga ämnen[i] så att poängen för respektive ämne sparas i poäng[i]. Du kan förbättra den genom att låta for-loopen vara den yttre slingan och while-loopen vara den inre. DÅ slipper användaren börja om från början om den skriver fel.

Att omvandla poäng till betyg för respektive ämne är inte svårare än att spara rätt bokstav för betyget i betyg[i]. De där Convert.ToChar() behövs inte och du ska inte spara betyget i poäng[i].

Vid utskrift i skrivUtBetyg() behöver du indexera betyg[] med betyg[i]. Annars går koden inte igenom kompilering.

using System;

namespace Betyg
{
    class Program
    {
        static void Main(string[] args)
        {
            string[] ämnen = { "Matematik", "Svenska", "Engelska", "Historia", "Fysik" };
            int[] poäng = new int[5];
            char[] betyg = { '-', '-', '-', '-', '-' };
            läsPoäng(ämnen, poäng);
            omvandlaPoäng(ämnen, poäng, betyg);
            skrivUtBetyg(ämnen, betyg);
            Console.ReadLine();
        }

        static void läsPoäng(string[] ämnen, int[] poäng)
        {
            bool rättSumma = true;
            int poangen;
            do
            {
                for (int i = 0; i < ämnen.Length; i++)
                {
                    Console.Write("Mata in poängen mellan 0-100 för " + ämnen[i] + ": ");
                    poangen = Convert.ToInt32(Console.ReadLine());
                    poäng[i] = poangen;
                    if (poäng[i] > 100 || poäng[i] < 0)
                    {
                        rättSumma = false;
                        Console.WriteLine("Ogiltig poängsumma. Poängen ska vara mellan 0-100.");
                        break;
                    }
                    else
                    {
                        rättSumma = true;
                    }
                }
            } while (!rättSumma);
        }

        static void omvandlaPoäng(string[] ämnen, int[] poäng, char[] betyg)
        {
            for (int i = 0; i < ämnen.Length; i++)
            {
                if (poäng[i] > 90 && poäng[i] <= 100)
                    betyg[i] = 'A';
                else if (poäng[i] > 80)
                    betyg[i] = 'B';
                else if (poäng[i] > 70)
                    betyg[i] = 'C';
                else if (poäng[i] > 60)
                    betyg[i] = 'D';
                else if (poäng[i] >= 50)
                    betyg[i] = 'E';
                else if (poäng[i] >= 0)
                    betyg[i] = 'F';
                else
                    betyg[i] = '!';
            }

        }

        static void skrivUtBetyg (string[] ämnen, char[] betyg)
        {
            Console.WriteLine("\n");
            for (int i = 0; i < ämnen.Length; i++)
                Console.WriteLine("Betyg för ämnet " + ämnen[i] + " : " + betyg[i]);
        }

    }

}

Hej igen,

Tack så mycket för hjälpen!! De löste sig bra med betygen :)
Hur ska jag skriva do while loopen för att kunna få upp ett "felmeddelande" och låta användaren skriva om betygspoängen utan att börja om från början? Har försökt såhär, det funkar. Men felmeddelandet kommer ju såklart inte upp eftersom if satsen ligger utanför do while loopen. Men lägger jag in den inuti blir det ändå fel. (se koden nedan)

Och en sak till! (om du har tid och lust).
Ska skriva en ny metod där programmet ska skriva ut hur många A,C,F eleven har. Samt totalt antal betygspoäng.
Förstår inte riktigt hur jag ska lägga upp det... Skulle gissa att jag ska försöka sortera arrayen så A ligger först, C i mitten och F sist, och sedan ta det därifrån? 

for (int i = 0; i < ämnen.Length; i++)
{
do
{
Console.WriteLine("Mata in poängen mellan 0-100 för " + ämnen[i] + ": ");
poangen = Convert.ToInt32(Console.ReadLine());
poäng[i] = poangen;

} while (poäng[i] > 100 || poäng[i] < 0);
if (poäng[i] > 100 || poäng[i] < 0)
{
rättSumma = false;
Console.WriteLine("Ogiltlig poängsumma. Poängen ska vara mellan 0-100.");
break;
}
else
rättSumma = true;



Gokka 17
Postad: 8 dec 2021 22:57

Jag har precis gjort samma uppgift.

Angående do while loopen så ligger den  utanför for loopen i din senaste kod. Prova lägga den innan för for loopens { } . Du byter bara plats så att for loopen är yttre och do while inre. 
Det var nog så Lindehaven  menade.

Angående att omvandla poäng till betyg så gjorde jag en for loop med if sats. 

Är själv rätt nya på programmering så finns säkert andra sätt med. Men funkar fint för mig.

elmo111 20
Postad: 8 dec 2021 23:02
Gokka skrev:

Jag har precis gjort samma uppgift.

Angående do while loopen så ligger den  utanför for loopen i din senaste kod. Prova lägga den innan för for loopens { } . Du byter bara plats så att for loopen är yttre och do while inre. 
Det var nog så Lindehaven  menade.

Angående att omvandla poäng till betyg så gjorde jag en for loop med if sats. 

Är själv rätt nya på programmering så finns säkert andra sätt med. Men funkar fint för mig.

Okej, tack så mycket! :)
Har du något tips på hur jag ska göra min sista metod som ska vara "statistik"? Som ska räkna ut antal A,C & F?

Gokka 17
Postad: 8 dec 2021 23:07 Redigerad: 8 dec 2021 23:08

Såg jag skrev fel nu, det ska inte vara omvandla poäng utan jag menade räkna A, C och F som jag gjorde en for loop med if sats. = )

Sen gjorde jag en for loop som räknade summan av alla poäng och avslutade med en utskrift med antal A, C, F samt totala poängen.

elmo111 20
Postad: 8 dec 2021 23:14
Gokka skrev:

Såg jag skrev fel nu, det ska inte vara omvandla poäng utan jag menade räkna A, C och F som jag gjorde en for loop med if sats. = )

Sen gjorde jag en for loop som räknade summan av alla poäng och avslutade med en utskrift med antal A, C, F samt totala poängen.

Okej, vad schysst. Tack så mycket! :)

Svara Avbryt
Close