Codage algorithme C++

Fermé
fvh Messages postés 17 Date d'inscription vendredi 31 janvier 2014 Statut Membre Dernière intervention 22 novembre 2020 - 15 févr. 2014 à 14:26
akaren Messages postés 7 Date d'inscription lundi 17 février 2014 Statut Membre Dernière intervention 19 février 2014 - 19 févr. 2014 à 11:29
Bonjour,

je voudrais coder cette suite logique :

1
1 1
2 1
1 2 1 1
1 1 1 2 2 1

Je lis donc sur la deuxième ligne 1, un puis la troisième ligne, je lis que sur la deuxième ligne il y a 2 fois le chiffre 1 et ainsi de suite.

J'ai commencé par faire une boucle if et utiliser une incrémentation pour le compteur si le chiffre est plusieurs fois le même, mais je n'arrive pas à coder la comparaison entre le chiffre de la première ligne et de la deuxième,

ni d'afficher après le compteur le chiffre qui correspond au nombre de fois la répétition.

Est-ce que quelqu'un saurait m'aider?
Merci

3 réponses

akaren Messages postés 7 Date d'inscription lundi 17 février 2014 Statut Membre Dernière intervention 19 février 2014 2
17 févr. 2014 à 23:36
Je sais pas ce que tu veux faire exactement, ni dans quel format, mais dans l'idée j'aurais fait un truc comme ça (attention, je ne l'ai pas testé mais c'est pour montrer le principe)

char* ligne_suivante(char* ligne_precedente)
{
    int n = 0;
    char c = *ligne_precedente;
    char* res;
    while (*ligne_precedente != NULL) {
        // On compte le nombre de fois que ce chiffre se répète
        while (*ligne_precedente == c) {
            n++;
            ligne_precedente++;
        }
        // On a fini avec les répétitions de ce caractère, on passe au suivant
        c = *ligne_precedente;
        // On convertit l'entier en caractère ASCII et on ajoute ça au résultat
        *res = n + '0';
        res ++;
        *res = c;
        res++;
    }
    *res = '\0';
    return res;
}


