IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Algorithme de tri matrice


Sujet :

C

  1. #1
    Nouveau candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2014
    Messages : 1
    Par défaut Algorithme de tri matrice
    Bonjour, je m'entraîne à faire des annales pour mon partiel d'info mais je bloque depuis un moment sur une question qui paraît simple. Le but de la question est de dire si une colonne nc est ordonnée. La fonction renvoie true si elle est ordonnée et false sinon.
    Une colonne ordonnée est par exemple :
    -3
    7
    7

    ou

    15
    6
    -2

    J'ai écris une algorithme que j'ai testé mais il ne marche pas donc j'aimerais savoir si vous pouviez m'aider. J'ai l'impression qu'il ne fonctionne pas juste lorsque je teste si la colonne est ordonnée de façon décroissante...
    Voilà le code que j'ai écris :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    bool est_ordonnee (int K[taille1][taille1], int nbc, int nbl, int nc)
    {
    	int i, j ;
    	bool triee;
    	triee=true;
    	i=0; j=0;
    	for (i=0; i<=nbc-1; i++)
    	{
    		if (i==nc) // la colonne nc correspond à la colonne que l'utilisateur veut regarder
    		{
    			for (j=0; j<=nbl-1; j++) // tri croissant ?
    			{
    				if (K[i][j]<=K[i][j+1])
    				{
    					triee=true;
    				}
    				else
    				{
    					triee=false;
    					j=nbl-1;
    				}
    			}
    			if (triee==true) return true; // ordonnée dans le sens croissant donc pas besoin de continuer => on retourne true
    			else
    			{
    				for (j=0; j<=nbl-1; j++) //tri décroissant ?
    				{
    					if (K[i][j]>=K[i][j+1])
    					{
    						triee=true;
    					}
    					else 
    					{
    						triee=false;
    						j=nbl-1;
    					}
    				}
    				return triee;
    			}
    		}
    	}
    }
    Merci d'avance

  2. #2
    Membre chevronné
    Profil pro
    Consultant en technologies
    Inscrit en
    Octobre 2013
    Messages
    158
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en technologies

    Informations forums :
    Inscription : Octobre 2013
    Messages : 158
    Par défaut
    (Remarques préliminaires)
    * Ton code est en C et tu es sur le forum C++ mais c'est pas bien grave
    * Indentes ton code avec un nombre fixe d'espace (généralement 2 ou 3) plutôt que des tabs
    * Pourquoi tu boucles sur les colonnes alors que tu travailles sur une colonnes fixes ?
    *Pourquoi tu fais deux boucles alors que un suffit ? en général la mémoire est moins chère que le temps CPU
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    // début de la fonction et tests de rigueurs 
    bool Growing= true; 
    bool Ungrowing= true; 
    int previouselement=mat[col][0];
    for (int i=0; i<numline; i++) { 
      if (mat[col][i]<=previousElement) Ungrowing = true; 
      else Ungrowing = false;
      if (mat[col][i]>= previousElement) Growing = true;
      else Growing = false;
      previouselement=mat[col][i];
      if (!Growing && !UnGrowing) break; //Casse la boucle si ni croissant ni décroissant
    }
    return Growing || UnGrowing; //retourne true si l'une des options est true;

  3. #3
    Membre Expert
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    1 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 1 711
    Par défaut
    Citation Envoyé par _zzyx_ Voir le message
    * Indentes ton code avec un nombre fixe d'espace (généralement 2 ou 3) plutôt que des tabs
    *Pourquoi tu fais deux boucles alors que un suffit ? en général la mémoire est moins chère que le temps CPU
    L'éternel débat tab vs espaces, je suis un fervent défenseur des tabs, mais tant que l'indentation est cohérente (tabs ou espaces utilisés partout), il n'y à pas de problèmes. Après c'est une question de préférences et d'habitudes.

    Par contre les accès mémoire sont généralement bien plus chers que le temps CPU.

    Pour continuer sur le "style du code", je pense que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for (int i=0; i<numline && (Growing || UnGrowing); i++) { 
     
    // ou
    while(i<numline && (Growing || UnGrowing)) {
    est préférable à un if(...) break;.

    Sinon ton algo est bon, la boucle devrait cependant commencer à i==1, il y à un tour de boucle inutile ici.

Discussions similaires

  1. Complexité de l'algorithme de Tri Fusion
    Par judge06 dans le forum Algorithmes et structures de données
    Réponses: 10
    Dernier message: 26/03/2007, 22h04
  2. A propos des algorithmes de tri..
    Par Kerwando dans le forum C++
    Réponses: 4
    Dernier message: 19/08/2006, 11h43
  3. Probleme avec mon algorithme de tri
    Par kaygee dans le forum Langage
    Réponses: 6
    Dernier message: 09/01/2006, 21h23
  4. Réponses: 16
    Dernier message: 10/11/2005, 22h51
  5. algorithme de tri tableau :afficher que les éléments unique
    Par sofiane61 dans le forum Algorithmes et structures de données
    Réponses: 19
    Dernier message: 31/03/2005, 19h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo