Skocz do zawartości


Zdjęcie

[c++] Multi lotek / Rozwiązane


  • Zamknięty Temat jest zamknięty
2 odpowiedzi w tym temacie

#1 norbi123

norbi123

    Początkujący

  • 132 postów

Napisano 28 08 2008 - 01:42

Chcialem sobie zrobic program losujący 20 liczb z 80 jak to jest w multilotku i to mi sie udalo ale mam problem z tym zeby 20 liczba wypisala sie powtornie i byla napisana jako "plus"
#include <iostream.h>
#include <conio.h>
#include <dos.h>



int main()

{
	int k,i;

	cout << "Napisz sobie na kartce liczby od 1-80 zaraz nastąpi losowanie muli lotka \n(20 z 80)\n";


for(i=1;i<=20;i++)
{
	k=rand() % 80;	  //losuje liczbe z 80
	cout << k << " \n";
	_sleep(500);	   // czeka 500 milisekund na kolejna liczbe
	 /*if (i==20){					//jak zrobić zeby 20 liczba byla powtornie napisana jako plus?
	cout << "Plus to: " << k;}*/
	}

	getch();

}


  • 0

#2 Ugol.pl

Ugol.pl

    Początkujący

  • 26 postów

Napisano 30 08 2008 - 13:36

No wygląda ok:
if(i==20)
	cout << "plus: " << k;
Można też po prostu za pętlą for umieścić samo: cout << "plus: " << k;
Unikniesz w ten sposób sprawdzania 19 niepotrzebnych warunków.

Problem jednak polega na tym, że w twoim programie liczby mogą się powtarzać, a z tego co wiem to w lotto nie jest możliwe.
Można to rozwiązać na 2 sposoby:
- łatwiejszy, ale brak mu dowodu na poprawne (skończone) zakończenie:
każdą z wylosowanych liczb zapisujesz do osobnej tablicy (zbioru) i przy każdej kolejnej wylosowanej sprawdzasz czy nie znajduje się już w tym zbiorze, jeśli nie to ją dodajesz i idziesz dalej, jeśli natomiast już jest w zbiorze to musisz ją wylosować raz jeszcze. Mam nadzieję, że da się zrozumieć o co mi chodzi :D
- drugi sposób, bardziej elegancki:
tworzysz sobie strukturę dynamiczną, np listę, do której ładujesz wszystkie 80 cyfr (kul)
przy każdym wylosowaniu liczby od 1 do (80 minus liczba już wylosowanych), odszukujesz ją na liście (wylosowana liczba to pozycja "kuli") i usuwasz z niej, zapisując np. do tablicy wynikowej lub na standardowe wyjście.
W tym sposobie program kończy się na pewno ponieważ ostatnia wylosowana pozycja jest z przedziału od 1 do 61, a po jej wylosowaniu (i operacji usuwania) na liście zostaje 60 niewylosowanych liczb (kul)

Pozdrawiam i powodzenia

  • 0

#3 Chinka

Chinka

    Seal of Approval

  • 426 postów

Napisano 07 10 2008 - 23:42

Spróbuj zrobić to z tablicą. Dajmy jakąś int tablica[20], przy czym plusem jest liczba int o adresie &tablica[19].

  • 0

Zobacz więcej tematów z tagiem: język C++



Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych