Trädvy Permalänk
Medlem
Plats
Umeå
Registrerad
Dec 2009

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
Trädvy Permalänk
Medlem
Plats
Göteborg
Registrerad
Apr 2002

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.

CPU: i7 6700k + Fractal Design S24 // GPU: EVGA GTX 980 Ti SC+ ACX 2.0+ // RAM: Kingston 16GB 2133MHz CL13 MoBo: MSI GAMING M7 // PSU: EVGA Supernova G2 850W, 80+ Gold // SSD: Samsung SM951 256GB M.2 NVMe + Samsung EVO 850 250GB M.2 // Chassi: Fractal Design S OS: W10 Pro // Skrämar: Acer XB270HU + 2x Dell U2412M
NAS: Synology DS415+ (3x WD RED 6 TB) // Konsol: Xbox One

Trädvy Permalänk
Medlem
Plats
Helsingborg
Registrerad
Jan 2015

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

Trädvy Permalänk
Forumledare
Registrerad
Jan 2005

@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

Synpunkter gällande modereringen? Då kan du kontakta mig, moderatorerna, Sweclockers
Ursäkta min stavning, jag är dansk

Trädvy Permalänk
Medlem
Plats
stockholm
Registrerad
Aug 2005

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.

Trädvy Permalänk
Medlem
Plats
Skåne
Registrerad
Jan 2011

Skriv ett inlägg med den kod du har.

Asrock P67 Extreme 4 | i5 2500K@4,5Ghz | Asus GTX 970 black | 2x Intel 520 180gb, 2x WD blue 5tb | 8GB Corsair XMS3 + 8GB Hyper x Fury | EVGA Supernova G2 750W Gold | Silverstone FT02

https://prism-break.org/sv/

Trädvy Permalänk
Medlem
Plats
Umeå
Registrerad
Dec 2009

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

Trädvy Permalänk
Medlem
Plats
Umeå
Registrerad
Dec 2009

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();
}

Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Jan 2007

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.

Trädvy Permalänk
Medlem
Plats
skåne
Registrerad
Jun 2004

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

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

Trädvy Permalänk
Medlem
Plats
Skåne
Registrerad
Jan 2011

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.

Asrock P67 Extreme 4 | i5 2500K@4,5Ghz | Asus GTX 970 black | 2x Intel 520 180gb, 2x WD blue 5tb | 8GB Corsair XMS3 + 8GB Hyper x Fury | EVGA Supernova G2 750W Gold | Silverstone FT02

https://prism-break.org/sv/

Trädvy Permalänk
Medlem
Plats
stockholm
Registrerad
Aug 2005
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

Trädvy Permalänk
Medlem
Plats
Skåne
Registrerad
Jan 2011
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

Asrock P67 Extreme 4 | i5 2500K@4,5Ghz | Asus GTX 970 black | 2x Intel 520 180gb, 2x WD blue 5tb | 8GB Corsair XMS3 + 8GB Hyper x Fury | EVGA Supernova G2 750W Gold | Silverstone FT02

https://prism-break.org/sv/

Trädvy Permalänk
Medlem
Plats
Skåneland
Registrerad
Mar 2005

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.

"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

Trädvy Permalänk
Medlem
Plats
Västervik
Registrerad
Feb 2002

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.

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

Trädvy Permalänk
Medlem
Plats
stockholm
Registrerad
Aug 2005
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

Trädvy Permalänk
Medlem
Plats
Jönköping
Registrerad
Okt 2004
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

Idioter förbokar datorspel.

Trädvy Permalänk
Medlem
Plats
Skåneland
Registrerad
Mar 2005

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

"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

Trädvy Permalänk
Medlem
Plats
Jönköping
Registrerad
Okt 2004
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?

Idioter förbokar datorspel.

Trädvy Permalänk
Medlem
Plats
Skåneland
Registrerad
Mar 2005

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

"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

Trädvy Permalänk
Medlem
Plats
Jönköping
Registrerad
Okt 2004

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

Idioter förbokar datorspel.

Trädvy Permalänk
Medlem
Plats
Jönköping
Registrerad
Okt 2004
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.

Idioter förbokar datorspel.

Trädvy Permalänk
Medlem
Plats
Helsingborg
Registrerad
Jan 2015

+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

Trädvy Permalänk
Medlem
Plats
stockholm
Registrerad
Aug 2005

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

Trädvy Permalänk
Medlem
Plats
Göteborg
Registrerad
Jun 2010
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.

Trädvy Permalänk
Medlem
Plats
Södertälje
Registrerad
Aug 2007

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.

CPU: i7 3770k@4,50Ghz MB Z77X-D3H RAM: 16GB@2133mhz (10-12-11-27 2T)
GPU: 980Ti@1404,8 HDD: 4x AData SP900 128GB in 2st, 2x Raid-0 16K. 1x Crucial M500 480GB. PSU: FD-PSU-TS2B-800W. Sound: SB-Z -> toslink (DTS)-> old JVC. MB Via to Z-2300 for VOIP. http://valid.x86.fr/nf1u3d http://www.techpowerup.com/gpuz/details.php?id=wa9bw

Trädvy Permalänk
Medlem
Plats
Skåne
Registrerad
Jan 2011
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.

Asrock P67 Extreme 4 | i5 2500K@4,5Ghz | Asus GTX 970 black | 2x Intel 520 180gb, 2x WD blue 5tb | 8GB Corsair XMS3 + 8GB Hyper x Fury | EVGA Supernova G2 750W Gold | Silverstone FT02

https://prism-break.org/sv/

Trädvy Permalänk
Medlem
Plats
Jönköping
Registrerad
Okt 2004
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.

Idioter förbokar datorspel.

Trädvy Permalänk
Medlem
Plats
Göteborg
Registrerad
Jun 2010
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.

Trädvy Permalänk
Medlem
Plats
Jönköping
Registrerad
Okt 2004
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.

Idioter förbokar datorspel.