Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - generare n numeri da 7 cifre...
Forum - C/C++ - generare n numeri da 7 cifre...

Avatar
giocala88 (Normal User)
Expert


Messaggi: 248
Iscritto: 23/04/2008

Segnala al moderatore
Postato alle 16:08
Mercoledì, 08/04/2009
Salve ragazzi, vorrei implementare un programma in ANSI C che mi dia in output, senza prendere niente in input, n combinazioni di numeri composti da 7 cifre ciascuno...Come posso fare?..
Il programma qui di seguito produce 9999999 numeri ma non tutti sono formati da 7 cifre...dove sbaglio?c'è qualche formula matematica particolare?...Grazie anticipatamente.


#include <stdio.h>
#include <time.h>

#define MAX_NUM 9999999

typedef enum {FALSE, TRUE} boole_t;

boole_t numeri[MAX_NUM];

int main()
{
    int i, j,cont = 0;

    srand(time(0));

    for(i = 0; i <= MAX_NUM; ++i)
    {
        numeri = FALSE;
    }

    do
    {

        i = rand() % MAX_NUM;

        if (!numeri)
        {

            numeri = TRUE;

            printf("%d  ", i);
        }
    }
    while (cont++ <= MAX_NUM);


    return 0;
}



PM Quote
Avatar
Lawliet (Normal User)
Expert


Messaggi: 386
Iscritto: 09/04/2009

Segnala al moderatore
Postato alle 5:39
Giovedì, 09/04/2009
mmm... non capisco come faccia a funzionarti il programma partendo da questa dichiarazione o.O' ---> boole_t numeri[MAX_NUM];
Può essere che mi sbaglio io, in tal caso mi dovrei rivedere un pò i typedef enum ^^'
E un'altra tua frase che hai scritto: "produce 99999999 numeri con 7 cifre" è sbagliata visto che vuoi produrre numeri da 7 cifre quindi 11440 numeri ^^ usando la formula matematica (10+7-1)!/(7!*9!) e quindi da' risultato 11440 numeri con 7 cifre :)

PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 9:40
Giovedì, 09/04/2009
prova così, il programma genera un numero casuale di numeri casuali di 7 cifre:

Codice sorgente - presumibilmente C++

  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<time.h>
  4. #define MINN 1000000
  5. #define MAXN 9999999
  6. #define RANDMAX 32767
  7.  
  8. int main(){
  9.        
  10.         int i;
  11.         int n;
  12.         int scelta;
  13.        
  14.         srand( time( NULL ) );
  15.        
  16.         scelta = 1 + ( rand() % RANDMAX );
  17.        
  18.         if( scelta == 1 )
  19.                 printf("Genero 1 numero");
  20.                 else
  21.                         printf("Genero %d numeri\n\n", scelta);
  22.        
  23.         for( i = 0; i <= scelta; i++ ){
  24.                
  25.                 n = 1 + ( rand() % MAXN );
  26.                
  27.                 if( n < MINN ){
  28.                         i--;
  29.                         continue;
  30.                 }
  31.                
  32.                 printf("%5d: %d\n\n", i, n);
  33.         }
  34. }



ho modificato il topic: ho sistemato alcune cose

Ultima modifica effettuata da il 09/04/2009 alle 9:53
PM Quote
Avatar
andrea.b89 (Ex-Member)
Pro


Messaggi: 129
Iscritto: 03/03/2009

Segnala al moderatore
Postato alle 12:19
Giovedì, 09/04/2009
tralasciando la scrittura di tutto il codice del programma passerei a spiegarti come calcolare i tuoi valori.

Il tutto sta nel generare una numero compreso fra 0 e il numero massimo di elementi dell'intervallo.
A te servono da 1000000 a 9999999 quindi il numero totale di elementi sarà (9999999 - 1000000) poi se vuoi considerare anche l'estremo superiore allora aggiungi 1.

quindi il calcolo del valore n sarà

Codice sorgente - presumibilmente Plain Text

  1. n = (rand() % (9999999 - 1000000 + 1));



in questo modo generi un valore compreso fra 0 e 8999999 estremi inclusi.
Ora non ti rimane che sommare ad n l'estremo inferiore dell'intervallo, quindi 1000000, e otterai così numeri compresi fra 1000000 e 9999999.

Codice sorgente - presumibilmente Plain Text

  1. n = (rand() % (9999999 - 1000000 + 1)) + 1000000;



chiama ora 9999999 MAX e 1000000 MIN ed otterrai :
Codice sorgente - presumibilmente Plain Text

  1. n = (rand() % (MAX - MIN + 1)) + MIN;



spero di essere stato chiaro e di aiuto :k:

PM Quote