Förstår inte skolinstruktion C#

Permalänk
Medlem

Förstår inte skolinstruktion C#

Hej, jag har en uppgift som jag verkligen inte förstår mig på instruktionerna på. Jag vet inte ifall det är jag som är trög eller det är lite dåligt formulerat i instruktionerna.

Utmaningen i uppgiften går ut på att ni ska skapa en vektor som håller tio värden. Programmet ska sedan iterera (upprepa sig) för varje position i vektorn. Detta sker med en for-loop. För varje "varv" i loopen så ska ni låta användaren skriva in en siffra. Denna siffra kommer då placeras i nästa lediga position i vektorn.
För detta ändamål använder ni en for-loop.
I nästa moment ska ni iterera genom vektorn som är ifylld med tal.
Om ett tal i vektorn matchar det inskrivna talet så får ni "bingo".
Utmaningen kan göras tuffare (för betygskriterier som motsvarar kraven för betyget C) om ni istället även skapar en vektor för de framslumpade talen. Ni kommer alltså arbeta med flera "bollar" (slumpade tal). För att testa alla värden i en vektor med alla värden i en annan, så kommer ni behöva jobba med något som heter nästlade loopar.

Ska man alltså ha två vektorer, ena för slumpade siffror och andra för användarens gissningar?
Ska användaren skriva i ett tal som sedan testas mot alla de slumpade siffrorna?

Jag förstår verkligen inte vad det är jag ska göra här.
Tack på förhand

Permalänk
Medlem

Herrejävlar, om man ska följa de där instruktionerna till punkt och pricka går det ju inte att få ihop något program! Men jag gissar att det är som du är inne på, en array med slumpade tal och en med gissningar. Sedan jämför du alla gissningar mot alla slumpade tal.

Visa signatur

Bra, snabbt, billigt; välj två.

Ljud
PC → ODAC/O2 → Sennheiser HD650/Ultrasone PRO 900/...
PC → S.M.S.L SA300 → Bowers & Wilkins 607

Permalänk
Medlem

Du verkar ha förstått rätt, det var luddigt skrivet och förstod först själv efter ChatGTP löste uppgiften åt mig.
Måste älska modern inlärning.

Visa signatur

Stax 353xbk | Stax L300Le + L700 Arc + Custom Pads
SMSL AD18 | Kef Q300

Permalänk
Medlem

Prata med instruktören och be om ett förtydligande.

På så sätt visar du att du kan hantera situationer med dåligt skriva instruktioner då du inte alltid kommer kunna gå till ett forum eller Bing för att få svar. En annan fördel är att läraren får feedback och därmed kan bättra på sitt kursmaterial.

Permalänk
Medlem

Tack för svaren! Höll på att bli galen

Ska jag alltså skapa en vektor med 10 slumpade tal, sedan en vektor där användaren skriver in sina egna tal.
Sedan skall de slumpas mot varandra och ifall det blir bingo så får man bingo?

Förstår fortfarande inte riktigt vad jag ska göra, ska skriva ett mail till instruktören imorgon och be om förtydligande, men har bara till 27e april på mig.

Permalänk
Medlem

Jag tolkar det som att du ska skapa en vektor med tio platser, iterera över den en gång där användaren får mata in ett tal för varje position. Sedan börjar spelet där du itererar över den nu fyllda vektorn och nu ska gissa vilket värde som finns på nuvarande position. Om du gissar rätt så ska Bingo skrivas ut på skärmen.

Visa signatur

AMD Ryzen 7 1700X 3.8 GHz 20MB | ASUS PRIME X370-PRO | MSI GeForce GTX 1080 Gaming X 8GB | G.Skill 16GB DDR4 3200 MHz CL14 Flare X | Corsair RM650x 650W

Permalänk
Medlem

Dåligt beskriven uppgift, helt klart. Kollar vi sista meningen så står det att man ska lära sig nästlade loopar, så därför ska man ha 2 vektorer med siffror innan man börjar "spela bingo".

Man kan tänka sig som att Bingo Lotto har sina nummer redo, du har din bingobricka redo, sedan börjar spelet.

Permalänk
Medlem
Skrivet av patwa:

Tack för svaren! Höll på att bli galen

Ska jag alltså skapa en vektor med 10 slumpade tal, sedan en vektor där användaren skriver in sina egna tal.
Sedan skall de slumpas mot varandra och ifall det blir bingo så får man bingo?

Förstår fortfarande inte riktigt vad jag ska göra, ska skriva ett mail till instruktören imorgon och be om förtydligande, men har bara till 27e april på mig.

Som jag förstår det, men som instruktionerna inte riktigt beskriver, så ska man i den enkla versionen skapa en array/lista med tio inmatade tal och sedan jämföra varje tal med ett slumpat tal. Alternativt tvärtom, slumpade tal i arrayen/listan och en gissning per tal. Vad som gäller går inte att utläsa eftersom det refereras till inmatade tal och slumpartade tal helt slumpartat.

I den svåra versionen, som jag antar att du vill göra, så två arrayer/listor med slumpade tal och gissningar, sen jämföra dem mot varandra.

Men eftersom författaren verkar ha svårt att uttrycka sig så ska du absolut fråga denne vad som avses. Bara det att arrayer benämns som vektorer tyder på litet förvirring, i C# pratar man så gott som alltid om arrayer och listor. Vektorer är något annat.

Visa signatur

Bra, snabbt, billigt; välj två.

Ljud
PC → ODAC/O2 → Sennheiser HD650/Ultrasone PRO 900/...
PC → S.M.S.L SA300 → Bowers & Wilkins 607

Permalänk
Medlem
Skrivet av Phod:

Men eftersom författaren verkar ha svårt att uttrycka sig så ska du absolut fråga denne vad som avses. Bara det att arrayer benämns som vektorer tyder på litet förvirring, i C# pratar man så gott som alltid om arrayer och listor. Vektorer är något annat.

Åtminstone i äldre svenska kursböcker om data så används vanligtvis ordet vektor som benämning för endimensionella arrayer - oavhängigt programmeringsspråk.
Det är ungefär som med begreppen "primärminne" och "sekundärminne" - man stöter på dem i kurslitteratur och ordböcker, men aldrig ute i den så kallade verkligheten.

Permalänk
Medlem
Skrivet av Erik_T:

Åtminstone i äldre svenska kursböcker om data så används vanligtvis ordet vektor som benämning för endimensionella arrayer - oavhängigt programmeringsspråk.
Det är ungefär som med begreppen "primärminne" och "sekundärminne" - man stöter på dem i kurslitteratur och ordböcker, men aldrig ute i den så kallade verkligheten.

Jo, men nu handlar det om C#, där det finns en Vector-klass som används för andra saker. Så det är ju rätt slött av läraren att inte lära sig språket hen lär ut och skriva instruktioner på det där sättet.

Visa signatur

Bra, snabbt, billigt; välj två.

Ljud
PC → ODAC/O2 → Sennheiser HD650/Ultrasone PRO 900/...
PC → S.M.S.L SA300 → Bowers & Wilkins 607

Permalänk
Medlem
Skrivet av Phod:

Jo, men nu handlar det om C#, där det finns en Vector-klass som används för andra saker. Så det är ju rätt slött av läraren att inte lära sig språket hen lär ut och skriva instruktioner på det där sättet.

Spelar ingen roll vilket språk det är. Att prata om det generella ordet 'vektor' behöver inte ha något som helst att göra med någon eventuell klass 'Vector', utan det är helt enkelt en svensk benämning för en en-dimensionell lista eller array.
Så på just den punkten är instruktionerna korrekt skrivna.

Permalänk
Medlem
Skrivet av Erik_T:

Spelar ingen roll vilket språk det är. Att prata om det generella ordet 'vektor' behöver inte ha något som helst att göra med någon eventuell klass 'Vector', utan det är helt enkelt en svensk benämning för en en-dimensionell lista eller array.
Så på just den punkten är instruktionerna korrekt skrivna.

Jovisst är det "korrekt". Hade det handlat om C++ hade jag hållit med fullt ut. Men min poäng är litet mer åt hållet att det hade varit kul med en lärare som ansträngt sig litet för att inte leva upp till fördomen om att den som inte klarar kraven i arbetslivet blir lärare.

