IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Crée un tableau par l'allocation dynamique de la mémoire


Sujet :

C

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2022
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2022
    Messages : 21
    Points : 8
    Points
    8
    Par défaut Crée un tableau par l'allocation dynamique de la mémoire
    Bonjour,
    Je reviens encore envers vous, vu que je suis autodidacte et j'apprends le langage C comme mon premier langage de programmation , alors je galère , parfois même je me met en doute est ce que c'est le bon choix pour commencer, ceci dit.

    Voila je voudrai crée un tableau par l'allocation dynamique de la mémoire puis calculer la somme et la moyenne des éléments du tableau, le problème c'est que j'arrive pas à faire la somme et la moyenne des éléments de ce tableau, car j'ai le résulta der la somme et la moyenne dans la console 0, j'arrive pas à comprendre pourquoi, ou j'ai loupé un truc ?
    voici le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    #include <stdio.h>
    #include <stdlib.h>
     
    int main ()
    {
     
    int i,n,S;
    double M;
    printf("entrez le nombre elements du tableau\n ");
    scanf("%d",&n);
    int *t=malloc(n*sizeof(int));// allocation dynamique de la mémoire pour le tableau t
     
    if (t==NULL)
       {
        printf("la mémoire nest pas allouée");
        exit(0);
        }
    else
    {
        for (i=0;i<n;i++)
        {
            printf("entrez element t[%d]: ",i);
            scanf("%d",(t+i));
        }
     
        S=0;
        for (i=0;i<n;i++);
        {
            S=S+*(t+i);
        }
        M= (double) S/n;
     
        printf("la somme des elements est %d \n",S);
        printf("la moyenne des elements est %.2lf\n",M);
     
       free(t);
    }
            return 0;
    }
    et voici le résulta de output dans la console
    entrez le nombre éléments du tableau
    4
    entrez element t[0]: 12
    entrez element t[1]: 12
    entrez element t[2]: 13
    entrez element t[3]: 15
    la somme des elements est 0
    la moyenne des elements est 0.00

    Process returned 0 (0x0) execution time : 8.986 s
    Press any key to continue.

    Merci pour votre aide

  2. #2
    Expert éminent
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 565
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 565
    Points : 7 648
    Points
    7 648
    Par défaut
    Bonjour,

    Relis bien ta ligne 27. Le point-virgule!

  3. #3
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Salut
    Citation Envoyé par Izem2022 Voir le message
    j'arrive pas à comprendre pourquoi
    Tu aurais rajouté un simple printf("t[%d]=%d\n", i, *(t+i)) dans ta boucle de calcul tu aurais trouvé de suite. Le débugging ce n'est pas seulement regarder son code, c'est aussi rajouter des affichages pour vérifier si les valeurs obtenues sont les valeurs attendues.

    Citation Envoyé par Izem2022 Voir le message
    ou j'ai loupé un truc ?
    un simple point-virgule en trop à la fin du for(...). C'est con hein ???

    Accessoirement: si tu sors du programme quand le tableau n'est pas alloué, le "else" devient inutile => tu gagnes un niveau d'indentation (remarque que vu la tienne il est clair que tu n'en as pas besoin...).
    Et c'est pas parce que tu utilises un pointeur alloué que tu n'as pas le droit d'utiliser la notation tableau. Ecrire t[i] donne exactement le même code que *(t+i) et reste bien plus lisible.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  4. #4
    Membre expérimenté Avatar de edgarjacobs
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    623
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2011
    Messages : 623
    Points : 1 554
    Points
    1 554
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    (....)
    un simple point-virgule en trop à la fin du for(...). C'est con hein ??? (...)
    Et combien de fois n'a-t-on pas croisé la question "pourquoi le compilateur me sort une erreur sur le else ? J'ai pourtant un if avant."
    On écrit "J'ai tort" ; "tord" est la conjugaison du verbre "tordre" à la 3ème personne de l'indicatif présent

  5. #5
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par edgarjacobs Voir le message
    "pourquoi le compilateur me sort une erreur sur le else ? J'ai pourtant un if avant."
    Dans ce cas t'as au-moins une erreur de compilation donc un guide. Dans le cas du PO, le truc compile nickel alors pour le trouver... (c'est en mettant le printf() dont je parle et que je n'ai pas vu ressortir à l'exécution que j'ai pu trouver l'erreur...)
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2022
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2022
    Messages : 21
    Points : 8
    Points
    8
    Par défaut
    Citation Envoyé par dalfab Voir le message
    Bonjour,

    Relis bien ta ligne 27. Le point-virgule!
    Bonjour,
    Merci , c'était ça le problème alors que je cherchais le problème depuis plus de 3 jours lol
    je vais jamais oublié ce point virgule lol

    Citation Envoyé par Sve@r Voir le message
    Salut

    Tu aurais rajouté un simple printf("t[%d]=%d\n", i, *(t+i)) dans ta boucle de calcul tu aurais trouvé de suite. Le débugging ce n'est pas seulement regarder son code, c'est aussi rajouter des affichages pour vérifier si les valeurs obtenues sont les valeurs attendues.


    un simple point-virgule en trop à la fin du for(...). C'est con hein ???

    Accessoirement: si tu sors du programme quand le tableau n'est pas alloué, le "else" devient inutile => tu gagnes un niveau d'indentation (remarque que vu la tienne il est clair que tu n'en as pas besoin...).
    Et c'est pas parce que tu utilises un pointeur alloué que tu n'as pas le droit d'utiliser la notation tableau. Ecrire t[i] donne exactement le même code que *(t+i) et reste bien plus lisible.

    Bonjour, merci pour toute votre explication, je n'ai pas vu le point virgule c'était bête de de l'oublier , j'ai essayer de faire un printf pour afficher le contenu du tableau mais je n'ai pas pu voilà , vous avez raison utiliser t[i] est plus lisible que *(t+i), je vais revoir ma syntaxe

  7. #7
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Izem2022 Voir le message
    j'ai essayer de faire un printf pour afficher le contenu du tableau mais je n'ai pas pu voilà
    Le fait que le tableau ne s'affiche pas indique que la boucle ne se fait pas. C'est là l'indice qui t'amène à examiner la boucle plus en détail.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2022
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2022
    Messages : 21
    Points : 8
    Points
    8
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Le fait que le tableau ne s'affiche pas indique que la boucle ne se fait pas. C'est là l'indice qui t'amène à examiner la boucle plus en détail.
    d'accord merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 10/01/2020, 08h14
  2. allocation dynamique de la mémoire
    Par ralf91 dans le forum C#
    Réponses: 4
    Dernier message: 08/04/2008, 18h16
  3. Réponses: 6
    Dernier message: 20/02/2008, 10h24
  4. tableau 2D et allocation dynamique
    Par kromartien dans le forum C
    Réponses: 8
    Dernier message: 28/02/2007, 16h29
  5. Réponses: 15
    Dernier message: 06/12/2006, 16h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo