Suites de syracuse
Résolu
reda.92
Messages postés
5
Date d'inscription
Statut
Membre
Dernière intervention
-
reda.92 Messages postés 5 Date d'inscription Statut Membre Dernière intervention -
reda.92 Messages postés 5 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
slt a tous.
lorsque j'execute ce programme les instructions à partir de la 21eme(en vert) ligne ne s'execute pas y'aurait-il une solution à ca:
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
typedef struct
{int un,longueur;
}suite;
int main()
{suite s;
int nb,db;
printf("Donner l'amorce U1\n");
scanf("%d",&s.un);
printf("La suite de syracuse est: %d\n",s.un);
s.longueur=1;
while(s.un!=1&&s.un!=0)
{if(s.un%2==0){s.un=s.un/2;
printf("%d\n",s.un);}
else {s.un=s.un*3+1;
printf("%d\n",s.un);}
s.longueur++;
}printf("La longueur de la suite est: %d\n",s.longueur);
nb=s.longueur;
s.longueur=1;
db=1;
while(s.longueur!=nb)
{s.un=db;
db=db+1;
while(s.un!=1&&s.un!=0)
{if(s.un%2==0){s.un=s.un/2;}
else {s.un=s.un*3+1;}
s.longueur++;
}}
printf("\nLa suite de Syracuse ayant une longueur de %d termes a pour \npremier terme u1 = %d.\n",s.longueur,db-1);
system("PAUSE");
return 0;
}
merci.
slt a tous.
lorsque j'execute ce programme les instructions à partir de la 21eme(en vert) ligne ne s'execute pas y'aurait-il une solution à ca:
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
typedef struct
{int un,longueur;
}suite;
int main()
{suite s;
int nb,db;
printf("Donner l'amorce U1\n");
scanf("%d",&s.un);
printf("La suite de syracuse est: %d\n",s.un);
s.longueur=1;
while(s.un!=1&&s.un!=0)
{if(s.un%2==0){s.un=s.un/2;
printf("%d\n",s.un);}
else {s.un=s.un*3+1;
printf("%d\n",s.un);}
s.longueur++;
}printf("La longueur de la suite est: %d\n",s.longueur);
nb=s.longueur;
s.longueur=1;
db=1;
while(s.longueur!=nb)
{s.un=db;
db=db+1;
while(s.un!=1&&s.un!=0)
{if(s.un%2==0){s.un=s.un/2;}
else {s.un=s.un*3+1;}
s.longueur++;
}}
printf("\nLa suite de Syracuse ayant une longueur de %d termes a pour \npremier terme u1 = %d.\n",s.longueur,db-1);
system("PAUSE");
return 0;
}
merci.
A voir également:
- Suites de syracuse
- Chaque paragraphe doit être espacé de 0,42 cm ou 12 pt du paragraphe qui suit - Guide
- Scribus - comment régler hauteur espace entre 2 paragraphes ✓ - Forum Bureautique
- Appliquez à tous les paragraphes du document à télécharger, à l’exception des titres et des sous-titres, la mise en forme suivante : chaque paragraphe doit être espacé de 0,42 cm ou 12 pt du paragraphe qui suit les textes ne doivent pas être en retrait à droite et à gauche après ces modifications, sur quelle page se trouve le titre « la cheminée » dans le chapitre « informations diverses » ? ✓ - Forum Word
- Mon style de texte s'applique à tout mon paragraphe - Forum LibreOffice / OpenOffice
- Suites bureautiques - Guide
5 réponses
Le problème vient de ton s.longueur++ dans la deuxième boucle
Dans la deuxième boucle imbriquée tu peux l'incrémenter plusieurs fois
Du coup tu peux avoir testé s.longueur<nb puis s.longueur>nb sans jamais tomber sur test.longueur==nb
Modifie ta condition par while(s.longueur<nb) et ça devrait aller
Dans la deuxième boucle imbriquée tu peux l'incrémenter plusieurs fois
Du coup tu peux avoir testé s.longueur<nb puis s.longueur>nb sans jamais tomber sur test.longueur==nb
Modifie ta condition par while(s.longueur<nb) et ça devrait aller
oui ca marche merci, mais pour {db-1} il affiche la valeur 7 tjrs quelque soit la valeur que je donne au debut {s.un} qui normalement devrait afficher s.un.
Il n'affiche pas toujours 7, loin de là ! Cependant il est difficile de savoir quand les résultats obtenus sont bons ou pas puisqu'on ne sait pas ce que tu veux faire, ni pourquoi tu le fais comme ça !!!
db-1 <-- u1 (de 1 à 50) 0 <-- 1 2 <-- 2 3 <-- 3,4,5,6,8,10,16,20,21,32,40,42 4 <-- 12,13,24,26 5 <-- 11,17,22,23,34,35,48 6 <-- 7,9,14,15,18,19,25,28,29,30,36,37,39,44,45,46 7 <-- 33,39,43,49,50 14 <-- 27,31,41,47
regarde pour mieux comprendre je vais t'ecrire ce qui est demandé:
-ecriver une fonction qui prenant en paramètre l'amorce d'une suite de syracuse, revoie sa longueur (ça je l'ai fais).
-ecrivez alors un programme principale qui, après avoir demandé un entier n, affiche les longueurs des n suites de syracuse d'amorces successives 1,2,3,...,n.
-adaptez le programme precedent pour obtenir à partir de n la longueur maximale des suites d'amorce allant de 1 à n, ainsi que la valeur de la plus petite amorce ayant donné cette longueur maximale. (exemple, pour n=100 000, la plus longue suite contient 351 termes et est obtenu pour l'amorce U1=77 031).
-ecriver une fonction qui prenant en paramètre l'amorce d'une suite de syracuse, revoie sa longueur (ça je l'ai fais).
-ecrivez alors un programme principale qui, après avoir demandé un entier n, affiche les longueurs des n suites de syracuse d'amorces successives 1,2,3,...,n.
-adaptez le programme precedent pour obtenir à partir de n la longueur maximale des suites d'amorce allant de 1 à n, ainsi que la valeur de la plus petite amorce ayant donné cette longueur maximale. (exemple, pour n=100 000, la plus longue suite contient 351 termes et est obtenu pour l'amorce U1=77 031).
En fait le premier point est mal fait car tu n'as pas fait une fonction, tu as tout mis dans le main, et au lieu de calculer juste la longueur tu affiches tous les résultats et ce n'est pas réutilisable.
Il te faut une fonction int longueur(int n) qui prend l'amorce n, et calcule la longueur jusqu'à 1.
En effet dans le deuxième point on ne te demande pas d'afficher toute la suite d'amorce n, mais d'afficher les longueurs obtenues avec la première fonction pour chaque k compris entre 1 et n.
Exemple d'affichage attendu :
Et enfin, le troisième point te demande juste de dire quel est la longueur maximale calculée, et le plus petit des k qui a généré cette longueur.
Exemple d'affichage attendu :
Il te faut une fonction int longueur(int n) qui prend l'amorce n, et calcule la longueur jusqu'à 1.
En effet dans le deuxième point on ne te demande pas d'afficher toute la suite d'amorce n, mais d'afficher les longueurs obtenues avec la première fonction pour chaque k compris entre 1 et n.
Exemple d'affichage attendu :
Entrez n : 5 k=1 --> longueur=0 k=2 --> longueur=2 k=3 --> longueur=8 k=4 --> longueur=3 k=5 --> longueur=6
Et enfin, le troisième point te demande juste de dire quel est la longueur maximale calculée, et le plus petit des k qui a généré cette longueur.
Exemple d'affichage attendu :
Entrez n : 100000 La longueur maximale est 351 pour k=77031
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question