J'espère bien avoir compris ta question.
0
sambia39 Messages postés 610 Date d'inscription vendredi 31 juillet 2009 Statut Membre Dernière intervention 9 février 2023 49
18 févr. 2014 à 00:42
*res = n + '0';
cause un segment défault, et il y a d'autre moyen, mais avant toutes choses j'aimerais savoir de quel algorithme tu parles, parce que tu nous fais deviner ce que tu nous demandes, tu veux parler d'algorithmes sur les chaînes de caractères à savoir les plus longues sous séquence ou la recherche de caractère en se basant sur le principe d'un automate à l'état fini ou la simulation d'un automate bref, franchement en vol à l'aveugle
0
akaren Messages postés 7 Date d'inscription lundi 17 février 2014 Statut Membre Dernière intervention 19 février 2014 2
18 févr. 2014 à 13:02
Pas faux, j'ai oublié d'allouer (d'où mon "j'ai pas testé, c'est pour donner l'idée"). J'ai donné ça sous forme de chaîne de caractères pour donner une idée d'implémentation de l'algorithme qu'il souhaite.
0
sambia39 Messages postés 610 Date d'inscription vendredi 31 juillet 2009 Statut Membre Dernière intervention 9 février 2023 49
18 févr. 2014 à 14:49
Ok :D, mais encore je ne sait toujours pas de quel algorithme il parle, voir même c'est quoi le but de son programme , pour moi c'est l'inconnue totale.
0
fvh Messages postés 17 Date d'inscription vendredi 31 janvier 2014 Statut Membre Dernière intervention 22 novembre 2020
18 févr. 2014 à 13:02
En fait quand je fais

cin>> i par exemple i = au chiffre 1,

j'ai le suite suivant qui s'affiche :

1 1 et qui lit la ligne d'avant c'est a dire une fois le chiffre un

puis la ligne suivant 2 1 ( 2 fois le chiffre 1 à la ligne précédente) et ainsi de suite,

j'essaie de coder :

#include <iostream>;
using namespace std;
int main() {
int imax=0,i, n;
cin >> n;
for (i=1, i<=n; i++) { //boucle incrémentation
if( V[i] == V[i-1]) { // comparaison des deux, incrémentation
t=i; // stockage de la variable i
imax=i;
cout << imax;
cout << t << endl;
}
else {
cout << i;
cout<< V[???]<<endl; //insertion chiffre de la ligne précédente à la ligne suivante
}
return 0;
}
0
sambia39 Messages postés 610 Date d'inscription vendredi 31 juillet 2009 Statut Membre Dernière intervention 9 février 2023 49
18 févr. 2014 à 14:58
Bonjour
indente et mes ton code dans les balises qui sont mises à ta disposition et essaye de nous expliquer brièvement quel est le but de ton programme, puis tu pourras mettre un algorithme qui s'apparente à ton programme, car franchement moi je n'ai rien compris
0
akaren Messages postés 7 Date d'inscription lundi 17 février 2014 Statut Membre Dernière intervention 19 février 2014 2
18 févr. 2014 à 15:05
Je comprends pas ta structure de données. Je crois avoir compris l'algo que tu cherches à implémenter*, mais pour répondre à ta question il va falloir que tu sois plus précis sur ce que tu cherches à faire avec ça exactement: l'afficher, le stocker, si oui, où, autre chose...?

*Pour vérifier que j'ai bien compris l'algo:
- Tu initialises ta ligne courante avec un entier i
- Tu crées la ligne suivante en "lisant" cette ligne, c'est à dire compter le nombre d'entiers consécutifs puis l'afficher sous forme numérique (par exemple 1 1 1 = trois un = 3 1)
- Cette ligne devient ta ligne courante
- Et tu itères ça n fois
0
sambia39 Messages postés 610 Date d'inscription vendredi 31 juillet 2009 Statut Membre Dernière intervention 9 février 2023 49
18 févr. 2014 à 15:34
alors, si toi tu as compris explique nous en quoi consiste son programme sans donner d'algorithmes, justes en quoi ça consiste ,que doit faire son programme et après en pourras l'aider à trouver un bon algorithme qu'il pourra l'implémenter.
Et dites-moi si la ligne suivante devient la ligne courante, et que au préalable j'ai déja ma séquence (3 1) , alors je vais réitérer l'opération sur quelle ligne la suivante ou celle qui était suivante et qui est passe courante ? %-) (tordut tout ça) , sachant que la précédente est la courante ?, mise à part si tu compte faire de la ligne suivante la ligne actuelle et comme résultat tu as 3 1 et par la suite tu rétiaire l'opération sur ta ligne suivante, qui est pas la ligne précédente, alors d'accord
mais ça reste flou pour moi, fait juste un résumé que doit faire sont programme :D
0
akaren Messages postés 7 Date d'inscription lundi 17 février 2014 Statut Membre Dernière intervention 19 février 2014 2
19 févr. 2014 à 11:29
Son programme a pas vraiment de but, c'est juste une fonctionnalité qu'il doit implémenter. Donc c'est difficile à décrire autrement que par l'algo justement =') Si tu veux une autre manière de décrire son but, regarde la description faite par Char Snipeur
0
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
18 févr. 2014 à 16:45
Le but, c'est de faire une suite numérique logique.
On commence par un nombre.
Ensuite, au bout d'un certain nombre d'itérations, on se retrouve avec une suite de numéro quelconque.
Pour passer à la ligne suivante, on prend la ligne et on regarde le premier nombre. Si le suivant est identique on incrémente le compteur, s'il est différent on affiche le compteur suivie du nombre que l'on vient de compter.
Puis on prend le nombre suivant. etc.
int pattern=list[0];
int compteur=1;
for (n=1;n<list.size();++n)
{
    if(list[n]==pattern)
    {
          compteur++;
          continue;
     }
     else
     {
           std::cout<<comteur<<pattern;
           compteur=1;
           pattern = list[n];
      }
}
std::cout<<compteur<<pattern; 

Voilà, ce n'est que du pseduo code, il reste pas mal de chose à voir, mais c'est plus ou moins le coeur de l'algo.
0