Permalänk
Medlem

C# Programmering

Hej,
Är total Noob på programmering.

Frågan 7.1.3 lyder:
Skapa ett program där man får mata in tre heltal. Programmet beräknar sedan summan och medelvärdet av dessa tal.

Tacksam för hjälp!(JA jag vet det är superenkel, om man kan det)

§3.4 /moderator
Permalänk
Medlem

Vi gör inte dina skoluppgifter åt dig. Om du istället börjar med att försöka och om du fastnar så kanske vi kan hjälpa dig med en specifik sak.

Permalänk
Medlem

Kan ge dig tips på vad du behöver kolla upp/kunna

veta hur man skapar ett projekt med en konsollapplikation i exempelvis visual studio
veta hur man deklarerar variabel av typen integer (heltal)
veta hur man tar emot inmatning från konsollfönstret (tips, ReadLine())
veta hur man sparar ett värde till en variabel
veta hur man adderar flera heltal och sparar värdet till en variabel
veta hur man beräknar medelvärdet av flera variabler och sparar värdet till en variabel
veta hur man skickar variablers värden till konsollfönstret (tips, WriteLine())

Jobba i den ordningen, googla hur man gör respektive moment, sätt ihop projektet och tryck Run

Permalänk
Hedersmedlem

@micke_mj *Trådstart redigerat*

Observera att vi inte tillåter direkt uppgiftslösning/läxhjälp i forumet (typ här är uppgiften, lös den åt mig), men det är givetvis helt ok att be om hjälp ifall man har fastnat i ett delmoment.
/moderator

Visa signatur

Danskjävel så krattar som en skrivare...

Permalänk

Det du ska göra är att ta in 3st heltal eller egentligen oändligt många inmatningar när du skapar programmet så blir det:
inmatning + inmatning + inmatning +inmatning detta ska lagras i en variabel eller innehåll i variabel + inmatning

Samtidigt så måste du hålla koll på hur många inmatningar som gjorts vilket är då för varje inmatning så är det variabel + 1

För medelvärdet är det summan av inmatning / antalet inmatningar.

Permalänk
Medlem

Skriv ett inlägg med den kod du har.

Permalänk
Medlem

ska försöka, men är helt jävla grön:)

Permalänk
Medlem

Hur får jag fram summan?

static void Main(string[] args)
{
Console.WriteLine("Skriv ett heltal: ");
int num = int.Parse(Console.ReadLine());
int avg = 0;
int counter = 0;
while (num != 0)
{
avg += num;
counter++;
Console.WriteLine("Skriv ett till heltal: ");
num = int.Parse(Console.ReadLine());

}
Console.WriteLine("Summan av talen blir:", ? );
Console.WriteLine("Medelvärdet blir : {0}", avg/counter);
Console.ReadLine();
}

Permalänk
Medlem

Ett tips är att inte gör en loop i detta fall (ty 3 är ett bestämt antal, ifall frågan skulle vara "låt användaren mata in ett godtyckligt antal tal o sluta med 0" så skulle en loop vara ett bra alternativ). Be användaren istället mata in 3 tal och sen beräkna sakerna.

Permalänk
Medlem

Tänk på att metod och variabelnamn är viktiga. Namnet ska spegla vad det är/gör.
Du har redan en variabel som lagrar summan av talen, men du har gett den ett missvisande namn 😉

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

Du är på rätt väg men du behöver jobba på inputen. Du kan göra t ex en for loop som körs 3 gånger eller bara fråga tre gånger i rad om input. En for loop är bra att använda om du vet hur mycket du ska iterera, i det här fallet tre.

Permalänk
Skrivet av micke_mj:

static void Main(string[] args)
{
Console.WriteLine("Skriv ett heltal: ");
int num = int.Parse(Console.ReadLine());
int avg = 0;
int counter = 0;
while (num != 0)
{
avg += num;
counter++;
Console.WriteLine("Skriv ett till heltal: ");
num = int.Parse(Console.ReadLine());

}
Console.WriteLine("Summan av talen blir:", ? );
Console.WriteLine("Medelvärdet blir : {0}", avg/counter);
Console.ReadLine();
}

Jag skulle nog inte använda while utan kanske fundera på for loop

