Besoin d'aide pour mon tp en programmation c
raoufartikodin
Messages postés
3
Date d'inscription
Statut
Membre
Dernière intervention
-
[Dal] Messages postés 6205 Date d'inscription Statut Contributeur Dernière intervention -
[Dal] Messages postés 6205 Date d'inscription Statut Contributeur Dernière intervention -
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);
}
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:
- Besoin d'aide pour mon tp en programmation c
- Application de programmation - Guide
- Mettre en veille un programme - Guide
- Complément logiciel microsoft publier au format pdf ou xps pour les programmes microsoft office 2007 - Télécharger - Bureautique
- Ce programme est écrit en python ✓ - Forum Python
- Veuillez attendre la fin de l'installation ou de la modification du programme en cours ✓ - Forum Windows
2 réponses
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
Dans ta boucle while, au lieu de faire
- 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
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