Hinnavaatlus
:: Foorum
:: Uudised
:: Ärifoorumid
:: HV F1 ennustusvõistlus
:: Pangalink
:: Telekavad
:: HV toote otsing
|
|
autor |
|
tulema
HV kasutaja
liitunud: 23.04.2003
|
19.01.2008 13:51:23
PHP- numbri genereerime teatud numbritega. |
|
|
Internetis on olemas õpetused, kui teha "Random Number Generator" aga see ei sobi.
Soov on ise lisada teatuid numbreid, mis numbrite põhjal ta genereerima hakkab.
Näide: 12-3-7 ja antud numbrite alusel hakkab väljastama neid numbreid, mis on ette antud.
Keerulisemaks teeb asjaolu see, et tulemusel peab olema mitu numbrit ja ei tohi korduda. Genereeritud tulemuslehel näiteks: 2 3 7 | Refresh 2 1 7
Kas siin peab kasutama array funktsiooni?
Google on minu parim sõber aga ühtegi õpetust ma ei leidnud.
Aitäh
|
|
Kommentaarid: 67 loe/lisa |
Kasutajad arvavad: |
   |
:: |
1 :: |
0 :: |
60 |
|
tagasi üles |
|
 |
mikk36
HV Guru

liitunud: 21.02.2004
|
19.01.2008 15:13:35
|
|
|
aga palun:
php:
|
<?php ### Random number generator with special specs ### Author: mikk36 function random_number($count) { $result = rand(0, $count - 1); return $result; } $random_number_array = array( 1, 3, 5, 7, 9 ); $random_numbers_count = count($random_number_array); $random_number_length = 3; $random_number_element = random_number($random_numbers_count); $random_number_existing_elements[] = $random_number_element; $random_number_result[] = $random_number_array[$random_number_element]; for($i = 0; $i < $random_number_length - 1; $i++) { while (true) { $random_number_element = random_number($random_numbers_count); if (! in_array($random_number_element, $random_number_existing_elements)) { break; } } $random_number_existing_elements[] = $random_number_element; $random_number_result[] = $random_number_array[$random_number_element]; } ?>
|
|
|
Kommentaarid: 85 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
2 :: |
78 |
|
tagasi üles |
|
 |
AMD
HV veteran

liitunud: 29.07.2003
|
19.01.2008 15:47:18
|
|
|
function rnd($mitu_arvu = 1) {
$tulemus = "";
$arvud = array(1, 4, 5, 6, 0);
while(count($arvud) > 0 && $mitu_arvu-- > 0) {
$id = array_rand($arvud);
// kontrollime, et esimene arv ei oleks 0
if($tulemus == "" && $arvud[$id] == 0) {
$mitu_arvu++;
continue;
}
$tulemus .= $arvud[$id];
unset($arvud[$id]);
}
return $tulemus;
} |
_________________ From now on, the forum is owned by AMD.That means that you are NO LONGER allowed to talk about, or even mention *ntel. |
|
Kommentaarid: 335 loe/lisa |
Kasutajad arvavad: |
   |
:: |
145 :: |
3 :: |
12 |
|
tagasi üles |
|
 |
tulema
HV kasutaja
liitunud: 23.04.2003
|
19.01.2008 15:56:55
|
|
|
Hea script aga soov oleks nii, et "number tühik number" ehk 2 4 8 ja ridade arvu saab muuta üksteise alla.
Näide:
9 12 28 55
2 56 24 53
23 6 55 47
Tänud igatahes!
|
|
Kommentaarid: 67 loe/lisa |
Kasutajad arvavad: |
   |
:: |
1 :: |
0 :: |
60 |
|
tagasi üles |
|
 |
mikk36
HV Guru

liitunud: 21.02.2004
|
19.01.2008 16:04:32
|
|
|
tulema kirjutas: |
Hea script aga soov oleks nii, et "number tühik number" ehk 2 4 8 ja ridade arvu saab muuta üksteise alla.
Näide:
9 12 28 55
2 56 24 53
23 6 55 47
Tänud igatahes! |
no see on ju vaid väljundi muutmine, tee ümber
|
|
Kommentaarid: 85 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
2 :: |
78 |
|
tagasi üles |
|
 |
AMD
HV veteran

liitunud: 29.07.2003
|
19.01.2008 16:04:37
|
|
|
Mis see on mingi kooliülesanne nüüd või?
_________________ From now on, the forum is owned by AMD.That means that you are NO LONGER allowed to talk about, or even mention *ntel. |
|
Kommentaarid: 335 loe/lisa |
Kasutajad arvavad: |
   |
:: |
145 :: |
3 :: |
12 |
|
tagasi üles |
|
 |
tulema
HV kasutaja
liitunud: 23.04.2003
|
19.01.2008 17:00:52
|
|
|
AMD kirjutas: |
Mis see on mingi kooliülesanne nüüd või?  |
Tööinimene juba ja mitte programmeerimise vallas
Kui see oleks kooliülesanne, siis ma ei tuleks siia tervet koodi küsima vaid üritaksin juba ise valmis teha ja errori puhul oleksin üles riputanud vigase koodijupi.
|
|
Kommentaarid: 67 loe/lisa |
Kasutajad arvavad: |
   |
:: |
1 :: |
0 :: |
60 |
|
tagasi üles |
|
 |
mikk36
HV Guru

liitunud: 21.02.2004
|
19.01.2008 19:12:55
|
|
|
AMD kirjutas: |
function rnd($mitu_arvu = 1) {
$tulemus = "";
$arvud = array(1, 4, 5, 6, 0);
while(count($arvud) > 0 && $mitu_arvu-- > 0) {
$id = array_rand($arvud);
// kontrollime, et esimene arv ei oleks 0
if($tulemus == "" && $arvud[$id] == 0) {
$mitu_arvu++;
continue;
}
$tulemus [] = $arvud[$id];
unset($arvud[$id]);
}
return $tulemus;
} |
|
muutsin tibakese su koodi, AMD
kutsud funktsiooni välja ja saad vastu siis array's need väärtused
et saada selles sinu soovitud vormingus, siis: echo implode(" ", rnd());
|
|
Kommentaarid: 85 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
2 :: |
78 |
|
tagasi üles |
|
 |
tulema
HV kasutaja
liitunud: 23.04.2003
|
20.01.2008 12:57:01
|
|
|
Kurb küll aga jõhvikas ei võta välja seda PHP keelt ja oma soovitud tulemust ma ei saanud.
Vanasti tehti kõik manuaalselt, kasutan seda varianti.
|
|
Kommentaarid: 67 loe/lisa |
Kasutajad arvavad: |
   |
:: |
1 :: |
0 :: |
60 |
|
tagasi üles |
|
 |
mikk36
HV Guru

liitunud: 21.02.2004
|
20.01.2008 13:19:41
|
|
|
tulema kirjutas: |
Kurb küll aga jõhvikas ei võta välja seda PHP keelt ja oma soovitud tulemust ma ei saanud.
Vanasti tehti kõik manuaalselt, kasutan seda varianti. |
sa kohe üldse ei oska php keelt või ?
|
|
Kommentaarid: 85 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
2 :: |
78 |
|
tagasi üles |
|
 |
tulema
HV kasutaja
liitunud: 23.04.2003
|
20.01.2008 14:12:09
|
|
|
Excelis ma tunnen end kindlamalt, kui PHP's. Excelis ma teeksin valmis ka selle genereerimise aga seda ma ei saa kasutada veebis.
|
|
Kommentaarid: 67 loe/lisa |
Kasutajad arvavad: |
   |
:: |
1 :: |
0 :: |
60 |
|
tagasi üles |
|
 |
mikk36
HV Guru

liitunud: 21.02.2004
|
20.01.2008 14:23:32
|
|
|
<?php
function rnd($mitu_arvu = 1) {
$tulemus = "";
$arvud = array(1, 4, 5, 6, 0);
while(count($arvud) > 0 && $mitu_arvu-- > 0) {
$id = array_rand($arvud);
// kontrollime, et esimene arv ei oleks 0
if($tulemus == "" && $arvud[$id] == 0) {
$mitu_arvu++;
continue;
}
$tulemus [] = $arvud[$id];
unset($arvud[$id]);
}
return $tulemus;
}
echo implode(" ", rnd(5));
?> |
näeh, täispikk toimiv kood
rnd() sees olev 5 tähendab seda et mitmest arvust see suvanumber koosnema peab ja $arvud sisse sisestad siis valimiku
kui tahad mitu korda seda koodi, siis pane selle viimase rea asemele:
for ($i = 0; $i < 3; $i++) {
echo implode(" ", rnd(5))."<br>";
} |
3 on seal siis see mitu korda sa seda kätte tahad saada
saadud kood ei vasta ühestki otsast standarditele ja seetõttu on soovitav ise midagi tarka sinna ümber teha (html'i) kui on soov seda paremini väljastada
|
|
Kommentaarid: 85 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
2 :: |
78 |
|
tagasi üles |
|
 |
tulema
HV kasutaja
liitunud: 23.04.2003
|
20.01.2008 15:43:10
|
|
|
mikk36: Tänud mees!
Mida rohkem ma selle scripti peale mõtlen, seda rohkem mõtteid tuleb.
Näide:
$arvud = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10
Kas on võimalik sisse tuua tõenäosuse protsenti ehk arv 6 on 80% tõenäosusega tulemuses sees?
Kui scripti peab täielikult ümber tegema, siis las jääb nii nagu on.
|
|
Kommentaarid: 67 loe/lisa |
Kasutajad arvavad: |
   |
:: |
1 :: |
0 :: |
60 |
|
tagasi üles |
|
 |
mikk36
HV Guru

liitunud: 21.02.2004
|
20.01.2008 18:10:31
|
|
|
see teeks väga keerukaks ikka selle, pole mõtet
|
|
Kommentaarid: 85 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
2 :: |
78 |
|
tagasi üles |
|
 |
tulema
HV kasutaja
liitunud: 23.04.2003
|
20.01.2008 18:15:09
|
|
|
Selge.
Aitäh
|
|
Kommentaarid: 67 loe/lisa |
Kasutajad arvavad: |
   |
:: |
1 :: |
0 :: |
60 |
|
tagasi üles |
|
 |
Fukiku
Kreisi kasutaja

liitunud: 06.11.2003
|
21.01.2008 10:13:33
|
|
|
iseenesest, hommikul lugesin, tekkis huvi, dui all tuli idee, õhtul peale tööd ehk löön oma php'lt roostekorra maha ja katsun ära ka teha
_________________ Foxic is just a simple fox
Enne kui sa küsid oma küsimuse - küsi seda vannipardilt! Rangelt soovitatav enne programmeerimise alafoorumisse uue teema tegemist. |
|
Kommentaarid: 2 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
2 |
|
tagasi üles |
|
 |
AMD
HV veteran

liitunud: 29.07.2003
|
21.01.2008 13:16:24
|
|
|
<?php
function rndnumbers($array) {
$ret = array();
$i = 0;
foreach($array as $val) {
$ret += array_fill($i, $val[1], $val[0]);
$i += $val[1];
}
return $ret;
}
function rnd($mitu_arvu = 1) {
$tulemus = array();
$arvud = array(
array(1, 50),// arv, protsent
array(4, 30),// arv, protsent
array(5, 10),//...
array(6, 5),
array(0, 4),
array(2, 1));
$arvud = rndnumbers($arvud);
// valime välja arvud, millest lõpptulemus tehakse
$tmp = array();
$i = $mitu_arvu;
while(count($arvud) > 0 && $i-- > 0) {
$id = array_rand($arvud);
// kontrollime, et ühte arvu ei oleks mitu korda
if(in_array($arvud[$id], $tmp)) {
$i++;
unset($arvud[$id]);
continue;
}
$tmp[] = $arvud[$id];
unset($arvud[$id]);
}
while(count($tmp) > 0 && $mitu_arvu-- > 0) {
$id = array_rand($tmp);
// kontrollime, et esimene arv ei oleks 0
if(count($tulemus) == 0 && $tmp[$id] == 0) {
$mitu_arvu++;
continue;
}
$tulemus[] = $tmp[$id];
unset($tmp[$id]);
}
return $tulemus;
}
echo implode(" ", rnd(5));
?> |
_________________ From now on, the forum is owned by AMD.That means that you are NO LONGER allowed to talk about, or even mention *ntel. |
|
Kommentaarid: 335 loe/lisa |
Kasutajad arvavad: |
   |
:: |
145 :: |
3 :: |
12 |
|
tagasi üles |
|
 |
tulema
HV kasutaja
liitunud: 23.04.2003
|
21.01.2008 18:20:58
|
|
|
AMD: Kood töötab laitmatult. Ole Sa tänatud, aitäh.
Fukiku: Tänud ka Sulle.
|
|
Kommentaarid: 67 loe/lisa |
Kasutajad arvavad: |
   |
:: |
1 :: |
0 :: |
60 |
|
tagasi üles |
|
 |
mikk36
HV Guru

liitunud: 21.02.2004
|
21.01.2008 23:59:47
|
|
|
AMD, sa teenid raha php progemisega et see nii ilusasti välja tuleb sul ?
|
|
Kommentaarid: 85 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
2 :: |
78 |
|
tagasi üles |
|
 |
AMD
HV veteran

liitunud: 29.07.2003
|
22.01.2008 11:31:46
|
|
|
mikk36, ei, kuigi võiks vist
_________________ From now on, the forum is owned by AMD.That means that you are NO LONGER allowed to talk about, or even mention *ntel. |
|
Kommentaarid: 335 loe/lisa |
Kasutajad arvavad: |
   |
:: |
145 :: |
3 :: |
12 |
|
tagasi üles |
|
 |
Fukiku
Kreisi kasutaja

liitunud: 06.11.2003
|
22.01.2008 13:52:47
|
|
|
ohjah, mida rohkem ma sellele värgile siin otsa vaatan, seda enam tundub mulle, et php's ma poleks seda küll lahendada osanud liiga vähe ja liiga ammu on selle keelega tegeletud..
_________________ Foxic is just a simple fox
Enne kui sa küsid oma küsimuse - küsi seda vannipardilt! Rangelt soovitatav enne programmeerimise alafoorumisse uue teema tegemist. |
|
Kommentaarid: 2 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
2 |
|
tagasi üles |
|
 |
tulema
HV kasutaja
liitunud: 23.04.2003
|
11.06.2009 21:43:45
|
|
|
Võtame aluseks AMD koodi:
php:
|
<?php function rndnumbers($array) { $i = 0; foreach($array as $val) { $i += $val[1]; } return $ret; } function rnd($mitu_arvu = 1) { array(1, 50), // arv, protsent array(4, 30), // arv, protsent $arvud = rndnumbers($arvud); // valime välja arvud, millest lõpptulemus tehakse $i = $mitu_arvu; while(count($arvud) > 0 && $i-- > 0) { // kontrollime, et ühte arvu ei oleks mitu korda $i++; continue; } $tmp[] = $arvud[$id]; } while(count($tmp) > 0 && $mitu_arvu-- > 0) { // kontrollime, et esimene arv ei oleks 0 if(count($tulemus) == 0 && $tmp[$id] == 0) { $mitu_arvu++; continue; } $tulemus[] = $tmp[$id]; } return $tulemus; } ?>
|
Antud script genereerib mitu korda ühte tulemust. Kas on võimalik mingisugust kontrolli luua, et ei väljastaks mitu korda. Näiteks luua fail, kus hoitakse genereerituid numbreid failina. Failis olevad numbrid tulemuses enam ei kordu. Mis puutub minu PHP keeleoskusele, siis minupoolt jääb see teostamata, seega jääb teie abi peale lootma
Näide:
1 2 3 4 5
1 3 4 5 6
1 2 3 4 5
|
|
Kommentaarid: 67 loe/lisa |
Kasutajad arvavad: |
   |
:: |
1 :: |
0 :: |
60 |
|
tagasi üles |
|
 |
andrusny
Kreisi kasutaja

liitunud: 20.03.2006
|
11.06.2009 22:00:45
|
|
|
Sellisel juhul ei saaks sa ühekohalisi numbreid rohkem kui kaks korda genereerida, sest nad lõpevad lihtsalt otsa. Muidu jah võid hoida kontroll arve failis, mida täiendad igal ringil. Seal on see kontroll funktsioon olemas ka. Tehakse tühi massiiv $tmp = array(); ja hakatakse sinna väljundit koguma kontrollides, et seal juba sarnast pole. Pead ainult selle massiivi ennem failist eelmisekorra arvudega täitma ja ongi ok.
_________________
 |
|
Kommentaarid: 7 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
7 |
|
tagasi üles |
|
 |
mark11
HV vaatleja
liitunud: 28.01.2006
|
12.06.2009 10:09:51
|
|
|
mõtlesin, et proovin miskit.
<?php
function number_list($numbers)
{
static $list = array();
if(count($list) > 0) return $list;
foreach($numbers as $id => $data)
$list += array_fill(count($list), $data["percent"], $data["number"]);
return $list;
}
function sweet_output($length)
{
static $numbers = array(
array("number" => 1, "percent" => 50),
array("number" => 4, "percent" => 30),
array("number" => 5, "percent" => 10),
array("number" => 6, "percent" => 5),
array("number" => 0, "percent" => 4),
array("number" => 2, "percent" => 1));
$xlist = number_list($numbers);
shuffle($xlist);
// Generate random sequence
$max_elements = count($xlist);
$r_sequence = array();
$counter = 0;
while($counter++ < $length && $counter < $max_elements)
{
$temp_ = $xlist[$counter];
if(in_array($temp_, $r_sequence)) $length++;
else $r_sequence[] = $temp_;
}
return implode($r_sequence, ",");
}
$list = array();
// Generate 3 pair of numbers and make sure they are not same
$pairs = 0;
while($pairs < 3)
{
if(!in_array(($temp = sweet_output(3)), $list))
{
echo "Pair number {$pair} with content: {$temp} <br>";
$list[] = $temp;
$pairs++;
}
}
?> |
[/code]
|
|
Kommentaarid: 1 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
1 |
|
tagasi üles |
|
 |
andrusny
Kreisi kasutaja

liitunud: 20.03.2006
|
12.06.2009 12:51:26
|
|
|
See pole ju see mida sooviti, kus kohas siin hoitakse meeles, millised numbrid on genereeritud juba? Vaadatakse seda ainult tsükli jooksul, kuid eelmist tsüklit ei arvestata ju. Või sain ma valesti aru?
_________________
 |
|
Kommentaarid: 7 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
7 |
|
tagasi üles |
|
 |
|