|
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: 76 loe/lisa |
Kasutajad arvavad: |
   |
:: |
1 :: |
0 :: |
69 |
|
| 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: 76 loe/lisa |
Kasutajad arvavad: |
   |
:: |
1 :: |
0 :: |
69 |
|
| 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: 76 loe/lisa |
Kasutajad arvavad: |
   |
:: |
1 :: |
0 :: |
69 |
|
| 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: 76 loe/lisa |
Kasutajad arvavad: |
   |
:: |
1 :: |
0 :: |
69 |
|
| 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: 76 loe/lisa |
Kasutajad arvavad: |
   |
:: |
1 :: |
0 :: |
69 |
|
| 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: 76 loe/lisa |
Kasutajad arvavad: |
   |
:: |
1 :: |
0 :: |
69 |
|
| 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: 76 loe/lisa |
Kasutajad arvavad: |
   |
:: |
1 :: |
0 :: |
69 |
|
| 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: 76 loe/lisa |
Kasutajad arvavad: |
   |
:: |
1 :: |
0 :: |
69 |
|
| 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: 76 loe/lisa |
Kasutajad arvavad: |
   |
:: |
1 :: |
0 :: |
69 |
|
| 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 |
|
 |
mark11
HV vaatleja
liitunud: 28.01.2006
|
12.06.2009 18:50:17
|
|
|
| andrusny kirjutas: |
| 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? |
usun, et said valesti aru, kood teeb mida kood tegema peab.
|
|
| Kommentaarid: 1 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
1 |
|
| tagasi üles |
|
 |
andrusny
Kreisi kasutaja

liitunud: 20.03.2006
|
12.06.2009 18:56:59
|
|
|
Proovi siis ise, kood teeb jah seda mida tegema peab, kuid said valesti aru, mida sooviti.
Tee refresh oma browserile ja vaata, kas korduvad samad kombinatsioonid.
Korduvad küll. Kuigi ma ei näe sellel ühekohaliste numbritega mõtet.
| tsitaat: |
| Sellisel juhul ei saaks sa ühekohalisi numbreid rohkem kui kaks korda genereerida, sest nad lõpevad lihtsalt otsa. |
Aga kui oleks vaja näiteks numbreid 1-1000 genereerida ja siis, et nad ei korduks kui proge uuesti laadida siis oleks asjal jumet.
Näiteks mingi loterii, et samasid võidu kombinatsioone mitte tekitada.
_________________
 |
|
| Kommentaarid: 7 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
7 |
|
| tagasi üles |
|
 |
mark11
HV vaatleja
liitunud: 28.01.2006
|
12.06.2009 20:17:12
|
|
|
| andrusny kirjutas: |
Proovi siis ise, kood teeb jah seda mida tegema peab, kuid said valesti aru, mida sooviti.
Tee refresh oma browserile ja vaata, kas korduvad samad kombinatsioonid.
Korduvad küll. Kuigi ma ei näe sellel ühekohaliste numbritega mõtet.
| tsitaat: |
| Sellisel juhul ei saaks sa ühekohalisi numbreid rohkem kui kaks korda genereerida, sest nad lõpevad lihtsalt otsa. |
Aga kui oleks vaja näiteks numbreid 1-1000 genereerida ja siis, et nad ei korduks kui proge uuesti laadida siis oleks asjal jumet.
Näiteks mingi loterii, et samasid võidu kombinatsioone mitte tekitada. |
ah selles mõttes, siis ma kasutaks andmebaase, et hoida olemasolevaid kombinatsioone seal..
minu viga
|
|
| Kommentaarid: 1 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
1 |
|
| tagasi üles |
|
 |
tulema
HV kasutaja
liitunud: 23.04.2003
|
14.06.2009 12:56:06
|
|
|
| mark11 kirjutas: |
| ah selles mõttes, siis ma kasutaks andmebaase, et hoida olemasolevaid kombinatsioone seal.. |
Kasutades andmebaasi, kas olemasolevale koodile tuleb palju kirjutamist juurde või piisab paarist koodireast ja voilaa?
Failis hoides genereerituid numbreid on vist lihtsaim viis ja selles suunas ka liikuda.
Jäädes ikkagi ootama seda viimast lihvi
|
|
| Kommentaarid: 76 loe/lisa |
Kasutajad arvavad: |
   |
:: |
1 :: |
0 :: |
69 |
|
| tagasi üles |
|
 |
andrusny
Kreisi kasutaja

liitunud: 20.03.2006
|
14.06.2009 16:55:00
|
|
|
Kui sul on andmebaasi võimalus olemas ja oled ennem kasutanud võid panna baasi, kui mitte võib sellise lihtsa rakenduse jaoks küll faili kasutada, pole mingit mõtet hakata jebima baasi tegema ja õppima otsima, kuidas see toimib.
Kasuta näiteks sellist salvestust
if(is_file('numbrid.php')){
$fk=fopen('numbrid.php',"r");
flock($fk, LOCK_EX);
$nr=fgets($fk);
$nrM=unserialize($nr); // olemasolevad numbrid massiivis
}
// *** See osa tuleb koodi lõppu, kui oled sinna masiivi lisanud numbrid, mida kasutasid sellel korral ***
$save=serialize($nrM);
$fk=fopen('numbrid.php',"w+");
fputs($fk,$save);
fclose($fk); |
_________________
 |
|
| Kommentaarid: 7 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
7 |
|
| tagasi üles |
|
 |
tulema
HV kasutaja
liitunud: 23.04.2003
|
14.06.2009 20:25:36
|
|
|
| andrusny kirjutas: |
Kui sul on andmebaasi võimalus olemas ja oled ennem kasutanud võid panna baasi, kui mitte võib sellise lihtsa rakenduse jaoks küll faili kasutada, pole mingit mõtet hakata jebima baasi tegema ja õppima otsima, kuidas see toimib.
Kasuta näiteks sellist salvestust
if(is_file('numbrid.php')){
$fk=fopen('numbrid.php',"r");
flock($fk, LOCK_EX);
$nr=fgets($fk);
$nrM=unserialize($nr); // olemasolevad numbrid massiivis
}
// *** See osa tuleb koodi lõppu, kui oled sinna masiivi lisanud numbrid, mida kasutasid sellel korral ***
$save=serialize($nrM);
$fk=fopen('numbrid.php',"w+");
fputs($fk,$save);
fclose($fk); |
|
Kohutav, proovisin neid kahte koodi omavahel siduda aga ei saanud hakkama. Numbrid.php faili sisse tuleb "b:0;", mida see täpselt tähendab, ei oska öelda. Proovisin ka käsitsi numbreid lisada numbrid.php faili aga paraku ka see variant ei töötanud.
Aluseks võtsin:
| php:
|
<?php function number_list($numbers) { if(count($list) > 0) return $list; foreach($numbers as $id => $data) return $list; } function sweet_output($length) { 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); // Generate random sequence $max_elements = count($xlist); $counter = 0; while($counter++ < $length && $counter < $max_elements) { $temp_ = $xlist[$counter]; if(in_array($temp_, $r_sequence)) $length++; else $r_sequence[] = $temp_; } } // 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++; } } ?>
|
|
|
| Kommentaarid: 76 loe/lisa |
Kasutajad arvavad: |
   |
:: |
1 :: |
0 :: |
69 |
|
| tagasi üles |
|
 |
mikk36
HV Guru

liitunud: 21.02.2004
|
14.06.2009 20:38:49
|
|
|
| tulema, see "b:0;" on serialiseeritud kujul massiiv või muu elukas, mida saab salvestada faili tekstikujul, et hiljem see sealt kergelt uuesti tagasi vanasse vormi tõmmata.
|
|
| Kommentaarid: 85 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
2 :: |
78 |
|
| tagasi üles |
|
 |
andrusny
Kreisi kasutaja

liitunud: 20.03.2006
|
15.06.2009 00:01:36
|
|
|
Nüüd seda $list salvesta ja hiljem loe sisse, kuid nagu isegi näed juba kolmel korral, mis sa tsüklisse panid hakkavad numbrid otsa lõppema.
Nüüd all näed $save kuva milliselt sul numbrid faili salvestatakse, salvestad selle. Kui loed sisse selle uuesti ja teed unserialize() saad täpselt sama massiivi, nagu $list ennem oli.
<?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 $r_sequence;
}
$tyhi=array();
$list = array();
// Generate 3 pair of numbers and make sure they are not same
$pairs = 0;
while($pairs < 3)
{
$temp = sweet_output(4);
for($i=0;$i<count($temp);$i++){
if(!in_array(($temp[$i]), $list))
{
$out[]=$temp[$i];
$vahe[]=$temp[$i];
}
}
$out2=implode($out,",");
$out= $tyhi;
echo "Pair number {$pairs} with content: {$out2} <br>";
$list = array_merge($list,$vahe) ;
$pairs++;
}
echo "<br><br>";
var_dump($list);
$save=serialize($list);
echo "<br><br>".$save;
?> |
_________________
 |
