Projekt Hermods Programmering 1

Permalänk
Medlem

Projekt Hermods Programmering 1

Hej alla!
Nu kommer man till sista utvägen efter en tuff kurs.
Jag läser programmering 1 på distans och har ingen i min omgivning som kan hjälpa mig. Har dessutom kört fast helt och får ingen hjälp. Detta är sista projektet som läraren öppnat upp igen för att jag ska kunna slutföra den ordentligt.

Jag har en vektor som ska fyllas ut med user input, men jag behöver tillkalla denna vektorn för att kunna beräkna den totala åldern av alla passagerare och sedan medelåldern på alla passagerares ålder (detta är i två olika metoder).

Jag har frågat lärare, jag har läst i boken och all material men ej hittat lösning. Även sökt online men hittar ingen lösning. Vi använder oss av C# och jag hittar endast svar för C++ eller javascript.

Ni ser även några av mina kommentarer i koden, förhoppningsvis kan det hjälpa att guida lite ^^

Följande är min kod hittills:

using System; namespace Uppdrag4 { class Bussen { int[] add_passagerare = new int[24]; //Vectorn är placerad på heapen, 25 platser på bussen men räkningen startar på 0, därför skriver man 24. public void Run() { int meny; //identifiering av menyn = introduktion Console.WriteLine("Välkommen till minibussen"); //detta och det följande neråt skrivs ut först för en meny Console.WriteLine("Välj ditt alternativ nedan"); //-"- Console.WriteLine("[1] Lägg till ny passagerare");//-"- Console.WriteLine("[2] Kolla upp ledig plats");//-"- Console.WriteLine("[3] Nästa avgång"); Console.WriteLine("[4] Alla passagerares ålder ombord"); Console.WriteLine("[5] Totala summan ålder"); Console.WriteLine("[6] Medelålder av passagerare"); Console.WriteLine("[7] Avsluta programmet");//Sista som skrivs ut meny = int.Parse(Console.ReadLine()); //Här läses menyn av och konverteras för följande switch for (int z = 0; z < 10; z++) switch (meny) //start av switch { case 1: //Om man trycker 1 hamnar man i add_passenger, som förklarat ovan add_passenger(); //skickas vidare till denna metod return; //går in i loopen igen och fortsätter med menyn case 2: //om man trycker 2 hamnar man i sort_bus sort_buss(); return; case 3: //Trycker man på knapp nummer 4 hamnar man på next_buss next_buss(); //denna skickas man vidare till return; //här går den in i loopen igen case 4: print_buss(); return; case 5: calc_total_age(); return; case 6: calc_average_age(); return; case 7: Environment.Exit(0); break; default: //om man trycker in felaktigt, dvs en bokstav eller en siffra som inte finns med t.ex. 5, matas meningen nedan ut Console.WriteLine("Felaktig inmatning"); //Denna mening skrivs ut om programmet går in här break; //loopen bryts och går ej in igen } } public void add_passenger() //här hamnar man om man trycker på knappen 1 ovan //man får skriva in sitt förnamn, efternamn och ålder för att sedan bli välkomnad { string förnamn; //namngivning av viss string string efternamn; //-"- string ålder; int åldertal; for (int i = 0; i < 24; i++) { Console.WriteLine("Ange förnamn:"); //Meningen inom parantesen ska bli utskriven förnamn = Console.ReadLine(); //Här blir inmatningen från ovan läst och får ett namn dvs förnamn Console.WriteLine("Ange efternamn:"); //Meningen inom parantesen ska bli utskriven efternamn = Console.ReadLine();//Här blir inmatningen från ovan läst och får ett namn dvs efternamn Console.WriteLine("Ange ålder:"); //samma process här som ovan ålder = Console.ReadLine(); åldertal = int.Parse(ålder); //varje gång man skriver in i ett program blir det av typen string, här omvandlas åldern till int vilket är ett heltal add_passagerare[i] = new int(); Console.WriteLine("Välkommen ombord {0} {1}! Vi önskar er en trevlig resa! :)", förnamn, efternamn); //programmet använder informationen sedan tidigare för att välkomna användaren if (i > 25) { Console.WriteLine("Tyvärr är bussen full, ta gärna nästa avgång"); next_buss(); } } } public void sort_buss() //här hamnar man om man trycker på 2 i menyn { Random slump = new Random(); //detta är en mekanism för att slumpa fram ett nummer int x = slump.Next(1, 25); //här skrivs det att slump numret får vara mellan 1-25 Console.WriteLine("En ledig plats på bussen är plats nummer " + x); //Meningen skrivs ut inom parantesen och det slumpade numret (x) läggs på efter Console.ReadLine(); } public void next_buss() //här hamnar man om man trycker på nummer 4 i menyn { string avgång; //introduktion och namngivning av string nedan int nyavgång; //introduktion och namngivning av en int Console.WriteLine("Är bussen full? Ta nästa avgång!"); //meningen inom parantesen skrivs ut Console.WriteLine("Ange vilket minut slag du vill ta bussen:"); //-"- avgång = Console.ReadLine(); //meningen ovan blir döpt till avgång nyavgång = int.Parse(avgång); //eftersom varje inmatning blir string omvandlas avgång - tidigare inmatning om till nyavgång och blir av typen int nyavgång = nyavgång + 15; //Här görs den inmatade siffran om +15, eftersom bussen går cirka varje kvart Console.WriteLine("Din nästa avgång går cirka {0}", nyavgång); //här skrivs det inom parantesen ut och berättar cirka nästa avgång för användaren eller passageraren } public void print_buss() { add_passagerare [0] = (25); //Medan vectorn är placerad på heapen som är nämnt tidigare, så är de olika värdena placerade på stacken. Så man måste lägga till på den ena för att ta bort från den andra osv. add_passagerare[1] = (43); add_passagerare[2] = (38); Console.WriteLine("Följande åldrarna finns på bussen:"); foreach (int value in add_passagerare) { Console.WriteLine(value); } } public void calc_total_age() { int totalaålder; foreach (int value in add_passagerare) { print_buss(); Console.WriteLine(value); Console.WriteLine("Totala åldern för alla passagerare är: " + totalaålder); //plussa ihop alla passagerares ålder } } //Metoder för betyget C public void calc_average_age() { //Betyg C //Beräkna den genomsnittliga åldern. Kanske kan man tänka sig att denna metod ska returnera något annat värde än heltal? // ta den iplussade åldern från calc_total_age och dela på antal passagerare } class Program { public static void Main(string[] args) //Denna metod kallas Main och programmet kan ej köras utan den. { var minibuss = new Bussen(); minibuss.Run(); //Här läggs metoderna till så de kan användas och syns i programmet minibuss.add_passenger(); //-"- minibuss.sort_buss();//-"- minibuss.print_buss(); minibuss.calc_average_age(); minibuss.calc_total_age(); Console.WriteLine("Tack för ditt medverkande!"); //denna mening i parantesen skrivs ut, tackar användare för medverkande. } } } }

Uppskattar alla snabba svar!
Tack i förhand

Tagit bort skrik på hjälp i rubrik /Andreaz1, mod
Permalänk
Medlem

Så, vad är det som inte fungerar eller vad vill du ha mer specifikt hjälp med? Någon metod eller dylikt som är svår att få till, isf vilken?

Visa signatur

10700K | NVIDIA RTX 3080

Permalänk
Medlem
Skrivet av kwame:

Så, vad är det som inte fungerar eller vad vill du ha mer specifikt hjälp med? Någon metod eller dylikt som är svår att få till, isf vilken?

I metoden calc_total_age så måste jag på något vis addera ihop alla värden i vektorn så jag får den totala åldern av alla passagerare, men har ingen aning hur jag ska tillkalla vektorn eller de olika positionerna i den för att lyckas.

Behöver även hjälp med i metoden calc_average_age då jag måste tillkalla resultatet i calc_total_age och dividera det på antal passagerare/positioner i vektorn.

förstår ni hur jag menar?

Permalänk
Medlem
Skrivet av lelsemha:

I metoden calc_total_age så måste jag på något vis addera ihop alla värden i vektorn så jag får den totala åldern av alla passagerare, men har ingen aning hur jag ska tillkalla vektorn eller de olika positionerna i den för att lyckas.

Om jag har förstått det rätt så är din array add_passagerare i själva verket arrayen över alla platser på bussen? Finns det något skäl till att den heter add_passagerare istället för t.ex. seats? Hur som helst ser jag spontant två metoder här. Antingen kan du stega igenom varje element i add_passagerare och addera varje element till totalsumman.

int sum = 0; for (int i = 0; i<add_passagerare.length(); i++) { sum = sum + add_passagerare[i]; }

Eller så kan du helt enkelt kalla på den inbyggda metoden Sum() som finns inbyggt för C#-arrayer. add_passagerare.Sum() borde alltså ge dig det totala antalet passagerare på bussen.

Permalänk

Är det du som har skrivit funktionerna i ditt program eller din lärare som vill att du skall använda de funktioner som hen har skrivit? För om du har skrivit funktionerna själv bör du ju förstå vad de gör eller hur de fungerar.

Använd int totalaålder och i foreach loopen behöver du addera varje passagerares ålder till totalålder efter foreach loopen har du så ett värde som innehåller alla passagerares åldrar. Glöm inte att du inte bara kan skriva över värdet utan du måste addera.

totalaålder = totalaålder + value

Permalänk
Medlem
Skrivet av Tengle:

Om jag har förstått det rätt så är din array add_passagerare i själva verket arrayen över alla platser på bussen? Finns det något skäl till att den heter add_passagerare istället för t.ex. seats? Hur som helst ser jag spontant två metoder här. Antingen kan du stega igenom varje element i add_passagerare och addera varje element till totalsumman.

int sum = 0; for (int i = 0; i<add_passagerare.length(); i++) { sum = sum + add_passagerare[i]; }

Eller så kan du helt enkelt kalla på den inbyggda metoden Sum() som finns inbyggt för C#-arrayer. add_passagerare.Sum() borde alltså ge dig det totala antalet passagerare på bussen.

Testade precis, när jag skrev in add_passagerare.Sum() så fick jag CS1061 som kodfel, när jag testade ovan kod fick jag System.IndexOutOfRangeException, så vet inte om jag borde sätta in någon try catch.

Det är passagerarnas ålder som ska bevaras i bussen, vilket dem skriver in i metoden add_passenger. Åldern som de skriver in ska sedan adderas ihop tillsammans med de andra åldrarna som redan bevarats i vektorn, som delvis bevarats i print_bus. Dessa ska tillsammans då adderas efter user input och bli ett tal som presenteras i calc_total_age.

En del av namnen är förutbestämda och vissa har jag hittat på, men kan byta om det blir mindre förvirrande ^^

Permalänk
Medlem
Skrivet av jojomondag:

Är det du som har skrivit funktionerna i ditt program eller din lärare som vill att du skall använda de funktioner som hen har skrivit? För om du har skrivit funktionerna själv bör du ju förstå vad de gör eller hur de fungerar.

Använd int totalaålder och i foreach loopen behöver du addera varje passagerares ålder till totalålder efter foreach loopen har du så ett värde som innehåller alla passagerares åldrar. Glöm inte att du inte bara kan skriva över värdet utan du måste addera.

totalaålder = totalaålder + value

Metoderna och tips har funnits i kodskal för guide, har ändrat lite själv.

Jag är inte klar där, därför det ser så konstigt ut! Men ja jag är extremt förvirrad därför det inte går så bra...
Jag skrev in totalaålder = totalaålder + value i foreach men den hittade endast en av de totalaålder uttrycken och den andra som är markerad fick jag CS0165 på som kodfel. Utanför foreach får jag samma kodfel igen på samma totalaålder samt att den inte hittar value (CS0103) men det är ju för att vi är utanför loopen.

Hur adderar man ihop alla passagerares ålder utan att de är förbestämda då?

Permalänk
Medlem

Jag läste inte hela och blandade ihop namnen. Du har alltså en metod som heter add_passenger och en array som heter add_passagerare, lätt att blanda ihop Men jag ser att du i metoden add_passenger inte tilldelar några tal till arrayen add_passagerare.

add_passagerare[i] = new int();

lägger ett objekt av typen int utan värde i arrayen. Du vill sätta åldertal där istället.

Permalänk
Medlem
Skrivet av Tengle:

Jag läste inte hela och blandade ihop namnen. Du har alltså en metod som heter add_passenger och en array som heter add_passagerare, lätt att blanda ihop Men jag ser att du i metoden add_passenger inte tilldelar några tal till arrayen add_passagerare.

add_passagerare[i] = new int();

lägger ett objekt av typen int utan värde i arrayen. Du vill sätta åldertal där istället.

Okej tack!
Har lagt in add_passagerare[i] = åldertal; där istället.

följande har jag nu under calc_total_age:

public void calc_total_age() { Console.WriteLine("Totala summan av alla passagerares åldrar är:"); int sum = 0; for (int i = 0; i < add_passagerare.Length; i++) { sum = sum + add_passagerare[i]; Console.WriteLine(sum); } }

men får nu endast ut massa nollor. Detta är ju givetvis för att int sum är = 0,
Men hur får man den att skriva ut alla inskrivna åldrar istället? Och sedan addera ihop dem till ett tal?

Permalänk
Medlem

Jag ser att du rättade min miss med Length, det är en property och inte en metod och ska således inte ha någon () efter sig, bra

Skriver den ut 0 innebär det att add_passagerare är fylld med 0:or helt enkelt. Är du säker på att de läggs till korrekt? Ser ut som att du både i add_passenger() och print_buss() lägger värden i arrayen. Testa att skriva några console.WriteLine på alla ställen där du lägger in ett värde i add_passagerare. Skulle förresten rekommendera att byta namn på den till passenger_ages istället, för visst innehåller den passagerarnas åldrar?

Permalänk
Medlem
Skrivet av Tengle:

Jag ser att du rättade min miss med Length, det är en property och inte en metod och ska således inte ha någon () efter sig, bra

Skriver den ut 0 innebär det att add_passagerare är fylld med 0:or helt enkelt. Är du säker på att de läggs till korrekt? Ser ut som att du både i add_passenger() och print_buss() lägger värden i arrayen. Testa att skriva några console.WriteLine på alla ställen där du lägger in ett värde i add_passagerare. Skulle förresten rekommendera att byta namn på den till passenger_ages istället, för visst innehåller den passagerarnas åldrar?

Ja det I print_buss är endast för att jag skulle se att det funkade som det ska. Eftersom jag nu måste se till så att de olika värdena adderas ihop till samma. Men det verkar inte riktigt funka. Alla värdena skrivs ut individuellt istället för att det blir till exempel den totala summan 106.
Meningen är att det ska bli ett tal i calc_total_age, dvs en nolla och inte flera nollor.

Och ja precis, det är deras åldrar! Tack, ändrade till passenger_ages

Permalänk
Medlem

Jaha, jag missuppfattade nog din fråga. Om du vill kan du skriva Console.WriteLine(add_passagerare[i]) inuti for-loopen så får du en utskrift för varje enstaka ålder, och på raden efter for-loopen Console.WriteLine(sum) så får du den summerade siffran.

Permalänk
Medlem
Skrivet av Tengle:

Jaha, jag missuppfattade nog din fråga. Om du vill kan du skriva Console.WriteLine(add_passagerare[i]) inuti for-loopen så får du en utskrift för varje enstaka ålder, och på raden efter for-loopen Console.WriteLine(sum) så får du den summerade siffran.

Okej tack så mycket för hjälpen! Tror jag listat ut det hela! Tack

Permalänk
Vila i frid

Om du använder Visual Studio, använd DEBUG så att du i realtid ser vad som händer eller inte med variabler och hur koden rent praktisk exekveras. Gör det inte svårare än det behöver vara.