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 :

Remplissage d'un tableau croissant via une saisie


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2014
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2014
    Messages : 22
    Par défaut Remplissage d'un tableau croissant via une saisie
    Bonjour, mon code consiste à stocker les valeurs entrées par l'utilisateur si ce sont des heures, qu'elles sont supérieures au temps courant et qu'elles sont sont éloignées d'au moins 3min des valeurs précédentes : voilà la partie "utile" du 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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    //R est un tableau de 200 cases qu'on ne remplira jamais complètement et qu'on initialise à 0 : le but est de "gérer dynamiquement" le tableau via une variable taille qui comptera le nombre d'élements dans le tableau(+1 si on ajoute un élément, -1 si on en supprime un)
     
    //Fonctions
     
    void reserver(float *R, float currenttime, float arrivee) {
    (if heure est correcte)
          taille++;                      //taille est une variable globale initialisée à 0
          i=0;
          while ((R[i]<arrivee) && (i<taille-1)) {  
    //si la valeur saisie par l'utilisateur est supérieure aux valeurs précédemment remplies : on veut un tableau croissant
             i++    //on cherche i tel que l'élément saisi doive être inséré dans cette case pour obtenir un tableau croissant
          }
     
          if (i<taille) { //sinon on a juste a ajouter l'élément a la fin du tab
             Add_Decalertableau(R,i);
             R[i]=arrivee;
          }
          else {
             R[taille-1]=arrivee;           //y a-t-il un probleme algorithmique?
          }
          printf("horaire valide");
       }
     
     
    void Add_Decalertableau(float *R, int i) {     //si on veut insérer une valeur dans la case i, il faut décaler toutes les valeurs d'après
       int j;
       for(j=taille-1;j>=i;j--){     /*taille-1 car on vient de "redonner" une case qui sera 0!*/
          R[j+1]=R[j];
       }
     }
    _____________________
    #include <stdio.h>
    #include <stdlib.h>
    #include "piste.h"
    #include <math.h>
     
    int taille=0;
     
    int main() {
       float *R=calloc(200, sizeof(float));
       int saisie;
       float currenttime=calcultime();
     
       float arrivee;
       printf ("Saisissez 1 pour ajouter une reservation");
       scanf("%d", &saisie);
        do {
          currenttime=calcultime();
          printf("Current Time : [%f]\n", currenttime);
          printf("Saisissez! ");
          scanf("%d",&saisie);
          if (saisie==1){
             printf("Entrez l'heure d'arrivée\n");
             scanf("%f",&arrivee);
             reserver(R,currenttime,arrivee);
          } 
       ....
       }
        while (saisie!=4)
        free(R);
        return 0;
          }
    J'ai volontairement omis certaines parties car ce n'est pas très important : mon problème incompréhensible est : je saisis 1, une première valeur d'arrivee, elle rentre dans le tableau... il me redemande ensuite une valeur de saisie, 1 à nouveau, et il me redemande une valeur d'arrivee à insérer dans le tableau. Et là, le programme répond rien (il boucle indéfiniment?) comme s'il ne rentrait pas dans reserver (si je met un printf au tout début de la fonction, il ne l'éxécute pas), ce n'est pas un probleme d'include ou de prototype : mon code compile sans aucun warning... quelqu'un saurait d'où ça vient?
    merci.

  2. #2
    Invité
    Invité(e)
    Par défaut orthographe
    J'ai beau regarder et retourner la chose..
    Dans ce que tu nous montres, il n'y a rien à mon sens qui permette de savoir d'où vient l'erreur.

    Éventuellement, vous rentrez une valeur erroné dans le scanf() (un caractère par exemple), qui crée ainsi l'erreur...

    Vous avez fait une séance de débogueur en regardant pas à pas quel est la valeur des différentes variables dans la fonction ? Ou ne fut-ce qu'un printf() dans la boucle pour voir les valeurs de i , de R[i], ... ?
    Dernière modification par Invité ; 29/11/2014 à 19h24.

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2014
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2014
    Messages : 22
    Par défaut
    En fait il semblerait que je me sois trompé : si je tape une heure invalide si une itération correcte a été faite, il s'éxécute correctement en disant que l'heure est invalide...
    mais si je tape une heure valide, il plante sans meme afficher le tout premier printf de la fonction (ie avant meme de tester si l'heure est valide)...
    Ca vient forcément du code que j'ai mis, car les conditions marchent parfaitement dans un autre programme les utilisant.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Indique nous complètement le code de la fonction reserver() pour que l'on y voit plus clair..

    Je me répète mais : Avez-vous fait une séance de débogueur ? A coup de printf(), en utilisant gdb ou directement avec le débogueur de l'ide que vous utilisez ? Qu'en ressort-il ?

    Pourrais-tu poster un ECM compilable pour que l'on puisse tester cela aussi chez nous ?

    Ca vient forcément du code que j'ai mis, car les conditions marchent parfaitement dans un autre programme les utilisant.
    Ah bah oui, si ça vient d'un autre programme les utilisant, forcément...
    " Je ne comprends pas, le delco de ma Ferrari ne fonctionne pas dans mon tracteur "

    "Vive" le copier/coller.

  5. #5
    Membre expérimenté
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2012
    Messages
    170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 170
    Par défaut
    Bonjour,

    Pourquoi tu veux arrêter lorsque saisie sera égale à 4 sachant que saisie est une saisie et ne résulte pas d'une incrémentation.
    Ça va donc boucler jusqu’à ce que l'utilisateur saisisse 4.De plus la première saisie(saisissez 1) ne sert à rien puisque dans tous les cas tu continue le traitement!!
    D'autre part tu n'a aucun Contrôle sur tes saisies!!!

    tu devrais revoir ton algorithme et vérifier l'importance de chaque instruction(/bloc).

    Bon courage.

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

Discussions similaires

  1. [XL-2007] Remplissage d'un tableau à partir d'une autre feuille selon une condition
    Par Mackinlay dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 05/03/2013, 10h50
  2. gerer un tableau excel via une userform
    Par aminiou dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 07/11/2010, 20h51
  3. Exporter des données d'un tableau brut via une liste.
    Par Spyder-ferrari dans le forum Excel
    Réponses: 13
    Dernier message: 15/10/2008, 10h23
  4. tableau dynamique via une table sous sql server
    Par bibi2607 dans le forum ASP
    Réponses: 5
    Dernier message: 21/02/2005, 15h45
  5. Réponses: 13
    Dernier message: 14/10/2003, 14h31

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