DSDS - ps, Opgavesæt 4

Sidst opdateret 27-02-2008

DSDS

Opgavesæt 4: Tilfældige tal og arrays

I denne øvelse skal du konstruere en "tilfældig-drink-generator" og et "gæt-et-tal" spil. Der er tid til at du kan gøre lidt ekstra ud af opgaverne. Det er vigtigt at du bruger tid på at kommentere din kode og at koden er formatteret pænt - det er altså ikke nok at web-programmerne virker!

Ved bedømmelsen lægges der vægt på at du anvender de anviste filnavne - ellers kan vi ikke finde dine besvarelser.

Opgave A (40 procent) - Tilfældig-drink-generator

Denne opgave illustrerer brugen af arrays. Du skal implementere en PHP fil drink.php som returnerer en tilfældig valgt drink til brugeren der forespørger siden. Servicen skal på passende vis kunne anvendes i en kollegiebar.

Til at indeholde information om de forskellige drinks skal der benyttes to arrays: et array $navn[], som indeholder navnene på de forskellige drinks, og et array $indhold[], som indeholder strenge med information om de forskellige ingredienser der indgår i de forskellige drinks. De to arrays er indekseret ved tal som identificerer den pågældende drink. På denne måde vil, eksempelvis, ingredienserne for drinken ved navn $navn[2] være at finde som $indhold[2]. I $indhold[] arrayet ønskes ingredienserne for en drink være omsluttet af HTML-lister <ul><li></li>...li></li></ul>, således at de kan præsenteres som en HTML-liste.

PHP filen drink.php kan passende følge nedenstående skabelon:

  <html><head><title>Drink server</title></head>
    <body>
    <h2>Drink server</h2>
    <?php
       // Her oprettes de to arrays $navn[] og $indhold[]
       ...

       // Find et tilfældigt tal mellem 0 og (sizeof($navn) - 1)
       // ved brug af funktionen rand
       $drink = ... ;

       // Udskriv den tilfældigt valgte drink
       ...
    ?>
    </body>
  </html>

Det er altså din opgave at udfylde skemaet ovenfor. Bemærk at du skal benytte funktionen rand til at generere et tilfældigt tal (indeks i tabellerne) og funktionen sizeof til at finde antallet af elementer i et array.

Kopier din besvarelse til filen ps4/drink.php i din mappe på w: drevet på ITU.

Advarsel: Brug er servicen med nedenstående drinks er på eget ansvar:

NavnIndhold
Bloody Mary Tomatjuice, Vodka, Tabascosovs, Worcestershiresovs, Sellerisalt
Screwdriver Vodka, Appelsinjuice
Brandbil Jägermeister, Rød sodavand
Long Island Ice Tea Vodka, Gin, Rom, Tequila, Citronsaft, Cola
GT Gin, Tonic

Opgave B (50 procent) - Gæt-et-tal spil

Denne opgave illustrerer hvorledes skjulte (hidden) formvariabler kan benyttes til at implementere tilstand i et webprogram. (Se evt. taeller.php eksemplet fra forelæsningen.)

Koden til taeller.php

Din opgave er at implementere et spil "Gæt et tal". Spillet implementeres i en fil gaet_et_tal.php på webserveren.

Ideen med spillet er, at webserveren bestemmer et tal mellem 0 og 100 (med PHPs indbyggede funktion rand) som brugeren skal gætte. Hver gang brugeren indtaster et gæt i et formfelt, giver webserveren brugeren besked om hvorvidt gættet er for stort, for lille eller rigtigt. I tilfælde af at gættet er rigtigt skal brugeren lykønskes og have muligheden for at starte et nyt spil. Hvis derimod det gættede tal er for lille eller for stort skal brugeren have mulighed for et nyt gæt.

Spillet kan passende gøre brug af følgende funktion, som placeres øverst i filen gaet_et_tal.php:

  function echo_gaet_form($tal) {
    echo "<form method="post" action="gaet_et_tal.php">
          <input type=hidden name=tal value=$tal>
          Indtast dit gæt:<P>
          <input type="text" name="gaet" size="7">
          <input type="submit" value="Gæt">
          </form>";
  }

Funktionen tager et tal som argument og returnerer HTML-kode for en form til indtastning af et gæt. Når brugeren afsender formen (ved at trykke på "Gæt" knappen), sendes gættet og indholdet af den skjulte formvariabel tal til siden gaet_et_tal.php som form-argumenter.

Her er en skitse over hvorledes filen gaet_et_tal.php kan se ud:

  <html><head><title>Gæt et tal</title></head>
    <body>
    <?php
      // Funktionen echo_gaet_form skal stå her
      ...

      if ( $tal == "" ) {
        // Variablen `tal´ er ikke sat! Generer tilfældigt
        // tal med funktionen rand og returner introduktionsside
        // med form til indtastning af gæt.
        $tal = rand(1,99);
        ...
      } elseif ( ... ) {
        // Returner en side med en form til indtastning af et 
        // nyt gæt og en besked om at gættet var for lille.
        ...
      } elseif ( ... ) {
        // Returner en side med en form til indtastning af et 
        // nyt gæt og en besked om at gættet var for stort.
        ...
      } else {
        // Returner en side med en lykønskning og et link til 
        // et nyt spil.
        ...
      }
    ?>
    </body>
  </html>

Din opgave er altså at udfylde ovenstående skelet med echo-kommandoer der sender det relevante HTML-kode til brugeren i de forskellige situationer. Brug funktionen echo_gaet_form i de situationer hvor brugeren skal indtaste et nyt gæt.

Kopier din besvarelse til filen ps4/gaet_et_tal.php i din w: mappe

Hint: Se eventuelt http://www.smlserver.org/demo/guess.sml for en fungerende version af spillet. Her kan du også se hvorledes spillet kan udbygges så forskellige billeder bliver vist afhængig af om brugerens gæt er for lille, for stort eller rigtigt.

Opgave C (10 procent) - ca 5 hurtige

1 Hvad er der galt her?


	function udregnNoget(){
  		$a = 5+6;
	}

	$resultat = udregnNoget();

2 Når vi sender indholdet af en form hvor et af elementerne har attributten name="email" bliver værdien af feltet tilgængeligt i siden der modtager som $_REQUEST['email'] opstil alle nødvendige $_REQUEST's for følgende form:


<form action = 'myscript.php' method = 'post'>
	<p>Køn:</p>
	<p>
		<input type = 'radio' name='gender' value = 'male' />
		<input type = 'radio' name='gender' value = 'female' />
	</p>
	
	<p>Adresse</p>
	<p>
		<textarea name='adress' rows='10' cols='25'></textarea>
	</p>
	<p>Postnummer</p>
	<p>
		<input type='text' name='zip' />
	</p>
	<p>
		<input type='submit' value='Send' />
	</p>
</form>

3 Følgende funktion udskriver det tredie element i et array. Kan du lave den om så den returnerer indholdet istedet for at udskrive det?


	
	function thirdElement( $inputArray ) {
		
		if ( sizeof($inputArray) > 2 ) {
			echo $inputArray[2];
		} else {
			echo "Arrayet \$inputArray er ikke stort nok";
		}
		
	}
	

4 Følgende link indeholder to formvariabeler, hvordan får jeg dem "ind i php scriptet"?


  <a href="page.php?zip=2200&amp;country=DK">Se butikker nær dig</a>	

Martin Elsman - mael@itu.dk
Jonas Holbech - holbech@itu.dk

Valid HTML 4.01 Transitional