Aller au menu - Aller au contenu

Exercices pour débutants en C

Au menu : zSommeChiffres (nombres, algo)

Pour accéder à cette section
Connectez-vous !
connexion_rpx
Page Précédente  1  2  3  4  5  6  7  ...  50  51  52  53  Suivante
Auteur Message
1 visiteur sur ce sujet (1 Anonyme)
Page Précédente  1  2  3  4  5  6  7  ...  50  51  52  53  Suivante
Hors ligne shareman # Posté le 22/10/2008 à 17:34:40
charlotte <3
Avatar

Ville : Mertzwiller
Pays : France métropolitaine

Reprise du dernier message de la page précédente :

Correction pour zReader



Envois des résultats à réponse : 10

J'ai donc décidé d'apporter la correction du premier exercice de ce topic aujourd'hui. Un codage "simple" pour atteindre le but de l'exercice n'aurait pas dû poser de gros problèmes. Tout ce qu'il fallait savoir se trouvait dans le tutoriel de m@teo21. ;)
Dans les codes que j'ai reçu, c'était quasiment toujours de la qualité et tous les codes fonctionnaient correctement. Je reprocherais donc juste à certains de ne pas permettre à l'utilisateur de zReader de retourner au menu.

Voici donc mon code, il n'est pas parfait mais exploite déjà pas mal de notions du tuto de m@teo21 :
Secret (cliquez pour afficher)
Code : C
  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
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
#include <stdlib.h>
#include <stdio.h>
#include <string.h>

#define TAILLE 5000

typedef struct fichier
{
    FILE* doc;
    char* chemin;
} fichier;

void read(fichier*);
void write(fichier*);
void creat(fichier*);

void buf(){
    int c = 0;
    while ((c = getchar()) != '\n');
}
void wait(){
    printf("\n Appuyez sur entrer pour retourner au menu...");
    buf();
}
void strcle(char* str){
    char* d = strchr(str, '\n');
    if (d) *d = '\0';
    else buf();
}

int main()
{
    fichier monFichier;
    monFichier.doc = NULL;
    monFichier.chemin = NULL;
    char choixSec[2];
    int choix;

    printf("\n Bienvenue sur zReader - lisez, cr\x82""ez et \x82""crivez dans vos fichiers !\n");

    do{
        printf("\n 1. Lire"
               "\n 2. Ecrire"
               "\n 3. Cr\x82""er"
               "\n 4. Quitter \n"
               "\n Votre choix ? ");

        fgets(choixSec,2,stdin); buf();
        choix = atoi(choixSec);

        if(choix == 1) read(&monFichier);
        else if(choix == 2) write(&monFichier);
        else if(choix == 3) creat(&monFichier);
        else if(choix == 4) break;
        else printf("\n Mauvaise saisie !\n");

    }while(1);

    return EXIT_SUCCESS;
}

void read(fichier* monFichier)
{
    monFichier->chemin = malloc(TAILLE * sizeof(char));
    char c[TAILLE];

    printf("\n Entrez le chemin du fichier : ");
    fgets(monFichier->chemin, TAILLE, stdin);
    strcle(monFichier->chemin);
    printf("\n\n");

    if(monFichier->doc = fopen(monFichier->chemin,"r"))
    {
        printf(" Contenu du fichier : \n\n");
        while (fgets(c,TAILLE,monFichier->doc) != NULL)
        printf(c);
        fclose(monFichier->doc);
    }
    else
    {
        printf(" Le fichier n'existe pas ! \n");
    }
    free(monFichier->chemin);
    wait();
}

