C# Nybegynder, HJÆLP!

I dette forum kan du stille og svare på spørgsmål om C# programmering. Alle med en interesse for C# er velkommen!
Besvar
RonniChristiansen
Begynder
Indlæg:2
Tilmeldt:26. feb 2019, 10:46
C# Nybegynder, HJÆLP!

Indlæg af RonniChristiansen » 26. feb 2019, 10:51

Hej herinde.

Jeg er nybegynder indenfor programmering, og i den anledning fået fat i nogle øvelser jeg skal lave.
Jeg sidder dog fast ved en opgave, som jeg ikke lige kan få til at gå op.

Opgaven hedder
Lav et program, der kan beregne den korrekte karakter i forhold til procent
korrekt besvarelse. Programmet skal spørge brugeren efter et antal procent og udlæse
tilhørende karakter.

Omregningen foregår efter følgende nøgle:

92 - 100 % = 12
75 - 91 % = 10
67 - 74 % = 7
58 - 66 % = 4
50 - 57 % = 02
20 - 49 % = 00
0 - 19 % = -3


Jeg ville blive meget glad hvis der var en som ville hjælpe mig med at lave koden. Eller give mig nogle fif. :)
Jeg laver det i C# sproget, Console.App.

Håber der sidder nogle hajer derude.

Tak på forhånd.

jepperask
Geni
Geni
Indlæg:378
Tilmeldt:4. nov 2012, 17:57

Re: C# Nybegynder, HJÆLP!

Indlæg af jepperask » 26. feb 2019, 22:34

Du kunne gøre noget alá nedenstående, og evt. yderligere tjekke at tallet er gyldigt (mellem 0 og 100) osv.

Kode: Vælg alt

int percentage = Convert.ToInt32(Console.ReadLine());
		
if (percentage >= 92)
	Console.WriteLine("12");
else if (percentage >= 75)
	Console.WriteLine("10");
else if (percentage >= 67)
	Console.WriteLine("7");
else if (percentage >= 58)
	Console.WriteLine("4");
else if (percentage >= 50)
	Console.WriteLine("2");
else if (percentage >= 20)
	Console.WriteLine("00");
else
	Console.WriteLine("-3");

RonniChristiansen
Begynder
Indlæg:2
Tilmeldt:26. feb 2019, 10:46

Re: C# Nybegynder, HJÆLP!

Indlæg af RonniChristiansen » 27. feb 2019, 21:43

Tak for dit indlæg. Jeg vil lige prøve det af engang imorgen. :)

Jeg siger tak. :D

cristian
Moderator
Moderator
Indlæg:882
Tilmeldt:26. sep 2011, 21:31
Kontakt:

Re: C# Nybegynder, HJÆLP!

Indlæg af cristian » 4. mar 2019, 09:15

Else if bygget på denne måde virker ret omstændeligt, da du altid er nød til at teste det meste af kæden for det du søger.
Jo dårligere karakteren er jo mere af kæden skal testes.

Det bliver også hurtigt ret uoverskueligt, tag og læs denne diskussion omkring if-else vs switch statements
https://stackoverflow.com/questions/670 ... er-than-if

I denne diskussion er det Java vi taler om, men hav i mente at C# er bygget med udgangspunkt fra Java.

jepperask
Geni
Geni
Indlæg:378
Tilmeldt:4. nov 2012, 17:57

Re: C# Nybegynder, HJÆLP!

Indlæg af jepperask » 4. mar 2019, 19:19

cristian skrev:
4. mar 2019, 09:15
Else if bygget på denne måde virker ret omstændeligt, da du altid er nød til at teste det meste af kæden for det du søger.
Jo dårligere karakteren er jo mere af kæden skal testes.

Det bliver også hurtigt ret uoverskueligt, tag og læs denne diskussion omkring if-else vs switch statements
https://stackoverflow.com/questions/670 ... er-than-if

