PHP hjälp - slumptalgenerator

Permalänk

PHP hjälp - slumptalgenerator

Tjena, är verkligen en nybörjare med allt som har med PHP att göra och kommer ingenvart med denna uppgift.
Har fått en skoluppgift där jag ska skapa en slumptalsgenerator.

Användaren matar in ett värde i en ruta som sedan ska motsvara det antal slumpmässiga tal som skrivs ut i en array. Funktioner vi ska använda oss av är rand() och t ex for each.

De slumpmässiga talen är mellan 1-100 och de ska skrivas ut i tre arrayer. En för de tal som generaras, en som sorterar de genererade talen från 1-50 och en som sorterar från 50-100.

HTML koden vi utgår ifrån finns här:

<!DOCTYPE html PUBLIC "-//w3c//DTD XHTMLm 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmnlns="http://www.w3.org/1999/xhtml" xml:lang="sv" lang="sv"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Inlämningsuppgift B – slumptal.html</title> </head> <body> Ange antal tal som du vill slumpa fram: <form action="slumptal.php" method="post"> <input type="text" name="nummer" /> <input type="submit" name="skicka" /> </form> <br /> <br /> </body> </html>

Dold text
Visa signatur

Don't let me out, I can't cope with the outside world...

Permalänk
Tangentbordskonnässör

Eftersom det är en skoluppgift och du inte har skrivit någon PHP kod alls att utgå ifrån så gör jag nog såhär:
1. Information om rand funktionen:
PHP: Rand
2. Array sorteringar:
PHP Sorting Arrays

Efter att ha läst det där bör du klara av det där ganska lätt.

Lycka till!

Permalänk
Medlem

Vad är din fråga? Vad har du gjort? Vad har du fastnat med?

Vi är inte här för att göra dina skoluppgifter och det funkar inte riktigt att säga vad du har fått från läraren och sedan förvänta dig att vi löser dina uppgifter...

Permalänk

Är nybörjare på detta som sagt och ville gärna ha lite tips på hur jag kan ställa upp funktionerna osv.

Det lilla PHP jag skrivit:

<!DOCTYPE html PUBLIC "-//w3c//DTD XHTMLm 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmnlns="http://www.w3.org/1999/xhtml" xml:lang="sv" lang="sv"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Inlämningsuppgift B - slumptal.html</title> </head> <body> Ange antal tal som du vill slumpa fram: <form action="slumptal.php" method="post"> <input type="text" name="nummer" /> <input type="submit" name="skicka" /> </form> <br /> <br />

<?php $nummer = isset($_POST["nummer"])? $_POST["nummer"]: 0; echo 'Dina slumpade tal är: <br />'; $vector=array(rand(1, 100)); foreach ($vector as $nummer) { echo $nummer; } echo '<br /><br />Nummer som är under 50 är: <br />'; echo 'Nummer som är 50 eller över är: <br />'; ?>

Dold text

Värdet för antalet slumpade tal som användaren anger vet jag först och främst inte hur jag ska få fram, just nu är det bara ett tal som dyker upp. Tacksam för svar...

Visa signatur

Don't let me out, I can't cope with the outside world...

Permalänk
Medlem
Skrivet av trevligmormor:

Är nybörjare på detta som sagt och ville gärna ha lite tips på hur jag kan ställa upp funktionerna osv.

Det lilla PHP jag skrivit:

<!DOCTYPE html PUBLIC "-//w3c//DTD XHTMLm 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmnlns="http://www.w3.org/1999/xhtml" xml:lang="sv" lang="sv"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Inlämningsuppgift B - slumptal.html</title> </head> <body> Ange antal tal som du vill slumpa fram: <form action="slumptal.php" method="post"> <input type="text" name="nummer" /> <input type="submit" name="skicka" /> </form> <br /> <br />

