Codage algorithme C++
fvh
Messages postés
17
Date d'inscription
Statut
Membre
Dernière intervention
-
akaren Messages postés 7 Date d'inscription Statut Membre Dernière intervention -
akaren Messages postés 7 Date d'inscription Statut Membre Dernière intervention -
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
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
A voir également:
- Codage algorithme C++
- Codage ascii - Guide
- Codage binaire - Guide
- Logiciel algorithme euromillion - Télécharger - Loisirs créatifs
- Algorithme ajout rapide snapchat ✓ - Forum Snapchat
- Logiciel algorithme gratuit - Télécharger - Édition & Programmation
3 réponses
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)
J'espère bien avoir compris ta question.
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.
sambia39
Messages postés
610
Date d'inscription
Statut
Membre
Dernière intervention
49
akaren
Messages postés
7
Date d'inscription
Statut
Membre
Dernière intervention
2
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.
sambia39
Messages postés
610
Date d'inscription
Statut
Membre
Dernière intervention
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.
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;
}
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;
}
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
*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
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
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
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.
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.
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.