Langage C: tri d'une matrice
Amal OA
Messages postés
9
Date d'inscription
Statut
Membre
Dernière intervention
-
Amal OA Messages postés 9 Date d'inscription Statut Membre Dernière intervention -
Amal OA Messages postés 9 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
je veux avoir toutes les lignes et les colonnes d'une matrice donnée triées par ordre croissant
voila mon essai qui est basé sur le tri ligne par ligne puis colonne par colonne jusqu'à obtenir le résultat voulu:
#include<stdio.h>
main()
{int i,j,k,l,n,b1,b2,b,min;
do
{printf("donnerla dimension de votre matrice carré");
scanf("%d",n);
}
while(n<=0);
float M[n][n];
for(i=0;i<n-1;i++)
for(j=0;j<n-1;j++)
{
printf("donner M[%d][%d]",i,j);
scanf("%f",M[i][j]);
}
for(i=0;i<=n-1;i++)
for(j=0;j<n-1;j++)
{
if(M[i][j]<M[i][j+1])
b1=1;
}
for(j=0;j<=n-1;j++)
for(i=0;i<n-1;i++)
{
if(M[i][j]<M[i+1][j] )
b2=1;
}
if((b1==1)&&(b2==1))
b=1;
do
for(i=0;i<=n-1;i++)
for(k=0;k<n-1;k++)
{
min=M[i][k];
for(l=k+1;l<n-1;l++)
{
if(M[i][l]<=min)
min=M[i][k];
}
}
for(j=0;j<=n-1;j++)
for(k=0;k<n-1;k++)
{
min=M[k][j];
for(l=k+1;l<n-1;l++)
{
if(M[l][j]<=min)
min=M[k][j];
}
}
while(b!=1)
return(0);
}
bien sur cet algorithme n'a pas marché , aidez moi svp à trouver mes fautes.
je veux avoir toutes les lignes et les colonnes d'une matrice donnée triées par ordre croissant
voila mon essai qui est basé sur le tri ligne par ligne puis colonne par colonne jusqu'à obtenir le résultat voulu:
#include<stdio.h>
main()
{int i,j,k,l,n,b1,b2,b,min;
do
{printf("donnerla dimension de votre matrice carré");
scanf("%d",n);
}
while(n<=0);
float M[n][n];
for(i=0;i<n-1;i++)
for(j=0;j<n-1;j++)
{
printf("donner M[%d][%d]",i,j);
scanf("%f",M[i][j]);
}
for(i=0;i<=n-1;i++)
for(j=0;j<n-1;j++)
{
if(M[i][j]<M[i][j+1])
b1=1;
}
for(j=0;j<=n-1;j++)
for(i=0;i<n-1;i++)
{
if(M[i][j]<M[i+1][j] )
b2=1;
}
if((b1==1)&&(b2==1))
b=1;
do
for(i=0;i<=n-1;i++)
for(k=0;k<n-1;k++)
{
min=M[i][k];
for(l=k+1;l<n-1;l++)
{
if(M[i][l]<=min)
min=M[i][k];
}
}
for(j=0;j<=n-1;j++)
for(k=0;k<n-1;k++)
{
min=M[k][j];
for(l=k+1;l<n-1;l++)
{
if(M[l][j]<=min)
min=M[k][j];
}
}
while(b!=1)
return(0);
}
bien sur cet algorithme n'a pas marché , aidez moi svp à trouver mes fautes.
A voir également:
- Langage C: tri d'une matrice
- Langage ascii - Guide
- Langage binaire - Guide
- Pascal langage - Télécharger - Édition & Programmation
- Langage visual basic - Télécharger - Langages
- Langage basic gratuit - Télécharger - Édition & Programmation
1 réponse
Bonjour, en faisant le tri de la matrice dans un tableau à une dimension ça donne le résultat voulu testé avec qsort :
#include <stdio.h> #include <stdlib.h> void cc(int **m,int *tmp,int d) {/* copy tmp dans m */ int i,j,o; for(o=i=0;i<d;i++){ for(j=0;j<d;j++){ m[i][j]=tmp[o]; o++; printf("%d ",m[i][j]); }printf("\n"); } } int comp(const void *a,const void *b){ return (*(const int*)a-*(const int*)b); } int main(void) { int i,**m,tmp[16]={4,2,6,7,0,3,8,1,9,3,5,9,6,4,7,0}; m=malloc(sizeof(int*)*4); for(i=0;i<4;i++)m[i]=malloc(sizeof(int)*4); printf("avant\n"); cc(m,tmp,4); qsort(tmp,16,sizeof(int),comp); printf("apres\n"); cc(m,tmp,4); for(i=0;i<4;i++)free(m[i]); free(m); return 0; } Résultat : avant 4 2 6 7 0 3 8 1 9 3 5 9 6 4 7 0 apres 0 0 1 2 3 3 4 4 5 6 6 7 7 8 9 9
Amal OA
Messages postés
9
Date d'inscription
Statut
Membre
Dernière intervention
ca marche, merci