<?php $nummer = isset($_POST["nummer"])? $_POST["nummer"]: 0; echo 'Dina slumpade tal är: <br />'; $vector=array(rand(1, 100)); foreach ($vector as $nummer) { echo $nummer; } echo '<br /><br />Nummer som är under 50 är: <br />'; echo 'Nummer som är 50 eller över är: <br />'; ?>

Dold text

Värdet för antalet slumpade tal som användaren anger vet jag först och främst inte hur jag ska få fram, just nu är det bara ett tal som dyker upp. Tacksam för svar...

För det första ser denna uppgift inte ut som en slumpgenerator. Rent tekniskt så är det PHP-funktionen rand() som är själva generatorn. Självklart kan man göra en sida som baseras på den för att presentera ett slumpat tal till användaren. Men denna uppgift, uppfattar jag, att du ska slumpa X antal gånger och fördela resultaten av slumptalen i två olika arrayer. Det finns en stor chans att ett slumptal är identiskt med ett tidigare slumpat tal men texten ger ingen information om vad som faktiskt ska göras. Ett sätt är ju att räkna hur många gånger av ett visst slumpat tal som förekommer.

Har du en bättre beskrivning av problemet så är det enklare för oss att hjälpa dig tolka problemet.

Du vill ju inte göra själva slumpfunktionen och utskrivningen innan användaren har skickat in hur många slumptal som ska genereras.
Man kan ju då säga att om $_POST["nummer"] är tilldelad så har användaren klickat på skicka, och då ska allt köras. En annan lösning är att endast göra uträkningen om antalet slumptal är större än 0;