Jösses vad konstigt det kändes att skriva lite c# efter att ha plöjt java till förbannelse

Permalänk
Medlem
Skrivet av ZalamanderRelic:

Jag skulle nog inte använda while utan kanske fundera på for loop

Jösses vad konstigt det kändes att skriva lite c# efter att ha plöjt java till förbannelse

Fuck Java, C# <3

Permalänk
Medlem

While är överlägset bättre än en loop här då man kan sätta andra brytande villkor utan att behöva använda break. Dessutom kan man testa counter mot ett förutbestämt värde för antalet tal man behöver mata in.

Visa signatur

"Om man arbetar tillräckligt länge med att förbättra ett föremål går det sönder. "

Hjälp oss göra världen lite snällare! www.upphittat.nu

Permalänk
Medlem

Bara som en hint.

Console.WriteLine("Summan av talen blir:", ? );
Console.WriteLine("Medelvärdet blir : {0}", avg/counter);

Där delar du ju totala summan i antalet gånger man matat in ett nummer. Du har alltså svarat på din egna fråga.

Visa signatur

ASUS ROG MAXIMUS VIII HERO || i7 7700K @ 4.9 Ghz - Delid || Corsair Vengeance DDR4 3200MHz 32GB || ASUS STRIX GeForce GTX 1080 Ti 11GB || Vattenkyld || 4.25 TB Hdd

Permalänk
Skrivet av Baxtex:

Fuck Java, C# <3

mm c# har mycket bra grejer när det ska implementeras med windows tycker jag iallafall nu när jag också håller på lär mig har kikat en del på c# men av någon anledning så flyter mina fingrar bättre på java

Permalänk
Medlem
Skrivet av ZecretW:

While är överlägset bättre än en loop här då man kan sätta andra brytande villkor utan att behöva använda break. Dessutom kan man testa counter mot ett förutbestämt värde för antalet tal man behöver mata in.

do-while skulle jag använt.

Skickades från m.sweclockers.com

Visa signatur

Idioter förbokar datorspel.

Permalänk
Medlem

@Roffe: om du använder do kan du aldrig skippa loopen, text om antalet inmatade tal ska vara 0.

Visa signatur

"Om man arbetar tillräckligt länge med att förbättra ett föremål går det sönder. "

Hjälp oss göra världen lite snällare! www.upphittat.nu

Permalänk
Medlem
Skrivet av ZecretW:

@Roffe: om du använder do kan du aldrig skippa loopen, text om antalet inmatade tal ska vara 0.

Men om man inte ska mata in något tal, varför köra funktionen alls?

Visa signatur

Idioter förbokar datorspel.

Permalänk
Medlem

@Roffe: man kanske ska mata någon kod kopplad till ett kort och vissa kort har 4 siffror, vissa har 6 siffror och vissa kort har ingen kod alls. Då vill man ju inte behöva mata in minst en siffra för det kortet och inte heller skriva något extra villkor för att hantera det.

Stirra dig inte blind på att göra en lösning som bara kan lösa ett problem. Generalisera så mycket du kan så du kan återanvända din kod.

Visa signatur

"Om man arbetar tillräckligt länge med att förbättra ett föremål går det sönder. "

Hjälp oss göra världen lite snällare! www.upphittat.nu

Permalänk
Medlem

@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.

Visa signatur

Idioter förbokar datorspel.

Permalänk
Medlem
Skrivet av ZecretW:

@Roffe: man kanske ska mata någon kod kopplad till ett kort och vissa kort har 4 siffror, vissa har 6 siffror och vissa kort har ingen kod alls. Då vill man ju inte behöva mata in minst en siffra för det kortet och inte heller skriva något extra villkor för att hantera det.

Stirra dig inte blind på att göra en lösning som bara kan lösa ett problem. Generalisera så mycket du kan så du kan återanvända din kod.

Jag håller absolut med om att man ska försöka skriva sin kod anpassningsbar men det finns gränser för allt. Den här funktionen skulle räkna ut medelvärden, inte ta emot kortkoder. Jag för har lite svårt att se vitsen med att veta medelvärdet av siffrorna i ens kortkoder och dessutom funkar do-while fortfarande utmärkt även om första inmatningen är tom.

