PROBLEMA DI ESTRAZIONE E NN SOLO...
Ciao raga...ho un problema, cm sempre, ma sn testardo xkè voglio imparare, ...allora
ho 40 numeri ne devo estrarre all'inizio 6 a caso, dopo ne dovrò estrarre una alla volta sempre a caso fino a 40....il problema è questo:
cm faccio a dire al compilatore che i numeri estartti nn servono+, o meglio che nn possono essere + utilizzati???...sxo di essere stato kiaro...grazie anticipatamente!
ho 40 numeri ne devo estrarre all'inizio 6 a caso, dopo ne dovrò estrarre una alla volta sempre a caso fino a 40....il problema è questo:
cm faccio a dire al compilatore che i numeri estartti nn servono+, o meglio che nn possono essere + utilizzati???...sxo di essere stato kiaro...grazie anticipatamente!

Risposte
Ciao,
sei pregato di evitare il maiuscolo (che non è necessario) nei titoli, e soprattutto il linguaggio sms, come prescrive il regolamento.
3.4
Soprattutto sono da evitare titoli e testo in grassetto o in maiuscolo. Comunemente il grassetto e il maiuscolo sono l'equivalente di chi alza la voce o urla. In questo forum non sono gradite le persone che alzano la voce troppo spesso.
3.5
I testi devono essere scritti, per quanto possibile, in italiano corretto, sia grammaticalmente sia ortograficamente. Non sono consenti termini abbreviati mutuati dal linguaggio degli SMS. Tutto ciò non solo per il rispetto di chi legge ma anche perché i motori di ricerca non indicizzano correttamente le discussioni, che quindi non possono poi essere trovate da altri interessati al tema
sei pregato di evitare il maiuscolo (che non è necessario) nei titoli, e soprattutto il linguaggio sms, come prescrive il regolamento.
3.4
Soprattutto sono da evitare titoli e testo in grassetto o in maiuscolo. Comunemente il grassetto e il maiuscolo sono l'equivalente di chi alza la voce o urla. In questo forum non sono gradite le persone che alzano la voce troppo spesso.
3.5
I testi devono essere scritti, per quanto possibile, in italiano corretto, sia grammaticalmente sia ortograficamente. Non sono consenti termini abbreviati mutuati dal linguaggio degli SMS. Tutto ciò non solo per il rispetto di chi legge ma anche perché i motori di ricerca non indicizzano correttamente le discussioni, che quindi non possono poi essere trovate da altri interessati al tema
"giocala88":
Ciao raga...ho un problema, cm sempre, ma sn testardo xkè voglio imparare, ...allora
ho 40 numeri ne devo estrarre all'inizio 6 a caso, dopo ne dovrò estrarre una alla volta sempre a caso fino a 40....il problema è questo:
cm faccio a dire al compilatore che i numeri estartti nn servono+, o meglio che nn possono essere + utilizzati???...sxo di essere stato kiaro...grazie anticipatamente!
ci sono molti modi per fare la cosa, per esempio potresti utilizzare un vettore per memorizzare gli elementi ancora da estrarre oppure alternativamente per memorizzarci quelli gia' estratti.
ciao
Un modo è quello di aggiornare, ad ogni estrazione il vettore che contiene i numeri da estrarre.
In pratica, quando si estrae un numero, si forma un "buco" nel vettore. Quel buco va riempito con il numero successivo, e così via fino alla fine. Poi bisogna ricordarsi di aggiornare l'algoritmo di estrazione, dicendogli che il vettore da cui estrarre è composto da un elemento in meno.
Altra ipotesi, più contorta e fantasiosa:
Pensa ad una matrice a due puntatori e 40 elementi.
Sul primo puntatore metti tutti i 40 elementi da estrarre.
Sul sencondo puntatore, assegni un numero casuale.
Sorting...
In pratica, quando si estrae un numero, si forma un "buco" nel vettore. Quel buco va riempito con il numero successivo, e così via fino alla fine. Poi bisogna ricordarsi di aggiornare l'algoritmo di estrazione, dicendogli che il vettore da cui estrarre è composto da un elemento in meno.
Altra ipotesi, più contorta e fantasiosa:
Pensa ad una matrice a due puntatori e 40 elementi.
Sul primo puntatore metti tutti i 40 elementi da estrarre.
Sul sencondo puntatore, assegni un numero casuale.
Sorting...
"giocala88":
Ciao raga...ho un problema, cm sempre, ma sn testardo xkè voglio imparare, ...allora
ho 40 numeri ne devo estrarre all'inizio 6 a caso, dopo ne dovrò estrarre una alla volta sempre a caso fino a 40....il problema è questo:
cm faccio a dire al compilatore che i numeri estartti nn servono+, o meglio che nn possono essere + utilizzati???...sxo di essere stato kiaro...grazie anticipatamente!
Assumo come ipotesi di lavoro la più semplice: che i tuoi interi positivi da estrarre appartengano ad un singolo intervallo naturale $[a, b]$ ovvero ${a, a+1,...,b-1, b}$ con $a, b in NN_0$, $0 <= a < b$, e che tu debba quindi estrarre un vettore contenente k numeri ($k in NN_0$, $0 < k <= (b - a +1)$).
In queste condizioni, tutt'altro che rare applicativamente, è sempre possibile utilizzare direttamente il numero estratto come indice in un array booleano (a meno di una piccola costante naturale). Analoga efficienza si può ottenere quando i numeri si possono comunque mappare con un hash su un singolo intervallo naturale, peraltro. Altrimenti ci si vedrà declassare da un eccellente $O(1)$ alle performance di una binsearch o simile.
Restando ai casi favorevoli, l'array booleano di cui si parla può essere efficientemente implementato come bit array, con supporto più o meno esplicito del linguaggio (es. dialetti ANSI C), oppure didatticamente tramite un array di char (il tipo di default che consente di manipolare ottetti, ossia bytes).
Nell'esempiuccio che segue, l'intervallo è $[1, 90]$ e i numeri da estrarre sono 40, come nella richiesta iniziale.
#include <stdlib.h> #include <stdio.h> #include <time.h> #define INTERVAL 90 #define ESTRAZIONI 40 typedef enum {FALSE, TRUE} boole_t; boole_t Estratti[INTERVAL]; int main() { int i; int num; for (i = 0; i < INTERVAL; ++i) { Estratti[i] = FALSE; } randomize(); i = 0; do { num = rand() % INTERVAL +1; if (!Estratti[num]) { Estratti[num] = TRUE; printf("%2d) %2d\n", ++i, num); } } while (i < ESTRAZIONI); return (0); }
salve prof Andrea69...ti ringrazio per l'interessamento...ma a quanto pare randomize() non va...cm mai???...
...cmq voglio dirti se l'impostazione va bene così:
- creo un array di tipo char a[41];
- estrarre i primi 6 numeri;
- estrarre un numero per volta escludendo quelli già estratti;
all'ultimo punto dovrò creare un altro array per memorizzare ciò ke ho già estratto????....
ma xcaso centrano niente le liste????
ps. ho visto ke parlavi di complessità asintotica O(1) sarei intressato se lei prof mi desse qualke dritta sulla complessità....
....GRAZIE....
...cmq voglio dirti se l'impostazione va bene così:
- creo un array di tipo char a[41];
- estrarre i primi 6 numeri;
- estrarre un numero per volta escludendo quelli già estratti;
all'ultimo punto dovrò creare un altro array per memorizzare ciò ke ho già estratto????....
ma xcaso centrano niente le liste????
ps. ho visto ke parlavi di complessità asintotica O(1) sarei intressato se lei prof mi desse qualke dritta sulla complessità....
....GRAZIE....
Brevemente:
- randomize è una mia svista: devi utilizzare srand().
- Puoi anche utilizzare le liste, ma la soluzione massimamente efficiente è quella consigliata sopra. Per memorizzare i numeri estratti va benissimo un secondo array, indicizzato dalla variabile i nel caso dell'esempio.
- Cosa ti interessa sapere sulla complessità computazionale ?
- Hai capito, almeno a grandi linee, come funziona il sorgente d'esempio che ti ho postato ?
- Ah, quasi dimenticavo: non sono "prof" anche se in azienda faccio il tutor e il formatore...
- randomize è una mia svista: devi utilizzare srand().
- Puoi anche utilizzare le liste, ma la soluzione massimamente efficiente è quella consigliata sopra. Per memorizzare i numeri estratti va benissimo un secondo array, indicizzato dalla variabile i nel caso dell'esempio.
- Cosa ti interessa sapere sulla complessità computazionale ?
- Hai capito, almeno a grandi linee, come funziona il sorgente d'esempio che ti ho postato ?
- Ah, quasi dimenticavo: non sono "prof" anche se in azienda faccio il tutor e il formatore...

oramai sei il mio prof di informatica...cmq avrei un programma da consegnare e il prof vuole che calcoli analiticamente la complessità asintotica, ma io nn ne sono capace...pubblicarlo qua non posso, potrebbero copiarlo altri studenti del mio corso...e non mi va proprio dopo che mi sono spaccato il culo, perciò chiedevo se esistesse percaso un modo per fartelo vedere diciamo in "privato", magari un indirizzo di posta tuo, che ne so'...!?per quanto riguarda il programma dei 40numeri ora provo un po' da solo poi in caso mi servisse aiuto...ti contatterò...ok??...risp e GRAZIE ancora...
@giocala88
Il linguaggio ed i contenuti di questo post sono del tutto estranei allo stile di questo forum.
In aggiunta ti ricordo di nuovo, visto che nel post precedente lo avevi volutamente ignorato, che lo "essemmessese" non è neanche lui di casa in questo forum.
Chiudo questo thread.
Il linguaggio ed i contenuti di questo post sono del tutto estranei allo stile di questo forum.
In aggiunta ti ricordo di nuovo, visto che nel post precedente lo avevi volutamente ignorato, che lo "essemmessese" non è neanche lui di casa in questo forum.
Chiudo questo thread.