Gdybyś miał jeszcze tablice a nie srting… Powinno być:
int A[]={ 200,110,200,290,380,470,560,650,740,830 };
Jak chcesz przypisać raz jedną wartość, to nic nie musisz robić. Masz pewność, że będzie losowa Ale jeśli chcesz przypisać kilka razy bez powtarzania się, to musisz zapisywać sobie gdzieś wylosowane wartości. Ja bym dodał tablicę bool’i ustawioną na false(wszystkie elementy) i po losowaniu sprawdzał, czy aby dany element nie był już wylosowany. Np.:
int A[10] = { 200,110,200,290,380,470,560,650,740,830 };
bool B[10] = { false }; //Nie jestem pewien czy zadziała ;)
int x = 0;
for(int i = 0; i < 10; i++)
{
do
{
x = rand()%10;
}
while(B[x] == false);
B[x] = true;
x = A[x];
cout << x << endl;
}
Też stanąłem przed takim problemem niedawno. Tablica boolowska to jest jakieś rozwiązanie. Trzeba by to było jeszcze zabezpieczyć przed nieskończoną pętlą. Trzeba by było jeszcze sprawdzić czy są wolne miejsca, coś w stylu:
bool b[10] = {true, true, true, true, true, true, true, true, true, true}; // true czyli można brać z tego indeksu
bool can = false // czy nie ma obaw przed nieskońćzoną pętlą, przed sprawdzaniem ustawić na false
for(int i = 0; i < 10; i++) can = (can || b[i]);
#include
using namespace std;
void printArr(int* wskarr, int rozm) {
cout << "int[]: ";
for (int i = 0; i < rozm; ++i) {
cout << wskarr[i] << ", ";
}
cout << endl;
}
void printArr(bool* wskarr, int rozm) {
cout << "bool[]: " << boolalpha;
for (int i = 0; i < rozm; ++i) {
cout << wskarr[i] << ", ";
}
cout << endl << noboolalpha;
}
int main() {
const int ROZM = 10;
int tabA[ROZM] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
bool b[ROZM] = {true, true, true, true, true, true, true, true, true, true};
bool can = true;
while(can) {
int indx = 0;
do {
can = false;
for(int i = 0; i < ROZM; i++) can = (can || b[i]);
if(!can) break;
indx = rand() % ROZM;
} while(!b[indx]);
b[indx] = false;
printArr(tabA, ROZM);
printArr(b, ROZM);
cout << "Wylosowałem: " << tabA[indx] << endl;
}
cout << "\nNie ma już więcej liczb do wylosowania" << endl;
}
Jest tylko jeden szkopuł. Jeżeli w tablicy tabA wartości mogą się powtarzać, a w wynikowej nie, to ten mechanizm na nic się zda bo mnie gwarantuje unikalności wartości, tylko indeksów.
Nie wiem czemu ale jak napisze ten kod np. w Dev C++ to wszystko jest ok ale jak juz chcem to umiescic w visualu i skompilowac moj projekt to visual lapie zawieche i nie chce skompilowac do konca Musze za kazdym razem przerywac debugowanie
Nie juz poprawilem:) Juz jest prawie wszystko ok:D Ale jest maly problem:( Rzeczywiscie ten kod wybiera liczby losowo i tylko jeden raz ale za kazdym razem pojawiaja sie one w tej samej kolejnosci:(
Jeżeli chcesz, aby zmiana argumentu srand odbywała się tylko podczas kompilacji, to przychodzi mi do głowy wykorzystanie __TIME__.
static_cast(string(__TIME__)[7])
[code]
Da kod ASCII ósmej litery ciągu __TIME__, jednak będzie to zawsze liczba od 48 do 57, jeżeli chcesz mieć liczby z większego przedziału możesz pokombinować wartościami 0, 1, 3, 4, 6 i 7 litery C-stringu __TIME__, który jest w formacie “hh:mm:ss”.