Visa signatur

Idioter förbokar datorspel.

Permalänk
Medlem

+1 med TryParse över Parse i sådana här fall, läraren brukar ge pluspoäng för sånt.

Och ska man då kontrollera inmatning så kör man fördelaktigt programmet i en loop, så man kan backa/inte öka räknaren om inmatningen inte är godkänd.

Tänk på att använda variabelnamn som är beskrivande. Att köra namnet "avg" på en variabel som i praktiken innehåller summan känns lite förvirrande

Permalänk

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

Permalänk
Avstängd
Skrivet av micke_mj:

Hej,
Är total Noob på programmering.

Frågan 7.1.3 lyder:
Skapa ett program där man får mata in tre heltal. Programmet beräknar sedan summan och medelvärdet av dessa tal.

Tacksam för hjälp!(JA jag vet det är superenkel, om man kan det)

Problemet går förstås att lösa på massvis av sätt. Enklast, eftersom det inte är krav på någon loop eller att du ska hantera ett okänt antal tal, borde vara att bara helt enkelt fråga efter första andra och tredje talet, summera dem och dela dem för att få fram medel. Man kan förstås stila och göra det hur komplicerat som helst, men det är ju ganska centralt inom programmering att inte göra saker mer komplicerade än nödvändigt. KISS osv.

Skrivet av Roffe:

Jag håller absolut med om att man ska försöka skriva sin kod anpassningsbar men det finns gränser för allt. Den här funktionen skulle räkna ut medelvärden, inte ta emot kortkoder. Jag för har lite svårt att se vitsen med att veta medelvärdet av siffrorna i ens kortkoder och dessutom funkar do-while fortfarande utmärkt även om första inmatningen är tom.

Jag ser inte vad fördelen skulle vara med en do-while-loop jämfört med en enkel while eller ingen loop alls. Do-while togs upp i skolan på typ samma nivå som andra loopar i litteraturen dock gjorde läraren det klart att den inte används särskilt ofta, och jag tror inte jag har set det användas någonstans i professionell kod under mina år som utvecklare, så jag vet inte om det ger så mycket pluspoäng egentligen.

Permalänk
Medlem

Du kan nog mer en mej men öven om denna är srkiven för äldre progravaraor så fungerar den fint.

http://www.homeandlearn.co.uk/csharp/csharp.html

Edit:
C#.net iofs tänkte inte på det.

Visa signatur

CPU: 5900x. Mem:64GB@3200 16-17-17-34-1T. (ImDIsk)
GPU: 1080 Ti@ca 6-7%OC. Sound: SB-Z -> toslink (DTS)-> old JVC. MB Realtek to Z-2300 for VOIP.

Permalänk
Medlem
Skrivet av snajk:

Problemet går förstås att lösa på massvis av sätt. Enklast, eftersom det inte är krav på någon loop eller att du ska hantera ett okänt antal tal, borde vara att bara helt enkelt fråga efter första andra och tredje talet, summera dem och dela dem för att få fram medel. Man kan förstås stila och göra det hur komplicerat som helst, men det är ju ganska centralt inom programmering att inte göra saker mer komplicerade än nödvändigt. KISS osv.
Jag ser inte vad fördelen skulle vara med en do-while-loop jämfört med en enkel while eller ingen loop alls. Do-while togs upp i skolan på typ samma nivå som andra loopar i litteraturen dock gjorde läraren det klart att den inte används särskilt ofta, och jag tror inte jag har set det användas någonstans i professionell kod under mina år som utvecklare, så jag vet inte om det ger så mycket pluspoäng egentligen.

Rätt ang do while, har aldrig sett det i någon produktionskod, enbart i skolböcker eller kodexempel. I detta fallet tycker jag det är viktigast att ts förstår vad han gör.

Men ja, det är bra att skriva kod som går att generalisera, men om man vet säkert att något inte kommer ändras introducerar det bara ytterliggare komplexitet. Det bästa, imo, är att försöka identifiera områden som är "subject to change" och förbereda dessa för detta. Sedan funkar det ju inte alltid.

Skrivet av ZalamanderRelic:

mm c# har mycket bra grejer när det ska implementeras med windows tycker jag iallafall nu när jag också håller på lär mig har kikat en del på c# men av någon anledning så flyter mina fingrar bättre på java

