Nybörjarhjälp i programmering 1 C#

Permalänk
Inaktiv
Skrivet av AfterShock:

for (int i = 0; i < bingoRad.Length; i++) { try { Console.WriteLine("Skriv in ditt {0} nummer:", positions[i]); int bingonr = int.Parse(Console.ReadLine()); if (bingonr <= 0 || bingonr > 25) { Console.WriteLine("Talet måste vara större än 0 och mindre eller lika med 25"); i--; continue; } bingoRad[i] = bingonr; } catch { Console.WriteLine("Använd siffror!"); i--; } }

På ett ungefär så här hade jag lagt in en koll på om talet är inom rätt område. Du kan självklart byta ut 0 och 25 mot fördefinerade variabler för att öka modulariteten. Här använder jag också i-- för att loopen ska fråga om samma tal igen och här måste vi använda continue så den inte kör raden under 'bingoRad[i] = bingonr;' utan istället hoppar till nästa iteration. Detta borde fungera (inte testat) men jag hade personligen bytt ut det mot en while loop eftersom du har som krav att gå igenom varje tal på ett korrekt sätt innan du går vidare och på så sätt skulle du kunna föra samman ett par rader. Det hade inte krävts så mycket ändringar utan borde räcka med något i stil med

int bingoRadsNr = 0; while (bingoRadsNr < bingoRad.Length) { try { Console.WriteLine("Skriv in ditt {0} nummer:", positions[i]); int bingonr = int.Parse(Console.ReadLine()); if (bingonr <= 0 || bingonr > 25) { Console.WriteLine("Talet måste vara större än 0 och mindre eller lika med 25"); continue; } bingoRad[bingoRadsNr] = bingonr; bingoRadsNr++; } catch { Console.WriteLine("Använd siffror!"); } }

Poängen här är att istället för att backa tillbaka varje gång det blir fel gör vi istället så att vi går endast framåt de gånger det blivit rätt. Variabeln bingoRadsNr ersätter alltså i och incrementas endast när vi vet att siffran har förts in i vår array som tänkt.

Edit: Återigen, se det som pseudokod då jag inte testat den. Och som sidnot: Jag hade sedan flyttat ut det mesta ur try-catch delen då det inte är bra att ha kod i den som inte behöver 'prövas' men för att visa syftet med koden behåller jag det inom try delen.

while loop ska inte användas.. bara for och foreach
vet heller inte om man ska behöver rädda upp om man skriver utanför 1-25 då man frågar efter det, kanske räcker med input fel. MEn ja saom sagt vill ställa samma fråga igen då om det sker.

Permalänk
Medlem
Skrivet av anon217901:

while loop ska inte användas.. bara for och foreach
vet heller inte om man ska behöver rädda upp om man skriver utanför 1-25 då man frågar efter det, kanske räcker med input fel. MEn ja saom sagt vill ställa samma fråga igen då om det sker.

Ok
I sådana fall borde ändå det första stycket jag skrev fungera. Om du vill göra det lite snyggare skulle du kunna flytta ner det som inte 'prövas' nedanför catch delen. Om du gör detta måste du dock ha continue i catch eftersom du vill starta på nästa iteration om den går in därvid.

Vad jag menar då är något i stil med

for (int i = 0; i < bingoRad.Length; i++) { Console.WriteLine("Skriv in ditt {0} nummer:", positions[i]); try { int bingonr = int.Parse(Console.ReadLine()); } catch { Console.WriteLine("Använd siffror!"); i--; continue; } if (bingonr < 1 || bingonr > 25) { Console.WriteLine("Talet måste ligga mellan 1 och 25"); i--; } else { bingoRad[i] = bingonr; } }

Edit: Ändrade en lite sak i koden för att göra det tydligare. Du vill nämligen ha så lite som möjligt i en try del. Helst enbart det som faktiskt kan ge exceptions.

Permalänk
Inaktiv
Skrivet av AfterShock:

Ok
I sådana fall borde ändå det första stycket jag skrev fungera. Om du vill göra det lite snyggare skulle du kunna flytta ner det som inte 'prövas' nedanför catch delen. Om du gör detta måste du dock ha continue i catch eftersom du vill starta på nästa iteration om den går in därvid.

Vad jag menar då är något i stil med