if ($nummer > 0) { //populera en array med $nummer antal slumptal //sortera första arrayen till två arrayer, en med 1-50, en med 1-100 //skriv ut resultat }

Koden som du har nu är en bit på vägen men det är ett par grejer som inte fungerar.

Denna kod skapar en array med ETT tal i sig.

$vector=array(rand(1, 100));

Rimligtvis så loopar du lika många gånger som $nummer och gör ett nytt slumptal som du stoppar in i $vector för varje varv i loopen.

Visa signatur

ηλί, ηλί, λαμά σαβαχθανί!?

Permalänk
Skrivet av Leedow:

Rimligtvis så loopar du lika många gånger som $nummer och gör ett nytt slumptal som du stoppar in i $vector för varje varv i loopen.

Okey tack för svar men hur gör jag detta då?

Antar att det är nåt sånt här till en början

foreach ($_POST as $key => $value) { }

men var ska jag sätta in det i mitt skript?

Visa signatur

Don't let me out, I can't cope with the outside world...

Permalänk
Medlem
Skrivet av trevligmormor:

Okey tack för svar men hur gör jag detta då?

Antar att det är nåt sånt här till en början

foreach ($_POST as $key => $value) { }

men var ska jag sätta in det i mitt skript?

Nej. $_POST ger troligtvis en array över alla värden som finns i $_POST. Du är bara intresserad av $_POST["nummer"] och den har du redan laddat in i $nummer. Det är ingen foreach du ska göra för du har inte tillgång till en lista/array av objekt. foreach är endast lämplig för att gå igenom en array av objekt.

Du vill göra en vanlig iteration x antal gånger, där x i detta fall är $nummer.
Vanligtvis görs dessa iterationer med en vanlig for-loop.
http://www.php.net/manual/en/control-structures.for.php
Men du kan göra med en while eller på annat sätt om du vill.

Jag har ingen aning om vilka förkunskaper du har eller vilken kurs du går. Har ni inte pratat om iterationer än?
Som jag skrev tidigare så är jag inte helt hemma på vad uppgiften egentligen ska göra. Men denna loop är i alla fall en grundprincip för att slumpa fram en eller många värden.

Visa signatur

ηλί, ηλί, λαμά σαβαχθανί!?

Permalänk

Okok tack för svar. Detta är en grundkurs i PHP och jag har inga förkunskaper...

Uppgiften går ut på att användaren ska mata in ett värde i en ruta. Det värdet ska sedan motsvara det antal slumpmässiga siffror som genereras.
Sedan ska de genererade slumpmässiga siffrorna som är under 50 sorteras in i en vektor medan de som är 50 och över sorteras in i en annan.

Visa signatur

Don't let me out, I can't cope with the outside world...

Permalänk

Nu har jag löst det första jag hade problem med (antalet slumpmässiga siffror).

Nu är det bara det andra kvar haha

Skrivet av trevligmormor:

Sedan ska de genererade slumpmässiga siffrorna som är under 50 sorteras in i en vektor medan de som är 50 och över sorteras in i en annan.

Visa signatur

Don't let me out, I can't cope with the outside world...

Permalänk
Medlem

Låter som en rätt simpel uppgift, så jag tror inte att du kommer ha särskilt mycket bekymmer så länge du läser på om arrays och rand()-funktionen.

Observera att rand() inte är en "riktig" slumpgenerator utan genererar vad som får kallas ett pseudoslumpat tal, dvs inte särskilt slumpat, trots allt. Det är värt att komma ihåg för framtiden, eftersom ett pseudoslumpat tal också till viss grad är förutsägbart, vilket ur ett kryptografiskt perspektiv (och därmed även säkerhetssynpunkt) inte är att rekommendera. Du kan göra det aningen mer avancerat genom att t.ex. ta med ett s.k. "seed", eller ett kodord som påverkar vilka siffror som genereras beroende på vad det är för kodord. Detta kan du göra med srand(), men för uppgiften räcker det nog med enbart rand() som du håller på med nu.

För att verkligen begripa hur php:s rand() är "pseudorandom" så kan du jämföra bilderna här: http://boallen.com/random-numbers.html
Det är kanske överkurs för uppgiften, men det gör dig gott att känna till.

Vad gäller uppgiften i övrigt kan du ju:
// Skapa en array0 där du placerar varje "slumpat" tal i.
// Gå igenom varje tal i arrayen och placera dem antingen i en array1 med 1-49 eller en annan array2 med 50-100 med hjälp av ett par if-satser.
// Implementera en sorteringsfunktion, förslagsvis bubble sort (eftersom den kanske är enklast att förstå, och inte minst implementera, se här: http://youtu.be/lyZQPjUT5B4)
// Kalla på din nya sorteringsfunktion och sortera array1 och array2 respektive.

Visa signatur

SLI Titan X - i7 5960x 8-kärnig - Asus Rampage V - 32 GB Corsair Dominator - Intel 750 2200 MB/s Pcie-disk.

Permalänk

Vad gäller uppgiften i övrigt kan du ju:
// Skapa en array0 där du placerar varje "slumpat" tal i.
// Gå igenom varje tal i arrayen och placera dem antingen i en array1 med 1-49 eller en annan array2 med 50-100 med hjälp av ett par if-satser.
// Implementera en sorteringsfunktion, förslagsvis bubble sort (eftersom den kanske är enklast att förstå, och inte minst implementera, se här: http://youtu.be/lyZQPjUT5B4)
// Kalla på din nya sorteringsfunktion och sortera array1 och array2 respektive.[/QUOTE]

Okey, hur gör jag detta t ex?
Koden ser just nu ut såhär:

$nummer = isset($_POST["nummer"])? $_POST["nummer"]: 0; echo 'Dina slumpade tal är: <br />'; for($i=0;$i<($_POST["nummer"]);$i++) { $nummer=rand(1,100); echo $nummer. " "; $vector[$i]=$nummer; }

Dold text

Alltså hämtar de genererade talen från en array till en annan.. yeez känner mig som en idiota

Visa signatur

Don't let me out, I can't cope with the outside world...

Permalänk
Medlem

Kör på en enkel if-sats

Om talet är under 50 så lägg in det i en array
annars om det är över 50 så lägg in i en annan array