C#, Programmering 1, hjälp med uppgift.

Permalänk
Medlem

C#, Programmering 1, hjälp med uppgift.

Hej!

Är helt ny på denna sida, så jag ber om överseende om jag gör något fel.

Jag har börjat med programmering 1 (100p, 5 veckor) eftersom att den är behörighetsgivande till en utbildning som jag vill gå i höst. Trodde att jag skulle ha lätt för kursen, men jag förstår verkligen ingenting och har lite panik. Jag går på distans och har en lärare som jag antar att jag borde kunna få hjälp av, men det är totalt dött. Jag fick efter några dagar veta att han inte ens visste att jag fanns, men även nu när jag verkar existera i deras system är det helt kört att få hjälp, får knappt svar och isf inte på det jag faktiskt frågat. Jag får ingen hjälp överhuvudtaget! Och jag har inte tid att försöka få tag på folk, så får nu försöka klara denna kurs med hjälp på annat håll. Hade det inte varit sådan tidspress hade jag bara suttit och lekt, låtit allt falla på plats naturligt. Men jag har verkligen inte tiden att riskera att vara helt fel ute och få börja om ytterligare 10 gånger.

Lämnade i måndags in första uppgiften som handlade om växelpengar, har inte hört något ännu dock, så jag har ju ingen aning om ifall jag tänker rätt eller är helt fel ute. Började med nästa inlämningsuppgift och har med hjälp av timmars googlande och Youtube- tittande fått en väldigt tunn start, jag förstår ungefär 5% av vad jag har gjort. Har bara provat skriva några rader för att se vad som händer, tagit bort, bytt kod, tagit bort, sabbat allt, börjat om, skrivit nya rader o.s.v.. Om det jag vill ska hända sker vågar jag inte peta mer i den raden, även om jag inte förstår fullt ut.

Nog om det. Denna veckan ska jag lämna in en uppgift om ett tåg:

"Skriv följande program:
SJ har anpassat sin trafik pga. coronaviruset. Man har ett begränsat antalet platser ombord på bokningsbara tåg för att skapa mer utrymme för att kunna hålla avstånd och resa tryggare. Ett antal platser ombord kommer inte kunna bokas, detta för att säkerställa att tåget inte blir för fullt.

SJ vill kontrollera om åtgärderna får önskat resultat. De ber sina förare att anteckna hur många passagerare som kliver på respektive av vid varje station och hur många som får vänta på nästa tåg.

Du ska skriva ett program som kontrollerar att antal passagerare på tåget uppfyller kravet enlig specifikationen. Tåget ska vara tomt vid start och avslut av resan. Inga passagerare ska vänta på perrongen vid sista stationen."

Jag ska även rita ett flödesschema till detta, det vet jag inte ens vad det är för något och det får vänta. Som det är nu får jag inte till intervallet att det får lov att finnas 0-40 passagerare på tåget. Jag vet var det är fel, eftersom jag bara har skrivit in 40, men allt försvinner om jag försöker skriva in andra tecken. Jag vet heller inte hur jag ska få programmet att räkna med de personer som redan sitter på tåget vid nästa station. Det förstår jag också, jag har ju inte skrivit in någonstans att programmet ska räkna med dom, för jag vet inte vad jag ska skriva in och var. Så fort jag testar något som jag googlat på förstörs allt.

Om någon orkat läsa allt, vill du hjälpa till? Jag har en kod som jag gjort, men vet inte hur jag skriva in den här korrekt?

Permalänk

Börja med att skriva koden du har kommit fram till här så kan man utgå från den

Permalänk
Medlem

Jag googlade lite snabbt, här är min kod:

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Tisdag_18_april { class Program { static void Main(string[] args) { int capacity = 40; //Ändra till intervall, men hur? int stations = 0; int passenger; int excess; string entering; string exiting; // Hur ska jag få programmet att räkna med de passagerarna som sitter kvar på tåget redan att räknas med nästa station? //Vad skriver jag för kod och var? int enteringToInt; int exitingToInt; for (stations = 1; stations <= 10; stations++) { if (stations == 2 || stations != 10 && stations != 0) { // Jag vill inte ha med frågan hur många som lämnar tåget på station 1. // Jag kan nu även skriva att minus 15 personer går på, det ska såklart inte vara möjligt! Console.WriteLine("Station " + stations + "\n"); Console.WriteLine("Antal passagerare som kommer in i tåget: "); entering = Console.ReadLine(); enteringToInt = Int32.Parse(entering); Console.WriteLine("Antalet passagerare som lämnar tåget:"); exiting = Console.ReadLine(); exitingToInt = Int32.Parse(exiting); passenger = enteringToInt - exitingToInt; Console.WriteLine("Antalet personer som befinner sig på tåget: " + passenger + "\n"); if (passenger < capacity) // Om antalet passagerare är färre än 40 { Console.WriteLine("*** Alla passagerare kan stanna på tåget! ***\n"); Console.WriteLine("------------------------------------------------\n"); } else // Om if- satsen inte stämmer ( fler passagerare än 40) { excess = passenger - capacity; Console.WriteLine("\nTyvärr är det för många passagerare ombord. På station " + stations + " får " + excess + " passagerare stanna och vänta på perrongen.\n"); } if (stations == 9) { Console.WriteLine("Antal passagerare på denna station: " + passenger + " Nästa station är ändstation, alla passagerare måste då gå av."); } if (stations == 10) { Console.WriteLine("Passagerare kvar på tåget: " + passenger); // Jag förstår ännu inte hur de vill att jag ska göra med slutet och har inte orkat bry mig om det ännu. } } } Console.ReadLine(); } } }

Permalänk

1. int capacity = 40; är tillräckligt. Det är ett övre tak och då behöver du bara kolla så att int passengers alltid är <capacity.
2. För att se om ett värde är positivt eller inte så att det inte kan gå på -15 personer så har du påbörjat lösningen, du ska ta in en string från ReadLine, sedan omvandla den till en int och kolla så att den int:en är >=0, om inte så returnerar du ett felmeddelande och ber användaren försöka igen.

Fungerar programmet nu? Om inte vad är det som ger fel?

Första stationen bör inte fråga om någon ska gå av utan enbart hur många som går på.

Det som händer är att i din stora if-sats så kör den all kod inuti gång på gång på nytt för varje station.
Där så säger du att passengers = entering - exiting. Det betyder att passengers får ett nytt värde enbart baserat på den stationen den är på som sedan skrivs över nästa gång.
Passengers = gamla passengers + (entering - exiting) ger dig rätt värde

Permalänk
Medlem

Tyvärr är detta grekiska för mig ännu. Jag förstår helt enkelt inte vad de olika begreppen innebär. Jag förstår vad det är jag måste göra, men inte hur. När någon försöker förklara hur hade de lika gärna kunnat prata grekiska. Jag har suttit sedan kl 06.30 i morse bara med att få programmet att inte fråga hur många som går av vid station 1. Vad jag än gör blir det fel!

Idag lärde jag mig iaf att jag inte måste sitta och skriva in varenda tecken för hand. Har tidigare skrivit det i anteckningar för att slippa alla jobbiga rutor som dyker upp och sedan kopierat in det i Visual studio. Hade en version från 2013, eftersom att vår lärobok utgår från den versionen. Men laddade ner 2019 nu och upptäckte att man kan få en massa hjälp..

Permalänk
Medlem
Skrivet av ILTotoRiina:

1. int capacity = 40; är tillräckligt. Det är ett övre tak och då behöver du bara kolla så att int passengers alltid är <capacity.
2. För att se om ett värde är positivt eller inte så att det inte kan gå på -15 personer så har du påbörjat lösningen, du ska ta in en string från ReadLine, sedan omvandla den till en int och kolla så att den int:en är >=0, om inte så returnerar du ett felmeddelande och ber användaren försöka igen.

Fungerar programmet nu? Om inte vad är det som ger fel?

Första stationen bör inte fråga om någon ska gå av utan enbart hur många som går på.

Det som händer är att i din stora if-sats så kör den all kod inuti gång på gång på nytt för varje station.
Där så säger du att passengers = entering - exiting. Det betyder att passengers får ett nytt värde enbart baserat på den stationen den är på som sedan skrivs över nästa gång.
Passengers = gamla passengers + (entering - exiting) ger dig rätt värde

Så långt har jag kommit också. Ska jag lägga till en till string med ett bra ord för gamla passagerare. Lägga till ett till int "xxx"ToInt; med de andra två och sedan skriva om uträkningen?

Permalänk
Medlem

Ett tips är att prova ChatGPT för att få vissa saker förklarade lätt för sig.

Visa signatur

AMD 7800X3D | ASUS TUF X670E-PLUS | Corsair Vengeance DDR5 32GB EXPO | ASUS TUF 4090 OC 24GB |
Noctua NH-U12A | Corsair 4000D | Corsair AX1200W | Steelseries Apex 7 | Steelseries Sensei Ten | ASUS VG35VQ

https://github.com/Mariusz89B

Permalänk
Medlem

Tänk dig att tåget har en kapacitet på 40, det innebär ju att 40 personer får vistas på tåget samtidigt. Alltså behöver du få tillgång till detta värde någonstans och det är rimligt att spara det i en variabel (som inte kommer att ändras). Du har redan fixat detta i capacity.

När tåget startar och ingen person har gått på, då är antal passagerare lika med 0. Du behöver ett sätt att hantera det.
Använd en till variabel för det. Det börjar inte med värdet 40, utan istället med värdet 0. Du har hanterat detta i din variabel passenger, men den borde starta på noll.

Då har du
Max antal = 40
Nuvarande antal = 0

Sedan kommer en station och kanske 10 personer går på. Vad händer då?
Du vet att dessa 10 får gå på, om totala antalet passagerar inte överstiger 40. Du behöver ett uttryck för detta.
Nuvarande antal + "antal som står och väntar på stationen" ska inte bli större än 40.

Efter station 1 så har du
Max antal = 40
Nuvarande antal = 10

På nästa station(nummer 2) så vill 4 gå av och 6 nya ska gå på.
Att släppa av passagerare är inget problem, så efter att de har gått av är det 6 kvar på tåget.
Men får alla de 6 som väntar på station 2 gå på? Ja för att 6 (nya) + 6 (på tåget) < 40 som är maximala antalet.

Permalänk
Medlem

En väldigt vanlig sak jag ser som förvirrar nybörjare på kodning är att man kallar sina variabler lite tvetydigt vilket gör allt förvirrande.
Du har en variabel som heter stations nu som innehåller nuvarande station. (så variabel antyder flertalet stationer när det i själva verket är nuvarande station som borde vara singular)

Skulle rekommendera att kalla den något i stil med currentStation
Sedan kanske skapa en annan variabel som heter lastStation som variabel du kan använda istället för att "hårdkoda" 10st.
På det viset kan du använda lastStation konstanten i den kod, ex currentStation==lastStation för att kolla om du är på sista stationen.
Detta gör koden och lätt att läsa då currentStation == lastStation är lätt att förstå.

Sedan brukar jag börja med att tänka på de alternativ som finns innan jag börjar koda när jag skall bygga if-satser och sätta dit en kommentar.
Därefter kan man byta ut kommentar mot vad faktiskt if-satsen är rent kodmässigt.

t.ex. vad finns det för if-satser gällande stationerna.

Så jag kommer på 3st
// 1. Första stationen är lite speciellt då man bara kan kliva på tåget.
// 2-9. Är standard
// 10. Alla skall lämna tåget

Visa signatur

There are 10 types of people in the world: Those who understand binary, and those who don't...

Asus Maximus VIII Hero | i7-6700K | ASUS GeForce GTX1070 Strix 8GB | G.Skill F4-2133C15Q-32GRK |

Permalänk
Skrivet av Maddah:

Så långt har jag kommit också. Ska jag lägga till en till string med ett bra ord för gamla passagerare. Lägga till ett till int "xxx"ToInt; med de andra två och sedan skriva om uträkningen?

Du kan antingen som du sa ovan:
Spara passengers i gamla passengers
Spara Entered i string sen toInt
Spara Exited i string sen toInt
Spara EnteredInt - ExitedInt i en ny totalInt
Sätta Passengers till gamlaPassengers - totalInt

Eller

Passengers = Passengers + (enteredInt - exitedInt)

Vilken av de två alternativen känns mest effektiv?

När du sätter passengers till sig själv så får du det gamla värdet ihop med differensen av det nya värdet vilket är rätt sätt att göra när man uppdaterar en parameter på det här sättet.

P.s. som nån annan sa så är chatGPT ett superbra verktyg för den ger dig korrekt svar på allt du vill men när du är såhär tidigt stadie i din utbildning så rekommenderar jag ej att använda den då du får bara får svaret men aktiverar inte hjärnan och lär dig tänka som en programmerare. Det är mer än att bara skriva kod och få rätt svar tillbaka, man ska göra det korrekt och på ett effektivt sätt.

Det kommer vara grekiska för dig, det är exakt som att lära sig ett nytt språk om inte svårare. Du kommer inte kunna prata det flytande först men steg för steg, block för block så utökar man sin kunskap och tillslut så har man förståelsen, det kommer sålänge du har drivet och viljan!

Permalänk
Hedersmedlem

Du skriver att du inte förstår vad du förväntas göra med flödesschemat så du väntar med det. Jag skulle säga att du istället skulle börja där och rita ner vad du tänker dig ska hända. Sedan börjar du med programmerandet.

En annan sak jag tänker på är att ni måste ha fått ut läromedel som passar till det ni ska göra. Du får det att låta som att skolan kastat dig utför ett stup, men så är det garanterat inte. Du kanske skulle kolla på det material du fått, och har du inte fått tillräckligt med information för att lösa uppgiften så fråga läraren om mer information. Detta är trots allt Programmering 1, så man kan inte förvänta sig att ni ska kunna börja med ett helt blankt papper.

Och har du inte tid att sitta ner och fundera och prova dig fram så kanske du inte skulle gå kursen? Tanken är ju att lära sig, inte att bli serverad en lösning. Varje genväg du tar nu kommer att straffa dig längre fram när det blir svårare eftersom du inte förstår grundläggande koncept.

Visa signatur

Använd gilla för att markera nyttiga inlägg!

Permalänk
Medlem
Skrivet av giplet:

Du skriver att du inte förstår vad du förväntas göra med flödesschemat så du väntar med det. Jag skulle säga att du istället skulle börja där och rita ner vad du tänker dig ska hända. Sedan börjar du med programmerandet.

En annan sak jag tänker på är att ni måste ha fått ut läromedel som passar till det ni ska göra. Du får det att låta som att skolan kastat dig utför ett stup, men så är det garanterat inte. Du kanske skulle kolla på det material du fått, och har du inte fått tillräckligt med information för att lösa uppgiften så fråga läraren om mer information. Detta är trots allt Programmering 1, så man kan inte förvänta sig att ni ska kunna börja med ett helt blankt papper.

Och har du inte tid att sitta ner och fundera och prova dig fram så kanske du inte skulle gå kursen? Tanken är ju att lära sig, inte att bli serverad en lösning. Varje genväg du tar nu kommer att straffa dig längre fram när det blir svårare eftersom du inte förstår grundläggande koncept.

Jag uttryckte mig fel, tid har jag avsatt för detta. Lämnar barnen kl 7 vid bussen och sedan sitter jag hela dagarna. Även på kvällen. Vill ju inte bara klara mina uppgifter, utan verkligen lära mig grunderna.

Jag känner faktiskt det precis som att jag har blivit kastad utför ett stup! Men mycket av den frustrationen beror på att det blev något fel redan från start så jag hade inte registrerats i systemet. Ringde runt, men ingen ville riktigt kännas vid problemet. Fick varningar att jag blir avstängd om jag inte loggar in, fick ingen länk till det enda videosamtalet man får varannan vecka p.g.a. detta. Det blev fel och det stressade mig. Sedan kom nästa smäll - fan vad svårt det är! För precis som du skriver förväntade jag mig att man inte behöver några förkunskaper. Vi har en bok att utgå ifrån och den har jag köpt och följt. Den går igenom grunderna, så jag blev förvånad när första uppgiften var så svår. Hade 5 dagar på mig att göra den och efter andra dagen kunde jag typ skriva "Hello world" och göra ett enkelt räknespel, samt en uppgift om badtemperatur med hjälp av boken. Utöver det ska vi söka själva på internet.

Nu har jag dock lärt mig mer idag än de andra 6 dagarna tillsammans, så hoppet börjar komma tillbaka lite!

Permalänk
Medlem
Skrivet av Maddah:

Jag ska även rita ett flödesschema till detta, det vet jag inte ens vad det är för något och det får vänta.

Ett flödesschema är en sorts visualisering av t.ex. ett program och kan i vissa fall vara en hjälp när man ska lösa en uppgift. Även om jag själv sällan gör regelrätta flödesscheman så visualiserar eller beskriver jag mina egna program som jag skriver hela tiden, och jag skulle gissa att det är lite den vanan som denna del av uppgiften är avsedd för. Bifogar ett exempel som till viss del är baserad på min tolkning av din uppgift, men ändrad så att det inte blir regelrätt läxhjälp.

Visa signatur

The power of GNU compiles you!
"Often statistics are used as a drunken man uses lampposts -- for support rather than illumination."

Permalänk
Medlem
Skrivet av MickeBoy:

Tänk dig att tåget har en kapacitet på 40, det innebär ju att 40 personer får vistas på tåget samtidigt. Alltså behöver du få tillgång till detta värde någonstans och det är rimligt att spara det i en variabel (som inte kommer att ändras). Du har redan fixat detta i capacity.

När tåget startar och ingen person har gått på, då är antal passagerare lika med 0. Du behöver ett sätt att hantera det.
Använd en till variabel för det. Det börjar inte med värdet 40, utan istället med värdet 0. Du har hanterat detta i din variabel passenger, men den borde starta på noll.

Då har du
Max antal = 40
Nuvarande antal = 0

Sedan kommer en station och kanske 10 personer går på. Vad händer då?
Du vet att dessa 10 får gå på, om totala antalet passagerar inte överstiger 40. Du behöver ett uttryck för detta.
Nuvarande antal + "antal som står och väntar på stationen" ska inte bli större än 40.

Efter station 1 så har du
Max antal = 40
Nuvarande antal = 10

På nästa station(nummer 2) så vill 4 gå av och 6 nya ska gå på.
Att släppa av passagerare är inget problem, så efter att de har gått av är det 6 kvar på tåget.
Men får alla de 6 som väntar på station 2 gå på? Ja för att 6 (nya) + 6 (på tåget) < 40 som är maximala antalet.

Skrivet av WarWolf.667:

En väldigt vanlig sak jag ser som förvirrar nybörjare på kodning är att man kallar sina variabler lite tvetydigt vilket gör allt förvirrande.
Du har en variabel som heter stations nu som innehåller nuvarande station. (så variabel antyder flertalet stationer när det i själva verket är nuvarande station som borde vara singular)

Skulle rekommendera att kalla den något i stil med currentStation
Sedan kanske skapa en annan variabel som heter lastStation som variabel du kan använda istället för att "hårdkoda" 10st.
På det viset kan du använda lastStation konstanten i den kod, ex currentStation==lastStation för att kolla om du är på sista stationen.
Detta gör koden och lätt att läsa då currentStation == lastStation är lätt att förstå.

Sedan brukar jag börja med att tänka på de alternativ som finns innan jag börjar koda när jag skall bygga if-satser och sätta dit en kommentar.
Därefter kan man byta ut kommentar mot vad faktiskt if-satsen är rent kodmässigt.

t.ex. vad finns det för if-satser gällande stationerna.

Så jag kommer på 3st
// 1. Första stationen är lite speciellt då man bara kan kliva på tåget.
// 2-9. Är standard
// 10. Alla skall lämna tåget

Skrivet av ILTotoRiina:

Du kan antingen som du sa ovan:
Spara passengers i gamla passengers
Spara Entered i string sen toInt
Spara Exited i string sen toInt
Spara EnteredInt - ExitedInt i en ny totalInt
Sätta Passengers till gamlaPassengers - totalInt

Eller

Passengers = Passengers + (enteredInt - exitedInt)

Vilken av de två alternativen känns mest effektiv?

När du sätter passengers till sig själv så får du det gamla värdet ihop med differensen av det nya värdet vilket är rätt sätt att göra när man uppdaterar en parameter på det här sättet.

P.s. som nån annan sa så är chatGPT ett superbra verktyg för den ger dig korrekt svar på allt du vill men när du är såhär tidigt stadie i din utbildning så rekommenderar jag ej att använda den då du får bara får svaret men aktiverar inte hjärnan och lär dig tänka som en programmerare. Det är mer än att bara skriva kod och få rätt svar tillbaka, man ska göra det korrekt och på ett effektivt sätt.

Det kommer vara grekiska för dig, det är exakt som att lära sig ett nytt språk om inte svårare. Du kommer inte kunna prata det flytande först men steg för steg, block för block så utökar man sin kunskap och tillslut så har man förståelsen, det kommer sålänge du har drivet och viljan!

Tack för tips, de hjälper! Ska tänka på vilka namn jag använder på variablarna. Jag har kommit en bit på vägen och förstått lite bättre var jag sätta dom i själva flödet. Jag provar mig fram. Jag tänker att när jag förstått hur ett program ska byggas upp blir det betydligt enklare att resonera fram hur jag ska göra allt. Framförallt är det som sagt enklare nu när jag förstått att jag kan ta hjälp av programmet och inte behöver skriva ner varenda tecken själv. Jag har även börjat lära mig felsökaren(?) bättre. Det ska nog gå bra till slut

Permalänk
Medlem
Skrivet av kode:

Ett flödesschema är en sorts visualisering av t.ex. ett program och kan i vissa fall vara en hjälp när man ska lösa en uppgift. Även om jag själv sällan gör regelrätta flödesscheman så visualiserar eller beskriver jag mina egna program som jag skriver hela tiden, och jag skulle gissa att det är lite den vanan som denna del av uppgiften är avsedd för. Bifogar ett exempel som till viss del är baserad på min tolkning av din uppgift, men ändrad så att det inte blir regelrätt läxhjälp.

<Uppladdad bildlänk>

Tack snälla! Det var ju inte så komplicerat som jag trodde

Permalänk
Medlem

Nu i början skulle jag verkligen inte rekommendera ChatGPT som någon skrev. Det kan man använda som hjälp längre fram med större problem. Nu i början är det viktigt att försöka komma in i allt själv.
MEN Jag kan dock rekommendera boken The C# Player's Guide 4th edition av R B Whitaker! Det är en riktigt rolig och grym bok för att komma igång med programmering! Hjälpte mig själv extremt mycket i början av mina studier. Ser nu också att det finns en ännu nyare version "5th Edition". Helt klart värt dom där hundralapparna den kostade.

Visa signatur

Hejhoppsan

Permalänk
Medlem
Skrivet av Quinz:

Nu i början skulle jag verkligen inte rekommendera ChatGPT som någon skrev. Det kan man använda som hjälp längre fram med större problem. Nu i början är det viktigt att försöka komma in i allt själv.
MEN Jag kan dock rekommendera boken The C# Player's Guide 4th edition av R B Whitaker! Det är en riktigt rolig och grym bok för att komma igång med programmering! Hjälpte mig själv extremt mycket i början av mina studier. Ser nu också att det finns en ännu nyare version "5th Edition". Helt klart värt dom där hundralapparna den kostade.

Nej, jag behöver inte bara lämna in uppgifterna, utan verkligen lära mig. Dock hjälper det ibland att kopiera rakt av för att förstå, ex de uppgifterna jag gjorde första veckan från boken. Har idag lärt mig massor. Finns det tid över gör jag ett flödesschema och hittar på en helt annan liknande uppgift för att vara säker på hur jag ska bygga upp den.

Ska kika på den, kanske finns den på biblioteket eller studentapan om jag har tur

Permalänk
Medlem

Vill någon kika på det jag har ändrat? Satt med detta från tidig morgon till sen kväll igår, har värk i nacke och träsmak i baken.

Nu har jag fått till att tidigare resenärer räknas med på nästa station och att den enbart frågar hur många som kliver på, på station 1.

Jag försöker nu få in att capacity är lika med eller över 1, samt lika med eller mindre än 40. Jag har förstått att jag inte kan ställa in detta som ett intervall uppe bland variablarna (?, har inte präntat in vad allt heter ännu). Försökte lägga till en till variabel (minCapacity) och sätta den till 1. För att sedan lägga in detta längre ner, efter att man knappar in hur många som ska med som ett "if". Om siffrorna hamnar utanför intervallet ska programmet be användaren knappa in ett nytt antal. Fick det inte att fungera.

Försökte lägga in en annan if - "if (enteringToInt >= 1 && enteringToInt <= 40) så säger att programmet att allt är ok. Om siffrorna inte stämmer ska programmet säga ifrån. Fick det inte att fungera.

Jag tänker utgå ifrån att användaren inte kommer skriva in att minus 15 passagerare kliver på tåget, då får den helt enkelt sluta jobba som tågchaufför! Det står ingenstans i uppgiften att jag ska tänka på detta, enbart att jag ska fixa intervallet 1 till 40 i kapaciteten.

Orkar någon kika på koden? Det kan finnas kvarglömda saker som jag missat att radera, det kollar jag igenom innan jag lämnar in uppgiften.

using System; namespace Tisdag_18_april { class Program { static void Main(string[] args) { int capacity = 40; // Max antal som får vara på tåget int capacityMin = 1; int currentstation = 1; // För varje nuvarande station int lastStation = 10; // annan if int startAntal = 0; // Ingen får gå av tåget vid första stationen int passenger = startAntal; int excess; // Hur många som inte får plats string entering; // Går på string exiting; // Går av int enteringToInt; // För att kunna räkna ut int exitingToInt; Console.WriteLine("Station " + currentstation + "\n"); Console.WriteLine("Antal passagerare som kommer in i tåget: "); entering = Console.ReadLine(); enteringToInt = Int32.Parse(entering); passenger += enteringToInt; // Gör att antalet som kliver på räknas Console.WriteLine("Antalet personer som befinner sig på tåget: " + passenger + "\n"); if (passenger < capacity) // Om antalet är mindre än 40 { Console.WriteLine("*** Alla passagerare kan stanna på tåget! ***\n"); Console.WriteLine("------------------------------------------------\n"); } else { excess = passenger - capacity; // Om antalet är fler än 40 Console.WriteLine("\n*** Tyvärr är det för många passagerare ombord. På station " + currentstation + " får " + excess + " passagerare stanna och vänta på perrongen ***\n"); } for (currentstation = 2; currentstation <= lastStation; currentstation++) // Från station 2 ska det även fråga hur många som stiger av { Console.WriteLine("Station " + currentstation + "\n"); Console.WriteLine("Antal passagerare som kommer in i tåget: "); entering = Console.ReadLine(); enteringToInt = Int32.Parse(entering); passenger += enteringToInt; Console.WriteLine("Antalet passagerare som lämnar tåget:"); exiting = Console.ReadLine(); exitingToInt = Int32.Parse(exiting); passenger -= exitingToInt; Console.WriteLine("Antalet personer som befinner sig på tåget: " + passenger + "\n"); if (passenger < capacity) { Console.WriteLine("*** Alla passagerare kan stanna på tåget! ***\n"); Console.WriteLine("------------------------------------------------\n"); } else { excess = passenger - capacity; Console.WriteLine("\n*** Tyvärr är det för många passagerare ombord. På station " + currentstation + " får " + excess + " passagerare stanna och vänta på perrongen ***\n"); } if (currentstation == lastStation) { Console.WriteLine("Passagerare kvar på tåget: " + passenger); } // Ska lägga till slutsatsen, om tåget är tomt eller inte } Console.ReadLine(); } } }

Permalänk
Hedersmedlem
Skrivet av Maddah:

Vill någon kika på det jag har ändrat? Satt med detta från tidig morgon till sen kväll igår, har värk i nacke och träsmak i baken.

Nu har jag fått till att tidigare resenärer räknas med på nästa station och att den enbart frågar hur många som kliver på, på station 1.

Jag försöker nu få in att capacity är lika med eller över 1, samt lika med eller mindre än 40. Jag har förstått att jag inte kan ställa in detta som ett intervall uppe bland variablarna (?, har inte präntat in vad allt heter ännu). Försökte lägga till en till variabel (minCapacity) och sätta den till 1. För att sedan lägga in detta längre ner, efter att man knappar in hur många som ska med som ett "if". Om siffrorna hamnar utanför intervallet ska programmet be användaren knappa in ett nytt antal. Fick det inte att fungera.

Försökte lägga in en annan if - "if (enteringToInt >= 1 && enteringToInt <= 40) så säger att programmet att allt är ok. Om siffrorna inte stämmer ska programmet säga ifrån. Fick det inte att fungera.

Jag tänker utgå ifrån att användaren inte kommer skriva in att minus 15 passagerare kliver på tåget, då får den helt enkelt sluta jobba som tågchaufför! Det står ingenstans i uppgiften att jag ska tänka på detta, enbart att jag ska fixa intervallet 1 till 40 i kapaciteten.

Orkar någon kika på koden? Det kan finnas kvarglömda saker som jag missat att radera, det kollar jag igenom innan jag lämnar in uppgiften.

Rensa din kod innan du ber om hjälp. Jag vill inte läsa igenom kod som du ändå tänkt ta bort.

Sedan förstår jag att du ännu inte har gjort något flödesschema. Det hade faktiskt hjälpt dig att sätta dig ner och punkta ner vad som händer.

Bussen stannar på en station.
Några passagerare går av.
- Finns inga passagerare på bussen kan inga gå av.
- Antalet som går av kan inte vara fler än de som finns på bussen.
- Är det sista stationen måste alla gå av.
Några passagerare går på.

Nu kan du metodiskt se till att dessa delar finns med i din kod. Du behöver inte köra koden för att passagerare ska gå av om det inte finns några passagerare på bussen, eller hur? Detta kan inträffa på station 5 också.
Deet finns saker som jag har missat ovan. Antalet som går av eller på kan aldrig vara mindre än 0. Vad säger uppgiften angående detta maxantal. Ska det vara ett max eller ska det vara en varning? SJ ville veta om reglerna hjälpte. Det antyder att det inte är ett maxtal.

Visa signatur

Använd gilla för att markera nyttiga inlägg!

Permalänk
Medlem

Du kan använda och (&&) samt eller (||) för att bygga mer komplexa uttryck.

Detta skulle fungera för det som du säger att vill göra:

if(!(enteringToInt >= 1 && enteringToInt <= 40)) { Console.WriteLine("Antalet passagerare måste vara mellan 1 och 40"); }

Men jag tror inte att det är det som du egentligen ska göra?

Du vill ju kontrollera om antalet passagerare som ska kliva på är mindre än antalet platser som finns tillgängliga och du vill samtidigt att antalet passagerare som ska kliva på ska vara 0 eller mer?

Alltså enteringToInt + passenger <= capacity ska alltid vara uppfyllt
Dessutom så vill du att enteringToInt >= 0 (hanterar användarens fel)

Det går då att uttrycka som (enteringToInt + passenger <= capacity) && (enteringToInt >= 0)
Däremot så blir det ju olika felmeddelanden tänker jag. Den första skulle ge felmeddelandet att antalet passagerare inte får stiga på för då blir tåget fullt.
Om det andra inträffar så har användaren matat in ett negativt tal.

Jag har kört igenom din kod. Fundera på dessa frågor:
Vad händer om det kliver på mer än 40 personer på station 1?
Vad händer om det kliver på fler personer än det ska gå av vid en station och tåget redan är fullt?

Permalänk
Medlem
Skrivet av MickeBoy:

Du kan använda och (&&) samt eller (||) för att bygga mer komplexa uttryck.

Detta skulle fungera för det som du säger att vill göra:

if(!(enteringToInt >= 1 && enteringToInt <= 40)) { Console.WriteLine("Antalet passagerare måste vara mellan 1 och 40"); }

Men jag tror inte att det är det som du egentligen ska göra?

Du vill ju kontrollera om antalet passagerare som ska kliva på är mindre än antalet platser som finns tillgängliga och du vill samtidigt att antalet passagerare som ska kliva på ska vara 0 eller mer?

Alltså enteringToInt + passenger <= capacity ska alltid vara uppfyllt
Dessutom så vill du att enteringToInt >= 0 (hanterar användarens fel)

Det går då att uttrycka som (enteringToInt + passenger <= capacity) && (enteringToInt >= 0)
Däremot så blir det ju olika felmeddelanden tänker jag. Den första skulle ge felmeddelandet att antalet passagerare inte får stiga på för då blir tåget fullt.
Om det andra inträffar så har användaren matat in ett negativt tal.

Jag har kört igenom din kod. Fundera på dessa frågor:
Vad händer om det kliver på mer än 40 personer på station 1?
Vad händer om det kliver på fler personer än det ska gå av vid en station och tåget redan är fullt?

Tack för svar!

Om det kliver på för många på tåget kommer ett felmeddelande till användaren att det är för många och att några får vänta på stationen. Om antalet är tillåtet har jag skrivit att alla får åka med.

Sedan åker tåget vidare och vid nästa station räknar programmet de som redan sitter på tåget samt de som kliver på. Det får bli max 40, annars får några vänta på perrongen. Detta upprepas till station 9.

Till slut kommer tåget till station 10 och där ska jag "avsluta med en hälsning". Jag tolkar det som att jag helt enkelt ska skriva något i stil med "nu sitter det X passagerare på tåget, alla måste kliva av". Eller "Tåget är tomt".

Jag är på dag 9 av utbildningen (distans, nybörjarnivå) och detta är andra inlämningsuppgiften som vi började med i måndags, hade aldrig programmerat innan. Därför är jag kass på detta ännu! Skrev till läraren i måndags, har ännu inte fått något svar. Måste med andra ord lösa det själv..

Permalänk
Medlem
Skrivet av Maddah:

Tack för svar!

Om det kliver på för många på tåget kommer ett felmeddelande till användaren att det är för många och att några får vänta på stationen. Om antalet är tillåtet har jag skrivit att alla får åka med.

Sedan åker tåget vidare och vid nästa station räknar programmet de som redan sitter på tåget samt de som kliver på. Det får bli max 40, annars får några vänta på perrongen. Detta upprepas till station 9.

Till slut kommer tåget till station 10 och där ska jag "avsluta med en hälsning". Jag tolkar det som att jag helt enkelt ska skriva något i stil med "nu sitter det X passagerare på tåget, alla måste kliva av". Eller "Tåget är tomt".

Jag är på dag 9 av utbildningen (distans, nybörjarnivå) och detta är andra inlämningsuppgiften som vi började med i måndags, hade aldrig programmerat innan. Därför är jag kass på detta ännu! Skrev till läraren i måndags, har ännu inte fått något svar. Måste med andra ord lösa det själv..

Nedan är ett exempel från en körning av din kod.

Jag tycker att:
Meddelandet som du skriver ut om att 0 passagerare ska vänta kommer vid fel tidpunkt. Om tåget är fullt just nu, men det vid nästa station går av fler än det går på, så är det väl inget problem?

Vid station 3 och tåget är fullt så verkar det som det är ok att släppa på 5 till?
Man kan ju här tolka kraven på olika sätt. Kanske vill man bara hålla koll på om det någon gång blir för många, men man kan ju också tolka det som att det är absolut förbjudet att det blir för många för att motverka smittspridning. I så fall så uppfyller du inte det kravet.

Station 1 Antal passagerare som kommer in i tåget: 40 Antalet personer som befinner sig på tåget: 40 *** Tyvärr är det för många passagerare ombord. På station 1 får 0 passagerare stanna och vänta på perrongen *** Station 2 Antal passagerare som kommer in i tåget: 0 Antalet passagerare som lämnar tåget: 0 Antalet personer som befinner sig på tåget: 40 *** Tyvärr är det för många passagerare ombord. På station 2 får 0 passagerare stanna och vänta på perrongen *** Station 3 Antal passagerare som kommer in i tåget: 5 Antalet passagerare som lämnar tåget: 0 Antalet personer som befinner sig på tåget: 45 *** Tyvärr är det för många passagerare ombord. På station 3 får 5 passagerare stanna och vänta på perrongen *** Station 4 Antal passagerare som kommer in i tåget: >

Permalänk
Medlem
Skrivet av MickeBoy:

Ja, precis, det blir fortfarande fel där. Och du har rätt att det beror på smittspridning. Chauffören ska anteckna hur många som går på och hur många som går av. Endast 40 passagerare får vara på tåget. Resten får vänta kvar på perrongen.
Skriver jag t.ex. att 45 går på vid station 1 säger programmet till att 5 inte får åka med. Sedan fortsätter det.
40st sitter då på tåget och det måste gå av fler än vad som går på för att det ska bli godkänt.

Jag har nu, med hjälp av din kod, fått programmet att inte acceptera ett negativt antal. Då ber det användaren igen att skriva in ett korrekt antal. Nu är det lite annat som strular istället, men jag fortsätter på det spåret och ser om jag kan rätta till det. Jag har hela helgen på mig så jag tror allt att jag ska lösa detta

Permalänk
Medlem

using System; namespace Tisdag_18_april { class Program { static void Main(string[] args) { int capacity = 40; // Max antal som får vara på tåget int capacityMin = 1; int currentstation = 1; // För varje nuvarande station int lastStation = 10; // annan if int startAntal = 0; // Ingen får gå av tåget vid första stationen int passenger = startAntal; int excess; // Hur många som inte får plats string entering; // Går på string exiting; // Går av int enteringToInt; // För att kunna räkna ut int exitingToInt; Console.WriteLine("Station " + currentstation + "\n"); Console.WriteLine("Antal passagerare som kommer in i tåget: "); entering = Console.ReadLine(); enteringToInt = Int32.Parse(entering); if (!(enteringToInt >= 0 && enteringToInt <= 40)) // Felmeddelande om felaktigt antal { Console.WriteLine("Antalet som kliver på tåget måste vara minst 0"); Console.WriteLine("Antal passagerare som kommer in i tåget: "); entering = Console.ReadLine(); enteringToInt = Int32.Parse(entering); } passenger += enteringToInt; // Gör att antalet som kliver på räknas Console.WriteLine("Antalet personer som befinner sig på tåget: " + passenger + "\n"); if (passenger < capacity) // Om antalet är mindre än 40 { Console.WriteLine("*** Alla passagerare kan stanna på tåget! ***\n"); Console.WriteLine("------------------------------------------------\n"); } else { excess = passenger - capacity; // Om antalet är fler än 40 Console.WriteLine("\n*** Tyvärr är det för många passagerare ombord. På station " + currentstation + " får " + excess + " passagerare stanna och vänta på perrongen ***\n"); } for (currentstation = 2; currentstation <= lastStation; currentstation++) // Från station 2 ska det även fråga hur många som stiger av { Console.WriteLine("Station " + currentstation + "\n"); Console.WriteLine("Antal passagerare som kommer in i tåget: "); entering = Console.ReadLine(); enteringToInt = Int32.Parse(entering); if (!(enteringToInt >= 0 && enteringToInt <= 40)) //Felmeddelande om fel antal matas in { Console.WriteLine("Antalet som kliver på tåget måste vara minst vara minst 0 och max 40"); Console.WriteLine("Antal passagerare som kommer in i tåget: "); entering = Console.ReadLine(); enteringToInt = Int32.Parse(entering); } passenger += enteringToInt; Console.WriteLine("Antalet passagerare som lämnar tåget:"); exiting = Console.ReadLine(); exitingToInt = Int32.Parse(exiting); passenger -= exitingToInt; Console.WriteLine("Antalet personer som befinner sig på tåget: " + passenger + "\n"); if (passenger < capacity) { Console.WriteLine("*** Alla passagerare kan stanna på tåget! ***\n"); Console.WriteLine("------------------------------------------------\n"); } else { excess = passenger - capacity; Console.WriteLine("\n*** Tyvärr är det för många passagerare ombord. På station " + currentstation + " får " + excess + " passagerare stanna och vänta på perrongen ***\n"); } if (currentstation == lastStation) { Console.WriteLine("Passagerare kvar på tåget: " + passenger); } // Ska lägga till slutsatsen, se till att tåget är tomt } Console.ReadLine(); } } }

Permalänk
Medlem

Din kontroll fungerar ju en gång, men om användaren är envis och skriver 45 två gånger på första stationen så blir det ju tokigt i alla fall.

Jag har pillat lite med din kod och tänkte sammanfatta det i några förslag:
1. I kontrollen för hur många passagerare det är på tåget, se till att det får vara maximalt antal, alltså att precis 40 är tillåtet.
2. För att det ska bli lättare att räkna för dig, se till att låta alla gå av först innan några får gå på. Byt alltså plats på logiken och ta bort passagerare först innan du lägger till nya.
3. Var tuffare mot dina passagerare och tilläpa principen, först i kö får först plats. Alltså om det finns 5 platser kvar och 7 st står och väntar så ta bara med 5 st på tåget. De två andra får vänta på nästa tåg.

Permalänk
Medlem

Jag tänkte bjuda på resultatet av en körning också, så blir det kanske tydligare vad jag menar.

OBS! Jag menar inte att du måste lösa problemet på precis det här sättet. Detta är min tolkning av kraven och sättet som jag valde att lösa det på.

EDIT: Det är ju synd om de som går på tåget först och sedan måste gå av. Det går såklart att göra snyggare, men jag valde att försöka förändra så lite som möjligt i den koden som du redan har.

Station 1 och tåget har 0 antal passagerare. Antal passagerare som kommer in i tåget: 50 Antalet personer som befinner sig på tåget innan avgång: 50 *** Tyvärr är det för många passagerare ombord. 10 passagerare får hoppa av, stanna och vänta på perrongen. *** Station 2 och tåget har 40 antal passagerare. Antalet passagerare som lämnar tåget: 0 Antal passagerare som kommer in i tåget: 5 Antalet personer som befinner sig på tåget innan avgång: 45 *** Tyvärr är det för många passagerare ombord. 5 passagerare får hoppa av, stanna och vänta på perrongen. *** Station 3 och tåget har 40 antal passagerare. Antalet passagerare som lämnar tåget: 15 Antal passagerare som kommer in i tåget: 5 Antalet personer som befinner sig på tåget innan avgång: 30 *** Alla passagerare kan stanna på tåget! *** ------------------------------------------------ Station 4 och tåget har 30 antal passagerare. Antalet passagerare som lämnar tåget: 20 Antal passagerare som kommer in i tåget: 40 Antalet personer som befinner sig på tåget innan avgång: 50 *** Tyvärr är det för många passagerare ombord. 10 passagerare får hoppa av, stanna och vänta på perrongen. *** Station 5 och tåget har 40 antal passagerare. Antalet passagerare som lämnar tåget: 30 Antal passagerare som kommer in i tåget: 10 Antalet personer som befinner sig på tåget innan avgång: 20 *** Alla passagerare kan stanna på tåget! *** ------------------------------------------------ Station 6 och tåget har 20 antal passagerare. Antalet passagerare som lämnar tåget:

Permalänk
Medlem

@Maddah: Du krånglar till det en del med att ha den första stationen som ett specialfall. Jag skulle rekommendera att du hanterar alla stationer på samma sätt inne i loopen istället för att hantera den första stationen före loopen.

Den enda orsaken till att du har den första stationen som ett specialfall verkar vara för att undvika att fråga efter hur många som kliver av, men jag kan inte se i uppgiften att det är ett krav. Men om du vill göra det så verkar det vettigt att hoppa över den frågan på alla stationer om tåget är tomt. Tänk bara på att inte uppdatera passenger förrän du vet hur många som kliver på och av i så fall, så att du kan använda passenger för att avgöra om tåget är tomt eller ej när det kommer in på stationen.

Sen har du if (currentStation == lastStation) i slutet av loopen, men det finns ingen anledning att göra det inne i loopen. Du vill ju bara kolla hur många som är kvar på tåget i slutet, och det kan du lika gärna göra efter loopen istället.

Permalänk
Medlem
Skrivet av perost:

@Maddah: Du krånglar till det en del med att ha den första stationen som ett specialfall. Jag skulle rekommendera att du hanterar alla stationer på samma sätt inne i loopen istället för att hantera den första stationen före loopen.

Den enda orsaken till att du har den första stationen som ett specialfall verkar vara för att undvika att fråga efter hur många som kliver av, men jag kan inte se i uppgiften att det är ett krav. Men om du vill göra det så verkar det vettigt att hoppa över den frågan på alla stationer om tåget är tomt. Tänk bara på att inte uppdatera passenger förrän du vet hur många som kliver på och av i så fall, så att du kan använda passenger för att avgöra om tåget är tomt eller ej när det kommer in på stationen.

Sen har du if (currentStation == lastStation) i slutet av loopen, men det finns ingen anledning att göra det inne i loopen. Du vill ju bara kolla hur många som är kvar på tåget i slutet, och det kan du lika gärna göra efter loopen istället.

Jag förstår hur du menar, men det är ett krav att tåget är tomt från start och att inte fråga hur många som går av. Även den sista stationen måste stå för sig (antar jag) eftersom att jag måste se till att tåget ska vara tomt då. Den ska alltså inte fråga hur många som går av, utan meddela att nn antal måste gå av.

Jag har inte kollat på slutet ännu, men jag ska tänka på det du skriver om att det är med i loopen. Jag har fram tills igår inte ens förstått vad en loop är fullt ut. Hur man tänker angående innanför och utanför. Men den poletten börjar trilla ner

Jag vet vad det är jag vill göra, men inte hur. Det får reda ut sig under helgen, uppgiften ska in på måndag. Har förstått nu att man inte kickas ut från kursen om man gör fel, så känner mig lugn över den biten. Har även mailat läraren om han tycker att jag har tolkat uppgiften rätt. Tyvärr förväntar jag mig inget svar..

Permalänk
Medlem

Är det 0 passagerare ombord är det ju ingen större mening i att fråga om några lämnar, så man skulle antagligen kunna göra något i stil med

if (passenger > 0) { Console.WriteLine("Antalet passagerare som lämnar tåget:"); exiting = Console.ReadLine(); exitingToInt = int.Parse(exiting); passenger -= exitingToInt; }

Visa signatur

The power of GNU compiles you!
"Often statistics are used as a drunken man uses lampposts -- for support rather than illumination."

Permalänk
Medlem
Skrivet av kode:

Är det 0 passagerare ombord är det ju ingen större mening i att fråga om några lämnar, så man skulle antagligen kunna göra något i stil med

if (passenger > 0) { Console.WriteLine("Antalet passagerare som lämnar tåget:"); exiting = Console.ReadLine(); exitingToInt = int.Parse(exiting); passenger -= exitingToInt; }

Jag fick igår till att ingen lämnar på första stationen, tack vare denna tråd Antar att jag ska göra samma på sista stationen, fast att ingen får gå på. Men först rätta till att det inte får bli en negativ siffra varken antalet folk som går på eller differensen mellan hur många som går på och går av. Har kommit en bit på vägen, framförallt att förstå. Det är ju egentligen det viktigaste.