void write(fichier* monFichier)
{
    monFichier->chemin = malloc(TAILLE * sizeof(char));
    char inputInFile[TAILLE*3];

    printf("\n Entrez le chemin du fichier (si invalide, le fichier sera cr\x82""e) : ");
    fgets(monFichier->chemin, TAILLE, stdin);
    strcle(monFichier->chemin);
    printf("\n\n");

    monFichier->doc = fopen(monFichier->chemin,"w");
    printf(" Saisie dans le fichier (pour fermer, tapez \"f.close\") : \n\n");
    while(fgets(inputInFile,TAILLE*3,stdin))
    {
        if (strstr(inputInFile,"f.close"))
            break;
        fputs(inputInFile,monFichier->doc);
    }
    fclose(monFichier->doc);
    free(monFichier->chemin);
    printf("\n Contenu enregistr\x82"".");
    wait();
}

void creat(fichier* monFichier)
{
    char path[TAILLE];
    char ext[30];

    printf("\n\n Nom du fichier (extension non-incluse) : ");
    fgets(path,TAILLE,stdin);
    strcle(path);
    printf("\n Extension du fichier : ");
    fgets(ext,30,stdin);
    strcle(ext);

    strcat(path,".");
    strcat(path,ext);

    monFichier->doc = fopen(path,"w");
    fclose(monFichier->doc);
    printf("\n Fichier cr\x82""e avec succ\x8a""s \n\n");
}

Nous avons ici une utilisation des notions de structure, d'allocation dynamique, de define, de manipulation des fichiers, etc...

Ce soir encore j'espère : le prochain exercice. :)
Édité le 22/10/2008 à 18:32:50 par shareman

Nouvel atelier : Codez votre propre petit préprocesseur pour langage C !
Citation : Woody Allen
Si l'au-delà existe, c'est à quelle distance du centre ville, et c'est ouvert jusqu'à quelle heure ?
 
Hors ligne noob4ever # Posté le 22/10/2008 à 17:45:20
戦争は変わった

Ville : Gilly sur isère
Pays : France métropolitaine

Tu rends les corrections en C99 ? Sinon, attention aux déclarations de variable à un endroit arbitraire.
Hors ligne shareman # Posté le 22/10/2008 à 18:00:23
charlotte <3
Avatar

Ville : Mertzwiller
Pays : France métropolitaine

En C99 oui. :)

Nouvel atelier : Codez votre propre petit préprocesseur pour langage C !
Citation : Woody Allen
Si l'au-delà existe, c'est à quelle distance du centre ville, et c'est ouvert jusqu'à quelle heure ?
 
Hors ligne Erosquare # Posté le 22/10/2008 à 18:16:44
Avatar

Quand on fait des corrections, faudrait penser à bien vérifier son code.Code : Console
erosquare@mvk-desktop:~$ ./test

 Bienvenue sur zReader - lisez, cr�ez et �crivez dans vos fichiers !

 1. Lire
 2. Ecrire
 3. Cr�er
 4. Quitter 

 Votre choix ? 2

 Entrez le chemin du fichier (si invalide, le fichier sera cr�e) : 


 Saisie dans le fichier (pour fermer, tapez "f.close") : 

oulala
Erreur de segmentation
erosquare@mvk-desktop:~$
Hors ligne yoch # Posté le 22/10/2008 à 18:28:52
Avatar

Citation : correction
Code : C
1
2
3
4
5
6
void wait()
{
    printf("\n Appuyez sur entrer pour retourner au menu...");
    getchar();
    buf();
}

Cette fonction est mauvaise, car si l'utilisateur appuie effectivement sur entrer, rien ne se passe !

Ceci fonctionne correctement :
Code : C
1
2
3
4
5
void wait()
{
    printf("\n Appuyez sur entrer pour retourner au menu...");
    buf();
}


Sinon, je trouve un peu dommage que le probleme évoqué plus haut par DzEt4 n'ait pas été traité dans la correction.
 
Hors ligne shareman # Posté le 22/10/2008 à 18:30:59
charlotte <3
Avatar

Ville : Mertzwiller
Pays : France métropolitaine

Arf, une erreur c'est glissé dans le code ? Je l'ai codé rapidement juste avant de poster alors c'est possible, je vais rapidement voir sa.

Effectivement pour getchar(), c'est parce que j'ai d'abord écrit wait() puis j'ai ajouté buf() sans y prêter attention.

Nouvel atelier : Codez votre propre petit préprocesseur pour langage C !
Citation : Woody Allen
Si l'au-delà existe, c'est à quelle distance du centre ville, et c'est ouvert jusqu'à quelle heure ?
 
Hors ligne yoch # Posté le 22/10/2008 à 18:38:34
Avatar

Pour le reste, il suffit de tester correctement les fopen(). (la fonction creat aussi n'est pas safe)
Édité le 22/10/2008 à 18:39:45 par yoch
 
Hors ligne Erosquare # Posté le 22/10/2008 à 18:42:17
Avatar

Évite également de donner des noms à tes fonctions qui existent déjà. Bon d'accord, wait() n'est pas POSIX mais c'est un appel système qui existe sur les systèmes linux.
Hors ligne shareman # Posté le 22/10/2008 à 18:43:21
charlotte <3
Avatar

Ville : Mertzwiller
Pays : France métropolitaine

yoch : C'est pas très beau, j'aurais aussi pu faire en sorte que l'utilisateur entre le nom et l'extension du fichier mais bon, les débutants auront ainsi l'occasion de découvrir certaines techniques. Si j'ouvre en w, inutile de tester fopen.

Erosquare : Oui, merci pour l'info. Je suis sous windows. ^^

Nouvel atelier : Codez votre propre petit préprocesseur pour langage C !
Citation : Woody Allen
Si l'au-delà existe, c'est à quelle distance du centre ville, et c'est ouvert jusqu'à quelle heure ?
 
Hors ligne yoch # Posté le 22/10/2008 à 18:46:44
Avatar

Citation : crys'
Si j'ouvre en w, inutile de tester fopen.


Tu crois ? Essaye de mettre <enter> comme nom de fichier (par exemple)...
Édité le 22/10/2008 à 18:52:42 par yoch
 
Hors ligne shareman # Posté le 22/10/2008 à 19:02:04
charlotte <3
Avatar

Ville : Mertzwiller
Pays : France métropolitaine

Ah d'accord. Ok, j'ai un peu raté ma correction car j'ai fais sa trop vite. Je prendrais mon temps la prochaine fois. ;)

Le prochain exercice, moins complexe et plus abordable pour les débutants :

Titre : zBinary
N° et mois : 2, octobre
Sujet : Algorithmique, binaire

Objectif



L'objectif de cet exercice est de réaliser un convertisseur de valeurs en base décimal (10) vers la base binaire (2). L'exo vous entraînera à l'algorithmique et à la compréhension de la base binaire. C'est un très bon exercice et tout ce qu'il vous faut se trouve sur ce site. Cherchez par exemple le tutoriel sur les conversions de bases ou essayer de trouver une autre méthode pour déterminer une valeur binaire. ;)
Code : Console - Exemple
dec ? 25
bin : 11001

edit : Le programme ne devra que convertir les entiers positifs sur l'intervalle [0;+inf[ .

Bonne chance ! ;)
Édité le 22/10/2008 à 22:22:59 par shareman

Nouvel atelier : Codez votre propre petit préprocesseur pour langage C !
Citation : Woody Allen
Si l'au-delà existe, c'est à quelle distance du centre ville, et c'est ouvert jusqu'à quelle heure ?
 
Hors ligne Brugnar # Posté le 22/10/2008 à 19:08:34
Pong 4ever
Avatar

études : IUT Annecy

Tiens, j'ai eu droit au même exercice en interro :-°
 
Hors ligne shareman # Posté le 22/10/2008 à 19:35:16
charlotte <3
Avatar

Ville : Mertzwiller
Pays : France métropolitaine

Effectivement, c'est un exercice bien connu. ;)

Nouvel atelier : Codez votre propre petit préprocesseur pour langage C !
Citation : Woody Allen
Si l'au-delà existe, c'est à quelle distance du centre ville, et c'est ouvert jusqu'à quelle heure ?
 
Hors ligne -Triskel- # Posté le 22/10/2008 à 20:17:50
@lias azerty ou samyazerty...
Avatar

Ouais ! ça te dérange si je te passe (dans un futur proche) mon code, avec en plus l'hexa et l'octal (même si l'octal est plus trop utiliser je trouve ça marrant :D ).
D'ailleurs si je puis me permettre de conseiller amusez vous à coder le convertisseur en rajoutant donc l'hexadécimal (base 16) et l'octal (base 8).

PS: crys'> si ça te dérange que je propose un truc tu me dit j'édite mon message ;) . Que tu n'ai pas l'impression que je te pique ton topic (très bien fait d'ailleurs).

L'impossible est impossible!
Linux: y a moins bien, mais c'est plus cher!
---------------------------------------------------------------------------------------------------------------------------
Logram: OS évolutif et performant (www.logram-project.org)
 
Hors ligne zx-spectrum # Posté le 22/10/2008 à 20:29:15
http://www.worldofspectrum.org
Avatar

Bonjour,
Le nombre décimal(en base 10) à convertir en base 2 :
est il un entier ou un réel ?
doit on s'occuper en plus de son signe (négatif ou positif)?
Et si en plus on rajoute une puissance de 10 ..........
-----> ici l'excercice ne serait plus pour des novices si c'est le cas ? :p
En tout les cas c'est hors de ma portée ! :-°
@+



Hors ligne shareman # Posté le 22/10/2008 à 20:37:20
charlotte <3
Avatar

Ville : Mertzwiller
Pays : France métropolitaine

Non, uniquement les entiers positifs sur l'intervalle [0;+inf[ .

Pour la proposition de -Triskel-, il n'y a pas de soucis, vous pouvez m'envoyer un convertisseur de bases qui gère l'hexa et l'octal si vous le souhaitez mais n'en faites pas trop.
Édité le 24/10/2008 à 23:38:54 par shareman

Nouvel atelier : Codez votre propre petit préprocesseur pour langage C !
Citation : Woody Allen
Si l'au-delà existe, c'est à quelle distance du centre ville, et c'est ouvert jusqu'à quelle heure ?
 
Hors ligne zx-spectrum # Posté le 22/10/2008 à 20:46:17
http://www.worldofspectrum.org
Avatar

ouf j'ai eu peur :)
ca va etre un peu plus simple.
je m'attele à la tache pour la base 8 & 16
@+ :D
Hors ligne -Triskel- # Posté le 22/10/2008 à 21:08:15
@lias azerty ou samyazerty...
Avatar

En fait je crois que j'ai fait des heureux ^^ !

L'impossible est impossible!
Linux: y a moins bien, mais c'est plus cher!
---------------------------------------------------------------------------------------------------------------------------
Logram: OS évolutif et performant (www.logram-project.org)
 
Hors ligne mcyrb # Posté le 22/10/2008 à 21:39:16
Avatar

études : Paris 6 - Université Pierre et Marie Curie (Jussieu)

Pour un supplément, la conversion en base n serait sans doute plus intéressante, parce que l'octal et l'hexa, avec les formats de printf en une seule ligne de code c'est réglé.
Hors ligne shareman # Posté le 22/10/2008 à 21:43:13
charlotte <3
Avatar

Ville : Mertzwiller
Pays : France métropolitaine

Effectivement, c'est pourquoi le sujet est la conversion en binaire. Mais si les participants font aussi l'octal et l'hexa, ils devront coder une fonction qui le fait par eux-même et pas utiliser l'astuce printf. ;) Pour l'idée de la base n, je pense que c'est une mauvaise idée parce que c'est un exercice qui n'est pas trop à la porté d'un débutant, restons le plus basique possible.

Nouvel atelier : Codez votre propre petit préprocesseur pour langage C !
Citation : Woody Allen
Si l'au-delà existe, c'est à quelle distance du centre ville, et c'est ouvert jusqu'à quelle heure ?
 
Hors ligne -Triskel- # Posté le 22/10/2008 à 21:47:43
@lias azerty ou samyazerty...
Avatar

Oui, codé un convertisseur pour la base n, je pense pas que ça soit à la portée de tous... je sais même pas pour moi ^^

EDIT: ah bah si au fait c'est fait ! :D
Édité le 23/10/2008 à 21:37:24 par -Triskel-

L'impossible est impossible!
Linux: y a moins bien, mais c'est plus cher!
---------------------------------------------------------------------------------------------------------------------------
Logram: OS évolutif et performant (www.logram-project.org)
 
Hors ligne mcyrb # Posté le 22/10/2008 à 21:57:14
Avatar

études : Paris 6 - Université Pierre et Marie Curie (Jussieu)

Au final le principe de conversion d'une base à l'autre est toujours le même, quelle que soit la base utilisée, et ceux qui codent également l'hexa et l'octal, en s'y prenant correctement ils vont vite s'en rendre compte.
La seule difficulté est de trouver une représentation adéquat des caractères pour une base > 10, (voire une base > 36 en reprenant le principe de la représentation hexadécimale), mais rien n'empêche de fixer n dans l'intervalle [2;10].
Hors ligne shareman # Posté le 22/10/2008 à 22:20:58
charlotte <3
Avatar

Ville : Mertzwiller
Pays : France métropolitaine

Je suis d'accord, c'est toujours le même principe.
Donc les zér0s qui voudront coder un convertisseur dont la base est au choix ont bien sûr le droit.

Mais si j'ai fixé l'exo sur la base binaire, c'est parce que c'est primordial de bien connaître cette base si l'on programme (quel est la base compréhensible par un ordinateur ?) et quoi de mieux qu'un convertisseur pour bien assimiler la chose. D'autre part, il existe de nombreuses techniques pour trouver la valeur binaire d'un nombre dans une autre base. Les divisions, les soustractions ... mais aussi l'accès directe aux bits de l'ordinateur ! D'ailleurs, je crois que c'est cette méthode que je vais utiliser lors de la correction. Je ne compte pas tout vous révéler dés maintenant quand même. Allez, au boulot ! ^^

Nouvel atelier : Codez votre propre petit préprocesseur pour langage C !
Citation : Woody Allen
Si l'au-delà existe, c'est à quelle distance du centre ville, et c'est ouvert jusqu'à quelle heure ?
 
Hors ligne yoch # Posté le 22/10/2008 à 22:50:59
Avatar

Citation : mcyrb
Pour un supplément, la conversion en base n serait sans doute plus intéressante, parce que l'octal et l'hexa, avec les formats de printf en une seule ligne de code c'est réglé.

Je trouve moi aussi que c'est une bonne idée de penser a la généricité des fonctions lorsque l'on code.

C'est d'ailleurs précisément ce que j'ai fait dans mon code. Mais mon prog ne propose que le binaire, l'octal et l'hexa, car je trouve les autres pas très utiles.
 
Hors ligne Human-Behind # Posté le 23/10/2008 à 09:51:48
To live for love.
Avatar

Bonjour à tous,

Faut il faire un menu pour zBinary ?
Ou bien on demande juste le nombre à "convertir" en base n , on affiche le resultat et on quitte le programme une fois que c'est fait ?

Personellement, j'ai fait de tel maniere que l'utilisateur puisse convertir son nombre en base n (n >=2 et n <=10) :)

Retrouver mes logiciels et jeux sur : http://human-behind.c.la
Image utilisateur
 
Hors ligne shareman # Posté le 23/10/2008 à 13:28:56
charlotte <3
Avatar

Ville : Mertzwiller
Pays : France métropolitaine

je pense que le mieux serait un programme sans menu (ce n'est pas important ici) mais qu'il tourne en boucle tant que l'utilisateur n'a pas tapé une certaine valeur (par exemple une négative ou pourquoi pas un caractère ou une chaîne).

Human-Behind : Ton programme convertit en base n mais quel est la base de départ (la base du nombre que l'utilisateur veut convertir) ? Au choix aussi ?

Nouvel atelier : Codez votre propre petit préprocesseur pour langage C !
Citation : Woody Allen
Si l'au-delà existe, c'est à quelle distance du centre ville, et c'est ouvert jusqu'à quelle heure ?
 
Hors ligne Human-Behind # Posté le 23/10/2008 à 14:14:33
To live for love.
Avatar

Citation : crys'
Human-Behind : Ton programme convertit en base n mais quel est la base de départ (la base du nombre que l'utilisateur veut convertir) ? Au choix aussi ?


La base de départ est la base decimal ( 10 ) , il faut aussi laisser le choix de la base de départ à l'utilisateur ?

Sa vas devenir compliqué :p


Retrouver mes logiciels et jeux sur : http://human-behind.c.la
Image utilisateur
 
Hors ligne Jaloyan1 # Posté le 23/10/2008 à 19:23:13
Sms = portable,forum = clavier
Avatar

c'est un peu complexe pour un débutant non?(c'est de l'ironie, c'est sur que c'est pas très difficile)

Moi sa m'avais paru très difficile, car je ne maitrisais pas les tableaux.

Mais ce qui serait très instructif, ca serait de voir les différents algorithmes utilisés par les zéros, bon je vais me lancer dans celui la aussi sans consulter d'autres algos, avec le bon vieux algo que j'avais appris il y a 2 ans rien que pour frimer devant les copains. :-° :honte:
Édité le 23/10/2008 à 19:23:48 par Jaloyan1

Si quelqu'un vous dit : "Je me tue à vous le répéter", laissez-le mourir.
:D int x = 0; x >?= (a < b)?((a < c)?((a < d)?a:d):((c < d)?c:d)):((b < c)?((b < d)?b:d):((c < d)?c:d));
Quelqu'un a compris ce que ce code fait? :-°
 
Hors ligne shareman # Posté le 23/10/2008 à 19:49:33
charlotte <3
Avatar

Ville : Mertzwiller
Pays : France métropolitaine

Citation : Human-Behind
La base de départ est la base decimal ( 10 ) , il faut aussi laisser le choix de la base de départ à l'utilisateur ?

L'énoncé fixé à la base, c'est uniquement un convertisseur décimal -> binaire. ^^

edit : Je vais fixer la date de la correction cette fois.
Édité le 23/10/2008 à 19:50:22 par shareman

Nouvel atelier : Codez votre propre petit préprocesseur pour langage C !
Citation : Woody Allen
Si l'au-delà existe, c'est à quelle distance du centre ville, et c'est ouvert jusqu'à quelle heure ?
 
Hors ligne zx-spectrum # Posté le 23/10/2008 à 21:06:08
http://www.worldofspectrum.org
Avatar

bonjour
j'affiche mon code. Qu'en penses tu ?
@+
Secret (cliquez pour afficher)
Code : C
  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
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

void Presentation();
void Conversion(int nombre, int base);


int main()

{
    int nombre,base;


       Presentation();
       printf("Entrer un nombre entier positif S.V.P : ");
       scanf ("%d",&nombre);
       printf("En quelle base (2 a 36) vous voulez le convertir :");
       scanf ("%d",&base);
       Conversion (nombre,base);
       printf("\n");


    return 0;
}




void Presentation()
{
    system("cls");
    printf("Novembre 2008 ZX_SPECTRUM\n");
    printf("Le principe pour convertir un nombre de la base 10 en base a\n");
    printf("avec  2<= a <= 36\n");
    printf("____________________________________________________________\n");
    printf(" prenons un exemple 64 en base 10 a convertir en base 2 \n");
    printf(" il suffit de faire des divisions par 2 :\n");
    printf("64 | 2\n");
    printf("   |---\n");
    printf("  0| 32 | 2\n");
    printf("        |---\n");
    printf("      0 | 16 | 2\n");
    printf("             |---\n");
    printf("            0| 8 | 2\n");
    printf("                 |---\n");
    printf("               0 | 4 | 2\n");
    printf("                     |---\n");
    printf("                    0| 2 | 2\n");
    printf("                         |---\n");
    printf("                        0| 1 | 2\n");
    printf("                             |---\n");
    printf("                            1| 0  \n");
    printf("\n");
    printf("Et donc mon resultat est 1000000 en base 2\n");
    printf("En fait pour mon algorithme il suffit de faire des divisions par a=2 ici\n");
    printf("de s'occuper de stoker mes restes des divisions successives ,bon pas trop \n");
    printf("compliques! il suffit d'utiliser la fonction modulo \n");
    printf("j'arretes mes divisions quand mon quotient = 0\n");
    printf("--------------------------------------------------------------------------------\n");
    printf("Plus generalement pour convertir un nombre en base 10 dans une autre base a\n");
    printf("il suffit de faire des divisions par a . Pour les restes >9 on code avec des\n");
    printf("lettres A pour le reste 10 , B pour le reste 11 ............\n");
    printf("Ici on codera jusqu'a la base 36, les dix chiffres arabes + les 26 lettres de\n");
    printf("l'alphabet.\n");
    printf("--------------------------------------------------------------------------------\n");

}


void Conversion(int nombre, int base)
{
    int tab[32]; // nombre jusqu a 2 puissance 32------->2 147 483 647 maxi d'un int
    int i;
    int quotient;
    for (i=0;i<64;i++);
    {
        tab[i]=0;
    }
    quotient = nombre;
    i=0;
    // je fais mes divisions successives
    while (quotient !=0)
    {
        tab[i]=quotient % base;
        quotient=quotient/base;
        i++;
    }
    //j affiche le resultat
    i--;
    if (base==2)
    {
        printf("le nombre occupe en memoire %d octets\n",i/8+1);
    }

    printf("le resultat de : %d en base %d :",nombre,base);
    while (i>=0)
    {

        switch (tab[i])
        {
            case 10 :
                printf("A");
                break;
            case 11 :
                printf("B");
                break;
            case 12 :
                printf("C");
                break;
            case 13 :
                printf("D");
                break;
            case 14 :
                printf("E");
                break;
            case 15 :
                printf("F");
                break;
            case 16 :
                printf("G");
                break;
            case 17 :
                printf("H");
                break;
            case 18 :
                printf("I");
                break;
            case 19 :
                printf("J");
                break;
            case 20 :
                printf("K");
                break;
            case 21 :
                printf("L");
                break;
            case 22 :
                printf("M");
                break;
            case 23 :
                printf("N");
                break;
            case 24 :
                printf("O");
                break;
            case 25 :
                printf("P");
                break;
            case 26 :
                printf("Q");
                break;
            case 27 :
                printf("R");
                break;
            case 28 :
                printf("S");
                break;
            case 29 :
                printf("T");
                break;
            case 30 :
                printf("U");
                break;
            case 31 :
                printf("V");
                break;
            case 32 :
                printf("W");
                break;
            case 33 :
                printf("X");
                break;
            case 34 :
                printf("Y");
                break;
            case 35 :
                printf("Z");
                break;
            default :
                printf("%d",tab[i]);
                break;

        }
        i--;
    }
    printf("\n");

    //fin procedure conversion
}
Hors ligne Brugnar # Posté le 23/10/2008 à 21:11:06
Pong 4ever
Avatar

études : IUT Annecy

Bonsoir,

trop d'appel à printf ^^ , tu pourrais l'appeler beaucoup moins souvent. Au lieu de faire :
Code : C
1
2
3
printf("blabla.\n");
printf("blablabla.\n");
printf("blablablabla.\n");

Tu peux faire :
Code : C
1
2
3
printf("blabla.\n"
       "blablabla.\n"
       "blablablabla.\n");


Sinon la partie conversion me semble pas mal.
 

Retour au forum "Langage C" ou à la liste des forums

Pour accéder à cette section
Connectez-vous !
connexion_rpx