Använt Java i många år men blev sedan introducerad till C# och blev frälst ganska snabbt. ;D Det enda jag har emot det är egentligen att det nästan bara fungerar på Windows, men det har ju börjat ändras det också nu iom .Net Core.

Permalänk
Medlem
Skrivet av snajk:

Problemet går förstås att lösa på massvis av sätt. Enklast, eftersom det inte är krav på någon loop eller att du ska hantera ett okänt antal tal, borde vara att bara helt enkelt fråga efter första andra och tredje talet, summera dem och dela dem för att få fram medel. Man kan förstås stila och göra det hur komplicerat som helst, men det är ju ganska centralt inom programmering att inte göra saker mer komplicerade än nödvändigt. KISS osv.

Om han gör på det viset så blir funktionen låst till exakt tre tal och om han i framtiden vill att den ska hantera fler så kommer han att bli tvungen att göra om hela jobbet. Nu är detta en väldigt enkel och specifik skoluppgift men att göra som du föreslår och låsa upp sig till att göra exakt det som efterfrågas och inget mer lär knappast ge några pluspoäng heller. Det är i nästan alla lägen en bra idé att skriva kod som lätt kan utökas. Det handlar inte på något sätt om att stila, bara förbereda för framtida behov.

Skrivet av snajk:

Jag ser inte vad fördelen skulle vara med en do-while-loop jämfört med en enkel while eller ingen loop alls. Do-while togs upp i skolan på typ samma nivå som andra loopar i litteraturen dock gjorde läraren det klart att den inte används särskilt ofta, och jag tror inte jag har set det användas någonstans i professionell kod under mina år som utvecklare, så jag vet inte om det ger så mycket pluspoäng egentligen.

Jag har aldrig sagt att do-while gör jobbet bättre än while, bara att jag personligen skulle använda do-while. Någon skillnad i prestanda lär det inte vara men det känns logiskt i ett fall som detta att göra testet sist även om slutprodukten blir densamma. Huruvida do-while i verkligheten används ofta eller ej känns irrelevant för mig. Man använder de verktyg man har tillgång till.

Visa signatur

Idioter förbokar datorspel.

Permalänk
Avstängd
Skrivet av Roffe:

Om han gör på det viset så blir funktionen låst till exakt tre tal och om han i framtiden vill att den ska hantera fler så kommer han att bli tvungen att göra om hela jobbet. Nu är detta en väldigt enkel och specifik skoluppgift men att göra som du föreslår och låsa upp sig till att göra exakt det som efterfrågas och inget mer lär knappast ge några pluspoäng heller. Det är i nästan alla lägen en bra idé att skriva kod som lätt kan utökas. Det handlar inte på något sätt om att stila, bara förbereda för framtida behov.

Framtida behov finns inte i detta fall. Att inte komplicera saker i onödan är en bra egenskap och extremt viktigt för en utvecklare.

Citat:

Jag har aldrig sagt att do-while gör jobbet bättre än while, bara att jag personligen skulle använda do-while. Någon skillnad i prestanda lär det inte vara men det känns logiskt i ett fall som detta att göra testet sist även om slutprodukten blir densamma. Huruvida do-while i verkligheten används ofta eller ej känns irrelevant för mig. Man använder de verktyg man har tillgång till.

Jo, det finns förstås tillfällen där en do-while passar, dock ganska sällan, men jag ser inte att det här är ett sådant fall riktigt. För prestanda spelar det ingen som helst roll då kompilatorn hanterar loopar så som den anser passar bäst oavsett hur de är skrivna.

Permalänk
Medlem
Skrivet av snajk:

Framtida behov finns inte i detta fall. Att inte komplicera saker i onödan är en bra egenskap och extremt viktigt för en utvecklare.

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.

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.

Skrivet av snajk:

Jo, det finns förstås tillfällen där en do-while passar, dock ganska sällan, men jag ser inte att det här är ett sådant fall riktigt. För prestanda spelar det ingen som helst roll då kompilatorn hanterar loopar så som den anser passar bäst oavsett hur de är skrivna.

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.

Visa signatur

Idioter förbokar datorspel.