Algorithme de kaprekar
chaimaebel
Messages postés
12
Date d'inscription
Statut
Membre
Dernière intervention
-
chaimaebel Messages postés 12 Date d'inscription Statut Membre Dernière intervention -
chaimaebel Messages postés 12 Date d'inscription Statut Membre Dernière intervention -
Salut ! j'ai essayé de faire l'algorithme de kaprekar en utilisant le langage C ! Mais j'arrive pas :(
#include <stdio.h> int Decomp(int N,int n ){ int T[]; int i; i=0; while(i<n){ T[i]=N%10; N=N/10; i=i+1; } return T; } void trie(int T[], int n){ int i=0; int x=0; int j=0; for(i=0;i<n;i++){ for(j=1;j<n;j++){ if(T[i]<T[j]){ x=T[i]; T[i]=T[j]; T[j]=x; j--; } } } x=T[0]; for(i=0;i<b;i++){ T[i]=T[i+1]; T[n-1]=x; } int Calculcroi(int T[], int n){ int i,n1; n1=0; for(i=0;i<n;i++){ n1=n1+T[i]*10^(n-1-i); } return n1; } int Calculdecroi(int T[],int n){ int i,n2; n2=0; for(i=0;i<n;i++){ n2=n2+T[i]*10^i; } return n2; } } void kaprekar(int N,int n,int MAXT){ int T[],k; int n1,n2,i; i=0; k=N; do { N=k; T=Decomp(N,n); T=trie(T, n); n1=Calculcroi(T,n); n2=Calculdecroi(T,n); k=n1-n2; printf("%d=%d-%d \n",k,n2,n1); i=i+1; }while(k=0|| k=N || i>MAXI); } main(){ int N,n,MAXT; printf("saisir le nombre de chiffre n :"); scanf("%d",&n); N=10^n; while(N>=10^n || N<0){ scanf("%d",&N); } scanf("%d",MAXT); Decomp(N,n); trie(T, n); Calculcroi(T,n); Calculdecroi(T,n); kaprekar(N,n,MAXT); }
A voir également:
- Algorithme de kaprekar
- Logiciel algorithme euromillion - Télécharger - Loisirs créatifs
- Logiciel algorithme gratuit - Télécharger - Édition & Programmation
- Algorithme euromillion excel gratuit - Forum Algorithmes / Méthodes
- Algorithme ajout rapide snapchat - Forum Snapchat
- Ajout rapide snap - Forum Snapchat
4 réponses
Bonsoir !
Je ne sais pas si tu vas avoir des réponses.
Essaie déjà de faire un peu de code propre : nommage explicite des variables, commentaires... Là, perso, je ne connais pas ton algo de tête ! Et je n'ai franchement pas envie de faire des recherches sur cet algo sachant que je vais devoir déboguer un code incompréhensible...
Soit plus explicite dans ta question.
Dégrossis le bazar en isolant les méthodes/fonctions/procédures qui marchent de celles qui ne marchent pas
Et à l'avenir... applique ce que je t'ai dit au quotidien : nommage explicite et commentaires. LA recette pour relire ton code 6 mois après :-D Surtout si d'autres (comme là maintenant tout de suite) sont amenés à le lire
Étonnant qu'on ne vous apprenne pas ça en école...
Je ne sais pas si tu vas avoir des réponses.
Essaie déjà de faire un peu de code propre : nommage explicite des variables, commentaires... Là, perso, je ne connais pas ton algo de tête ! Et je n'ai franchement pas envie de faire des recherches sur cet algo sachant que je vais devoir déboguer un code incompréhensible...
Soit plus explicite dans ta question.
Dégrossis le bazar en isolant les méthodes/fonctions/procédures qui marchent de celles qui ne marchent pas
Et à l'avenir... applique ce que je t'ai dit au quotidien : nommage explicite et commentaires. LA recette pour relire ton code 6 mois après :-D Surtout si d'autres (comme là maintenant tout de suite) sont amenés à le lire
Étonnant qu'on ne vous apprenne pas ça en école...
Bonjour,
Avant de voir l'algorithme, il faut connaitre le langage. Il y a de très nombreuses erreurs. Je donne quelques unes mais il te faudra chercher les autres.
Ligne 4: Un tableau doit avoir une taille définie, ensuite on pourra y mettre des données de l'indice
Ligne 11: une fonction ne peut jamais retourner un tableau. Moyen souvent utilisé : c'est l'appelant qui le crée, le passe en paramètre, la fonction le remplit.
Ligne 49: c'est quoi cette accolade?
Ligne 65: pour les tests d'égalité il faut utiliser
Ligne 72 et 73: pour élever à la puissance, il n'y a pas d'opérateur (le
Ligne 76: les paramètres d'un
Lors de la compilation le compilateur signale des erreurs et des warnings, les deux doivent être lus, compris et corrigés.
Avant de voir l'algorithme, il faut connaitre le langage. Il y a de très nombreuses erreurs. Je donne quelques unes mais il te faudra chercher les autres.
Ligne 4: Un tableau doit avoir une taille définie, ensuite on pourra y mettre des données de l'indice
0à l'indice
n-1.
Ligne 11: une fonction ne peut jamais retourner un tableau. Moyen souvent utilisé : c'est l'appelant qui le crée, le passe en paramètre, la fonction le remplit.
Ligne 49: c'est quoi cette accolade?
Ligne 65: pour les tests d'égalité il faut utiliser
==.
Ligne 72 et 73: pour élever à la puissance, il n'y a pas d'opérateur (le
^est un ou exclusif), il faut utiliser la fonction
pow( n , p )qui fonctionne pour les
double, ou écrire sa fonction.
Ligne 76: les paramètres d'un
scanf()doivent être passé par adresse (avec un
&).
Lors de la compilation le compilateur signale des erreurs et des warnings, les deux doivent être lus, compris et corrigés.
Il reste beaucoup plus que 3 problèmes, relis bien tout ce qui a été répondu. Personne d'autre que toi ne rendras ce code lisible.
Ouii vous avez raison ! j'ai remodifier le Voilaa ! mais il reste des 3 probleme
#include <stdio.h>
int Decomp(int N,int n ){
int T[10];
int i;
i=0;
while(i<n){
T[i]=N%10;
N=N/10;
i=i+1;
} return T;
}
void trie(int T[], int n){
int i=0;
int x=0;
int j=0;
for(i=0;i<n;i++){
for(j=1;j<n;j++){
if(T[i]<T[j]){
x=T[i];
T[i]=T[j];
T[j]=x;
j--;
}
}
}
x=T[0];
for(i=0;i<n;i++){
T[i]=T[i+1];
T[n-1]=x;
}
int Calculcroi(int T[], int n){
int i,n1;
n1=0;
for(i=0;i<n;i++){
n1=n1+T[i]*10^(n-1-i);
} return n1;
}
int Calculdecroi(int T[],int n){
int i,n2;
n2=0;
for(i=0;i<n;i++){
n2=n2+T[i]*10^i;
} return n2;
}
}
void kaprekar(int N,int n,int MAXT){
int T[10],k;
int n1,n2,i;
i=0;
k=N;
do {
N=k;
T[10]=Decomp(N,n);
trie(T,n);
n1=Calculcroi(T,n);
n2=Calculdecroi(T,n);
k=n1-n2;
printf("%d=%d-%d \n",k,n2,n1);
i=i+1;
}while(k=0||k=N|| i>MAXT);
}
main(){
int N,T[10],n,MAXT;
printf("saisir le nombre de chiffre n :");
scanf("%d",&n);
N=10^n;
while(N>=10^n || N<0){
scanf("%d",&N);
}
scanf("%d",&MAXT);
Decomp(N,n);
trie(T, n);
Calculcroi(T,n);
Calculdecroi(T,n);
kaprekar(N,n,MAXT);
} :(
#include <stdio.h>
int Decomp(int N,int n ){
int T[10];
int i;
i=0;
while(i<n){
T[i]=N%10;
N=N/10;
i=i+1;
} return T;
}
void trie(int T[], int n){
int i=0;
int x=0;
int j=0;
for(i=0;i<n;i++){
for(j=1;j<n;j++){
if(T[i]<T[j]){
x=T[i];
T[i]=T[j];
T[j]=x;
j--;
}
}
}
x=T[0];
for(i=0;i<n;i++){
T[i]=T[i+1];
T[n-1]=x;
}
int Calculcroi(int T[], int n){
int i,n1;
n1=0;
for(i=0;i<n;i++){
n1=n1+T[i]*10^(n-1-i);
} return n1;
}
int Calculdecroi(int T[],int n){
int i,n2;
n2=0;
for(i=0;i<n;i++){
n2=n2+T[i]*10^i;
} return n2;
}
}
void kaprekar(int N,int n,int MAXT){
int T[10],k;
int n1,n2,i;
i=0;
k=N;
do {
N=k;
T[10]=Decomp(N,n);
trie(T,n);
n1=Calculcroi(T,n);
n2=Calculdecroi(T,n);
k=n1-n2;
printf("%d=%d-%d \n",k,n2,n1);
i=i+1;
}while(k=0||k=N|| i>MAXT);
}
main(){
int N,T[10],n,MAXT;
printf("saisir le nombre de chiffre n :");
scanf("%d",&n);
N=10^n;
while(N>=10^n || N<0){
scanf("%d",&N);
}
scanf("%d",&MAXT);
Decomp(N,n);
trie(T, n);
Calculcroi(T,n);
Calculdecroi(T,n);
kaprekar(N,n,MAXT);
} :(