|
| Kommentaarid: 7 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
7 |
|
| tagasi üles |
|
 |
tulema
HV kasutaja
liitunud: 23.04.2003
|
15.06.2009 19:00:32
|
|
|
uhh! Ma ei saanudki nüüd täpselt aru, mida selle lausega öelda on tahetud: "Nüüd all näed $save kuva milliselt sul numbrid faili salvestatakse". Koodis ma ei näe ühtegi faililaiendit (.txt|.php) kuhu ta võiks need numbrid salvestada. Kas ma olen äkki millestki valesti aru saanud?
Koodist ja tulemusest endast. Kui on soov kaks numbrid genereerida, siis genereerib ühe tulemuse.
Pair number 0 with content: 4,1,0,5
Pair number 1 with content: 6
Ka sellist loetakse korduseks, kui tulemuses on näiteks 1, 2, 3 ja peale lehelaadimist tuleb 1, 3, 2. See tähendaks siis seda, et arvud peaksid tulema tulemuses kronoloogilises järjekorras, mis tooks kaasa veel pikema koodi
Kas tõesti ei ole mingisugust lihtsat lahendust, kus genereeritud numbrid paneb otse .txt faili ja rohkem neid numbreid tulemuses ei kuva, kasvõi käsitsi lisades?
|
|
| Kommentaarid: 76 loe/lisa |
Kasutajad arvavad: |
   |
:: |
1 :: |
0 :: |
69 |
|
| tagasi üles |
|
 |
andrusny
Kreisi kasutaja

liitunud: 20.03.2006
|
15.06.2009 19:47:09
|
|
|
| tsitaat: |
Koodis ma ei näe ühtegi faililaiendit (.txt|.php) kuhu ta võiks need numbrid salvestada.
|
Eeldasin, et teed koodi ise. Ma andsin ainult suuna.
Proovi seda.
See salvestab kõik kasutatud numbrid faili ja ei lase neil korduda järgmisel refreshil. Kasutatud numbreid kuvatakse ka kõige lõpus.
<?php
if(is_file('numbrid.php')){
$fk=fopen('numbrid.php',"r");
flock($fk, LOCK_EX);
$nr=fgets($fk);
$list=unserialize($nr); // olemasolevad numbrid massiivis
} else {$list = array();}
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 $r_sequence;
}
$tyhi=array();
$out = array();
// Generate 3 pair of numbers and make sure they are not same
$pairs = 0;
while($pairs < 3)
{
$temp = sweet_output(4);
for($i=0;$i<count($temp);$i++){
if(!in_array(($temp[$i]), $list))
{
$out[]=$temp[$i];
$list[]=$temp[$i];
}
}
$out2=implode($out,",");
$out= $tyhi;
echo "Pair number {$pairs} with content: {$out2} <br>";
$pairs++;
}
// *** See osa tuleb koodi lõppu, kui oled sinna masiivi lisanud numbrid, mida kasutasid sellel korral ***
$save=serialize($list);
$fk=fopen('numbrid.php',"w+");
fputs($fk,$save);
fclose($fk);
echo "<br><br>Siin on numbrid, mis on juba kasutatud<br><br>";
for($i=0;$i<count($list);$i++){
echo "Number ".($i+1)." on - ".$list[$i]."<br>";
}
?> |
_________________
 |
|
| Kommentaarid: 7 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
7 |
|
| tagasi üles |
|
 |
