Permalänk
Medlem
Skrivet av ZalamanderRelic:

Frågan är dessutom hur långt in i kursen är detta @micke_mj ?

Om detta är i början av programmering A så är det troligen bara do while , while och for som har gått igenom och inte try catch eller något sånt. Börja med det du kan finns det tid över kan du börja kika på om det går att säkra koden mot fel inmatning.

Skickades från m.sweclockers.com

Detta är ganska tidigt i kursen. Så helt klart är min lösning för svår. Men fick googla mig fram då jag inte har en aning var jag ska börja. Böckerna jag har hjälper inte ett smack.

Permalänk
Medlem
Skrivet av Roffe:

@micke_mj: Jag skulle gjort så här:

string inputString; int sum = 0; int counter = 0; do { Låt användaren mata in en textsträng. Lägg den i inputString. Konvertera inputString till heltal. Lägg resultatet i int number. Om konverteringen lyckades { Addera number till sum. Öka värdet på counter. } } while (inputString inte är tom eller count mindre än 3, vilket du nu vill använda) Skriv ut resultatet.

Om du avbryter loopen när inmatade talet är noll så blir det problem om ett eller flera av talen som ska matas in är noll. Bättre att kolla om strängen är tom. Kolla även att konverteringen lyckades annars blir det problem om användaren råkar skriva in en bokstav. Använd int.TryParse i stället för int.Parse.

Edit: Kolla gärna så det verkligen matats in något heltal innan du försöker visa resultatet.

fattar inget av det där, jo lite men inte mycket. Men lyckas nog googla fram mig en lösning imon snar framtid:):)

Permalänk
Medlem

Just nu :)

Detta har jag just nu, men försökte använda counter, får ej till det.
Sen blir inte uträkning till summa eller medelvärdet korrekt. Kanske är koden onödigt lång.

int summa = 0;
int summa2 = 0;
int counter = 0;
Console.WriteLine("Skriv 3 heltal!");
Console.WriteLine("Första talet: ");
string str = Console.ReadLine();
int number = Convert.ToInt32(str);
counter++;

Console.WriteLine("Andra talet: ");
str = Console.ReadLine();
number = Convert.ToInt32(str);
counter++;

Console.WriteLine("Tredje talet: ");
str = Console.ReadLine();
number = Convert.ToInt32(str);
counter++;

summa = (number * 3);
summa2 = (number / 3);
Console.WriteLine("Summan av talen blir: " + summa);
Console.WriteLine("Medelvärdet av talen blir: " + summa2);
Console.ReadLine();

Permalänk
Medlem
Skrivet av micke_mj:

fattar inget av det där, jo lite men inte mycket. Men lyckas nog googla fram mig en lösning imon snar framtid:):)

Jag har skrivit så tydligt jag kan hur jag tycker att uppgiften ska lösas. Du får själv översätta till C#. Jag skulle kunna ge dig koden direkt men då gör jag bara läxan åt dig och du lär dig ingenting av det. Säg dock gärna till om det är något specifikt du inte reder ut.

Visa signatur

Idioter förbokar datorspel.

Permalänk
Medlem

Så här tråkigt fick det bli

Hade ju varit roligare om man kunnat göra något snyggt. Men nu blir det rätt iaf...

