Probleme tableaux

ASRaider Messages postés 3 Date d'inscription   Statut Membre Dernière intervention   -  
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour, voila je doit faire un programme qui me donne les nombre de Smith entre 1 et 1000 (décomposables en facteur premiers).
J'ai un problème au niveau des tableaux, dans un premier je range mes nombres premiers (168 nombres), dans le deuxième tous les autre (852 nombre).
La ou ça coince c'est que le deuxième m'affiche ,n'importe quoi lorsque que je lui demande de me donner une valeur ( là ou il devrait me donner 6 il me donne 2682776 ).

Voici le programme :

#include <stdio.h>

#include <stdlib.h>

int main()
{
int cpt, nb, i,cpt_i, tablep[168], indicep, tablea[832], indicea, n, cpt_n;
nb = 0;
cpt = 0;
indicep=0;
// On range les nombre premiers ( entre 1et 1000 ) dans un tableau.
while (cpt<=167)
{
nb = nb + 1;
cpt_i = 0;
for (i = 1; i<=nb; i++)
{
if ((nb%i)==0)
{
cpt_i = cpt_i + 1;
}
}
if (cpt_i ==2)
{
cpt = cpt + 1;
tablep[indicep]=nb;
indicep++;
}
}
// On range toutes les autre valeurs dans un autre tableau.

n=0;
indicea=0;

while (cpt_n<=832)
{
n=n+1;
for ( indicep=0; indicep<=167; indicep++)
{
if (n!=tablep[indicep])
{
tablea[indicea]=0;
indicea++;
cpt_n++;
}
}
}



printf("%d\n",tablea[6]);

return 0;
}


Merci d'avance de votre aide ! :)

4 réponses

fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Déjà 852 + 168, ça fait pas 1000. N'y aurait-il pas une incohérence dans la taille d'un de tes tableaux ?

cpt_n n'est pas initialisé.

J'ai pas regardé le reste, mais la non-initialisation d'une variable peut expliquer ton problème.
0
ASRaider Messages postés 3 Date d'inscription   Statut Membre Dernière intervention  
 
Merci pour la reponse !
Toutefois j'ai initialiser la variable et mit 832, mais il ne me renvoie que 1 maintenant...
Je vois vraiment pas quel est le probleme :/
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Déjà, ton code n'est pas très lisible.
Tu aurais mieux fait de faire une fonction estPremier() qui te renvoie 1 si le nombre passé en paramètre est premier sinon 0. En plus tes variables partent dans tous les sens.

D'où sort tes nombres 168 et 832 ? Es-tu sûr de pouvoir les utiliser ? Si c'est un exercice, il faut à mon avis que tu t'en passes. En plus tu peux t'en passer facilement.

Sinon, tu souhaites que ton programme affiche les nombres de smith alors que tu n'affiches que l'élément en 7ème position dans ton tableau. Bizarre non ? Et pourrais-tu nous décrire ce qu'est un nombre de Smith. Il doit y avoir une erreur dans ton algorithme.
0
ASRaider Messages postés 3 Date d'inscription   Statut Membre Dernière intervention  
 
C'est un ensemble d'exercice, le premier etant de donner un programme trouvant les dix plus petits nombre premier, je suis donc partis de celui la, a ceci pres que l'on me demande d'afficher tous les nombre entre 1 et 1000, or il y a 168 nombres premier dans cet intervalle qui sont exclus, puisque un nombre de smith est une decomposition de nombre premiers, le but etant d'utiliser cet algorithme : https://fr.wikipedia.org/wiki/Algorithme_de_d%C3%A9composition_en_produit_de_facteurs_premiers
Pour cela j'isole les premiers des non premiers dans deux tableaux, je procederais au divisions grace a cela.
Mon probleme principal etant que le deuxieme tableau ne se remplis pas de tous les non-premiers.
Merci de votre aide !
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
C'est bien ce que je pense. Il y a 168 nombres, mais ça serait plus propre de te servir des 168 pour vérification mais de ne pas le faire mentionner dans ton programme. Tu initialises des tableaux de 1000. Et tu verras avec un compteur le nombre de nombres premiers (168).
Si tu souhaites mettre les non premiers dans l'autre tableau, je te conseille vraiment de revoir ton code en faisant des fonctions. Tu t'y retrouveras mieux :-).
Ainsi il suffira de faire :
Si estPremier(nb) Alors

Mettre nb dans tableauPremier
Sinon
Mettre nb dans tableauNonPremier
Fin Si
0