Det som gör termen "vektor" litet problematisk är att i.o.m. GPU-accelerering m.m. så har den kommit att börjat användas litet mer i dess matematiska betydelse. Men varför hänga med i tiden?

Visa signatur

Bra, snabbt, billigt; välj två.

Ljud
PC → ODAC/O2 → Sennheiser HD650/Ultrasone PRO 900/...
PC → S.M.S.L SA300 → Bowers & Wilkins 607

Permalänk
Medlem

läraren svarar inte på mail och den ska in om två dagar...

har skrivit den här koden

//deklarerar random class
Random rnd = new Random();
//deklarerar lista bingroBricka med plats för 10 värden
int[] bingoBrickor = new int[10];
//deklarerar likadan lista för spelarVektor
int[] spelarVektor = new int[10];
//kollar ifall vi fått bingo
Boolean bingo = false;

//körs tills det blivit bingo
do
{
//fyller en vektor med 10 stycken slumpade tal mellan 1 och 21
for (int i = 0; i < bingoBrickor.Length; i++)
{

int bricka = rnd.Next(1, 21);
bingoBrickor[i] = bricka;
}
//fyller en vektor med 10 tal från spelaren
for (int i = 0; i < bingoBrickor.Length; i++)
{
Console.WriteLine("Skriv en siffra! " + (10 - i) +" kvar");
int bricka = int.Parse(Console.ReadLine());
spelarVektor[i] = bricka;
}
//körs 10 gånger tills talen i de två vektorerna jämförts med varandra
for (int i = 0; i < spelarVektor.Length; i++)
{
Console.WriteLine(spelarVektor[i] + " - " + bingoBrickor[i]);
//kollar ifall vektorerna har samma värde på respektive positioner
if (spelarVektor[i] == bingoBrickor[i])
{
bingo = true;
break;
}
}

} while (bingo == false);

Console.WriteLine("Bingo!");

tror ni det kan vara rätt?

Permalänk
Medlem

@patwa: Uppgiften är som sagt svårtolkad, men just nu så blir det bara bingo om spelaren matar in rätt tal i rätt ordning. Men det är nog egentligen meningen att ordningen inte ska spela någon roll, särskilt eftersom uppgiften nämner nästlade loopar. D.v.s. om rätt tal är 1 2 3 och spelaren matar in 3 1 2 så borde även det bli bingo.

Permalänk
Medlem
Skrivet av perost:

@patwa: Uppgiften är som sagt svårtolkad, men just nu så blir det bara bingo om spelaren matar in rätt tal i rätt ordning. Men det är nog egentligen meningen att ordningen inte ska spela någon roll, särskilt eftersom uppgiften nämner nästlade loopar. D.v.s. om rätt tal är 1 2 3 och spelaren matar in 3 1 2 så borde även det bli bingo.

Ska man alltså få typ 3 i rad?

Permalänk
Medlem
Skrivet av patwa:

Ska man alltså få typ 3 i rad?

Jag vet inte vad du menar med det, men jag menar bara att du borde kolla om de två vektorerna innehåller samma tal oavsett ordning. Jag använde bara 3 tal som exempel, i ditt fall så är det förstås 10 tal som gäller.

Permalänk
Medlem
Skrivet av perost:

Jag vet inte vad du menar med det, men jag menar bara att du borde kolla om de två vektorerna innehåller samma tal oavsett ordning. Jag använde bara 3 tal som exempel, i ditt fall så är det förstås 10 tal som gäller.

Förstod inte jag heller vad jag menade, såhär ser den ut nu ifall du vill testa. Gjorde som du sa, tror jag är klar med denna nu.

//deklarerar random class
Random rnd = new Random();
//deklarerar lista bingroBricka med plats för 10 värden
int[] bingoBrickor = new int[10];
//deklarerar likadan lista för spelarVektor
int[] spelarVektor = new int[10];
//kollar ifall vi fått bingo
Boolean bingo = false;