int number1 = 0;
int number2 = 0;
int number3 = 0;
{
Console.WriteLine("Skriv 3 heltal!");
Console.WriteLine("Första talet: ");
string str = Console.ReadLine();
number1 = Convert.ToInt32(str);

Console.WriteLine("Andra talet: ");
str = Console.ReadLine();
number2 = Convert.ToInt32(str);

Console.WriteLine("Tredje talet: ");
str = Console.ReadLine();
number3 = Convert.ToInt32(str);

int summa = number1 + number2 + number3;

Console.WriteLine("Summan av talen blir: " + summa);
Console.WriteLine("Medelvärdet av talen blir: " + summa / 3);
Console.ReadLine();

Permalänk
Medlem
Skrivet av Roffe:

Jag har skrivit så tydligt jag kan hur jag tycker att uppgiften ska lösas. Du får själv översätta till C#. Jag skulle kunna ge dig koden direkt men då gör jag bara läxan åt dig och du lär dig ingenting av det. Säg dock gärna till om det är något specifikt du inte reder ut.

Jag förstår Roffe, tacksam för hjälpen.
Var mest min frustration du såg, men helt rätt att lite får jag kämpa.

Men du kan ju kolla om det ser någorlunda Ok nu?!

Permalänk

static void Main(string[] args) { int totalNumber = 0; int totalInput = 0; for(totalNumber = 0; totalInput < 3; totalInput++) { Console.WriteLine("Skriv in ett nummer"); int userInputNumber = int.Parse(Console.ReadLine()); totalNumber += userInputNumber; } Console.WriteLine("Summan blev " + totalNumber); Console.WriteLine("Medelvärdet blev " + totalNumber / totalInput); Console.ReadKey(); }

Detta är ett alternativt. ingen säkerhet direkt på att man skriver in rätt men funkar

Permalänk
Medlem

@micke_mj: Hade tråkigt på jobbet.
Använder C# 7 så du kan eventuellt vara tvungen att aktivera det i Visual Studio.

static void Main(string[] args) { var numbers = GetNumbers(); Console.WriteLine($"Average: {numbers.Average()}"); Console.WriteLine($"Sum: {numbers.Sum()}"); Console.ReadKey(); } public static List<int> GetNumbers() { var numbers = new List<int>(3); while(numbers.Count < 3) { Console.Write($"Please input the {HumanizeCount(numbers.Count)} number: "); var input = Console.ReadLine(); var success = int.TryParse(input, out int number); if(success) { numbers.Add(number); } } return numbers; } public static string HumanizeCount(int input) { // Fattigmans Humanizer. if(input == 0) { return "first"; } if(input == 1) { return "second"; } return "third"; }

Permalänk
Medlem

static void Main(string[] args) { int number= 0; for(int i = 0; i < 3; i++) { Console.WriteLine("Skriv in nummer " + (i+1)); number = int.Parse(Console.ReadLine()); } Console.WriteLine("Summan blev " + number); Console.WriteLine("Medelvärdet blev " + number/ 3); Console.ReadKey(); }

Såhär hade jag löst det.

Permalänk
Medlem
Skrivet av micke_mj:

Detta har jag just nu, men försökte använda counter, får ej till det.
Sen blir inte uträkning till summa eller medelvärdet korrekt. Kanske är koden onödigt lång.

int summa = 0;
int summa2 = 0;
int counter = 0;
Console.WriteLine("Skriv 3 heltal!");
Console.WriteLine("Första talet: ");
string str = Console.ReadLine();
int number = Convert.ToInt32(str);
counter++;

Console.WriteLine("Andra talet: ");
str = Console.ReadLine();
number = Convert.ToInt32(str);
counter++;

Console.WriteLine("Tredje talet: ");
str = Console.ReadLine();
number = Convert.ToInt32(str);
counter++;

summa = (number * 3);
summa2 = (number / 3);
Console.WriteLine("Summan av talen blir: " + summa);
Console.WriteLine("Medelvärdet av talen blir: " + summa2);
Console.ReadLine();

1. "summa" kommer alltid att vara sista inmatade talet gånger 3.

2. Som sagts tidigare, kolla upp Int.TryParse() för nu har du ingen möjlighet att kontrollera att inmatningen är korrekt.

3. "counter" gör ingenting och har ingen funktion i den här lösningen.

4. Personlig åsikt men din första lösning var vettigare.

Visa signatur

Idioter förbokar datorspel.

Permalänk
Medlem
Skrivet av ZalamanderRelic:

static void Main(string[] args) { int totalNumber = 0; int totalInput = 0; for(totalNumber = 0; totalInput < 3; totalInput++) { Console.WriteLine("Skriv in ett nummer"); int userInputNumber = int.Parse(Console.ReadLine()); totalNumber += userInputNumber; } Console.WriteLine("Summan blev " + totalNumber); Console.WriteLine("Medelvärdet blev " + totalNumber / totalInput); Console.ReadKey(); }

Detta är ett alternativt. ingen säkerhet direkt på att man skriver in rätt men funkar

Funkar men spontant skulle jag gissa att hans lärare uppskattar om man lägger in en felkontroll i en funktion som tar inmatning från användaren.

Visa signatur

Idioter förbokar datorspel.

Permalänk
Medlem
Skrivet av Roffe:

1. "summa" kommer alltid att vara sista inmatade talet gånger 3.

2. Som sagts tidigare, kolla upp Int.TryParse() för nu har du ingen möjlighet att kontrollera att inmatningen är korrekt.

3. "counter" gör ingenting och har ingen funktion i den här lösningen.

4. Personlig åsikt men din första lösning var vettigare.

Ok,
4. Bara för att jag googlat mig till den:)

Nedan funkar iaf..:
int number1 = 0;
int number2 = 0;
int number3 = 0;
{
Console.WriteLine("Skriv 3 heltal!");
Console.WriteLine("Första talet: ");
string str = Console.ReadLine();
number1 = Convert.ToInt32(str);

Console.WriteLine("Andra talet: ");
str = Console.ReadLine();
number2 = Convert.ToInt32(str);

Console.WriteLine("Tredje talet: ");
str = Console.ReadLine();
number3 = Convert.ToInt32(str);

int summa = number1 + number2 + number3;

Console.WriteLine("Summan av talen blir: " + summa);
Console.WriteLine("Medelvärdet av talen blir: " + summa / 3);
Console.ReadLine();

Men krånglig kanske?

Permalänk
Medlem
Skrivet av micke_mj:

Ok,
4. Bara för att jag googlat mig till den:)

Nedan funkar iaf..:
int number1 = 0;
int number2 = 0;
int number3 = 0;
{
Console.WriteLine("Skriv 3 heltal!");
Console.WriteLine("Första talet: ");
string str = Console.ReadLine();
number1 = Convert.ToInt32(str);

Console.WriteLine("Andra talet: ");
str = Console.ReadLine();
number2 = Convert.ToInt32(str);

Console.WriteLine("Tredje talet: ");
str = Console.ReadLine();
Console.WriteLine ("Inget tal matades in.");;

int summa = number1 + number2 + number3;

Console.WriteLine("Summan av talen blir: " + summa);
Console.WriteLine("Medelvärdet av talen blir: " + summa / 3);
Console.ReadLine();

Men krånglig kanske?

Du behöver inte ha en variabel för varje inmatat tal. Använd summa += Convert.ToInt32(str) efter inmatningarna och ta bort raden

int summa = number1 + number2 + number3;

och lägg till

int summa = 0;

överst.

Visa signatur

Idioter förbokar datorspel.

Permalänk
Medlem
Skrivet av Roffe:

Du behöver inte ha en variabel för varje inmatat tal. Använd summa += Convert.ToInt32(str) efter inmatningarna och ta bort raden

int summa = number1 + number2 + number3;

och lägg till

int summa = 0;

överst.

Grymt, tack!

Permalänk

@Roffe: ja absolut visst är det så

Permalänk
Avstängd
Skrivet av Roffe:

Det är ett skolexempel. Det handlar om att skaffa sig goda vanor som programmerare och lösningen jag förespråkar är knappast speciellt komplicerad. Med några få rader extra kod har du en funktion som kan hantera hur många tal som helst (nästan), inte bara tre. Jag tycker dock TS ska välja den lösning han tror att läraren uppskattar mest.

God vana som programmerare är att göra vad som efterfrågas, varken mer eller mindre. Igen: KISS - Keep It Simple Stupid!

Citat:

Edit: Förresten, med din lösning, vad händer om användaren råkar snubbla på tangenterna och matar in något ogiltigt? Du måste testa att varje inmatning är korrekt och om inte låta användaren göra om den, annars kommer en felaktig inmatning räknas som noll eller avbryta körningen.

Antingen hanterar man det när man tar in talen eller så gör man inte det eftersom uppgiften inte sa något om det. Min lösning, om man kan kalla den det, gick inte in på sådana detaljer.

Citat:

Jag vet. Egentligen en rätt meningslös diskussion men du får gärna motivera varför det är mer logiskt att ha testet i början på loopen, innan första inmatningen. Skit samma ur prestandasynpunkt som sagt så det är bara en fråga om personlig preferens.

Man använder do-while när man behöver en loop som alltid körs minst en gång, varför ska man alltid köra denna en gång? Behöver man en loop över huvud taget?

While är alltid mer logiskt eftersom villkoret står först och vi läser uppifrån och ner.

Permalänk
Medlem
Skrivet av SexMachine:

static void Main(string[] args) { int number= 0; for(int i = 0; i < 3; i++) { Console.WriteLine("Skriv in nummer " + (i+1)); number = int.Parse(Console.ReadLine()); } Console.WriteLine("Summan blev " + number); Console.WriteLine("Medelvärdet blev " + number/ 3); Console.ReadKey(); }

Såhär hade jag löst det.

Tack för du delar med dig.
Om jag inte är ute o cyklar så blir summan fel? fattas det inte ett plus + vid number ?= int.Parse(Console.ReadLine());

Permalänk
Medlem
Skrivet av micke_mj:

Tack för du delar med dig.
Om jag inte är ute o cyklar så blir summan fel? fattas det inte ett plus + vid number ?= int.Parse(Console.ReadLine());

Yupp det stämmer. += ska det vara

Permalänk
Medlem
Skrivet av snajk:

God vana som programmerare är att göra vad som efterfrågas, varken mer eller mindre. Igen: KISS - Keep It Simple Stupid!
Antingen hanterar man det när man tar in talen eller så gör man inte det eftersom uppgiften inte sa något om det. Min lösning, om man kan kalla den det, gick inte in på sådana detaljer.
Man använder do-while när man behöver en loop som alltid körs minst en gång, varför ska man alltid köra denna en gång? Behöver man en loop över huvud taget?

While är alltid mer logiskt eftersom villkoret står först och vi läser uppifrån och ner.

Håller med här angående KISS och lägger till YAGNI; You Aint Gonna Need It.
Det är väldigt lätt att vilja rädda världen och skriva super generell och dynamisk kod. Och det är ju ok sålänge man utbildar sig, för man lär sig mycket av att joxa och experimentera med koden, utforska alla vägar typ.
Men när man väl börjar få betalt för sittjobb inser man snabbt att man inte kan ta höjd för alla de miljoner hypotetiska scenarion som kan förekomma i ett projekt. Framför allt vill inte kunden betala för det...
Vill TS maxa sitt lärande kan man, när koden funkar, fråga sig 'kan jag göra på ett annat sätt' och labba vidare med andra lösningar. Då får man också reda på vad som inte funkar, och det är minst lika viktigt som att veta vad som funkar 😄

Skickades från m.sweclockers.com

Visa signatur

Oldschool [å:ldsku:l] adj. Användandet av datorprodukter som är äldre än 3 månader.

Permalänk
Medlem
Skrivet av snajk:

God vana som programmerare är att göra vad som efterfrågas, varken mer eller mindre. Igen: KISS - Keep It Simple Stupid!

Antingen hanterar man det när man tar in talen eller så gör man inte det eftersom uppgiften inte sa något om det. Min lösning, om man kan kalla den det, gick inte in på sådana detaljer.

Intressant filosofi. Om en kund kommer och klagar över att ditt program kraschar, tror du han blir glad om du försvarar dig med att han aldrig bad om någon felkontroll? Kommer antagligen att sluta med att han betalar dig för att lägga till det, vilket är det sista han någonsin betalar dig för.

Talar lite av erfarenhet här. Mitt jobb använder sig av ett system som tagits fram på beställning av ett företag som jobbar enligt den filosofin vilket innebär att alla som jobbar med systemet är förbannade på dem. Kanske dags att introducera en smula servicemindedness i utvecklarbranschen? Inte konstigt om det blir skit som det är nu...

Skrivet av snajk:

Man använder do-while när man behöver en loop som alltid körs minst en gång, varför ska man alltid köra denna en gång? Behöver man en loop över huvud taget?

Om man har en loop så är det klart att den måste köras minst en gång eftersom inmatningen av data ligger i loopen. Och nej det behövs ingen loop om man tycker det är ok att låsa upp sig, vilket bevisats. Det har också bevisats att det inte leder till kortare kod. Bara kraftigt begränsad.

Skrivet av snajk:

While är alltid mer logiskt eftersom villkoret står först och vi läser uppifrån och ner.

Jag kan tyvärr inte svara på det där utan att ta någon form av mer eller mindre subtila förolämpningar. Bäst jag lägger ner nu.

Visa signatur

Idioter förbokar datorspel.

Permalänk
Medlem

Viktigaste är att TS fått rätt på sin uppgift, och förhoppningsvis förstått den. Vilken typ av loop som passar bäst var kan vi starta en ny tråd om, verkar vara ett hett ämne

Permalänk
Avstängd
Skrivet av Roffe:

Intressant filosofi. Om en kund kommer och klagar över att ditt program kraschar, tror du han blir glad om du försvarar dig med att han aldrig bad om någon felkontroll? Kommer antagligen att sluta med att han betalar dig för att lägga till det, vilket är det sista han någonsin betalar dig för.

KISS är en bra filosofi för en utvecklare. Huruvida TS hanterar inmatningsfel eller ej är upp till henom och inget jag gick in på i mitt svar till henom. Jag kontrollerar input där det behövs, men inte där det inte behövs.

Citat:

Talar lite av erfarenhet här. Mitt jobb använder sig av ett system som tagits fram på beställning av ett företag som jobbar enligt den filosofin vilket innebär att alla som jobbar med systemet är förbannade på dem. Kanske dags att introducera en smula servicemindedness i utvecklarbranschen? Inte konstigt om det blir skit som det är nu...

Jo, som sagt så är det bra att hantera fel i många fall men ska man bygga för alla typer av fel som omöjligt kan uppstå så blir det ohanterbart. Om jag exempelvis tar in input från en metod som jag byggt till en annan metod som jag byggt och som endast är till för det så kontrollerar jag inte datatypen utan antar att den är vad jag förväntar mig. Vill någon annan använda mina metoder får de antingen se till att de skickar rätt data eller så får de bygga felhantering.

Citat:

Om man har en loop så är det klart att den måste köras minst en gång eftersom inmatningen av data ligger i loopen. Och nej det behövs ingen loop om man tycker det är ok att låsa upp sig, vilket bevisats. Det har också bevisats att det inte leder till kortare kod. Bara kraftigt begränsad.

Om man nu nödvändigt ska ha en loop här där det inte behövs så borde en for-loop vara bäst och snyggast, eller?

for(i=0, i<3, i++) { parsea input till summeringsvariabel... }

Citat:

Jag kan tyvärr inte svara på det där utan att ta någon form av mer eller mindre subtila förolämpningar. Bäst jag lägger ner nu.

Vad jag menar är att kod som är läsbar är värt mycket. Att skriva kod på så den ser ut som annan kod gör den mer läsbar. Alla andra, mycket mer använda, typer av loopar har villkoren först. Ingen förolämpning här.

Permalänk
Medlem
Skrivet av elBenko:

Viktigaste är att TS fått rätt på sin uppgift, och förhoppningsvis förstått den. Vilken typ av loop som passar bäst var kan vi starta en ny tråd om, verkar vara ett hett ämne

Det är väl sant men samtidigt kan ju hans betyg till viss del bero vad läraren tycker om hans lösningar. Om jag var lärare skulle jag absolut se det som ett plus om hans funktion lätt kunde utökas, samt om den hade någon form av kontroll för felinmatningar.

Men visst, huvudsaken är väl att det fungerar.

Visa signatur

Idioter förbokar datorspel.

Permalänk
Medlem

@Roffe: Jo, men det är hans tankesätt som ska betygsättas, inte andras. Jag håller fullt med om att man ska försöka göra en skalbar och elegant lösning i de fall man kan, det är bra praxis för framtiden, men om han inte kommer fram till det själv så kommer läraren märka rätt snabbt om det är saxat från nätet

Permalänk
Avstängd
Skrivet av Patrik93:

Tjena guys,
idag gör jag min sista uppgift som handlar om Sodacrate. När jag skrev värde och innehållet av backen så programmet fungerar utan problem. När jag skrev metoden för att lägga flaskor till backen uppståd problem att public void bak_dricka() och public void bak_dricka() går inte med varandra... Vet någon vad det kan bli för fel?

Programmet ser ut så här:

namespace ConsoleApplication4 { class Program { static void Main(string[] args) { var sodacrate = new Sodacrate(); sodacrate.run(); Console.Write("Välkommen, tryck och fortsätta vidare . . . "); Console.ReadKey(true); } } class Sodacrate { private string[] bak_baken = new string[24]; private int flaskor = 0; public int värde = 4; int sum = 0; public void run() { Console.WriteLine("Välkommen!"); int temp = 0; do { Console.WriteLine("Välj en alternavi!"); Console.WriteLine("1: Lägg flaska till baken"); Console.WriteLine("2: Värde av din baken"); Console.WriteLine("3: Innehållet av din baken"); Console.WriteLine("0: Slut!"); temp = int.Parse(Console.ReadLine());// man kan skriva in vilken alternavit vill man ha av dem 4 switch (temp) { case 1: bak_dricka(); break; case 2: pris_bak(); break; case 3: innehållet_bak(); break; case 0: Console.WriteLine("avsluta"); break; default: Console.WriteLine("välja en alternativ från dem som finns"); break; } } while (temp != 0); } public void bak_dricka() { string vyber = Console.ReadLine(); string limonada = ""; int temp = 0; do { Console.WriteLine("1:Cola"); Console.WriteLine("2:Loka"); Console.WriteLine("3:Fanta"); Console.WriteLine("4:Ramlösa"); Console.WriteLine("0: tillbaka till meny"); switch(vyber)//vyber betyder samma ord för att välja { case "1": limonada = "Kola";//limonada är förkotning för alla drickor break; case "2": limonada = "Loka"; break; case "3": limonada = "Fanta"; break; case "4" : limonada = "Ramlösa"; break; case "0" : temp = 1; break; default: limonada=" välja från 5 alternativ"; break; } Console.WriteLine(limonada + " är i baken"); for (int x=0; x<bak_baken.Length; x++) { if (flaskor == 24) { Console.WriteLine("baken är fullt!"); } else { Console.WriteLine("baken är inte fullt"); } } } public void pris_bak() { int sum = 0; for (int i = 0; i < flaskor; i++) sum = värde* flaskor; { Console.WriteLine("Din bak kostar " + sum + " kr"); } } public void innehållet_bak() { foreach (string flask in bak_baken) { if (flask != null) Console.WriteLine(flask); else Console.WriteLine("ledig plats i baken"); } } } }

Hoppas det inte finns barn på detta forum... flaskor i baken!

Permalänk

@Patrik93: vad tänkte du få ut med for loopen? vad var din ide? bara så jag kan få ett hum hur du tänkt

Permalänk
Medlem
Skrivet av snajk:

KISS är en bra filosofi för en utvecklare. Huruvida TS hanterar inmatningsfel eller ej är upp till henom och inget jag gick in på i mitt svar till henom. Jag kontrollerar input där det behövs, men inte där det inte behövs.

Det låter som att du tror att jag argumenterar emot enkelhet. Det gör jag absolut inte. Jag argumenterar bara emot inställningen att man bara ska göra det absolut minsta som begärts hela tiden. I det här fallet är det också så enkelt och smidigt att lägga till en rudimentär felkontroll samt förbereda för att kunna ta emot ett nästan obegränsat antal värden att jag inte kan komma på några som helst argument emot det.

Skrivet av snajk:

Jo, som sagt så är det bra att hantera fel i många fall men ska man bygga för alla typer av fel som omöjligt kan uppstå så blir det ohanterbart. Om jag exempelvis tar in input från en metod som jag byggt till en annan metod som jag byggt och som endast är till för det så kontrollerar jag inte datatypen utan antar att den är vad jag förväntar mig. Vill någon annan använda mina metoder får de antingen se till att de skickar rätt data eller så får de bygga felhantering.

Det där är dock helt irrelevant i det här fallet. Det handlar om att ta emot data från användaren och det krävs så lite för att gardera sig mot de vanligaste felen att jag inte kan se varför man inte skulle vilja göra det.

Skrivet av snajk:

Om man nu nödvändigt ska ha en loop här där det inte behövs så borde en for-loop vara bäst och snyggast, eller?

for(i=0, i<3, i++) { parsea input till summeringsvariabel... }

For-loopar funkar alldeles utmärkt när man vet i förväg hur många gånger de ska köras, vilket man förvisso vet i det här fallet. Jag tänker mest på att TS lärare nästa vecka kan säga att han ska modifiera sin funktion för att ta emot tio tal, eller helt enkelt ta emot tal tills användaren slutar. Då krävs det någon slags loop. Jag tror inte det ses som positivt att han lämnat in en lösning som inte går att utöka på ett elegant sätt.

Visa signatur

Idioter förbokar datorspel.

Permalänk
Medlem
Skrivet av elBenko:

@Roffe: Jo, men det är hans tankesätt som ska betygsättas, inte andras. Jag håller fullt med om att man ska försöka göra en skalbar och elegant lösning i de fall man kan, det är bra praxis för framtiden, men om han inte kommer fram till det själv så kommer läraren märka rätt snabbt om det är saxat från nätet

Ja det är sant. Det var därför jag skrev mitt förslag i klartext i stället för att ge honom koden direkt så att han skulle få klura något själv.

Visa signatur

Idioter förbokar datorspel.

Permalänk
Medlem

Decimaltal till heltal!

Hej igen, söker eran feedback=)

Ska omvandla decimaltal till heltal.
Är nedan lösning OK eller finns det f*n så mycket smidigare sätt att skriva koden på?
PS, tog en halvdag att komma fram till detta så ni fattar min nivå...

{
decimal decimaltal=0;
{

Console.WriteLine("Skriv ett decimaltal: ");
string str = Console.ReadLine();
decimaltal = Convert.ToDecimal(str);
{
Console.WriteLine("Decimaltalet" + " " + decimaltal +" "+ "avrudans till heltalet" + " " + Math.Round(decimaltal));
Console.ReadKey();
}
}

}

Får ej in koden så den blir lättläslig...

Permalänk
Medlem

@micke_mj: Jag tycker det där är ganska läsbart men en aning tillkrånglat. Vill du snygga till det lite så kan du göra så här:

static void Main () { Console.WriteLine ("Skriv ett decimaltal: "); string str = Console.ReadLine (); decimal decimaltal = Convert.ToDecimal (str); Console.WriteLine ("Decimaltalet" + " " + decimaltal + " " + "avrudans till heltalet" + " " + Math.Round (decimaltal)); Console.ReadKey (); }

Du behöver i detta fallet inte deklarera variabeln "decimaltal" i förväg utan kan göra det på samma rad som konverteringen sker.

Vill du korta ner ytterligare kan du strunta i att lägga inmatningen i en egen strängvariabel. Kan dock vara lite svårare att läsa för en nybörjare.

decimal decimaltal = Convert.ToDecimal (Console.ReadLine ());

Du kan även göra så här så slipper du att det kraschar om användaren skriver in ogiltiga tecken:

static void Main () { Console.WriteLine ("Skriv ett decimaltal: "); bool success = float.TryParse (Console.ReadLine (), out float decimaltal); if (success == true) Console.WriteLine ("Decimaltalet" + " " + decimaltal + " " + "avrudans till heltalet" + " " + Math.Round (decimaltal)); else Console.WriteLine ("Felaktig inmatning."); Console.ReadKey (); }

Hoppas det inte snurrar för mycket i skallen nu.

Visa signatur

Idioter förbokar datorspel.