for (int i = 0; i < bingoRad.Length; i++) { Console.WriteLine("Skriv in ditt {0} nummer:", positions[i]); try { int bingonr = int.Parse(Console.ReadLine()); } catch { Console.WriteLine("Använd siffror!"); i--; continue; } if (bingonr < 1 || bingonr > 25) { Console.WriteLine("Talet måste ligga mellan 1 och 25"); i--; } else { bingoRad[i] = bingonr; } }

Edit: Ändrade en lite sak i koden för att göra det tydligare. Du vill nämligen ha så lite som möjligt i en try del. Helst enbart det som faktiskt kan ge exceptions.

jo, men då gäller ej variablerna mer än i just den "delen" haha får ej allt att gå ihop då, fattar du hur jag menar? skippade helt undantaget med 1-25 utan drog bara i-- .

hur ser koden ut i övrigt tycker du? har lite strul med att kommentera vektorn "nertill" ja, de jag inte kommenterat, haha vet inte ritkigt hur jag ska formulera mig

Permalänk
Inaktiv

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace bingo
{
class Program
{
static void Main(string[] args)
{

//skapar vektorn bingorad
int right = 0;
int[] bingoRad = new int[10];
string[] positions = { "första", "andra", "tredje", "fjärde", "femte", "sjätte", "sjunde", "åttonde", "nionde", "tionde" };

//välkomst text
Console.WriteLine();
Console.WriteLine("Välkommen till Console-Bingo!!");
Console.WriteLine();
Console.WriteLine("Skriv in dina 10 bingonummer mellan 1 och 25.");

//for loppen
for (int i = 0; i < bingoRad.Length; i++)
{
try
{
Console.WriteLine("Skriv in ditt {0} nummer:", positions[i]); //inmatningen utav bingonummren som hamnar i vektorn
int bingonr = int.Parse(Console.ReadLine());
bingoRad[i] = bingonr;
}

catch
{

Console.WriteLine("Använd siffror!"); //om talen skrivs in med annat än heltal så catchar vi det och backar tillbaka till samma fråga.
i--;

continue;
}
}

//vektorn med de sju slumpade bingonummren
int[] numbers = new int[7];
Random randmNr = new Random();
for (int r = 0; r < numbers.Length; r++)
{

numbers[r] = randmNr.Next(1, 26); // Slumpar tal mellan 1-26 och läger i vektorn
}

// går igenom de valda bingonummren och jämför med de slumpade

for (int i = 0; i < bingoRad.Length; i++)
{
if (numbers.Contains(bingoRad[i]))
{
right++;
}
}

{
// skriver ut resultat
Console.WriteLine();
Console.WriteLine("### Du fick: {0} of 10 ###", right);
Console.Write("Dina nummer:");

// räknar upp dina nummer ur bingo-vektorn
foreach (int number in bingoRad)

{
Console.Write(" {0}", number);
}

Console.WriteLine();

Console.Write("Vinnar nummer:");

//räknar upp de slumpade nummren ifrån slump-vektorn
foreach (int number in numbers)
{
Console.Write(" {0}", number);
}

Console.WriteLine();

Console.WriteLine("Tryck valfri tangent för att avsluta");
Console.ReadLine();
}

}
}
}

ser detta okej ut? samt kommentarerna är korrekta?

Permalänk
Medlem
Skrivet av anon217901:

jo, men då gäller ej variablerna mer än i just den "delen" haha får ej allt att gå ihop då, fattar du hur jag menar? skippade helt undantaget med 1-25 utan drog bara i-- .

hur ser koden ut i övrigt tycker du? har lite strul med att kommentera vektorn "nertill" ja, de jag inte kommenterat, haha vet inte ritkigt hur jag ska formulera mig

Vad exakt menar du med den "delen"? Om det bildas problem för att du initierar variabeln i try-delen kan du alltid initiera den innan och sedan sätta värdet i try-delen:

int bingoNr; try { bingoNr = .....; } catch.......

