|
|
|
|
Bonjour,
J'aimerais écrire un programme en language C qui permet 'initialiser un tableau à 1 dimension de 81 éléments avec des valeurs aléatoires entre 0 et9.
IL faut utiliser je pense les deux fonctions de stdlib.h : srand(int seed); qui initialise de
générateur de nombres pseudo-aléatoires et int rand(); qui retourne un entier entre 0 et
INT_MAX
quelqun a une idée car je ne sais du tout comment faire pour remplir aléatoirement le tableau ...
merci d'avance les amies
Configuration: Windows XP Firefox 2.0.0.12
Répondre à greenthumb
|
Répondre à vlmath
|
Bonjour,
int tableau[9][9];
int iLigne;
int iColonne;
/*
Initialisation du tableau...
*/
// affichage:
for ( iLigne = 0 ; iLigne != 9 ; iLigne++ ) // pour chaque ligne...
{
for ( iColonne = 0 ; iColonne != 9 ; iColonne++ ) // Pour chaque case(/colonne) de la ligne courante
{
if ( tableau[iLigne][iColonne] != 0 )
{
printf( " %d ", tableau[iLigne][iColonne] );
}
else
{
printf( " " );
}
printf( "\n" ); // retour à la ligne
}
}
Y a moyen de faire plus beau en dessinant une belle grille avec des caractères ASCII. Table ASCII les caractères 185 à 188 et 200 à 206. M. |
Quelqu'un m'avait demandé une petite explication sur le back-tracking, je mets le lien mais si j'ai bien compris tu souhaites seulement pouvoir générer des grilles sans pouvoir jouer ou obtenir la solution.
|
Un sudoku générer aléatoirement ?? j'y crois pas trop sur le fonctionnement.
|
Re ^^
|
D'ailleurs je m'étais planté, je faisais un retour à la ligne à chaque nombre affiché et non pas tous les neuf chiffres.
int tableau[9][9];
int iLigne;
int iColonne;
/*
Initialisation du tableau...
*/
// affichage:
for ( iLigne = 0 ; iLigne != 9 ; iLigne++ ) // pour chaque ligne...
{
for ( iColonne = 0 ; iColonne != 9 ; iColonne++ ) // Pour chaque colonne de la ligne courante
{
if ( tableau[iLigne][iColonne] != 0 )
{
printf( " %d ", tableau[iLigne][iColonne] );
}
else
{
printf( " " );
}
}
printf( "\n" ); // retour à la ligne
}
M.
|
Bah alors, on poste un code qui compile pas ? Il manque des ";" etc.
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
void afficher_grille( int grille[9][9] )
{
int iLigne;
int iColonne;
for ( iLigne = 0 ; iLigne != 9 ; iLigne++ ) // pour chaque ligne...
{
for ( iColonne = 0 ; iColonne != 9 ; iColonne++ ) // Pour chaque colonne de la ligne courante
{
if ( grille[iLigne][iColonne] != 0 )
{
printf( " %d ", grille[iLigne][iColonne] );
}
else
{
printf( " " );
}
}
printf( "\n" ); // retour à la ligne
}
}
int main()
{
int tableau[9][9];
int iLigne;
int iColonne;
srand( (unsigned int) time(NULL) );
for ( iLigne = 0 ; iLigne != 9 ; iLigne++ ) // pour chaque ligne...
{
for ( iColonne = 0 ; iColonne != 9 ; iColonne++ ) // Pour chaque colonne de la ligne courante
{
tableau[iLigne][iColonne] = rand()%10;
}
}
afficher_grille( tableau );
getchar();
return 0;
}
La grille est bien aléatoire mais pas forcément correcte :-/ M. |
Nouvelle version de l'affichage, c'est cadeau!
void afficher_ligne( int ligne[9] )
{
unsigned int iColonne;
for ( iColonne = 0 ; iColonne != 9 ; iColonne++ )
{
if ( ( iColonne % 3 ) == 0 )
printf( "\xBA" );
if ( ligne[iColonne] != 0 )
{
printf( " %d ", ligne[iColonne] );
}
else
{
printf( " " );
}
}
printf( "\xBA\n" );
}
void afficher_grille( int grille[9][9] )
{
int iLigne;
printf( "\xC9\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCB\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCB\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xBB\n" );
for ( iLigne = 0 ; iLigne != 3 ; iLigne++ )
afficher_ligne( grille[iLigne] );
printf( "\xCC\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCE\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCE\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xB9\n" );
for ( ; iLigne != 6 ; iLigne++ )
afficher_ligne( grille[iLigne] );
printf( "\xCC\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCE\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCE\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xB9\n" );
for ( ; iLigne != 9 ; iLigne++ )
afficher_ligne( grille[iLigne] );
printf( "\xC8\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCA\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCA\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xBC\n" );
}
^^ M. PS: Pense aux balises < code> < /code> entre le bouton souligné et le bouton lien. |
En fait maintenant j'aimerais écrire 3 programes
|
A partir de la première version de afficher_grille cela devrait être plus simple. Pour générer des grille on a pas besoin que ce soit beau.
void afficher_ligne( int grille[9][9], unsigned int iLigne )
{
}
void afficher_colonne( int grille[9][9], unsigned int iColonne )
{
}
// 0 <= iLigneRegion <= 2
// 0 <= iColonneRegion <= 2
void afficher_region( int grille[9][9], unsigned int iLigneRegion, unsigned int iColonneRegion )
{
}
M.
|
Allons allons...
int GetNumberPlusOne( int n )
{
return n + 1;
}
void GetNumberPlusTwo( int n ) // interdiction d'avoir le même nom en C.
{
n = n + 2;
}
void GetNumberPlusThree( int *pN ) // interdiction d'avoir le même nom en C.
{
*pN = *pN + 3;
}
La première marche. La deuxième ne fait rien car n est une copie de la valeur passée en paramètre et on ne modifie que la copie interne à la fonction. La troisième est un passage par pointeur (/par adresse dira-t-on plus élégamment) La valeur passée par copie est une adresse mémoire. Connaissant cette adresse on peut modifier l'entier qui se trouve à cette adresse. Donc ça marche. Autre intérêt de passer un paramètre par adresse : Si on a définit une structure de 400 octects, on ne les recopie pas à chaque appelle de fonction ou récupération de la valeur de retour. Voilà, plus d'excuse! ^^ (En plus je les avais préparées avec amour) M. |
J'arrive pas à trouver les erreur dans ce programme
|
Répondre à Mahmah
|