tulema
HV kasutaja
liitunud: 23.04.2003
|
15.06.2009 20:58:30
|
|
|
andrusny
Ei ole ikka see, mida sooviksin. Teen väikese näitliku versiooni.
On olemas puhas genereerimise script, mis genereerib numbreid browseril. AMD poolt kirjutatud script,
| php:
|
<?php function rndnumbers($array) { $i = 0; foreach($array as $val) { $i += $val[1]; } return $ret; } function rnd($mitu_arvu = 1) { $arvud = rndnumbers($arvud); $i = $mitu_arvu; while(count($arvud) > 0 && $i-- > 0) { $i++; continue; } $tmp[] = $arvud[$id]; } while(count($tmp) > 0 && $mitu_arvu-- > 0) { if(count($tulemus) == 0 && $tmp[$id] == 0) { $mitu_arvu++; continue; } $tulemus[] = $tmp[$id]; } return $tulemus; } for ($i = 0; $i < 3; $i++) { } ?>
|
Genereeritud numbrid:
1 3 7 8 10
4 7 8 9 10
3 4 5 9 10
Genereerimise scriptile tule juurde kirjutada lisa kood/script, mille ülesanne on kontrollida kordus numbreid.
Nüüd on need numbrid korra juba ekraanilt läbi käinud, läheb automaatselt .txt| .php faili. Numbrid, mis on juba failis, seda kontrollib lisa script, kas antud numbrikombinatsioon on ekraanil olnud või mitte.
Olemasoleva faili sisu:
1 3 7 8 10
4 7 8 9 10
3 4 5 9 10
andrusny: Mingil põhjusel said arvud otsa antud scriptis, kuid numbrikombinatsioone on miljoneid.
Ma ei tea, kas me mõistame nüüd üksteist
|
|
| Kommentaarid: 76 loe/lisa |
Kasutajad arvavad: |
   |
:: |
1 :: |
0 :: |
69 |
|
| tagasi üles |
|
 |
andrusny
Kreisi kasutaja

liitunud: 20.03.2006
|
15.06.2009 21:47:56
|
|
|
Sa ei tekita numbrikombinatsioone vaid kontrollid üksikuid numbreid. Seetõttu ka lõppeb see. Sa pead kontrollima siis seda neljakohalist numbrit ja seda salvestama, kuid sinu näidetes ta annab need numbrid ühekohalisena ja paneb neid lihtsalt neli tükki kõrvuti ja sellest siis ka viga. Lõpevad ühekohalised numbrid ja ongi otsas.
********************************
Tegin nüüd sellise, mis väljastab neljakohalisi ja need ei tohiks nüüd korduda.
<?php
global $list;
if(is_file('numbrid.php')){
$fk=fopen('numbrid.php',"r");
flock($fk, LOCK_EX);
$nr=fgets($fk);
$list=unserialize($nr); // olemasolevad numbrid massiivis
} else {$list = array();}
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 $r_sequence;
}
//*****************************************************************
function kontroll(){
global $out;
global $list;
// !in_array($out2), $list)
$temp = sweet_output(4);
$out2=implode($temp,"");
if( !in_array(($out2), $list))
{
$out=$out2;
$list[]=$out2;
} else
{ kontroll();}
}
//*************************************************************
$tyhi="";
//$out = array();
//$list = array();
// Generate 3 pair of numbers and make sure they are not same
$pairs = 0;
while($pairs < 3)
{
kontroll();
echo "Pair number {$pairs} with content: {$out} <br>";
// $list = array_merge($list,$vahe) ;
$pairs++;
$out= $tyhi;
}
// *** See osa tuleb koodi lõppu, kui oled sinna masiivi lisanud numbrid, mida kasutasid sellel korral ***
$save=serialize($list);
$fk=fopen('numbrid.php',"w+");
fputs($fk,$save);
fclose($fk);
echo "<br><br>Siin on numbrid, mis on juba kasutatud<br><br>";
for($i=0;$i<count($list);$i++){
echo "Number ".($i+1)." on - ".$list[$i]."<br>";
}
?>
|
_________________
 |
|
| Kommentaarid: 7 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
7 |
|
| tagasi üles |
|
 |
tulema
HV kasutaja
liitunud: 23.04.2003
|
16.06.2009 23:46:48
|
|
|
andrusny : Sinu viimane jõupingutus viis asja lõpp-punkti. Kõik töötab perfektselt nii nagu algselt soovisin. Suuremad tänud andrusny ja muidugi teistele ka, kes kaasa aitasid ja mõtisklesid.
|
|
| Kommentaarid: 76 loe/lisa |
Kasutajad arvavad: |
   |
:: |
1 :: |
0 :: |
69 |
|
| tagasi üles |
|
 |
|