lottobollar
Hej
Kan någon hjälpa mig i C och A?
här är länken till uppgift
https://antbring.files.wordpress.com/2016/03/lottobollar.pdf
I uppgiften ska besökaren få skriva in 10 stycken tal som lagras i en vektor.
När användaren skrivit in 10 stycken tal börjar spelet.
Nu ska ett tal slumpas fram.
Koden ska nu läsa alla tal som användaren skrivit in (i vektorn) och testa tal för
tal mot eventuella matchningar. Får man en matchning har man vunnit, d.v.s.
att talet i vektorn är lika med talet som slumpats fram.
Ytterligare funktionalitet (Betyg C)
Ni ska nu kontrollera så att användaren bara skriver in ett tal mellan 1 och 25.
Detta lösas enklast genom att man styr inmatning till respektive position i vektorn med en for-loop. I
for-loopen finns en variabel (förändring, exempelvis i) som kontrollerar vilken position man för
närvarande ”pekar på” i vektorn.
Om talet som användaren skriver in är under 1 eller över 25 kan man minska värdet i variabeln (i) som
styr positionen med ett (1) enligt figuren nedan. Då ”backar” vi ett steg i vektorn.
Alltså – för varje varv som for-loopen itererar så kommer värdet på variabeln som styr förändring att
öka med ett (1). Men om vi skriver in ett ”olämpligt” värde så kommer värdet att minska med ett (1) i
koden inuti loopen.
Alternativet är att ni sparar det inmatade talet i en temporär variabel och lagrar det i vektorn om det
uppnår kraven (det vill säga är mellan ett och tjugofem).
Massor av funktionalitet (Betyg A)
För denna nivå ska man slumpa fram flera tal.
De talen som slumpas fram ska också lagras i en vektor.
Alla tal ska alltså testat mot alla.
Ni får inte använda några ”hjälpmetoder” utan detta ska lösas enbart med vanliga loopar.
Utöver detta gäller kraven för betyget C och överlag att det ställs högre krav på säker kodning,
användarinteraktion etc.
Hur långt har du kommit?
Har du något att visa oss, kod eller beskrivning?
Jag har kommit fram till här
Men jag vet inte hur man lösa C och A
class Program
{
public static void Main(string[] args)
{
Console.WriteLine("Ange tio tal, alla tal ska vara mellan 1 och 25");
Random randomerare = new Random();
int slump = randomerare.Next(25);
int[] arr = new int[10];
for ( int i = 0; i <10; i++)
{
Console.Write("Number: ");
string st = Console.ReadLine();
int element = Convert.ToInt32(st);
arr[i]=element;
}
foreach (int element in arr)
{
if (element == slump)
{
Console.WriteLine("Grattis, du vinner");
}
else
{
Console.WriteLine("Tyvärr, försök igen sedan...");
break;
}
}
i C om slumptalet är tex 12 och man skriver in 12 så det ska plusas med 1 så det blir 13 och till slut förlorar användaren, Har jag rätt?
alex skrev:i C om slumptalet är tex 12 och man skriver in 12 så det ska plusas med 1 så det blir 13 och till slut förlorar användaren, Har jag rätt?
Nej tanken med C-nivån är att det som användaren skriver in endast ska lagras i vektorn om talet är något av de tillåtna talen, dvs något av 1, 3, 4 ..., 25.
Fungerar din kod på E-nivå?
I den så lägger du in det inlästa talet i arr[i].
Förslaget som anges är att du ska ha en variabel som anger aktuell position i arrayen och att du ska öka dess värde med 1 efter varje inläst tal.
Om då talet är felaktigt så kan du räkna ner positionen med 1 igen och bara fortsätta i slingan. Nästa ìnlästa fall kommer då att skriva över det tidigare felaktigt inlästa talet.
Kan du förklara det med koder?
alex skrev:Kan du förklara det med koder?
Nej men jag kan ge ett annat förslag på hur du kan göra:
--------------------------------
Definiera en heltalsvariabel pos.
Sätt pos till värdet 0..
Start slinga: Så länge pos < 10 så:
Läs in ett tal
Sätt arr[pos] till det inlästa talet
Om det inlästa talet uppfyller villkoren så öka variabeln pos med 1
Slut slinga.
---------------------------------------
Okej
villkor där tal >25 så
tal = tal -1
tal mellan 0 o 25 så händer ingenting .
Jag undrar bara om jag tänker rätt med följande eller fel.
Om man skriver in tex 44 så den ska vara 43 i vektor eller den ska minska 1 tills loopen är slut, jag menar om första tal är 44 så det ska minskas med 1 tio gånger.
alex skrev:Okej
villkor där tal >25 så
tal = tal -1
tal mellan 0 o 25 så händer ingenting .
Jag undrar bara om jag tänker rätt med följande eller fel.
Om man skriver in tex 44 så den ska vara 43 i vektor eller den ska minska 1 tills loopen är slut, jag menar om första tal är 44 så det ska minskas med 1 tio gånger.
Det var inte så jag skrev i mitt senaste förslag, men OK, det går såklart även att göra på det sättet.
Men du har missuppfattat vad det är som ska minskas eller ökas med 1.
Det är inte talet som användaren matar in som ska minskas/ökas, utan det är indexet/räknaren/positionen i vektorn som ska ändras.
Exempel:
Akktuell position i vektorn är 0.
Du läser in ett tal från användaren och lagrar det i vektorn på aktuell position, dvs på position 0. Sen räknar du upp aktuell position till 1 och kontrollerar om talet som användaren matade in är tillåtet.
Om ja så gör du ingenting utan läser in nästa tall från användaren och lagrar det i vektorn på aktuell position, dvs på position 1. Sen räknar du upp aktuell position till 2 och kontrollerar om talet som användaren matade in är tillåtet.
Om nej så minskar du aktuell position till 1 igen.
Nästa tal du läser in från användaren kommer då ty skriva över det otillåtna talet på position 1.
Hänger du med?
Ja, tack för förklaringen.
på så sätt kan användaren skriva in mer än tio tal ,eller hur?
Men i vektorn ska vara bara tio tal
Ja det stämmer. Användaren kan skriva in hur många tal som helst, men efter totalt 10 korrekta svar så avslutas inlärningen.
Läs nu mitt näst senaste svar igen. Jag tycker att den konstruktionen är enklare.
Nu kör jag igen med detta
Jag upptäckte att vi måste skriva i =1 i vektorn istället av i=0 eftersom om man skriver första tal till exempel så kommer programmet att krascha om vi skriver i =0.
Har jag rätt?
på så sätt vektorn ska vara
for ( int i = 1; i <11; i++)
alex skrev:Nu kör jag igen med detta
Jag upptäckte att vi måste skriva i =1 i vektorn istället av i=0 eftersom om man skriver första tal till exempel så kommer programmet att krascha om vi skriver i =0.
Har jag rätt?
Nej. Första index i en array är 0.
Om du har en array vec med 3 element så är elementen vec[0], vec[1] och vec[2].
Du kan läsa mer om arrayer i c# -> här <-
men hur går till om användaren skriver första tal t ex 100 så kommer i att minska med 1 och på så sätt kraschar programmet
alex skrev:men hur går till om användaren skriver första tal t ex 100 så kommer i att minska med 1 och på så sätt kraschar programmet
Nej.
Läs -> detta <- svar igen.
Det som kommer att hända är att
- Talet 100 kommer att skrivas in i arrayen på position 0.
- Sedan räknas positionen upp till 1.
- Sedan kontrolleras om talet 100 var tillåtet.
- Eftersom det inte var tillåtet så räknas positionen ner till 0 igen.
Det funkade
Tack så mycket Yngve