I denne diskussion er det Java vi taler om, men hav i mente at C# er bygget med udgangspunkt fra Java.
Der er dog tale om intervaller og ikke bare enkelte tal som switch-statements som regelt forventer. C# 7 kommer dog med fede opdateringer til switch, hvor det nok er muligt med en guard der tester om værdien er i intervallet. Jeg tror dog det vil være ækvivalent med if-else, da jeg tvivler på at der kan foretages et lookup som ved almindelige switch-statements. https://devblogs.microsoft.com/dotnet/n ... d765048836

cristian
Moderator
Moderator
Indlæg:882
Tilmeldt:26. sep 2011, 21:31
Kontakt:

Re: C# Nybegynder, HJÆLP!

Indlæg af cristian » 4. mar 2019, 19:37

Jeg kan selvfølgelig godt se hvad du mener. Jeg ved ikke hvor omstændigt det er da jeg ikke selv har testet det, men man kunne kigge på f.eks. Dette eksempel.

Kode: Vælg alt

  case 1: case 2: case 3: case 4: case 5: 
         System.out.println("testing case 1 to 5");
         break;
  case 6: case 7: case 8: case 9: case 10:
         System.out.println("testing case 6 to 10");
         break;
  default:
         System.out.println("default");
Tænker der er en bedre løsning end if else efter hinanden, selvom at det ikke nødvendigvis denne. Men det giver inspiration.

jepperask
Geni
Geni
Indlæg:378
Tilmeldt:4. nov 2012, 17:57

Re: C# Nybegynder, HJÆLP!

Indlæg af jepperask » 6. mar 2019, 08:25

cristian skrev:
4. mar 2019, 19:37
Jeg kan selvfølgelig godt se hvad du mener. Jeg ved ikke hvor omstændigt det er da jeg ikke selv har testet det, men man kunne kigge på f.eks. Dette eksempel.

Kode: Vælg alt

  case 1: case 2: case 3: case 4: case 5: 
         System.out.println("testing case 1 to 5");
         break;
  case 6: case 7: case 8: case 9: case 10:
         System.out.println("testing case 6 to 10");
         break;
  default:
         System.out.println("default");
Tænker der er en bedre løsning end if else efter hinanden, selvom at det ikke nødvendigvis denne. Men det giver inspiration.
Tja, jeg synes det er overkill at overveje performance/vedligeholdelse for eksemplet ovenfor. Hvis algoritmen skulle køre på et ukendt input, så kunne man overveje en smartere søgning med en træ-struktur eller lignende.

cristian
Moderator
Moderator
Indlæg:882
Tilmeldt:26. sep 2011, 21:31
Kontakt:

Re: C# Nybegynder, HJÆLP!

Indlæg af cristian » 20. mar 2019, 11:10

Tja, jeg synes det er overkill at overveje performance/vedligeholdelse for eksemplet ovenfor.
Det er min erfaring at det er oftest det der leder os til gode og effektive løsninger.

jepperask
Geni
Geni
Indlæg:378
Tilmeldt:4. nov 2012, 17:57

Re: C# Nybegynder, HJÆLP!

Indlæg af jepperask » 20. mar 2019, 21:00

cristian skrev:
20. mar 2019, 11:10
Tja, jeg synes det er overkill at overveje performance/vedligeholdelse for eksemplet ovenfor.
Det er min erfaring at det er oftest det der leder os til gode og effektive løsninger.
Jeg siger ikke at man ikke skal overveje performance/vedligeholdelse generelt.
Men for eksemplet her i tråden, giver det ikke mening at optimere if/else, og da slet ikke ved at plastre koden til med switch-cases.
Karakter-systemet ændrer sig nok ikke, og hvis det gør kræver det ikke den store indsats at rette mit snippet til.

Mit snippet udnytter desuden allerede at der kun behøves én sammenligning per interval, hvilket er muligt da der ikke er huller i intervallerne.

Besvar