Besoin d'une correction simple en C

Fermé
Utilisateur anonyme - 20 janv. 2009 à 20:56
 loupius - 21 janv. 2009 à 17:07
Bonjour,
je débute tout juste dans la programmation en C et je m'entraine a faire des codes pour être bien sûr de mes bases, le problème c'est que je fais plein d'erreurs et que je n'ai personne pour me corriger, c'est pour ça que je me retourne vers vous, mes chers internautes.
je cherche a créer un logiciel pour connaitre la structure électronique d'un atome automatiquement. En gros, les atomes d'un atome s'organisent en différentes couches (K, L, M et d'autres mais je choisis celles-ci pour faire simple) K peut contenir 2 électrons maximum, L peut contenir 8 électrons maximum et M peut en contenir 18 mais on s'arrête a 8 parce que ça devient compliqué après, il faudrait rentrer les valeurs de tout les atomes un par un :s.
Mon logiciel pose la question "combien d'électrons contient votre atome ?"et le pc lui répond "K = %ld, L = %ld et M = %ld"
voici mon code :

#include <stdio.h>
#include <stdlib.h>
#include "electrons.h"

void rangementElectrons(long* pointeurElectrons, long* pointeurK, long* pointeurL, long* pointeurM);

int main(argc, )
{
    long electrons = 0, K = 0, L = 0, M = 0;
    printf ("Entrer le nombre d'électrons d'un atome donc Z >= 18 : ");
    scanf ("%ld", &electrons);
    printf ("\n");

    rangementElectrons(&electrons, &K, &L, &M);

    printf ("Voici la structure moléculaire de votre atome K = %ld, L = %ld, M = %ld", K, L, M);
    system("PAUSE");
    return 0;
}

void rangementElectrons (long* pointeurElectrons, long* pointeurK, long* pointeurL, long* pointeurM)
{

    // Remplir K
    if (*pointeurElectrons <= 2)
{
        *pointeurK = *pointeurElectrons;
}

    // Remplir L
    else if (*pointeurElectrons <= 8)
{
        *pointeurK = 2;
        *pointeurL = *pointeurElectrons - 2;
}

    // Remplir M
    else if (*pointeurElectrons <= 18)
{
        *pointeurK = 2;
        *pointeurL = 8;
        *pointeurM = *pointeurElectrons - 10;
}

    // Autres cas
    else
{
        printf ("Entrez une valeur inferieur a 18")
}
A voir également:

4 réponses

mype Messages postés 2435 Date d'inscription jeudi 1 novembre 2007 Statut Membre Dernière intervention 16 août 2010 436
20 janv. 2009 à 21:29
ben c'est pas mal du tout ton code est correct tu as juste quelques petite faute
les arguments du main c'est
int main(int argc, char *argv[])
et puis il te manque un ";" a la fin du dernier printf
 printf ("Entrez une valeur inferieur a 18");

et puis tu inclus un fichier electron.h mais tu n'utilise aucune fonction de celui ci c'est pas utile
0
Mahmah Messages postés 496 Date d'inscription lundi 17 septembre 2007 Statut Membre Dernière intervention 22 juin 2010 125
20 janv. 2009 à 22:19
Bonsoir,

Il paraît bien ce petit programme

points gênants:
* Le prototype de la fonction main devrait être int main( int argc, char *argv[] )
* Le #include "electrons.h" m'a l'air inutile

Détails :
* Il manque la dernière accolade fermante (oubliée dans le copier-coller sur CCM à mon avis)
* Un nombre d'électrons pourrait être une grandeur positive (utilisation du unsigned)
* Un nombre d'électrons a-t-il vraiment besoin d'être de type long ? (type inapproprié si on chipote)
* Dans rangementElectrons le nombre d'électrons n'a pas besoin d'être passé par adresse.
* Le printf de rangementElectrons devrait se trouver dans le main
* rangementElectrons pourrait être plus simple, plus courte.
* Il manque soit des commentaires précisant les conditions d'utilisation de la fonction, soit la vérification des pointeurs donnés en paramètre dans rangementElectrons (surtout si le programme était plus volumineux, j'avoue bien que là...)
* La constante MAX_ELECTRONS 18 pourrait être déclarée (et rappelée à l'utilisateur lors de la saisie)
* idem pour les maximums de chaque couche. (Meilleure lisibilité du code)

A mon sens, le code serait très bien en réglant les points gênants, presque parfait en réglant le reste.
J'apprécie le début de convention de nommage des variables, pour aller plus loin :
La notation hongroise sur Wikipédia Fr
un peu plus fournie sur la page anglaise
C'est bien sûr à titre d'exemple et à faire évoluer selon ses envies, l'objectif est encore la lisibilité. (et là ça sera vraiment parfait)
Quelques commentaires pour structurer le fichier, (Déclaration des constantes, Déclarations courtes de fonction, Définitions des fonctions) un commentaire pour chaque fonction et des commentaires dans les fonctions.

Voilou, le grand difficile a tout dit
M.
0
Utilisateur anonyme
21 janv. 2009 à 07:24
Un grand merci à vous deux, maintenant mon programme marche !
étape suivante, classer tout les électrons jusqu'à 160 (je crois que c'est ça) !
bye
0
zaien Messages postés 2 Date d'inscription mercredi 21 janvier 2009 Statut Membre Dernière intervention 21 janvier 2009
21 janv. 2009 à 15:52
bonjour à tous
jai essayé de faire un ex en c qui demande de faire convertir 1 chaine de caractère en code ascii puis en code binaire
puis de calculeer le poids hammig de chaque caactère qui est le nenbre de bits non nul ,ensuite de coder ce dode binaire en répétant chaque its ph fois
ex: ph(poid hamming)[1100010]=3

'a'->98>1100010->111 111 000 000 000 111 000--> générer des erreurs aléatoire-->décoder-->nouveau code
binaire-->nouveau codeASCII-->nouveau caractère
#INCLUDE <stdio.h>
#include<string.h>
#include<STDLIB.H>
// fonction de convetion du carac au ASCII
int car_ascii (car *c)
{ int i;
i=c;
scanf("%d",&i)
returni;}
// fction ascii->binaire

void ascii_binaire( int *i)
{ int j,k,l,ph;
int T[100];
j=0;
do{ T[j]=(i%2);
i=i/2;
j++;
l++;}
while(i<2);
T[l]=i%2;
ph=0
for (k=0;k<l;k++)
{if T([k]==1 )ph++;}

jai pas terminé mais c'é juste ça?
0
Salut,
Ca n'a rien à voir avec le sujet traité dans ce post.
Si tu veux une réponse, fais-le dans un post séparé.
0