Newsgroup: it.comp.os.linux.development
Titolo: Algoritmo

Problema di esame:
creare un algoritmo in c++ che crei automaticamente un numero casuale tra 0
e 100, senza utilizzare la funzione precompilata in c++....
come fate?

 e 100, senza utilizzare la funzione precompilata in c++....
L'algoritmo  piu`  semplice  e` il  linear  congruential  generator. Per
generare un  numero tra 0  ed M - 1  (l'espressione tra parentesi  e` da
intendersi al pedice):
I(j+1) = a * I(j) + c (modulo M)
Implementato in C++ con a = 1103515245, c = 12345, M = 2^32:
#include <climits>
static unsigned long int next = 1;
int rand(void) {
        next = next * 1103515245 + 12345;
 
        return next % INT_MAX;
}
void srand(unsigned int seed) {
        next = seed;
}
Questo algoritmo non e` certo dei migliori, ma e` molto semplice.
Per altri algoritmi puoi cercare su google Park-Miller e L'Ecuyer.
ciao
Kronos
-- 
Home: 
http://kronoz.cjb.net
Io mi ricordo sempre il compleanno della mia ragazza:
cade il giorno dopo di quando lei me lo ricorda

?=Ento? wrote:

Io farei cosi
ciao!
#include <stdio.h>
int main(int argc, char *argv[])
{
        int i,
        m,     //module
        x=1;   //ricorsive number modified every time
        float a = 3; //constant
        if (argc >= 2)
        {
                m = atoi (argv[1]);
                if (argc>2)
                        a = atoi (argv[2]);
        }
        else
        {
                m = 7;
                a = 3;
                printf("Next time choose the <mod-n> & <a> value  you want\n");
                printf("#  Default: mod=7 a=3  #\n");
        }
        printf("x0 = %d\n",x);
        for (i=1; i<m; i++)
        {
                x = (int)(x*a)%m;
                printf("x%d = %d\n", i, x);
        }
}

 L'algoritmo  piu`  semplice  e` il  linear  congruential  generator.
credo che dato il tipo di domanda, si intendesse invece usare i 
centesimi di secondo al momeno della chiamata alla funzione, viste le 
conoscenze che di solito si hanno del C++ ai corsi. e se anche fosse 
cosi', come quasi sicuramente e', il tema dovrebbe essere "tra 0 
compreso e 100 escluso"
con una risposta come la tua, il prof capirebbe al volo che ha copiato 
da qualche parte: sarebbe come ammazzare una mosca con una granata.
comunque e' buona norma non risolvere i problemi, ma fornire tracce di 
soluzione, o aiutare nella comprensione degli errori. 
altrimenti saremmo la versione online di chi passa i compiti al pigrone 
di turno.
-- 
#include <stdio.h>/* (C) BW2K+2 This code is released under GPL 2+ */
int main(){char c[]={98,108,97,99,107,119,111,108,102,64,100,101,115,112,
97,109,109,101,100,46,99,111,109,32,119,101,98,46,116,105,115,99,97,108,
105,46,105,116,47,98,108,97,107,119,111,108,102,0};printf("%s\n",c);}

 soluzione, o aiutare nella comprensione degli errori.
Concordo, ma data l'espressione matematica della serie l'implementazione
in  C++ era,  a dir  poco, banale. E  poi ho  suggerito di  proposito il
metodo  piu`  semplice, che  di  norma  viene  illustrato nei  corsi  di
Info1... 
La ricerca e l'implementazione di algoritmi piu` complessi l'ho lasciata
per compito :PP
Kronos
-- 
Home: 
http://kronoz.cjb.net
Se non sei parte della soluzione, allora sei parte del problema.



A me sembra più un metodo causale che casuale.