Probléme en c

Fermé
star - 15 mars 2009 à 14:27
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 - 15 mars 2009 à 23:23
Bonjour,
j'essaye de faire un programme en C qui demande 3 couleur et qui affiche la valeur de la resistance qui les porte.
Le programme affiche aussi un message précisant si la valeurs de la résistance est conforme a la serie E24.
Exemple d'exécution de ce programme:
donner la couleur de l'anneau 1:rouge
donner la couleur de l'anneau 2:marron
donner la couleur de l'anneau 3:jaune
210 k ohm ne fait pas partie de la serie E24

j'ai besoin de vous aides
merci

3 réponses

Dod_Is_Cool
15 mars 2009 à 16:21
Bonjour,

J'ai déjà tapé ce début de code à améliorer :

#include <stdio.h>
#include <tchar.h>
#include <math.h>
#include <ctype.h>

void Affiche_Couleurs_No()
{
	printf("Noir : 0\n");
       printf("Magenta : 1\n");
	printf("Rouge : 2\n");
	printf("Orange : 3\n");
	printf("Jaune : 4\n");
	printf("Vert : 5\n");
	printf("Bleu : 6\n");
	printf("Violet : 7\n");
	printf("Gris : 8\n");
	printf("Blanc : 9\n");
}

char *substr(const char *s, int deb, int len)
{
 char *str = calloc (len + 1, sizeof(char)); 
 strncpy (str,deb + s,len);
 return str;
}

int main()
{
 char Couleur_1[2];
 char Couleur_2[2];
 char Couleur_3[2];
 
 char Res_Ohms_Char_Dig_2[3];
 int Res_Ohms_Int_Dig = 0;

 printf(" -----------------------------------------------------------------------------------------------\n");
 printf(" ------------------------------         CALCUL RESISTANCE                         --------------\n");
 printf(" -----------------------------------------------------------------------------------------------\n\n");
 Affiche_Couleurs_No();

 printf("\n > Entrez la 1ere couleur : ");
 scanf("%s", &Couleur_1);
 printf(" > Entrez la 2eme couleur : ");
 scanf("%s", &Couleur_2);
 printf(" > Entrez la 3eme couleur : ");
 scanf("%s", &Couleur_3);

 strcpy(Res_Ohms_Char_Dig_2, substr(&Couleur_1,0,1));
 
 strcat(Res_Ohms_Char_Dig_2, substr(&Couleur_2,0,1));
 
 Res_Ohms_Int_Dig = atoi(Res_Ohms_Char_Dig_2);

 Res_Ohms_Int_Dig = Res_Ohms_Int_Dig * pow(10,atoi(Couleur_3));

 printf(" > Resistance : %d Ohms", Res_Ohms_Int_Dig);
  
 return(0);
}
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
15 mars 2009 à 17:58
Salut,

scanf("%s", &Couleur_1);
Couleur_1 est un une chaîne de caractère, pas besoin de &, etc.

substr c'est quoi?
0
mamiemando Messages postés 33093 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 4 mai 2024 7 751
15 mars 2009 à 23:18
Ce qui a de bien c'est qu'on est pas perdu avec les élèves :-)
http://www.commentcamarche.net/forum/affich 11519691 un bon exercice programmation

Bon mais on a progressé, là au moins on sent qu'il y a du progret et un début de travail.

Sinon lami20j substr est une fonction qui extrait une sous chaîne et qu'il a réécrit dans son code.

Quelques remarques :

- en C il faut éviter les allocations quand ce n'est pas nécessaire, surtout que là tu n'en as pas besoin et que là tu ne désalloue pas ce que substr a alloué. En l'occurrence une sous chaîne n'est qu'un sous tableau. et là tu pousses le vice à n'extraire qu'un caractère... il suffit d'écrire my_str[i] pour extaire le ième char !

- return n'est pas une fonction. Ecris directement "return 0;"

- évite les headers non standards et inutiles comme <tchar.h>.

- pourquoi passer par une chaîne quand un scanf permet de lire directement un entier ???? Surtout si c'est pour faire un atoi derrière ?
int x;
do{
  printf("saisissez un entier compris entre 0 et 9\n");
} while(!scanf("%d",&x) || x < 0 || x > 9);


Bonne chance
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
15 mars 2009 à 23:23
Salut,

il a réécrit dans son code.
Je suis aveugle ;-).
Je n'ai même pas vu la fonction et je me suis posé la question où il a trouvé cette fonction en C.
J'ai été induit en erreur puisque cette fonction existe déjà dans d'autre langages.
0