Besoin d'aide pour mon tp en programmation c

Fermé
raoufartikodin Messages postés 3 Date d'inscription dimanche 16 avril 2017 Statut Membre Dernière intervention 29 avril 2017 - 29 avril 2017 à 23:59
[Dal] Messages postés 6198 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 13 décembre 2024 - 4 mai 2017 à 15:36
bonjour je suis en 1 er année informatique est j'ai un tp a faire
il s'agite d'un carré maguique d'ordre impaire, une matrice A[n,n] n>3
aucun élément est répété plus d'une fois ( la somme des élements de chaque ligne est égale a la somme des élement de chaque colonne.
le remplissage se fait de la manière suivante :
1- mettre 1 dans la case de départ(la case au dessous de la case centale)
2- se déplacer toujours en haut a droite:
si on déborde en colonne revenir a la premiere colonne
si on déborde en ligne revenir a la derniére ligne
3- si la case pointée est déja remplie se déplacer en haut a gauche :
si on déborde en colonne revenir a la premiere colonne
si on déborde en ligne revenir a la derniére ligne
4- mettre dans la case pointée la valeur suivante
5-si la valeur n'a pas dépassé N^2 on revient a la deuxième étape sinon on s’arrête.
ecrire en programme C qui permet :
1-l'affichage du carré maguique pour N donné
2-la recherche d'un nombre donné avec affichage de sa position
3-le tri d'une ligne donnée en affichant tout la matrice ( y compris la ligne triée)

mon programme que je l'ai fait mais il est incorrect aidez moi svp :))) :
#include <stdio.h>
#include <stdlib.h>

void affich(int t[5][5])
{int i,j;

for(i=0;i<5;i++){
for(j=0;j<5;j++)
printf(" %d ",t[i][j]);
printf("\n");
}

}



int main()
{
int t[5][5];
int i,j,p=1,x,y;
for(i=0;i<5;i++)
for(j=0;j<5;j++)
t[i][j]=0;

t[3][2]=p;
x=3;
y=2;



while(p<25){
p++;
x--;
y++;
if (t[x][y]==0) {
if ((x<5) && (y<5))
t[x][y]=p;
else if ((x>5) && (y<5)){
x=4;
t[x][y]=p; }

else if ((x<5) && (y>5)) {
y=0;
t[x][y]=p; }

else {
y=0;
x=4;
t[x][y]=p;
}
}
else {
x--;
y--;
if((x<5) && (y<5))
{
t[x][y]=p;
}
else if ((x>5) && (y<5)){
x=4;
t[x][y]=p;

}
else if ((x<5) && (y>5)) {
y=4;
t[x][y]=p;
}
else { x=4;
y=4;
t[x][y]=p; }
}



}
affich(t);
}
A voir également:

2 réponses

[Dal] Messages postés 6198 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 13 décembre 2024 1 096
Modifié le 4 mai 2017 à 15:23
Salut raoufartikodin,

Tu n'écris pas ton programme dans l'ordre dans lequel l'algorithme t'est donné, donc il n'est pas une implémentation de cet algorithme.

Dès lors, par exemple, lorsque tu fais
if (t[x][y]==0) {
dans ta boucle while, tu n'as pas vérifié si tes x et y ne débordent pas la capacité du tableau, et tu te retrouves à écrire "4" dans [0,5] alors que ton tableau est de 5x5.

Dans ta boucle while, au lieu de faire
x--; y++;
tout de suite sans savoir où tu es, tu pourrais :

- mettre un appel à une fonction next_upright_coord(), qui renvoie les prochaines coordonnées valides selon ce qui est écrit en 2-

- faire le test écrit en 3-

- si le test révèle que la position est occupée, mettre un appel à une fonction next_upleft_coord(), qui renvoie les prochaines coordonnées valides selon ce qui est écrit en 3-

- ne mettre la prochaine valeur comme indiqué en 4- qu'après avoir effectué ces tests

Tu peux aussi le faire sans créer de fonctions. Cela sera moins lisible, mais cela fonctionnera aussi pourvu que tu fasses les choses dans l'ordre.


Dal
0
[Dal] Messages postés 6198 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 13 décembre 2024 1 096
4 mai 2017 à 15:36
pour poster du code sur le forum, en préservant l'indentation et avec coloration syntaxique, poste le entre balises de "code c", comme celà :

<code c>

ton code ici

</code>
0