//körs tills det blivit bingo
do
{
//fyller en vektor med 10 stycken slumpade tal mellan 1 och 21
for (int i = 0; i < bingoBrickor.Length; i++)
{

int bricka = rnd.Next(1, 21);
bingoBrickor[i] = bricka;
}
//fyller en vektor med 10 tal från spelaren
for (int j = 0; j < bingoBrickor.Length; j++)
{
Console.WriteLine("Skriv en siffra! " + (10 - j) +" kvar");
int spelarbricka = int.Parse(Console.ReadLine());

if (spelarbricka > 21 )
{
do
{
Console.WriteLine("Du kan bara skriva ett tal mellan 1 och 21!");
spelarbricka = int.Parse(Console.ReadLine());

} while (spelarbricka > 21);

}
if (spelarbricka < 0)
{
do
{
Console.WriteLine("Du kan bara skriva ett tal mellan 1 och 21!");
spelarbricka = int.Parse(Console.ReadLine());

} while (spelarbricka < 1);

}
spelarVektor[j] = spelarbricka;
}
Console.Clear();
//körs 10 gånger tills talen i de två vektorerna jämförts med varandra
Console.WriteLine("[{0}]", string.Join(", ", spelarVektor));
Console.WriteLine("Ovanför har du dina brickor. Tryck på enter för att få en bingobricka");
for (int j = 0; j < spelarVektor.Length; j++)
{
Console.ReadKey();
for (int i = 0; i < bingoBrickor.Length; i++)
{
//kollar ifall vektorerna har samma värde på respektive positioner
var score = spelarVektor[i] == bingoBrickor[j];
if (score)
{
Console.WriteLine("Bingo! " + spelarVektor[i]);
bingo = true;
break;
}
else
Console.WriteLine(bingoBrickor[j]);
break;
}
}

} while (bingo = false);

Console.WriteLine("Du fick bingo!");

Permalänk
Avstängd

Är rätt säker på att jag har exakt den där uppgiften liggandes på hårddisken hemma, kan kika hur jag gjorde när jag är hemma från jobbet.

Hermods va?

Viktigt om du vill ha bra betyg är att lista ut hur lärarna vill att du gör, de är aspetiga på metodiken.
Fick E fastän jag gjorde program som gjorde allt förväntat och inte kraschade.

Kör du programmering 2 sedan och kommer till Windows forms så är knepet att lägga events (ett attribut värde bundet till knappen) i knapparna och sedan loopa programmet som läser av när events ändras.

Permalänk
Medlem

@patwa: Du är nära, men inte riktigt. För det första så saknar du { } på din else-sats, vilket gör att break; ligger utanför if-satsen och alltid avslutar den inre for-loopen i första iterationen. Sen är logiken inte riktigt rätt heller, nu räcker det att spelaren bara gissar ett tal rätt för att vinna istället för att gissa alla rätt.

Din inläsning av tal är inte riktigt rätt heller, om användaren t.ex. matar in ett negativt tal så frågar du efter ett nytt tal men accepterar sedan hur stora tal som helst eftersom du har en särskilt inläsning för det fallet. Ett tips är att du kan ändra värdet på iterationsvariabeln var som helst i loopen, så du kan istället inkrementera den när du vet att det inmatade värdet är giltigt:

for (int i = 0; i < spelarVektor.Length; ) // <- Ingen i++ { // Läs in värde if (värdet är fel) { break; // Kör en ny iteration med samma värde på i. } // Värdet är giltigt: i++; // Spara värdet i vektorn }

Permalänk
Medlem
Skrivet av Ricerunner:

Är rätt säker på att jag har exakt den där uppgiften liggandes på hårddisken hemma, kan kika hur jag gjorde när jag är hemma från jobbet.

Hermods va?

Viktigt om du vill ha bra betyg är att lista ut hur lärarna vill att du gör, de är aspetiga på metodiken.
Fick E fastän jag gjorde program som gjorde allt förväntat och inte kraschade.

Kör du programmering 2 sedan och kommer till Windows forms så är knepet att lägga events (ett attribut värde bundet till knappen) i knapparna och sedan loopa programmet som läser av när events ändras.

Tack så mycket skulle vara jättsnällt!

