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 :

Examen tableaux C


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2012
    Messages : 4
    Par défaut Examen tableaux C
    Bonjour, je suis étudiant en informatique et début du mois prochain je dois repasser mon examen de programmation.
    Ayant beaucoup de mal avec ce cours, j'ai décidé de suivre un tutoriel C et je dois dire qu'avec un peu d'entrainement, ça m'a beaucoup aidé.

    J'ai réalisé le programme que j'ai eu à mon examen de juin.
    Seulement il persiste des subtilités que je n'arrive pas a comprendre, c'est pourquoi je viens demander votre aide si vous en êtes d'accord.

    Voici l'énoncé du programme:
    http://www.fichier-pdf.fr/2012/08/17...12-20-21-1.jpg


    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
    40
    41
    42
    43
    44
    45
    #include <stdio.h>
    #include <stdlib.h>
     
    int main()
    {
        int anneeDepart,anneeFinale,i,j;
        double tempMoy[2005][12],moytotale[2005],sommetotale[2005];
     
        printf("Annee de depart:");
        scanf("%d",&anneeDepart);
     
        printf("Annee finale:");
        scanf("%d",&anneeFinale);
     
        // Boucle d'entrée au clavier des températures moyennes des 12 mois pour chaque années
     
        for(i=anneeDepart;i<=anneeFinale;i++)
        {
            for(j=1;j<=12;j++)
            {
                printf("Temperature moyenne du mois %d de l'annee %d:",j,i);
                scanf("%lf",&tempMoy[i][j]);
                sommetotale[i]+=tempMoy[i][j];
            }
            moytotale[i]=sommetotale[i]/12; // Calcul de la moyenne totale des 12 mois
        }
     
        system("cls"); // On efface l'écran
     
        printf("Annee    1    2    3    4    5    6    7    8    9   10   11   12  Tot    c\n");
     
        // Boucle pour chaque année....
        for(i=anneeDepart;i<=anneeFinale;i++)
        {
            printf(" %d",i); //Affichage de l'annÈe
     
            // Boucle des mois
            for(j=1;j<=12;j++)
            {
                printf("  %.1f",tempMoy[i][j]); // Affichage des températures moyennes pour chaque mois.
            }
            printf("  %.1f",moytotale[i]);
            printf("\n");
        }
    }
    Voilà mes problèmes sont que je ne sais pas comment initialiser le tableau TempMoy pour les années puisque les années sont entrées par l'utilisateur. J'ai mis une valeur afin de pouvoir faire un essai de mon programme pour des années comprises entre 2000 et 2003. Comment faire pour l'initialiser en fonction des années entrées par l'utilisateur?

    Pour le deuxième soucis, je n'arrive pas à comprendre comment faire pour aligner les températures avec le numéro du mois. En fonction du nombre de caractères des températures tout est décalé. Ca reste correcte si on entre des températures de 3 caractères max.

    Voila, c'est en principe tous ce que je veux savoir. Si vous avez des idées d'améliorations, je suis preneur.

    Merci d'avance à tous.

  2. #2
    Membre chevronné Avatar de I_believe_in_code
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    219
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 219
    Par défaut
    Citation Envoyé par marco0906 Voir le message
    Voilà mes problèmes sont que je ne sais pas comment initialiser le tableau TempMoy pour les années puisque les années sont entrées par l'utilisateur. J'ai mis une valeur afin de pouvoir faire un essai de mon programme pour des années comprises entre 2000 et 2003. Comment faire pour l'initialiser en fonction des années entrées par l'utilisateur?
    Si l'utilisateur entre 1980 comme année de début et 1992 comme année de fin, cela fait 13 années en tout. Il suffit alors de créer un tableau de taille 13 au lieu de 2005 (allocation mémoire forcément dynamique puisqu'on ne sait pas à l'avance ce que l'utilisateur va entrer). Après, on stocke les infos de l'année (1980 + i) dans la case i.

    Prérequis : savoir faire un malloc.

    Citation Envoyé par marco0906 Voir le message
    Pour le deuxième soucis, je n'arrive pas à comprendre comment faire pour aligner les températures avec le numéro du mois. En fonction du nombre de caractères des températures tout est décalé. Ca reste correcte si on entre des températures de 3 caractères max. Merci d'avance à tous.
    3 caractères max pour des températures sur Terre, ça semble raisonnable. Pour que les affichages soient bien "alignés", tu peux jouer sur les chaînes de formatage de tes printf. (man printf)

    Ou sinon, méthode "rouleau compresseur" en pseudocode :

    si (i < 10) alors afficher " i"
    sinon si (i < 100) alors afficher " i"
    sinon afficher "i"

  3. #3
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 486
    Par défaut
    Bonsoir et bienvenue,

    I_believe_in_code t'a donné les infos dont tu as besoin. Ceci posé, est-ce bien en C que ton programme doit être écrit ?

    Le moyen le plus simple, en effet, pour réserver suffisamment de place est de faire un malloc(), sans oublier le free() associé en fin de programme, correspondant à <nombre d'années> × <douze> × <taille d'un flottant> (car la taille réclamée à malloc() se compte en bytes).

    De là, tu obtiens un pointeur que tu peux indexer comme un tableau. Dès lors, de deux choses l'une : soit l'indexe linéairement en faisant ptr[(annee-anneededepart)*12+mois-1], soit tu transtypes directement le pointeur en tableau à deux dimensions.

    Pour le formattage des infos à l'écran, tu as presque trouvé : tu utilises déjà les directives de mise en forme de printf() comme on te l'a indiqué, mais tu n'utilise que « .1 », soit 1 décimale après le point. Tu peux également préciser le nombre de décimale avant ce point. Par exemple « 3.1 » définit trois décimales avant le point et 1 après. Tes nombres seront alors alignés sur la droite et les décimales « vides » remplacées par des espaces. Attention : n'oublie pas de réserver une case supplémentaire pour le signe éventuel.

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2012
    Messages : 4
    Par défaut
    Merci pour vos réponses, je testerai tout ça en rentrant du boulot.

    @Obsidian

    Oui c'est bien en C que le programme doit être écrit, c'est le seul langage que nous avons étudié cette année. Nous n'avons même pas vu l'allocation dynamique et on se retrouve avec un programme qui demande d'utiliser cette technique à l'examen.

    Je vais essayer d'appliquer vos directives.

  5. #5
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Par exemple « 3.1 » définit trois décimales avant le point et 1 après.
    Non, le 3 donne le nombre minimum de caractères affichés au total.
    Ainsi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        printf("<%7.1f>\n", -12.0);
        printf("<%7.1f>\n", -123.0);
        printf("<%7.1f>\n", -1234.0);
        printf("<%7.1f>\n", -12345.0);
    donnera
    <  -12.0>
    < -123.0>
    <-1234.0>
    <-12345.0>

  6. #6
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 486
    Par défaut
    Citation Envoyé par diogene Voir le message
    Non, le 3 donne le nombre minimum de caractères affichés au total.
    Oups ! Encore une ânerie. Ça m'apprendra à poser la nuit.
    Bien vu.

  7. #7
    Membre chevronné Avatar de I_believe_in_code
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    219
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 219
    Par défaut
    Citation Envoyé par marco0906 Voir le message
    Nous n'avons même pas vu l'allocation dynamique
    En un an ? Dans une école d'informatique ? Et alors que vous n'avez codé qu'en C ? Mais ce n'est même pas concevable !!!

    J'ai du mal comprendre...

    Si vous n'avez pas vu l'allocation dynamique, il ne faut pas l'utiliser, même si c'est la méthode la plus propre pour résoudre ce problème.

    Citation Envoyé par marco0906 Voir le message
    et on se retrouve avec un programme qui demande d'utiliser cette technique à l'examen.
    Je ne pense pas avoir lu cela dans le sujet.

Discussions similaires

  1. Réponses: 2
    Dernier message: 19/08/2003, 18h04
  2. free sur des tableaux "a moitié dynamiques"
    Par barthelv dans le forum C
    Réponses: 4
    Dernier message: 31/07/2003, 15h30
  3. [langage] erreurs utilisation tableaux 2 dimensions
    Par drosof dans le forum Langage
    Réponses: 11
    Dernier message: 01/07/2003, 11h44
  4. Réponses: 6
    Dernier message: 04/04/2003, 15h28
  5. Les tableaux en PL/SQL
    Par GRUMLY dans le forum PL/SQL
    Réponses: 5
    Dernier message: 12/08/2002, 18h10

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