Witam! uczę się perla i mam za zadanie napisać program coś na wzór totolotka. Należy wybrać 5 liczb z zakresu od 1 do 50, następnie program wylosuje swoje pięć liczb i je porówna i tu zaczyna się problem nie mam pomysłu jak to zrobić. Zamieszczam kod:
#!usr/bin/perl -w
print \"\\UWitaj w programie TOTOLOTEK\\n\";
print \"Prosze podać pięc liczb z zakresu od 1 do 50\\n\";
$_l1=;
$_l2=;
$_l3=;
$_l4=;
$_l5=;
$_podane=\"$_l1,$_l2,$_l3,$_l4,$_l5\";
print \"Wybrane liczby to\\n $_podane\\n\";
$_numerek1=int rand 50;
$_numerek2=int rand 50;
$_numerek3=int rand 50;
$_numerek4=int rand 50;
$_numerek5=int rand 50;
$_wylosowane=\"$_numerek1,$_numerek2,$_numerek3,$_numerek4,$_numerek5\";
print \"Wylosowane numerki to\\n $_wylosowane\\n\";
foreach $_podane (qw($_wylosowane)){
if($_podane ne $_wylosowane){
print \"przykro ale nic nie wygrałes\\n\";
}
elsif($_podane eq $_wylosowane){ #tutaj nie wiem jak porównać
print \"Dwa trafienia wygrałeś 500zł\\n\"
}
elsif($_podane eq $_wylosowane){ #i tu
print \"Trzy trafienia Wygrałeś 1000zł\";
}
else{
print \"Wygrałeś 10000000zł\\n\";
}
}
Wrzuciłem ten kod jeszcze raz żeby był czytelniejszy http://wklej.org/id/423390/. Jak porównać tablicę bo jak je chciałem porównać to był błąd podczas kompilacji?
Samo kolorowanie poprawia czytelność, ale jeszcze jakbyś używał gdzieniegdzie tabulatorów i spacji…
Wrzuć więc ten kod, który dawał błąd, a wtedy się zobaczy.
Tak jak mówiłem, lepiej trzymać liczby w tablicy(ach) niż w luźnych zmiennych. Jeśli zależy Ci jedynie na liczbie identycznych wartości, możesz zrobić część wspólną dwóch tablic i na podstawie jej rozmiaru stwierdzić ile było trafień. Tak na marginesie w totolotku ma miejsce losowanie bez zwracania, nie uwzględniasz tego.
wylosowane - tablica unikalnych wylosowanych wartości
wytypowane - tablica unikalnych wytypowanych wartości
Dla każdej wartości z wytypowanych sprawdź czy znajduje się ona w tablicy wylosowane. Jeśli tak, t możesz tę liczbę np. dodać do trzeciej tablicy (o ile potrzebujesz), albo po prostu zwiększasz licznik trafionych wartości.
Wprowadzasz nową zmienną np. o nazwie liczb_trafien i sprawdzasz:
Jeżeli $numerek1 należy do $podane to liczba_trafien=liczba_trafien+1
…
Jeżeli $numerek6 należy do $podane to liczba_trafien=liczba_trafien+1
Mając liczbę trafień można odpowiedzieć na zadane pytanie.
Mając liczbę trafień można odpowiedzieć na zadane pytanie.
Wszystkie operacje robił bym na zbiorach tekstowych i aby uniknąć sytuacji, że liczba 7 będzie znaleziona w liczbie 27, to rozdzieliłbym poszczególne wartości jakimś znacznikiem np. kropką aby było coś takiego".26." i przeszukiwal tablice gdzie też poszczegółne wartości są otoczone znacznikami.
Żeby losowanie było bez zwracania, to też robiłem to swego czasu na zbiorze tekstowym. Tworzyłem zbiór tekstowy złożony z 49 wartości i po wylosowaniu jednego z nich usuwałem go ze zbioru i ponawiałem losowanie z tego zbioru o liczbie elementów mniejszej o jeden czyli tak jak to się dzieje w prawdziwym losowaniu.