Langage C: tri d'une matrice
Amal OA
Messages postés
10
Statut
Membre
-
Amal OA Messages postés 10 Statut Membre -
Amal OA Messages postés 10 Statut Membre -
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
- Langage visual basic - Télécharger - Langages
- Pascal langage - Télécharger - Édition & Programmation
- 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
10
Statut
Membre
ca marche, merci