Permalänk
Medlem
Skrivet av perost:

@patwa: Du är nära, men inte riktigt. För det första så saknar du { } på din else-sats, vilket gör att break; ligger utanför if-satsen och alltid avslutar den inre for-loopen i första iterationen. Sen är logiken inte riktigt rätt heller, nu räcker det att spelaren bara gissar ett tal rätt för att vinna istället för att gissa alla rätt.

Din inläsning av tal är inte riktigt rätt heller, om användaren t.ex. matar in ett negativt tal så frågar du efter ett nytt tal men accepterar sedan hur stora tal som helst eftersom du har en särskilt inläsning för det fallet. Ett tips är att du kan ändra värdet på iterationsvariabeln var som helst i loopen, så du kan istället inkrementera den när du vet att det inmatade värdet är giltigt:

for (int i = 0; i < spelarVektor.Length; ) // <- Ingen i++ { // Läs in värde if (värdet är fel) { break; // Kör en ny iteration med samma värde på i. } // Värdet är giltigt: i++; // Spara värdet i vektorn }

Tack så mycket! Hade inte alls tänkt på att göra som du skrev. Tack!

Permalänk
Medlem
Skrivet av Erik_T:

Spelar ingen roll vilket språk det är. Att prata om det generella ordet 'vektor' behöver inte ha något som helst att göra med någon eventuell klass 'Vector', utan det är helt enkelt en svensk benämning för en en-dimensionell lista eller array.
Så på just den punkten är instruktionerna korrekt skrivna.

Nej. Precis som Phod säger så beror det på kontextet. I det här fallet (C#) så betyder vektor precis det - en geometrisk storhet som dels har en storlek och dels en riktning. Men ibland används det förvirrat också när man gör interop mot C++ och då avser man oftast std::vector.

I C# kallas motsvarigheten för List.

std::vector är i sin tur oftast* inte endast implementerat som en array utan innehåller även räknare för kapacitet och lite annat.

* Det är implementationsberoende. Fram till för inte så länge sedan så var det inte ens säkert att std::vector var implementerad som en array, det kunde vara en s.k. linked list också. Numera kräver standarden att minnet är kontinuerligt.

Permalänk
Avstängd
Skrivet av patwa:

Tack så mycket skulle vara jättsnällt!

Hittade den här på hårddisken, godkänd blev den iallafall.

using System; namespace Lottobollar { internal class Lottobollar { static void Main(string[] args) { //Initierar en vektor med 10 platser. int[] lottorad = new int[10]; //Skapar ett slumptal i variabeln slump_tal. Random randomerare = new Random(); int slump_tal = randomerare.Next(1, 26); //Ber användaren gissa 10 nummer mellan 1 och 25. Console.WriteLine("Skriv in 10 lottonummer mellan 1 och 25, tryck enter " + "mellan varje lottonummer."); //Forloop som körs 10 gånger. for (int i = 0; i < 10; i = i) { //Skriver in användarinput i vardera vektorindex. if (Int32.TryParse(Console.ReadLine(), out lottorad[i])) { Console.WriteLine($"Lottorad nr. {1+i} är {lottorad[i]}."); i++; } else { Console.WriteLine("Var vänlig skriv ett heltal mellan 1 och 25."); } } //Foreachloop som körs för varje indexnummer i vektorn "lottorad". foreach (int element in lottorad) { //Om ett index stöts på som innehåller rätt tal så skrivs vinsten ut. if (element == slump_tal) { Console.WriteLine($"Grattis, din lottorad innehållandes {element} var rätt!"); } //Else som körs om inget vinsttal stöts på i foreachloopen. else { Console.WriteLine("Du vann inte, bättre lycka nästa gång."); Console.ReadKey(); break; } } } } }

Märk väl att det här var min allra första programmeringskurs, och jag brydde mig föga om praxis.
Dessutom gjorde du på ett mer flexibelt sätt och använde .length, vilket var bra då det öppnar för att redigera lottolängden senare med mindre arbete.

Du har dessutom löst det snyggare med en mer informativ print, även om jag tycker att viss finess finns i att mitt stycke var relativt kompakt.