Program uczulony na cyfry 1 oraz 46

Problemy i ich rozwiązania w C++.

Program uczulony na cyfry 1 oraz 46

Postprzez bielu000 » sobota, 28 listopada 2015, 01:18

Cześć, generalnie przygodę z C++ dopiero zaczynam, z racji tego, że mam to na podstawach programowania, co prawda pisałem już trochę ale w PHP ;) Fakt, dużo podobnego oba języki mają, jednakże póki co nie mogę się przekonać ;)
W ramach ćwiczeń napisałem sobie programik, który ma być czymś w rodzaju losowania lotto.
Generalnie założenia programu są takie:

- losuje jakąś cyfrę z przedziału 1-49, zapisuje ją do tablicy,
- przy następnym losowaniu przeszukuje całą tablicę, sprawdzając czy taka liczba jest już w jakimś elemencie tablicy, jeśli jest losuje od nowa, i sprawdza dopóki wylosowana liczba będzie unikalna,
- wszystko powtarza się 6 razy,

Generalnie programik pisany na szybko, i nie dbałem szczególnie o jakość kodu (powtórzenia etc), głównie chodziło mi o to żeby program zadziałał, a później kod i tak zostałby poddany refaktoryzacji.
Niby wszystko działa, natomiast jest problem tego typu, że nie wiedzieć czemu jeśli zostanie wylosowana liczba 1 lub 46 to nawet mimo iż nie ma jej w tablicy zostaje ona zmieniona z automatu na inną. Nie mam bladego pojęcia dlaczego do tego dochodzi.

Program napisany tak, że w wyniku wylosowania liczby już będącej w tablicy wyświetla ją oraz następną wylosowaną, która zastępuje tą powtarzającą się - to tak w celach lepszego debbugingu.
Poniżej wkleja kod.

http://wklej.org/id/1860211/



//Hmmm mam częściowe rozwiązanie problemu - przy tworzeniu tablicy zamiast 6 elementów wpisałem sobie np. 10. Nie wystąpił już problem z liczbami 1 oraz 46. Zastanawia mnie jednak czemu tutaj jest problem. Może chodzi o to że pętla sprawdzająca czy wylosowana liczba jest w tablicy, sprawdza nawet tablice, które w zasadzie są puste? Patrząc na skrypt wygląda to tak, że przy losowaniu np. 2 liczby, skrypt i tak sprawdza elementy 0-5 tablicy, mimo, że niektóre z nich nie mają jeszcze przypisanych wartości?


Zmieniłem trochę warunek przy sprawdzaniu tablicy - teraz wygląda tak while (n!=a)..... gdzie a oznacza, która liczba jest teraz losowana (który przebieg głównej pętli), teoretycznie działa, bo sprawdza tylko te elementy tablicy, które mają jakąś wartość. W praktyce jeśli to dobrze rozumiem (proszę o skorygowanie jeśli nie) skrypt działa na takiej zasadzie, że jeśli losuje 3-cią liczbę (a = 2) sprawdza mi elementy tablicy o indeksach [0], [1].
bielu000
Stały Bywalec
Stały Bywalec
 
Posty: 84
Dołączył(a): piątek, 8 maja 2009, 14:54

Re: Program uczulony na cyfry 1 oraz 46

Postprzez Morfidon » sobota, 28 listopada 2015, 03:07

Masz identyczny program, ale działający stworzony w lekcji 25 kursu C++ ;)

Swoją drogą jakość jakością, ale staraj się tworzyć poprawnie akapity, bo naprawdę kod się bardzo ciężko czyta, właściwie nie jest możliwa jego analiza. Akapity mają być zawsze robione w taki sposób, aby trzymały poziom i łatwo było sprawdzić, gdzie zaczyna się sekcja, a gdzie kończy.

Coś w stylu tego jest lepsze:

http://wklej.org/id/1860285/

nie używaj przecinków, gdy chcesz wykonać dwie instrukcje po warunku. Po prostu korzystaj z bloku "{ }".

Ten problem musiałbym opisywać tutaj przez jakieś 30 minut, masz to opisane już w lekcji. Jak będziesz miał dalej problem po lekcji to pisz śmiało ;)

Pozdrawiam,

Arek
Morfidon
Administrator
Administrator
 
Posty: 1322
Dołączył(a): wtorek, 5 sierpnia 2008, 21:48

Re: Program uczulony na cyfry 1 oraz 46

Postprzez bielu000 » sobota, 28 listopada 2015, 04:26

Zazwyczaj pisanie poprawnego stylistycznie kodu wychodzi mi lepiej (przykładowo tutaj http://wklej.org/id/1820546/ - jakiś skrypt co kiedyś wrzucałem tutaj na forum do oceny), aczkolwiek tutaj podczas wklejania coś się rozsypało i na ile dałem rady to jako tako to poprawiłem, ale jak widać z mizernym efektem bo jak sam na to patrzę to ciężko mi coś z tego wywnioskować, a więc przyznaję - tym razem się nie udało;) Kursu C++ nie przerabiałem jeszcze, bo tak jak pisałem póki co zagłębiam się w bardziej zaawansowane tajniki PHP (oczywiście z Pana kursu;)), natomiast program powstał z tego względu, że profesor zadał takie zadanie na ćwiczeniach, a że spodobała mu się koncepcja rozwiązania, które zaproponowałem, to stwierdziłem, że spróbuję go napisać. W formie ćwiczenia ;) Wiadomo, niby wydaje się, że prosty programik, ale zawsze coś;) Po Kurs C++ w niedalekiej przyszłości na pewno sięgnę, jednakże póki co mam jeszcze do zrealizowania kilka projektów opierających się o PHP, więc póki co C++ muszę odstawić na dalszy plan, może coś bliżej świąt ;)

Generalnie po wprowadzeniu modyfikacji, które opisałem wyżej, program działa i losuje nie powtarzające się liczby, nie generując przy tym jakichś problemów (przeszło uczulenie na liczby 1 oraz 46), natomiast później przeprowadzę jeszcze trochę testów bo być może czegoś nie zauważam, zwłaszcza że już w sumie trochę późna godzina ;)
bielu000
Stały Bywalec
Stały Bywalec
 
Posty: 84
Dołączył(a): piątek, 8 maja 2009, 14:54


Powrót do C++

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 2 gości