Programmering 1 uppgift tåg Komvux

Permalänk
Medlem

Programmering 1 uppgift tåg Komvux

Hej allesammans

Jag har börjat Programmering 1 på distans Arena. Har aldrig gjort det innan så det är roligt och skrämmande, mycket nya grejer att lära sig hela tiden. Men punkten är att jag har försökt lösa den här problemet själv, letade efter gamla tråd och hittade en del, googlade, skrev på facebook, men det är ändå luddig och vill se om någon kan hjälpa mig lite.

Koden är typ nästan klart (?. Funkar men inte helt. Vet inte varför.
Är den någon som har också gjort det och kan ge mig en hand? eller vill bara testa min kod och ser vad är det som är fel.

Skriver uppgifter nere:

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.

Inmatning

Den första inmatningen innehåller två heltal, tågets totala kapacitet och antal stationer tåget stannar vid.

1 ≤ kapacitet ≤ 40 // tågets kapacitet
2 ≤ antal_stationer ≤ 10 // antal stationer

Inmatningarna på övriga stationer består av tre heltal

stiger av= antal passagerare som lämnar tåget,
stiger på = antal passagerare som kommer in i tåget och
stannar = antal passagerare som blir tvungna att stanna kvar på en station.

Inmatningarna sker den ordning som tåget besöker stationerna. Alla heltal ligger mellan 0 och 40.

0 ≤ lämnar ≤ 40 // antalet passagerare som lämnar tåget
0 ≤ stiger_på ≤ 40 // antal passagerare som kommer in i tåget
0 ≤ stannar ≤ 40 // antal passagerare som stannar på stationen

Utmatning

En rad som innehåller ett ord: möjligt om inmatningar är konsekventa annars omöjligt.

Permalänk
Medlem

Lägg upp koden här bara, använd

[ code] [ /code]

(utan space efter [ )

Permalänk
Moderator
Forumledare

@flopi: Som nämnt ovan, skriv ut koden här så tar säkert någon en titt på den

Visa signatur

Forumets regler | Har du synpunkter på hur vi modererar? Kontakta SweClockers/moderatorerna

Jag stavar som en kratta

Gillar lök på discord

Permalänk
Medlem

[ code]namespace Tåg

{

internal class Program

{

static void Main(string[] args)

{

//while loop to get the right values for passengers and stations. (capacity = 1 <= 40) (stations = 1<=10)

Console.WriteLine("Ange tågets kapacitet (1-40)");

int capacity;

while (!int.TryParse(Console.ReadLine(), out capacity) || capacity < 1 || capacity > 40)

{

Console.WriteLine("Fel, ange ett heltal mellan 1-40");

}

Console.WriteLine("Ange antal stationer: (1- 10)");

int stations;

while (!int.TryParse(Console.ReadLine(), out stations) || stations < 1 || stations > 10)

{

Console.WriteLine("Fel, ange ett heltal mellan 1-10");

}

//The train should start with 0 passengers.

int passOnBoard = 0;

for (int i = 1; i <= stations; i++) //loop to get the train through the stations.

{

Console.WriteLine("Station " + stations); // How do I do here to change the nr of the station every time? appears always the same number of station.

Console.Write("Antal passagerare som lämnar: ");

int leaving = Convert.ToInt32(Console.ReadLine()); // Not sure if Parse is maybe better than convert to Int?

Console.Write("Antal passagerare som stiger up i tåget: ");

int boarding = Convert.ToInt32(Console.ReadLine());

Console.Write("Antal passagerare som stannar kvar på stationen: ");

int remaining = Convert.ToInt32(Console.ReadLine());

bool possible = true; //I changed this bool many times, the idea was at it will control the values that are possible =! impossible.
possible = capacity > boarding || remaining < capacity || leaving > capacity;

passOnBoard += boarding;

passOnBoard -= leaving;

if (boarding > capacity)

{

possible = false;

Console.WriteLine("Impossible");

}

else

{

possible = true;

Console.WriteLine("Possible");

}

if (passOnBoard == 0 && stations == 10 && remaining == 0) // here I'm not sure either. Is like the last station, it should be completely empty but seems to not work.

{

Console.WriteLine("Possible");

}

else

{

Console.WriteLine("Impossible");

}
[ /code]

Permalänk
Medlem

Tack så mycket!
Grejen är att jag fick också inmätningar som jag skulle testa och inte alla fungerar.
Och plötsligt datorn vill inte funka heller, säger att jag har ett hot på min program xD så kan inte fortsätta testa koden apparently.

Jag har byt koden många gånger, vet ej vad mer ska jag göra u.u
Lämnar har nere också inmätningar.

Permalänk
Medlem

Utan space

namespace Tåg { internal class Program { static void Main(string[] args) { //while loop to get the right values for passengers and stations. (capacity = 1 <= 40) (stations = 1<=10) Console.WriteLine("Ange tågets kapacitet (1-40)"); int capacity; while (!int.TryParse(Console.ReadLine(), out capacity) || capacity < 1 || capacity > 40) { Console.WriteLine("Fel, ange ett heltal mellan 1-40"); } Console.WriteLine("Ange antal stationer: (1- 10)"); int stations; while (!int.TryParse(Console.ReadLine(), out stations) || stations < 1 || stations > 10) { Console.WriteLine("Fel, ange ett heltal mellan 1-10"); } //The train should start with 0 passengers. int passOnBoard = 0; for (int i = 1; i <= stations; i++) //loop to get the train through the stations. { Console.WriteLine("Station " + stations); // How do I do here to change the nr of the station every time? appears always the same number of station. Console.Write("Antal passagerare som lämnar: "); int leaving = Convert.ToInt32(Console.ReadLine()); // Not sure if Parse is maybe better than convert to Int? Console.Write("Antal passagerare som stiger up i tåget: "); int boarding = Convert.ToInt32(Console.ReadLine()); Console.Write("Antal passagerare som stannar kvar på stationen: "); int remaining = Convert.ToInt32(Console.ReadLine()); bool possible = true; //I changed this bool many times, the idea was at it will control the values that are possible =! impossible. possible = capacity > boarding || remaining < capacity || leaving > capacity; passOnBoard += boarding; passOnBoard -= leaving; if (boarding > capacity) { possible = false; Console.WriteLine("Impossible"); } else { possible = true; Console.WriteLine("Possible"); } if (passOnBoard == 0 && stations == 10 && remaining == 0) // here I'm not sure either. Is like the last station, it should be completely empty but seems to not work. { Console.WriteLine("Possible"); } else { Console.WriteLine("Impossible"); }

Permalänk
Medlem

Console.WriteLine("Station " + stations); // How do I do here to change the nr of the station every time? appears always the same number of station.

Du skriver här ut antalet stationer varje gång, skriv istället ut

i + 1

för stationsnummer.

if (boarding > capacity)

Du bör väl jämföra mot vad antalet som är på tåget, inte hur många som gick på, för annars räknar du ju inte bort de som gick av och de som var på efter förra stations. så passOnBoard > capacity ska det nog vara där.

if (passOnBoard == 0 && stations == 10 && remaining == 0) // here I'm not sure either. Is like the last station, it should be completely empty but seems to not work.

Var fick du stations == 10 ifrån?, hursom är det bättre att kolla passOnBoard efter att loopen är klar, inte i slutet på den varje iteration.

Du sätter "possible", men du använder den aldrig, eller så är det för att du inte har copy-pastat allt. så svårt att avgöra om den behövs.

Permalänk
Medlem
Skrivet av dlq84:

Utan space

namespace Tåg { internal class Program { static void Main(string[] args) { //while loop to get the right values for passengers and stations. (capacity = 1 <= 40) (stations = 1<=10) Console.WriteLine("Ange tågets kapacitet (1-40)"); int capacity; while (!int.TryParse(Console.ReadLine(), out capacity) || capacity < 1 || capacity > 40) { Console.WriteLine("Fel, ange ett heltal mellan 1-40"); } Console.WriteLine("Ange antal stationer: (1- 10)"); int stations; while (!int.TryParse(Console.ReadLine(), out stations) || stations < 1 || stations > 10) { Console.WriteLine("Fel, ange ett heltal mellan 1-10"); } //The train should start with 0 passengers. int passOnBoard = 0; for (int i = 1; i <= stations; i++) //loop to get the train through the stations. { Console.WriteLine("Station " + stations); // How do I do here to change the nr of the station every time? appears always the same number of station. Console.Write("Antal passagerare som lämnar: "); int leaving = Convert.ToInt32(Console.ReadLine()); // Not sure if Parse is maybe better than convert to Int? Console.Write("Antal passagerare som stiger up i tåget: "); int boarding = Convert.ToInt32(Console.ReadLine()); Console.Write("Antal passagerare som stannar kvar på stationen: "); int remaining = Convert.ToInt32(Console.ReadLine()); bool possible = true; //I changed this bool many times, the idea was at it will control the values that are possible =! impossible. possible = capacity > boarding || remaining < capacity || leaving > capacity; passOnBoard += boarding; passOnBoard -= leaving; if (boarding > capacity) { possible = false; Console.WriteLine("Impossible"); } else { possible = true; Console.WriteLine("Possible"); } if (passOnBoard == 0 && stations == 10 && remaining == 0) // here I'm not sure either. Is like the last station, it should be completely empty but seems to not work. { Console.WriteLine("Possible"); } else { Console.WriteLine("Impossible"); }

Sorry I copied from a doc I create to save it, now I installed Visual Studio again so I hope it works

Permalänk
Medlem
Skrivet av dlq84:

Console.WriteLine("Station " + stations); // How do I do here to change the nr of the station every time? appears always the same number of station.

Du skriver här ut antalet stationer varje gång, skriv istället ut

i + 1

för stationsnummer.

if (boarding > capacity)

Du bör väl jämföra mot vad antalet som är på tåget, inte hur många som gick på, för annars räknar du ju inte bort de som gick av och de som var på efter förra stations. så passOnBoard > capacity ska det nog vara där.

if (passOnBoard == 0 && stations == 10 && remaining == 0) // here I'm not sure either. Is like the last station, it should be completely empty but seems to not work.

Var fick du stations == 10 ifrån?, hursom är det bättre att kolla passOnBoard efter att loopen är klar, inte i slutet på den varje iteration.

Du sätter "possible", men du använder den aldrig, eller så är det för att du inte har copy-pastat allt. så svårt att avgöra om den behövs.

Alright! gonna try this.

yes I did that before the passOnBoard > capacity but still didn't work with the second exempel I got for trying. I will change it now again and see what happens.

About the 10, is like the last station. How I should write that then?
Because I should have the first and the last station without passengers waiting, on, or boarding.

Tack för hjälpen verkligen, ska testa allt nu blandat lite språk, ibland är det svårt att ta allt på svenska (den är min andra språk)

Permalänk
Skrivet av flopi:

About the 10, is like the last station. How I should write that then?
Because I should have the first and the last station without passengers waiting, on, or boarding.

Vilken station som faktiskt är den sista beror ju helt på hur många stationer som användaren faktiskt har valt att det finns. Därför bör du inte skriva jämförelsen på det sättet.
Om vi säger att användaren har matat in att det finns 8 st stationer, så kan du snarare kolla om du är på iteration 8. Dvs när "i == stations" så bör tåget befinna sig på sista stationen.

Permalänk

Angående TryParse vs Convert.ToInt32 så hade jag personligen föredragit den förstnämnda dvs TryParse. I början av koden hanterar du användarens inmatningar mycket bättre då du egentligen gör det omöjligt för användaren att inte mata in ett giltigt heltal. När du senare istället kör en Convert.ToInt32 så riskerar du att få exceptions som du just nu inte hanterar. Säg att du försöker omvandla *"'_-&&+ till en int.. Vad händer då?

Permalänk
Medlem
Skrivet av Sammanhang:

Angående TryParse vs Convert.ToInt32 så hade jag personligen föredragit den förstnämnda dvs TryParse. I början av koden hanterar du användarens inmatningar mycket bättre då du egentligen gör det omöjligt för användaren att inte mata in ett giltigt heltal. När du senare istället kör en Convert.ToInt32 så riskerar du att få exceptions som du just nu inte hanterar. Säg att du försöker omvandla *"'_-&&+ till en int.. Vad händer då?

Just det! hade ändrat, ja alltså hela programmen slutar. Tack för tipsen.
När det gäller slutet, hade radera allt och försöker göra om. Har ingen aning vad håller jag på med just nu. Plötsligt loopen funkar inte heller, kör bara en inmätning.

Ska skriva mitt nytt kod här nere .

Permalänk
Medlem

[code]for (int i = 1; i <= stations; i++) //loop to get the train through the stations.
{
Console.WriteLine("Station " + i); // I changed to i, worked better than i +1

Console.Write("Antal passagerare som lämnar: ");
int leaving;
int.TryParse(Console.ReadLine(), out leaving); // Not sure if I did write this part when I changed to Parse, it works anyways so. Any tips?

Console.Write("Antal passagerare som stiger up i tåget: ");
int boarding;
int.TryParse(Console.ReadLine(), out boarding);

Console.Write("Antal passagerare som stannar kvar på stationen: ");
int remaining;
int.TryParse(Console.ReadLine(), out remaining);

//I deleted completely the bool, I actually understood I wasn't using it like one of you said, so now is more simple everything and makes more sense.

passOnBoard += boarding;
passOnBoard -= leaving;

if (passOnBoard > capacity) // Control of passengers, also changed here as suggested.
{
Console.WriteLine("Omöjligt");
}

if (passOnBoard < 0 && leaving == 0)
{
Console.WriteLine("Omöjligt");//Trying to get the exempel 2 but doesn't work. Shots me possible & impossible one after another. I think is because the last control is passOnBoard == 0. Don't know how to fix it.
}
} //Outside the loop I make the last control, it is right? or I should controlled it before the loop is done?

if (passOnBoard == 0) // If the train is empty or not.
{
Console.WriteLine("möjligt");
}
else
{
Console.WriteLine("Omöjligt");
}
Console.ReadLine();
}
}
}