Autor Zpráva
majo80
Profil *
Potreboval by som automaticky vytvoriť matematický príklad s týmito podmienkami:
- čísla od 1 do 20
- operácie mínus a plus (náhodne)
- počet čísel v príklade náhodný (od 2 do 5)
- výsledok príkladu musí byť viac ako nula a menej ako dvadsať
- vytvoriť naraz 10 takýchto náhodných príkladov
- zobraziť príklad, nie výsledok

Ukážka:
1+3+8-5
15+4
12-3+5
4-2+6+8-3
8-7
...... a pod

Je niečo takéto možné?
Darker
Profil
Nic těžkého. Potřebuješ pole a funkci rand().
majo80
Profil *
No pre mňa dosť ťažké. Mohol by si mi s tým pomôcť?
Darker
Profil
Achjo.
if($_GET["priklady"]!=""&&$_GET["priklady"]!=null){
 $priklady=array();
 for($i=0;$i<10;$i++){
  $priklady[$i]="";
  $pocet=rand(2,5);
  for($j=0;$j<$pocet;$j++) {
   $priklady[$i]=$priklady[$i].rand(1,20);
   if(rand(0,1)==1&&$j+1<$pocet)$priklady[$i]=$priklady[$i]."+";
   else if($j+1<$pocet) $priklady[$i]=$priklady[$i]."-";
  }
 };
echo print_AR($priklady);
}


Darker
Profil
K čemu takovou blbinu chceš? Pokud to má být antispam, tak teda potěš vidle...
Ukázka: http://acaci.tk/data.php?priklady=dsa
majo80
Profil *
Neviem prečo, ale keď skopírujem ten kód na svoju stránku, tak nefunguje a pritom nevypisuje ani žiadnu chybu.
Ešte tam chýba jedna podmienka, aby výsledok, ktorý nastane po spočítaní jednotlivých čísel bol od 0 do 20.
Ďakujem veľmi za ochotu.
Darker
Profil
To už si snad zvládneš upravit. Pokud to nefunguje, máš to rozbité.
_es
Profil
majo80:
Nejde o domácu úlohu z programovania?
Ak len opíšeš hotový skript od niekoho iného, tak tá úloha veľmi účel nesplní.
Keeehi
Profil
Darker:
Řekl bych, že právě ty to máš rozbité.
1) Co dělá ten středník na konci toho foru?
2) echo print_AR($priklady); - Jelikož jsi nikde funkci print_AR() nikde nedefinoval, tak co by to asi mělo dělat?

3) Tvůj script nekontroluje podmínku 4.
Darker
Profil
Keeehi:
1) Co dělá ten středník na konci toho foru?
Nic, takže ti nemusí dělat starosti.

echo print_AR($priklady);
To je fakt. Ale je to podobná funkce jako ta, co vypíše pole, akorát přehlednější. Její existence není součástí zadání.

3) Tvůj script nekontroluje podmínku 4.
To už tu bylo. Řekl bych, že to majo80 vzládne sám. Na podmínku jsem prostě zapoměl.

Kdybych to měl rozbité, nefungovalo by to.
Keeehi
Profil
Darker:
Její existence není součástí zadání.
Ale bez její existence to nefunguje, takže buď bys ji měl doplnit, nebo to přepsat tak, aby tofungovalo i bez ní (tedy print_r($priklady);).
Darker
Profil
Keeehi:

Na to mohl přijít i beze mě.

_es:
domácu úlohu z programovania
Asi máš pravdu, ale tím líp pro mě a tím hůř pro něj.
imploder
Profil
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>
<head>
<title>náhodné příklady</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
</head>
<body>
<?php

define('POCET_PRIKLADU', 10);
define('MIN_POCET_CISEL', 2);
define('MAX_POCET_CISEL', 5);
define('MIN_CISLO', 1);
define('MAX_CISLO', 20);
define('MIN_SOUCET', 0);
define('MAX_SOUCET', 20);


function vyrob_priklad () {
  $priklad = array();

  $soucet = 0;
  $pocet_cisel = rand(MIN_POCET_CISEL, MAX_POCET_CISEL);

  for ($i=0; $i<$pocet_cisel; $i++) {
    if ($i == 0) {  // první číslo
      $min = MIN_CISLO;  // musí být kladné
      $max = MAX_CISLO;  // může být největší, co to jde
    }
    else {  // další čísla
      // může být i záporné, ale součet po přičtení nesmí klesnout pod 0
      if (($soucet - MIN_SOUCET) < MAX_CISLO)
        $min = (-1) * ($soucet - MIN_SOUCET);
      else
        $min = (-1) * MAX_CISLO;

      // může být jen tak velké, aby se po přičtení nepřekročil max. součet
      if ((MAX_SOUCET - $soucet) < MAX_CISLO)
        $max = MAX_SOUCET - $soucet;
      else
        $max = MAX_CISLO;
    }

    //echo "min: $min, max: $max <br>";
    $cislo = rand($min, $max);
    $priklad[] = $cislo;
    $soucet += $cislo;
  }

  return $priklad; // pole, kde jsou čísla se znaménky, jak jdou za sebou
}


function text_prikladu ($priklad) {
  $text = "";

  for ($i=0; isset($priklad[$i]); $i++) {
    if ($i>0) {
      if ($priklad[$i] > 0)
        $text .= '+';
    }
    $text .= $priklad[$i];
  }

  return $text;
}


for($i=0; $i<POCET_PRIKLADU; $i++) {
  $p = vyrob_priklad();
  //print_r($p); echo " = ". array_sum($p) . "<br>";
  echo text_prikladu($p) . "<br>";
}

?>
</body>
</html>

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0