Permalänk
Medlem
Skrivet av anon217901:

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace bingo { class Program { static void Main(string[] args) { //skapar vektorn bingorad int right = 0; int[] bingoRad = new int[10]; string[] positions = { "första", "andra", "tredje", "fjärde", "femte", "sjätte", "sjunde", "åttonde", "nionde", "tionde" }; //välkomst text Console.WriteLine(); Console.WriteLine("Välkommen till Console-Bingo!!"); Console.WriteLine(); Console.WriteLine("Skriv in dina 10 bingonummer mellan 1 och 25."); //for loppen for (int i = 0; i < bingoRad.Length; i++) { try { Console.WriteLine("Skriv in ditt {0} nummer:", positions[i]); //inmatningen utav bingonummren som hamnar i vektorn int bingonr = int.Parse(Console.ReadLine()); bingoRad[i] = bingonr; } catch { Console.WriteLine("Använd siffror!"); //om talen skrivs in med annat än heltal så catchar vi det och backar tillbaka till samma fråga. i--; continue; } } //vektorn med de sju slumpade bingonummren int[] numbers = new int[7]; Random randmNr = new Random(); for (int r = 0; r < numbers.Length; r++) { numbers[r] = randmNr.Next(1, 26); // Slumpar tal mellan 1-26 och läger i vektorn } // går igenom de valda bingonummren och jämför med de slumpade for (int i = 0; i < bingoRad.Length; i++) { if (numbers.Contains(bingoRad[i])) { right++; } } { // skriver ut resultat Console.WriteLine(); Console.WriteLine("### Du fick: {0} of 10 ###", right); Console.Write("Dina nummer:"); // räknar upp dina nummer ur bingo-vektorn foreach (int number in bingoRad) { Console.Write(" {0}", number); } Console.WriteLine(); Console.Write("Vinnar nummer:"); //räknar upp de slumpade nummren ifrån slump-vektorn foreach (int number in numbers) { Console.Write(" {0}", number); } Console.WriteLine(); Console.WriteLine("Tryck valfri tangent för att avsluta"); Console.ReadLine(); } } } }

ser detta okej ut? samt kommentarerna är korrekta?

För det mesta ja, det borde fungera i alla fall.

En mindre kommentarsändring du skulle kunna göra är raden

numbers[r] = randmNr.Next(1, 26); // Slumpar tal mellan 1-25 och läger i vektorn

ändrade kommentaren till att peka på mellan 1-25 då talen kan vi från och med 1 till och med under 26 (alltså 25)

Annars så ser jag inget som direkt pekar på att det är felaktivt. Dock har jag inte kört koden så jag vet inte. Dessutom har jag inte programmerat i just C# på flera år så jag kan inte exakt syntax utan har utgått från att du har de delarna korrekt. Logiken borde fungera dock.

Permalänk
Inaktiv
Skrivet av AfterShock:

För det mesta ja, det borde fungera i alla fall.

En mindre kommentarsändring du skulle kunna göra är raden

numbers[r] = randmNr.Next(1, 26); // Slumpar tal mellan 1-25 och läger i vektorn

ändrade kommentaren till att peka på mellan 1-25 då talen kan vi från och med 1 till och med under 26 (alltså 25)

Annars så ser jag inget som direkt pekar på att det är felaktivt. Dock har jag inte kört koden så jag vet inte. Dessutom har jag inte programmerat i just C# på flera år så jag kan inte exakt syntax utan har utgått från att du har de delarna korrekt. Logiken borde fungera dock.

du har så rätt. tack

Permalänk
Inaktiv

Nu har jag en till uppgift, vilket är planeringsfasen till min slutuppgift i programmering1. där jag ska planera uppgiften sodacrate/läskbacken vilket många verkar ha gjort.

haha helt lost, tycker detta är bra mkt svårare än själva programmeringen. jag förstår ju uppgiften vad dem frågar efter. Men har ärligt ingen som helst aning om hur jag ska lägga upp denna planeringsfas, fattar knappt vad dem frågar efter. aldrig gjort något liknande.
ska ju skapa en egen klass som är själva "läskbacken"
ska sedan ha en vektor med 24 platser,

6 olika alternativ i min "meny" med vad man vill göra.

ska ha ungefär lika många metoder som anropas beroende på vilket av de 6valen man gör i menyn, ex lägger till flaska, eller tar bort, sorterar eller räknar ut sammanlagda värdet eller bara räknar upp dem.

men hur f*n skriver jag detta i psuedokod och aktivitetsdiagram???

kraven:

Du har med viss säkerhet bedömt situationen och uppgiftens krav
Du har planerat för uppgiften med ett enkelt aktivitetsdiagram, pseudokod och kompletterande text. I planeringen ingår kontrollstrukturer, variabler, datastrukturer och algoritmer som är adekvata för uppgiften.

uppgiften:

Planering Ni ska skapa någon form av planering till ert projekt. Då är det lämpligt att skapa följande:
1. Beskrivande del där man redogör för hur man tänkt bygga programmet och exempelvis vilka klasser och metoder som ska finnas med. Man kan också tänka sig att man vill formulera särskilda utmaningar som man ännu inte vet fullt ut hur man ska lösa.

2. Översiktsbild (klassdiagram). Man bör också göra ett diagram som visar de klasser med variabler med tillhörande variabler och metoder som ska användas. Ungefär så som det illustreras i denna projektbeskrivning nedan. Figuren ska alltså visa vilka klasser som ska användas och hur de ska konstrueras – en modell över programmet.

3. Någon pseudo-kod. Man kan exempelvis välja ut en eller ett par metoder att beskriva med pseudokod.

4. Något aktivitetsdiagram (sekvensdiagram). Man kan exempelvis välja ut en eller ett par metoder att beskriva med aktivitetsdiagram. Denna uppgift är alltså relativt öppen i sitt upplägg men desto tydligare och bättre du kan förmedla hur programmet ska konstrueras, desto bättre betyg och desto lättare för handledaren att ge vettig feedback.

objektet sodacrate ska det finns en vektor som håller reda på 25 stycken flaskor. Varje element i vektorn är ett namn som exempelvis ”coca-cola” eller ”Ramlösa”. Observera att det ska vara just en vektor och inte en lista. I sodacrate ska det finnas en switch-case meny där alternativen kopplas till olika metoder.
Dessa metoder är:
1. Lägga till en läsk i vektorn (läskbacken)
2. Skriva ut innehållet i vektorn (läskbacken)
3. Beräkna det totala värdet av backen och skriv ut på skärmen
4. Avsluta programmet Under metoden Run() ska alltså kod skrivas som skriver ut text som välkomnar användaren och därefter får en lista över vilka saker man kan göra.
Detta val bör ju läggas i en loop så inte programmet stänger ner efter att man valt något. Man ska inte kunna stoppa in fler än 25 drycker i backen, eventuellt kan man få välja att ersätta en flaska i en full back med en annan.
Här används då med fördel variabeln amount_bottles (se figuren) som kan hålla reda på antal flaskor.
Är backen full ska man få meddelande om detta och då får man välja en position och den gamla läsken försvinner.
För uträkning av det totala värdet så utgår vi ifrån att varje flaska kostar 5 kronor.

Betyg C
För betyget C ska klassen Sodacrate byggas ut med ytterligare metoder:
1. En metod som anropas för att söka efter en flaska baserat på namn. Detta beskrivs i läroboken och kapitel 13 (kodexempel för sökning på sidan 149). I denna metod kan man också ha en inparameter som då är den sträng som du ska söka efter.
2. En metod som ska anropas för att sortera vektorn med läskflaskor utifrån namnet. Eftersom alla flaskor har samma pris (för betyget C) får vi istället sortera efter hur många tecken det finns i namnet – dvs hur långt namnet är.
Själva sorteringen beskrivs i läroboken och kapitel 13 (kodexempel för sortering på sidan 159).

Gör man uppgiften enligt A kan man sortera efter pris också vilket är roligare kanske.
Tänk följande kod (från Microsfts sida): string str = "abcdefg"; Console.WriteLine("1) The length of '{0}' is {1}", str, str.Length); Här kommer 7 (sju) att skrivas ut i konsollen då strängen ”str” har sju tecken i sig.
På detta sätt kan man sedan jämföra två strängars längd med varandra och vilken sträng som är flest tecken för bubbelsorteringen. Notera då att huvudmenyn behövs byggas ut med dessa funktioner (sortering och sökning). Struct? I hjälpkoden finns ett förslag att man kan skapa en struktur. Det är en ”klass light” där man kan ”bunta ihop” flera värden under ett namn. Då kan man sortera efter pris exempelvis och uppgiften blir roligare att jobba med. Mer information i hjälpfilen.