Newsgroup: it.comp.programmare
Titolo: aiuto per routine in C su array

Ciao
avrei bisogno di un piccolo aiuto.
Devo realizzare un piccolo programma in C che dato un Array predefinito, sia
in grado di prendere A CASO gli elementi dell'array e ricostruirne uno nuovo
con tali elementi.
In pratica ricostruisce un nuovo array della stessa dimensione di quello di
partenza ma con gli elementi mescolati ossia non necessariamente messi nella
stessa posizione di partenza.
In virtů del fatto che  gli elementi sono presi a caso nulla non toglie che
se ne possa ricostruire uno identico all'originale oppure con elementi
ripetuti anche piu' volte.
Ringrazio coloro che potranno darmi qualche suggerimento soprattutto su come
"pescare " a caso gli elementi dell'array.
Grazie
Tanus

Dunque, non so se c'è e se si qual'è il generatore di numeri casuali in C.
Quindi supponiamo sia:
gen(s) dove s è il numero che inizializza il generatore:
Puoi fare così:
const int index = 10;
int array [index];
int newarray [index];
int num;
bool thereis (int n; int a [ ]; int index_a) {
    for (int z = 0; z < index_a; z++)
                if (a[z] == n)
                       return true;
     return false;
};
void main () {
    for (int i = 0; i < index; i++)
            array [i] = gen(index);
/* adesso array è pieno di elementi */
    for (int j = 0; j < index; j++) {
           do
                num = gen (index);
            }
            while (thereis (num, array, index));
            newarray[j] = num;
}
Guarda che non l'ho provato (anche perché gen (index) non esiste :)
ciao

int newarray [index];
guarda che stai programmando in C; e in C questo codice è errato, in
quanto la dimensione di un array non può essere una variabile
costante. Cmq il generatore di numeri casuali della libreria std del C
è rand(), dichiarato in stdlib.h; ricordati però che prima devi
inizializzarlo con una chiamata a srand().
Anto
--
Antonio Cuni, 19 anni, studente
Brainbench C++ Master: 4.6, higher than 98% of all previous test takers.
C Language: 3.32, higher than 79% of all previous test takers.
Guida C/C++ di Programmazione.it: 
http://cpp.programmazione.it

Come dice Antonio, non puoi fare come ti ho detto.
togli
const int index = 10
e al posto di index metti 10 in tutto il sorgente, (oppure 20, 30, in base
alla dimensione dell'array)
ciao

alla dimensione dell'array)
ARGH! questa soluzione è sconsigliabile: se un giorno dovrai cambiare
le dimensioni dell'array dovrai modificarle in tutto il codice!
Meglio usare una macro o (consigliato) una enum.
#define MAX 10
enum { MAX2 = 20 };
int a[MAX];
int b[MAX2];
Se usi il C++ puoi (anzi, è consigliato) usare anche una varibile
costante:
const int MAX = 10;


 const int MAX = 10;
che ho consigliato ma che non andava perche C non lo supporta (eppure č una
cosa cosě banale...)

A parte C/C++ ti dico come lo farei io...non l'ho provato...a tuo rischio e
pericolo ;-)
void riempi(int v[ ], int v2[ ], int num); /*la dichiarazione mi sembra sia
obbligatoria in C o mi sbaglio?*/
void riempi(int v[ ], int v2[ ], int num)
{
    int *preso;
    preso = new int[num];
    int i;
    for(i=0; i<num; ++i)
        preso[i] = 0;
    for(i=0; i<num; ++i)
    {
        int t = rand() % (num-i);
        int s = 0;
        while(t>=0)
        {
            while(preso[s]) ++s;
            --t;
        }
        v2[i] = v[s];
        preso[s] = 1;
    }
}
int main(int argc, char argv[ ][ ])
{
    srand( (unsigned)time( NULL ) );
    ...
    /*a questo punto ho il vettore v di num elementi e v2 già allocato*/
    riempi(v,v2,num);
}

 }
Mi sono dimenticato delete[] preso; in fondo a questa funzione...