Partage
  • Partager sur Facebook
  • Partager sur Twitter

Algo_C

    5 janvier 2022 à 10:09:53

    Bonjour,

    Je reviens vers vous pour savoir si quelqu'un pourrait m'aider pour rédiger un algo de ce programme.

    Mon programme extrait des codons d'une séquence, 3 caractères par 3 et puis ça trie en fonction de leur occurrence si ils ont la même occurrence ça trie en fonction de l'alphabet.

    Merci d'avance.

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
     
    typedef struct
    {
        char nom[4];
        int nombre;
    } Codon;
     
    
    int cmpcodon(const void *cd1, const void *cd2)
    {
        if(((Codon*)cd1)->nombre < ((Codon*)cd2)->nombre) return 1;
        else if(((Codon*)cd1)->nombre > ((Codon*)cd2)->nombre) return -1;
        return strcmp((((Codon*)cd1)->nom), ((Codon*)cd2)->nom);
    }
    
     
    void ExtractFirstCodon(char codon[], char chaine[])
    {
        strncpy(codon, chaine, 3);
        codon[3] = '\0';
    }
     
    void InsertCodon(Codon listCodon[], char codon[], int position)
    {
        listCodon[position].nombre = 1;
        strcpy(listCodon[position].nom, codon);
    }
     
    int CompteCodons(char chaine[], Codon listCodon[])
    {
        int nb_codon = strlen(chaine)-2;
        char codon[4];
        int indiceCodon = 1;
     
        for(int i=0; i<nb_codon; i++)
        {
            ExtractFirstCodon(codon, chaine);
            if(i==0)
            {
                InsertCodon(listCodon, codon, 0);
                chaine++;
                continue;
            }
     
            int codonAbsent = 1;
     
            for(int j=0; j<i; j++)
            {
                if(strcmp(listCodon[j].nom, codon)==0)
                {
                    listCodon[j].nombre++;
                    codonAbsent=0;
                }
            }
     
            if(codonAbsent)
            {
                InsertCodon(listCodon, codon, indiceCodon);
                indiceCodon++;
            }
     
            chaine++;
        }
        return indiceCodon;
    }
     
    int main(void)
    {
        char chaine [100] = "GACGTACGACGCGACTACGTCGT";
        Codon listCodon[64];
     
        int nbCodon = CompteCodons(chaine, listCodon);
     
        qsort(listCodon, nbCodon, sizeof(Codon), cmpcodon);
     
        for(int i=0; i<nbCodon; i++)
            printf("%2d - %s --> %d\n", i, listCodon[i].nom, listCodon[i].nombre);
     
        return 0;
    }



    • Partager sur Facebook
    • Partager sur Twitter
      5 janvier 2022 à 10:18:06

      Tien ? Ça me rappelle quelque chose ?

      C'est que tu ne comprends pas le programme que tu demandes l'algo ?

      • Partager sur Facebook
      • Partager sur Twitter
        5 janvier 2022 à 10:19:57

        Non le programme est bien compris mais j'ai jamais rédigé un algo avec des structures. ce que je demande c'est pas une explication en quelques lignes mais une rédaction.


        rouIoude a écrit:

        Tien ? Ça me rappelle quelque chose ?

        C'est que tu ne comprends pas le programme que tu demandes l'algo ?



        • Partager sur Facebook
        • Partager sur Twitter
          5 janvier 2022 à 10:23:02

          Et combien tu nous paies pour ce travail ?
          • Partager sur Facebook
          • Partager sur Twitter
            5 janvier 2022 à 10:24:58

            AH le forum est payant ? je ne savais pas désolé.

            Je demande de l'aide pas de faire un travail à ma place.

            rouIoude a écrit:

            Et combien tu nous paies pour ce travail ?



            • Partager sur Facebook
            • Partager sur Twitter
              5 janvier 2022 à 10:27:15

              Si tu demande de faire ton travail ! sinon tu aurais une question précise ! alors montre déjà ce que tu as fait et après on verra !
              • Partager sur Facebook
              • Partager sur Twitter
                5 janvier 2022 à 10:41:45

                > pour rédiger un algo de ce programme.

                Un algorithme, c'est quelque chose d'abstrait.

                Si tu veux l'algorithme décrit par un texte, tu devrais montrer un exemple de description acceptable pour toi (et tes profs).

                Parce que sinon "y a qu'a essayer toutes les chemins possibles", c'est un algorithme pour trouver le plus court chemin d'un point à un autre.  Derrière, il y a une question de rigueur du formalisme, et de niveau de détail dans la description.

                > Un algorithme est une suite finie et non ambiguë d'instructions et d’opérations permettant de résoudre une classe de problèmes

                Le texte source de ton programme, c'est aussi une suite fini etc. donc on peut aussi le considérer comme un algorithme. Que demander de plus ?

                -
                Edité par michelbillaud 5 janvier 2022 à 10:44:08

                • Partager sur Facebook
                • Partager sur Twitter
                  5 janvier 2022 à 10:56:03

                  voila ce que j'avais commencé à faire :

                  J'ai essayé de faire (fonction par fonction) mais puisque j'ai utilisé des fonctions déjà développées j'ai essayé de trouver leur algo par exemple :

                  ****Extraction des codons*******

                  Entrée : un tableau d'une séquence

                  Traitement : parcourir le tableau

                  Pour n (longueur de la chaine) allant de 0 à n-1 Faire

                          récupérer codon par codon en sautant par 1 (par exemple cette doit être développée encore plus)

                  Fin

                  Sortie : codon de 3 caractères de toute la séquence

                  S'ajoute à ça pour faire un algo de ce programme il faut faire des algos pour les fonctions que j'ai utilisées.

                  Voila ce que j'ai trouvé pour qsort mais je ne sais pas quel type de tri utilise :

                  quickSort(arr[], low, high)
                  {
                      if (low < high)
                      {
                          // pivot_index is partitioning index, arr[pivot_index] is now at correct place in sorted array
                          pivot_index = partition(arr, low, high);
                  
                          quickSort(arr, low, pivot_index - 1);  // Before pivot_index
                          quickSort(arr, pivot_index + 1, high); // After pivot_index
                      }
                  }
                  
                  partition (arr[], low, high)
                  {
                      // pivot - Element at right most position
                      pivot = arr[high];  
                      i = (low - 1);  // Index of smaller element
                      for (j = low; j <= high-1; j++)
                      {
                          // If current element is smaller than the pivot, swap the element with pivot
                          if (arr[j] < pivot)
                          {
                              i++;    // increment index of smaller element
                              swap(arr[i], arr[j]);
                          }
                      }
                      swap(arr[i + 1], arr[high]);
                      return (i + 1);
                  }



                  C'est pas un travail de classe mais j'ai des amis qui m'envoient des exos à faire pour s'entrainer 

                  -
                  Edité par ZakAad 5 janvier 2022 à 11:07:07

                  • Partager sur Facebook
                  • Partager sur Twitter
                    5 janvier 2022 à 11:16:25

                    ZakAad a écrit:

                    C'est pas un travail de classe mais j'ai des amis qui m'envoient des exos à faire pour s'entrainer 

                    Pourquoi ne pas leur demander de l'aide alors ?

                    • Partager sur Facebook
                    • Partager sur Twitter
                      5 janvier 2022 à 11:23:27

                      Tes réponses sont un peu bizarres ! c'est des exos en C et moi j'essaie de faire l'algo je ne crois pas qu'ils seront capables aussi de rédiger des algos. Si tu n'es pas en mesure de participer ou de contribuer à ça merci d'ignorer mes demandes  :)


                      rouIoude a écrit:

                      ZakAad a écrit:

                      C'est pas un travail de classe mais j'ai des amis qui m'envoient des exos à faire pour s'entrainer 

                      Pourquoi ne pas leur demander de l'aide alors ?



                      • Partager sur Facebook
                      • Partager sur Twitter
                        5 janvier 2022 à 11:32:01

                        C'est comme ça que tu me remercies : calcul-doccurrence-chaine-de-caractere , je m'en souviendrais !

                        • Partager sur Facebook
                        • Partager sur Twitter
                          5 janvier 2022 à 11:43:20

                          C'est pour cela j'ai précisé en haut "je reviens vers vous pour ..."

                          Ma demande c'est comment je peux structurer cela en algo sans utiliser des fonctions préalables.

                          Quel type de trie on a avec la fonction qsort pour que je puisse implémenter un programme tt seul.

                          J'ai dis tu peux ignorer mes demandes si t'en a marre de participer à mes demandes ( C’était pas mal dis) ==> ne le prend pas mal


                          rouIoude a écrit:

                          C'est comme ça que tu me remercies : calcul-doccurrence-chaine-de-caractere , je m'en souviendrais !



                          • Partager sur Facebook
                          • Partager sur Twitter
                            5 janvier 2022 à 12:54:32

                            L'algorithme de tri utilisé par la fonction standard du C qsort() n'est pas spécifié par la norme du C. On sait que cela trie, c'est tout, et que la comparaison entre deux éléments est faite au moyen de la fonction de comparaison fournie par l'utilisateur en paramètre d'appel de la fonction.

                            Si tu veux (dois) utiliser un algorithme de tri spécifique que tu dois décrire, tu ne peux pas utiliser la fonction qsort().

                            https://www.cplusplus.com/reference/cstdlib/qsort/

                            https://en.cppreference.com/w/c/algorithm/qsort

                            Extrait tiré de ce dernier lien :

                            Notes Despite the name, neither C nor POSIX standards require this function to be implemented using quicksort or make any complexity or stability guarantees.

                            -
                            Edité par Dlks 5 janvier 2022 à 12:57:12

                            • Partager sur Facebook
                            • Partager sur Twitter
                              5 janvier 2022 à 13:06:12

                              Dans la description de l'algorithme, il est suffisant de dire qu'on ordonne les trucs selon tel ou tel critère de comparaison. Ce qui est une étape de résolution du probléme.

                              L'algorithme de tri, c'est complètement hors sujet à ce niveau la.  Autant que l'algorithme suivi par printf pour interpréter  la spécification de format.

                              -
                              Edité par michelbillaud 5 janvier 2022 à 13:08:06

                              • Partager sur Facebook
                              • Partager sur Twitter
                                5 janvier 2022 à 13:08:33

                                ZakAad a écrit:

                                Bonjour,

                                Je reviens vers vous pour savoir si quelqu'un pourrait m'aider pour rédiger un algo de ce programme.

                                [...]


                                Juste pour préciser … un algo ça vient avant le pissage de code ^_^ Pisser du code c'est en tout dernier … l'algo c'est quasiment au départ …

                                Un algo est bien plus «général» qu'un code en ce sens que tu n'as pas forcément besoin d'entrer dans les détails.

                                C'est juste un peu plus formel que de décrire en français ce que tu fais … (et c'est pour ça que ça vient avant de pondre un code).

                                • Partager sur Facebook
                                • Partager sur Twitter
                                  5 janvier 2022 à 13:19:57

                                  Sans préjuger de l'ordre dans lequel on fait les choses, l'algorithme est une description synthétique qui permet de comprendre le fonctionnement général du programme.

                                  Il ne s'agit pas de faire du remplissage.

                                  Dans le code source il n'y a pas de code écrit pour le tri; il n'y a aucune raison d'aller emmerder le lecteur avec quicksort qui est décrit dans tous les bouquins et sur wikipedia.

                                  Par contre j'aimerais bien lire que la fonction cmpcodon effectue une comparaison

                                  • si le champ nombre comme critère principal
                                  • sur le nombre comme critère secondaire
                                  en précisant si il s'agit d'un ordre croissant ou décroissant (ce qui ne serait vraiment pas un commentaire superflu).
                                  Quand à savoir ce que fait exactement compteCodon, ça reste un mystère. Ca retourne bien un entier, mais ça a l'air aussi d'insérer et extraire des éléments.
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    5 janvier 2022 à 13:58:57

                                    Merci pour vos réponses j'ai compris que je peux expliquer ça en quelques lignes ? pas forcément de rédiger un algo structuré avec entrée/sortie/instructions...
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      5 janvier 2022 à 14:16:53

                                      Tout dépend de ce qu'on te demande, du niveau de détail … un algo c'est surtout un raisonnement, une ligne directrice.
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        5 janvier 2022 à 17:39:17

                                        Pour un exercice qu'on fait juste pour soi et pas du tout parce qu'un prof le demande, on peut tout à fait écrire ce qu'on veut.

                                        cf.

                                        > C'est pas un travail de classe mais j'ai des amis qui m'envoient des exos à faire pour s'entrainer

                                        -
                                        Edité par michelbillaud 5 janvier 2022 à 17:40:21

                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          6 janvier 2022 à 9:53:32

                                          Suis plutôt un cours comme celui du zeste de savoir au lieu de suivre ce que te demandent tes amis …

                                          • Partager sur Facebook
                                          • Partager sur Twitter

                                          Algo_C

                                          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                          • Editeur
                                          • Markdown