Sudoku - C - tableau
Juju
-
Juju -
Juju -
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
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
A voir également:
- Sudoku avec 17 valeurs
- Java runtime environment 17 - Télécharger - Langages
- Excel liste de valeurs - Guide
- Télécharger magix music maker 17 premium gratuit - Télécharger - Création musicale
- 17 track avis - Forum Consommation & Internet
- 17track: Commande réelle ou arnaque? - Forum Consommation & Internet
20 réponses
Bonjour,
Pourquoi ne pas faire un tableau à deux dimensions ?
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.
Pourquoi ne pas faire un tableau à deux dimensions ?
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.
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.
Je n'ai pas cherché plus loin mais l'idée d'afficher séparément les trois éléments me parait bizarre, surtout que l'affichage dans la console ne se fait que de gauche à droite puis de haut en bas. (Ligne par ligne en somme)
Aller hop! Je te regarde faire! ^^
M.
Je n'ai pas cherché plus loin mais l'idée d'afficher séparément les trois éléments me parait bizarre, surtout que l'affichage dans la console ne se fait que de gauche à droite puis de haut en bas. (Ligne par ligne en somme)
Aller hop! Je te regarde faire! ^^
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.
en fait je pars de ce programme car j'ai pas appris les fonctions encore ( on nous a jsuté donné la fonction main sans onus expliqué )
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
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;
}
}
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
}
getchar();
return 0;
}
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
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;
}
}
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
}
getchar();
return 0;
}
Salut,
C'est relativement simple : il te suffis de parcourrir le tableau, et de mettre dans chaque case une valeur :
@Bientôt
C'est relativement simple : il te suffis de parcourrir le tableau, et de mettre dans chaque case une valeur :
srand( time(NULL) ); for( i=0; i<81; i++ ) // Parcours du tableau { tableau[i] = rand()%10 +1; // Genere un nombre aleatoir entre 0 et 9 et ajoute 1 }
@Bientôt
Ah ok
En fait ce que j'aimerais c'est réaliser une grille de sudoku
je pense qu'il faudrait modifier le programme pour qu'il affiche le tableau selon la représentation habituelle d'un grille de S udoku , c'est a dire 9 carrés contenant eux-mêmes 9 carrés ( 9 chiffres tous différents )
soit en résumé une grille de 9 sur 9 chiffres et faire en sorte que seuls les chiffres différents de 0 soient affichés , le 0 apparaissant comme une case vide
Le porbléme c'est que je suis nulle en C ( mais une fois que j'aurai le programme je pourrais faire des grilles plus ou moins difficile pour mes amies )
meric d'avance
En fait ce que j'aimerais c'est réaliser une grille de sudoku
je pense qu'il faudrait modifier le programme pour qu'il affiche le tableau selon la représentation habituelle d'un grille de S udoku , c'est a dire 9 carrés contenant eux-mêmes 9 carrés ( 9 chiffres tous différents )
soit en résumé une grille de 9 sur 9 chiffres et faire en sorte que seuls les chiffres différents de 0 soient affichés , le 0 apparaissant comme une case vide
Le porbléme c'est que je suis nulle en C ( mais une fois que j'aurai le programme je pourrais faire des grilles plus ou moins difficile pour mes amies )
meric d'avance
srand( time(NULL) );
for( i=0; i<81; i++ ) // Parcours du tableau
{
tableau[i] = rand()%10 +1; // Genere un nombre aleatoir entre 0 et 9 et ajoute 1
}
dans le compilateur j'ai mis ::
int main (void)
{
int tableau , i ;
srand( time(NULL) );
for( i=0; i<81; i++ ) // Parcours du tableau
{
tableau[i] = rand()%10 +1; // Genere un nombre aleatoir entre 0 et 9 et ajoute 1
}
mais il me met une erreur (
subscripted value is neither array nor pointer et
parse error at end of input )
for( i=0; i<81; i++ ) // Parcours du tableau
{
tableau[i] = rand()%10 +1; // Genere un nombre aleatoir entre 0 et 9 et ajoute 1
}
dans le compilateur j'ai mis ::
int main (void)
{
int tableau , i ;
srand( time(NULL) );
for( i=0; i<81; i++ ) // Parcours du tableau
{
tableau[i] = rand()%10 +1; // Genere un nombre aleatoir entre 0 et 9 et ajoute 1
}
mais il me met une erreur (
subscripted value is neither array nor pointer et
parse error at end of input )
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Ta variable tableau n'est pas un tableau de int ...
int tableau[], i;
int tableau[], i;
j'ai mis ca :
#include <stdio.h>
#include <stdlib.h>
int rand ()
{
int tableau[90], i;
srand( time(NULL) );
for( i=0; i<81; i++ ) // Parcours du tableau
{
tableau[i] = rand()%10 +1; // Genere un nombre aleatoir entre 0 et 9 et ajoute 1
}
return(0)
}
ca me met
parse error before `}' ( a la derniere ligne )
#include <stdio.h>
#include <stdlib.h>
int rand ()
{
int tableau[90], i;
srand( time(NULL) );
for( i=0; i<81; i++ ) // Parcours du tableau
{
tableau[i] = rand()%10 +1; // Genere un nombre aleatoir entre 0 et 9 et ajoute 1
}
return(0)
}
ca me met
parse error before `}' ( a la derniere ligne )
bonjoure
ben j'ai le programme de sudoku qi permet de controler les lignes et les colonnes et la region et qui permet de donner la solution avec backtraking si tu a bien cassé la tête j peu te donner la réponse :)
ben j'ai le programme de sudoku qi permet de controler les lignes et les colonnes et la region et qui permet de donner la solution avec backtraking si tu a bien cassé la tête j peu te donner la réponse :)
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.
M.
M.
Ah ok, plus du style:
int tableau[3][3][3][3]; // 3 lignes sur 3 colonnes de "pâtés" de 3 sur 3 cases.
Pourquoi pas après tout. Je pense que ça complique un petit peu, je trouve plus naturel de dire la case (7,2) que la case (3,1,1,2).
On peut simplifier un mini poil avec
typedef int Carre[3][3];
Carre lesCarres[3][3];
Mais l'accès reste du type lesCarres[3][1][1][2];
M.
int tableau[3][3][3][3]; // 3 lignes sur 3 colonnes de "pâtés" de 3 sur 3 cases.
Pourquoi pas après tout. Je pense que ça complique un petit peu, je trouve plus naturel de dire la case (7,2) que la case (3,1,1,2).
On peut simplifier un mini poil avec
typedef int Carre[3][3];
Carre lesCarres[3][3];
Mais l'accès reste du type lesCarres[3][1][1][2];
M.
un sudoku générer aléatoirement ?? j'y crois pas trop sur le fonctionnement.
Je ne comprends pas trop ce que tu veux faire.
pour afficher sous forme de carré, il faut se prendre la tête pour utiliser le printf et afficher les éléments dans le bon sens sachant que le printf écrit de gauche à droite et de haut en bas.
Je ne comprends pas trop ce que tu veux faire.
pour afficher sous forme de carré, il faut se prendre la tête pour utiliser le printf et afficher les éléments dans le bon sens sachant que le printf écrit de gauche à droite et de haut en bas.
C'est bon j'ais fais le début
# include < stdio.h >
#include<time.h>
#include<stdlib.h>
int main ( ) {
int i;
int tableau[81];
int rand () ;
srand( time(NULL) );
i=0;
while ( i<81 )
{
tableau[i] = rand()%10 +1;
i++;
}
i=0
while ( i< 81 )
{
printf ( "%d " , tableau[i] );
if ( i%9==8) {
printf("/n");
i++
}
return(0);
}
le programme marche MAINTENANT :
Modifiez le programme pour qu'il affiche le tableau selon la représentation habituelle d'une grille
de Sudoku, c'est à dire 9 carrés (9 régions) contenant eux-mêmes 9 carrés (9 chiffres tous
différents), soit une grille de 9 sur 9 chiffres.
et faire en sorte que seuls les chiffres différents de 0 soient affichés, le 0 apparaissant comme une
case vide.
Si quelqun a une idée pour modifier mon programme initiale ( ca m'est égal finalement que ca soit a 2 dimensions ou pas )
MERCI DAVANCE ^_-
# include < stdio.h >
#include<time.h>
#include<stdlib.h>
int main ( ) {
int i;
int tableau[81];
int rand () ;
srand( time(NULL) );
i=0;
while ( i<81 )
{
tableau[i] = rand()%10 +1;
i++;
}
i=0
while ( i< 81 )
{
printf ( "%d " , tableau[i] );
if ( i%9==8) {
printf("/n");
i++
}
return(0);
}
le programme marche MAINTENANT :
Modifiez le programme pour qu'il affiche le tableau selon la représentation habituelle d'une grille
de Sudoku, c'est à dire 9 carrés (9 régions) contenant eux-mêmes 9 carrés (9 chiffres tous
différents), soit une grille de 9 sur 9 chiffres.
et faire en sorte que seuls les chiffres différents de 0 soient affichés, le 0 apparaissant comme une
case vide.
Si quelqun a une idée pour modifier mon programme initiale ( ca m'est égal finalement que ca soit a 2 dimensions ou pas )
MERCI DAVANCE ^_-
Re ^^
Et bien la solution à deux dimensions est un peu au dessus, celle à une dimension ressemble beaucoup, il n'y a que l'accès à la valeur qui change
tableau[ iLigne * 9 + iColonne ]
Si toutefois tu souhaites stocker les lignes les unes à la suite des autres...
Tu auras le temps de voir cela après mais comme le disait Char Snipeur ci-dessus, la génération automatique demandera un petit peu de travail aussi. Pas grand chose, juste de quoi assurer que la grille est cohérente. Il faudra encore un petit peu de travail pour s'assurer qu'une solution est trouvable par déduction. (on dira humainement)
M.
Et bien la solution à deux dimensions est un peu au dessus, celle à une dimension ressemble beaucoup, il n'y a que l'accès à la valeur qui change
tableau[ iLigne * 9 + iColonne ]
Si toutefois tu souhaites stocker les lignes les unes à la suite des autres...
Tu auras le temps de voir cela après mais comme le disait Char Snipeur ci-dessus, la génération automatique demandera un petit peu de travail aussi. Pas grand chose, juste de quoi assurer que la grille est cohérente. Il faudra encore un petit peu de travail pour s'assurer qu'une solution est trouvable par déduction. (on dira humainement)
M.
En fait j'aimerais savoir dans le programme :
# include < stdio.h >
#include<time.h>
#include<stdlib.h>
int main ( ) {
int i;
int tableau[81];
int rand () ;
srand( time(NULL) );
i=0;
while ( i<81 )
{
tableau[i] = rand()%10 +1;
i++;
}
i=0
while ( i< 81 )
{
printf ( "%d " , tableau[i] );
if ( i%9==8) {
printf("/n");
i++
}
return(0);
}
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
}
}
COMMENT INTEGRER TON PROGRAMME DANS LE MIEN ?
# include < stdio.h >
#include<time.h>
#include<stdlib.h>
int main ( ) {
int i;
int tableau[81];
int rand () ;
srand( time(NULL) );
i=0;
while ( i<81 )
{
tableau[i] = rand()%10 +1;
i++;
}
i=0
while ( i< 81 )
{
printf ( "%d " , tableau[i] );
if ( i%9==8) {
printf("/n");
i++
}
return(0);
}
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
}
}
COMMENT INTEGRER TON PROGRAMME DANS LE MIEN ?
D'ailleurs je m'étais planté, je faisais un retour à la ligne à chaque nombre affiché et non pas tous les neuf chiffres.
M.
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.
Meric mahmah mais j'aimerais intégrer ton programme dans le mien de sorte que mon d'affiche selon la représentation habituelle d'une grille de sudoku et faire en sorte que le 0 apparaise come une case vide
j'avais pensé à :
# include <stdio.h>
#include<time.h>
#include<stdlib.h>
int main ( ) {
int i;
int tableau[9][9];
int iLigne;
int iColonne;
int rand () ;
srand( time(NULL) );
i=0;
while ( i<81 )
{
tableau[iLigne][iColonne] = rand()%10;
i++;
}
i=0
while ( i< 81 )
{
printf ( "%d " ,tableau[iLigne][iColonne] );
if ( i%9==8) {
printf("/n");
i++
}
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
}
return (0 )
}
j'avais pensé à :
# include <stdio.h>
#include<time.h>
#include<stdlib.h>
int main ( ) {
int i;
int tableau[9][9];
int iLigne;
int iColonne;
int rand () ;
srand( time(NULL) );
i=0;
while ( i<81 )
{
tableau[iLigne][iColonne] = rand()%10;
i++;
}
i=0
while ( i< 81 )
{
printf ( "%d " ,tableau[iLigne][iColonne] );
if ( i%9==8) {
printf("/n");
i++
}
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
}
return (0 )
}
Bah alors, on poste un code qui compile pas ? Il manque des ";" etc.
J'ai taillé dans le code, une fois le choix fait entre un tableau de 81 ou un tableau de 9 par 9, la moitié des boucles ne servaient plus. J'ai aussi déplacé le code d'affichage dans une autre fonction. Tu pourras faire de même avec l'initialisation afin d'avoir un code plus clair.
La grille est bien aléatoire mais pas forcément correcte :-/
M.
J'ai taillé dans le code, une fois le choix fait entre un tableau de 81 ou un tableau de 9 par 9, la moitié des boucles ne servaient plus. J'ai aussi déplacé le code d'affichage dans une autre fonction. Tu pourras faire de même avec l'initialisation afin d'avoir un code plus clair.
#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!
^^
M.
PS:
Pense aux balises < code> < /code> entre le bouton souligné et le bouton lien.
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
dont un un programe qui permet d'afficher uniquement la i-ème ligne.
un autre qui permet d'afficher uniquement la j-ème colonne.
et enfin un programe qui permet d'afficher uniquement la n-ème région dont le numéro est
donné par l'utilisateur.
( il faut partir du programme qu'on a fait je pense )
dont un un programe qui permet d'afficher uniquement la i-ème ligne.
un autre qui permet d'afficher uniquement la j-ème colonne.
et enfin un programe qui permet d'afficher uniquement la n-ème région dont le numéro est
donné par l'utilisateur.
( il faut partir du programme qu'on a fait je pense )
Allons allons...
Les fonctions tu en utilises déjà plein, il n'y a plus qu'à écrire les tiennes. (En plus tu as mon exemple)
une fonction peut être déclarée et doit être définie.
La déclaration c'est que tu vois partout, dans stdio.h il n'y a que ça par exemple. C'est dire voilà, il y a une fonction qui existe et qui ressemble à ça. A partir de ce moment elle devient utilisable même si elle n'est pas encore connue complètement. On appelle aussi ça la "déclaration courte". En pratique cela consiste en la reprise du prototype de la fonction (-> [type de la valeur de retour] + nom + types des paramètres) sauf qu'on le termine par un ; au lieu de la définir.
void afficher_ligne( int grille[9][9], unsigned int iLigne );
A partir de maintenant je peux écrire du code qui appelle cette fonction car on connaît tous les élément nécessaires à son utilisation.
Cela sert aussi quand on veut écrire deux fonction qui s'appelle l'une l'autre. Il faut nécessaire que chacune soit écrit avant l'autre donc pour éviter ce problème insoluble (même avec un bon solvant. Oups désolé...) -> déclaration courte et hop, ça marche.
Il n' y a pas vraiment de piège dans les fonctions. Le seule truc à savoir c'est que les paramètres sont passés par copie. (/par valeur)
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.
Les fonctions tu en utilises déjà plein, il n'y a plus qu'à écrire les tiennes. (En plus tu as mon exemple)
une fonction peut être déclarée et doit être définie.
La déclaration c'est que tu vois partout, dans stdio.h il n'y a que ça par exemple. C'est dire voilà, il y a une fonction qui existe et qui ressemble à ça. A partir de ce moment elle devient utilisable même si elle n'est pas encore connue complètement. On appelle aussi ça la "déclaration courte". En pratique cela consiste en la reprise du prototype de la fonction (-> [type de la valeur de retour] + nom + types des paramètres) sauf qu'on le termine par un ; au lieu de la définir.
void afficher_ligne( int grille[9][9], unsigned int iLigne );
A partir de maintenant je peux écrire du code qui appelle cette fonction car on connaît tous les élément nécessaires à son utilisation.
Cela sert aussi quand on veut écrire deux fonction qui s'appelle l'une l'autre. Il faut nécessaire que chacune soit écrit avant l'autre donc pour éviter ce problème insoluble (même avec un bon solvant. Oups désolé...) -> déclaration courte et hop, ça marche.
Il n' y a pas vraiment de piège dans les fonctions. Le seule truc à savoir c'est que les paramètres sont passés par copie. (/par valeur)
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
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
typedef struct
{
int valeur;
int candidats[9];
int size;
}
Case ;
typedef Case grille[9][9];
int main () {
int grille g;
int ligne;
int colonne;
int i;
int j;
i=0;
printf ( " donnez les valeurs " );
for ( i=0; i<8; i++ )
for ( j=0; j<8; j++ ) {
scanf ( "%d" , &g[i][j].val );
if g[i][j].val=0
{ g[i][j].size=0 }
else {
g[i][j].size=9
}
return (0);
}
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
typedef struct
{
int valeur;
int candidats[9];
int size;
}
Case ;
typedef Case grille[9][9];
int main () {
int grille g;
int ligne;
int colonne;
int i;
int j;
i=0;
printf ( " donnez les valeurs " );
for ( i=0; i<8; i++ )
for ( j=0; j<8; j++ ) {
scanf ( "%d" , &g[i][j].val );
if g[i][j].val=0
{ g[i][j].size=0 }
else {
g[i][j].size=9
}
return (0);
}
Tu as déclaré g avec deux types, int et grille.
Il manque quelques ';' des "valeur" à la place de "val" et une ligne est bizarre:
if g[i][j].val=0
Je suppose que c'est
if ( g[i][j].valeur == 0 )
Voilou ^^
M.
Il manque quelques ';' des "valeur" à la place de "val" et une ligne est bizarre:
if g[i][j].val=0
Je suppose que c'est
if ( g[i][j].valeur == 0 )
Voilou ^^
M.
C'est l'accolade du for précédent qui n'est pas refermée.
Il manque deux ; aussi pour tes instructions qui sont dans les { }
M.
Il manque deux ; aussi pour tes instructions qui sont dans les { }
M.
Je suis vraiment trop nulle mais je n'y arrive pas
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
typedef struct
{
int val;
int candidats[9];
int size;
}
Case ;
typedef Case grille[9][9];
int main () {
grille g;
int ligne;
int colonne;
int i;
int j;
i=0;
printf ( " donnez les valeurs " );
for ( i=0; i<8; i++ ) {
for ( j=0; j<8; j++ ) {
scanf ( "%d" , & g[i][j].val );
if ( g[i][j].val == 0 )
{ g[i][j].size = 0 } <-------- parse error before `}'
else { g[i][j].size=9 } <--------- parse error before `}'
}
}
return (0);
}
ça me met toujours 2 erreurs aux fléches que j'ai mise ( pourtant j'ai vérifié les acolades ... )
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
typedef struct
{
int val;
int candidats[9];
int size;
}
Case ;
typedef Case grille[9][9];
int main () {
grille g;
int ligne;
int colonne;
int i;
int j;
i=0;
printf ( " donnez les valeurs " );
for ( i=0; i<8; i++ ) {
for ( j=0; j<8; j++ ) {
scanf ( "%d" , & g[i][j].val );
if ( g[i][j].val == 0 )
{ g[i][j].size = 0 } <-------- parse error before `}'
else { g[i][j].size=9 } <--------- parse error before `}'
}
}
return (0);
}
ça me met toujours 2 erreurs aux fléches que j'ai mise ( pourtant j'ai vérifié les acolades ... )
Ah, oui. Mais le compilateur est très joueur. ^^
C'est les ;
Il y en a toujours sauf dans les conditions (dans le if, le while) et au bout du for ou d'un while. Par contre il y en a un à la fin d'un do { ... } while ( ... ) ;
Il n'y a pas à dire que t'es nulle. Ca ne se devine pas et le compilateur est pas trop sympa en général. Il faut apprendre à moitié dans un cours/livre/site internet et à moitié en pratiquant.
M.
EDIT. :
J'ai croisé la page de CCM sur les fonctions. ;-)
Pas de panique, moi non plus je n'ai pas compris leur intro ! ^^"
C'est les ;
if ( g[i][j].val == 0 ) { g[i][j].size = 0 ; } else { g[i][j].size = 9 ; }
Il y en a toujours sauf dans les conditions (dans le if, le while) et au bout du for ou d'un while. Par contre il y en a un à la fin d'un do { ... } while ( ... ) ;
Il n'y a pas à dire que t'es nulle. Ca ne se devine pas et le compilateur est pas trop sympa en général. Il faut apprendre à moitié dans un cours/livre/site internet et à moitié en pratiquant.
M.
EDIT. :
J'ai croisé la page de CCM sur les fonctions. ;-)
Pas de panique, moi non plus je n'ai pas compris leur intro ! ^^"
-> parce que un sudoku a trois dimension
meric pour ce que t'a fais je vais étudier ca
Je ne vois que lignes et colonnes, tu souhaiterais un tableau du genre:
int tableau[9][9][Z]; ?
Quelle est la troisième ?
M.