Rzuć okiem na poprawiony kod przeze mnie :)
#include <iostream>
#include <ctime>
#include <cstdlib>
#include <stdio.h>
using namespace std;
static const int ROZMIAR = 6;
int tablica[ROZMIAR];
int licznik = 0;
int liczba;
int ileProb;
int losowanie(int min, int max)
{
return rand() % (max - min + 1) + min;
}
bool czyPadla(int number)
{
for (int i = 0; i < ROZMIAR; i++)
if (number == tablica[i])
return true;
return false;
}
int main(int argc, const char * argv[])
{
srand((unsigned int)time(NULL));
while (licznik < ROZMIAR)
{
liczba = losowanie(1, 10);
cout << "{" << liczba << "} ";
if (!(czyPadla(liczba)))
tablica[licznik] = liczba;
else if (czyPadla(liczba))
licznik--; // lub continue
licznik++;
}
cout << endl;
for (int i = 0; i < ROZMIAR; i++)
cout << "[" << tablica[i] << "] ";
return 0;
}
Mechanizm działania programu jest taki sam jaki zamierzałeś, wizualnie się „zmniejszył” bo było troszkę niekoniecznie potrzebnych klamerek, znaków nowego wiersza, dzielenia strumienia na pojedyncze instrukcje itd. Ale tym się nie przejmuj, z czasem przyjdzie to samo jednak warto dbać o to by Twój kod był czytelny dla innych - zresztą w takiej formie będzie i Tobie łatwiej zrozumieć o co mi chodzi ;) Do rzeczy:
- Mówimy, że coś jest globalne, gdy coś nie znajduje się wewnątrz żadnej z funkcji - u Ciebie są to zmienne w 8, 9, 10, 11 wierszu. Unikaj tego, złym nawykiem jest wrzucanie zmiennych jako globalne, przy większych projektach zrobi się po prostu bałagan.
- Spójrz na szóstą linijkę - właśnie o to chodziło mi ze stałymi globalnymi. Piszemy je z reguły wielkimi literami i są one widoczne dla każdej z trzech funkcji w Twoim programie, od teraz, jeżeli będziesz chciał losować inną ilość liczb niż 6, to wystarczy, że zmienisz wartość stałej ROZMIAR właśnie w szóstej linijce, i nie będziesz musiał zmieniać go za każdym następnym razem, gdy pojawi się w kodzie (8, 20, 29, 40 linijka). Od teraz twój program jest uniwersalny, sprawdź co się stanie gdy zmienisz szóstkę w kodzie na np. trójkę...
- Jeżeli wypisujesz coś w strumieniu w jednej linijce nie warto tego rozwlekać na kilka instrukcji (jedna instrukcja to fragment tekstu do średnika), możesz połączyć to za pomocą operatora << - (32, 41 wiersz)
- Jeżeli pętla / warunek dotyczy jednej instrukcji to nie potrzeba pisać klamerek (20-23 wiersz)
To dosyć dużo uwag jak na taki programik, także informacji wystarczy na jeden raz :)
Nie miej mi za złe, że tyle rzeczy wypunktowałem, ale warto od początku nauczyć się pewnych zasad, bo zarówno Tobie będzie łatwiej pisać, a i nam zrozumieć „co poeta miał na myśli”, bo gdyby każdy pisał po swojemu to trudno działać byłoby w zespole.
Powodzenia w dalszym programowaniu!