1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113
| #include <stdio.h>
#include <stdlib.h>
void calcul(int cycle, int temps, int entier,int *n_chiffre);
// allouer crée le tableau dynamique "tab_chiffre".
void allouer(int n_chiffre, int entier, int **tab_chiffre);
// inverser prend le tableaux dynamique "tab_chiffre", et crée le tableau dynamique "tab_chiffre_inv".
void inverser(int n_chiffre, int *tab_chiffre, int **tab_chiffre_inv);
//verification reprend les tableaux sans les modifier.
int verification(int cycle, int temps, int entier, int invariable, int n_chiffre, int *tab_chiffre, int *tab_chiffre_inv);
// addition ---> verification.
void addition(int *entier, int *n_chiffre, int *tab_chiffre, int *tab_chiffre_inv);
int main(){
int n_chiffre, entier, invariable;
int temps, cycle;
// je définis donc les pointeurs de "main".
int *tab_chiffre, *tab_chiffre_inv;
//calculer nb_chiffre
printf("entrez un entier :");
scanf("%d",&entier);
printf("definissez le nombre de cycle maximum :");
scanf("%d",&cycle);
invariable=entier;
for (temps=cycle;temps>=0;temps--){
calcul(cycle, temps, entier, &n_chiffre);
//fonction donné à "main" passage par adresse ?.
allouer(n_chiffre, entier, &*tab_chiffre);
inverser(n_chiffre, tab_chiffre, &*tab_chiffre_inv);
verification(cycle, temps, entier, n_chiffre, invariable, tab_chiffre, tab_chiffre_inv);
// ici je suis perplexe ^^... debut de tableau donc pas de * n'y [] ?
addition(&entier, &n_chiffre, tab_chiffre, tab_chiffre_inv);
}
printf("\nle programme n'a pas trouve de palindrome au bout de %d etape\n",cycle);
system("PAUSE");
return 0;
}
void calcul(int cycle, int temps, int entier, int *n_chiffre){
int i=0,n_temp;
printf ("entier = %d, rang = %d\n",entier,(cycle-temps));
n_temp=entier;
do{
i++;
n_temp/=10;
}while(n_temp!=0);
*n_chiffre=i;
}
//allouer tab_chiffre
// l'indication des variables d'entrée de fonction.
void allouer(int n_chiffre, int entier, int **tab_chiffre){
int n_temp, n_temp2, i;
// création du tableau avec malloc. je précise au logiciel que tab_chiffre est un pointeur ?
tab_chiffre=(int*)malloc(n_chiffre*sizeof(int));
n_temp=entier;
n_temp2=entier;
for (i=n_chiffre-1;i>=0;i--){
n_temp/=10;
n_temp2%=10;
tab_chiffre[i]=n_temp2;
n_temp2=n_temp;
}
}
//inverser tab_chiffre
// l'indication des variables d'entrée de fonction.
void inverser(int n_chiffre, int *tab_chiffre, int **tab_chiffre_inv){
int i, j;
// même problème que pour la précèdente fonction.
tab_chiffre_inv=(int*)malloc(n_chiffre*sizeof(int));
for(i=0,j=n_chiffre-1;i<n_chiffre;i++,j--){
tab_chiffre_inv[j]=tab_chiffre[i];
}
}
//verification de la propriete du nombre palindromique
// l'indication des variables d'entrée de fonction.
int verification(int cycle, int temps, int entier,int invariable, int n_chiffre, int *tab_chiffre, int *tab_chiffre_inv){
int i, test;
for (i=0,test=0;i<n_chiffre;i++){
if(tab_chiffre[i]==tab_chiffre_inv[i]){
test++;
}
}
if (test==n_chiffre){
printf("votre nombre (%d) est bien un palyndrome. au rang %d il devient (%d)\n",invariable,(cycle-temps),entier);
system("PAUSE");
return 0;
}
}
// addition des tableaux
// l'indication des variables d'entrée de fonction.
void addition(int *entier, int *n_chiffre, int *tab_chiffre, int *tab_chiffre_inv){
int i, puissance;
entier=0;
for (i=0,puissance=1;i<*n_chiffre;i++){
entier+=((tab_chiffre[i]+tab_chiffre_inv[i])*puissance);
puissance*=10;
}
free(tab_chiffre);
free(tab_chiffre_inv);
n_chiffre=0;
} |
Partager