Newsgroup: it.comp.lang.c
Titolo: generatore casuale

Ciao a tutti, ho un problema che non riesco a risolvere,
questo frammento di codice deve generare 4 tabelle con 256 caratteri sparsi
casualmente e ogni tabella descrive tutti i 256 caratteri ASCII.
Risultato del seguente Š che il carattere 13 Š presente 8 volte anzichŠ 4 come
dovrebbe...
trovo strano che fwrite() scriva 1028 char, infatti, ne determino con sizeof(a)
soltanto 1024 cioŠ 256*4
spero qualcuno sappia aiutarmi, intanto riprover• a verificare il tutto per la
milionesima volta...
grazie a tutti duido.
PS: nel post che segue scrivo il codice per verificare il contenuto
	del file che abbiamo creato.
/*	PASSAGGI PROGRAMMA GENERA TABELLE:
	verifica[] 	Š l'indice dei caratteri gi… generati
	controllo 	mi permette l'inversione della verifica[] presenze
	c			sono le tabelle da generare
	ax			Š il carattere generato dinamicamente
	a[][]		Š l'array che contiene le mie 4 tebelle con 256 caratteri ciascuna
*/
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define POSIZIONE_CODICE "c:\\codice.txt"
void main(void)
{
	FILE *codice;
	unsigned char a[4][256],controllo,verifica[256];
	unsigned int x,c,ax;
	if((codice=fopen(POSIZIONE_CODICE,"w"))!=NULL){
		clrscr();
		printf("\n\n\n\n\tSto creando la tabella di
traduzione.\n\n\n\n\tattendere...");
		for(x=0;x<256;x++)	//azzero il controllo per la verifica presenza dei
caratteri creati
			verifica[x]=0;
        controllo=1;
		for(c=0;c<4;c++){	//GENERO LE 4 TABELLE 
			randomize();
			for(x=0;x<256;x++){		//genero 255 caratteri diversi
				do{
					for(ax=256;ax>255;ax=rand()%1000);	//genero il carattere
                    buf=(unsigned char)ax;
				}while(verifica[ax]==controllo);
				if(controllo)       //confermo come carattere gi… presente
					verifica[buf]=1;
				else
					verifica[buf]=0;
				a[c][x]=(unsigned char)ax;	//copio il carattere nella tabella
			}
			if(controllo)	//inverto il controllo
				controllo=0;
			else
				controllo=1;
		}
		fwrite(a,sizeof(a),1,codice);	//tabella traduttiva
 
		fclose(codice);
		printf("\n\n\n\n\n\n\n\n\tTabella creata premi INVIO per continuare...");
		getch();
	}
	else{
		printf("\n\n\n\n\n\tImpossibile creare il file tabella.");
		printf("\n\n  premi INVIO per uscire dal programma...");
		getch();
        exit(0);
    }
}
-- 
Posted from 
ppp-218-21.30-151.libero.it
 [151.30.21.218] 
via Mailgate.ORG Server - 
http://www.Mailgate.ORG

//	i caratteri generati dovrebbero essere 1024 invece ne risultano 1028
//	con il carattere 13 ripetuto 8 volte anzichŠ 4 come tutti
#include<stdio.h>
void main (void){
 	FILE *sorgente;
    unsigned char cbuffer;
	unsigned long int buffer[256],dimensione;
	unsigned int a,x;     // VARIABILI APPOGGIO
 
	if((sorgente=fopen("c:\\codice.txt","rb"))==NULL){
		printf("\n\n\tImpossibile aprire il file");
		printf("\n\n\n\tpremere INVIO per uscire...");
		getch();
		exit(0);
	}
    clrscr();
	printf("\n\nAZZERAMENTO CONTATORE:\n");
	for(x=0;x<256;x++)
		buffer[x]=0;
    for(x=0;x<256;x++)
		printf("%ld ",buffer[x]);
	while((fread(&cbuffer,sizeof(unsigned char),1,sorgente))==1)
		buffer[cbuffer]++;
	printf("\nCONTENUTO FILE:\n");
    for(x=0;x<256;x++)			// leggo le singole presenze carattere
		printf("%ld ",buffer[x]);
 
	dimensione=ftell(sorgente);     
	printf("\n\nIL FILE CONTIENE %d caratteri",dimensione);	// visualizzo quanti
caratteri ho letto
	for(x=0;x<255;x++)	//E' SOLO UNA SICUREZZA PER ME
		if(!buffer[x]){
			printf("\nCARATTERE NON USATO: %d",x);		// visualizzo i caratteri non usati
			a++;
			if(a>9){
				a=0;
				getch(); 	//pausa ogni 10 caratteri non usati
            }
		}
	fclose(sorgente);
	printf("\n\n\tpremi INVIO per uscire...");
    getch();


 	if((codice=fopen(POSIZIONE_CODICE,"  w  "))!=NULL){
a così:
     if((codice=fopen(POSIZIONE_CODICE,"  wb  "))!=NULL){
e il mondo dell'enigmistica astrofisica vi apparirà tutto più chiaramente...
bye bye duido
-- 
Posted from 
ppp-117-28.30-151.libero.it
 [151.30.28.117] 
