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

Turbo Pascal Discussion :

[TPW] Segment de données trop volumineux


Sujet :

Turbo Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Janvier 2008
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 16
    Par défaut [TPW] Segment de données trop volumineux
    salut les programmeurs ,
    lorsque je vient de compiler un programme, le compilateur (TWP 1.5) m'affiche un message d'erreur qui contient :
    ' erreur 49 : segment de données trop volumineux '
    .
    Sachez que mon programme est peu volumineux, il contient :
    - une procédure de création d'un fichier
    - une procédure de saisir de taille d'un tableau (récursive)
    - une procédure de remplissage (récursive)
    - une procédure de tri_shell de la première moitié du tableau
    - une procédure de tri_sélection de la 2 éme moitié du tableau
    - une procédure de fusion dans un fichier
    - une procédure d'affichage (récursive)
    je ne sait pas pourquoi ou quoi faire pour le remédié ?
    j'ai besoin d'aide svp.
    merci d'avance .

  2. #2
    Membre très actif
    Avatar de diden138
    Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    714
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2006
    Messages : 714
    Par défaut Re : salut
    poste ton code les noms des procédures ne vont pas nous aider
    cordialement @+

  3. #3
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    Avril 2002
    Messages
    2 466
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 466
    Par défaut
    Rien à voir avec les procédures, cela vient de la déclaration de tes variables. Poste le bout de code définissant tes variables.

  4. #4
    Membre Expert
    Avatar de krachik
    Inscrit en
    Décembre 2004
    Messages
    1 964
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 964
    Par défaut
    Bonjour
    j'espere juste que tu n'es pas en train de charger tout un fichier en memoire pour pouvoir l'analyser
    Au passage dis-nous ce que fait chaque procedure et les structures de données que tu utilises.

  5. #5
    Membre averti
    Inscrit en
    Janvier 2008
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 16
    Par défaut voila donc mon code
    Citation Envoyé par diden138 Voir le message
    poste ton code les noms des procédures ne vont pas nous aider
    cordialement @+
    voici mon code cause d'erreur :
    mais avant cela, excuser moi, j'ai détecté la première faute (segment volumineux ), est alors la deuxième, c'est après l'exécution.
    ( c'est devoir de contrôle numéro 3) il s'agit de remplir un tableau par qqc informations des élèves (nom prénom et moy ) puis trier la 1 moitié par shell et la 2 eme par selectction , enfin fusionner les deux.

    voici mon code cause d'erreur :

    ***************
    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
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    Program DC3 ;
    Uses wincrt;
     
    Type
        info = record
            nom,prenom : string ;
            moy : real ;
          end ;
        tab= array[1..5] of info ;
        fiche = file of info ;
    Var
    tableau: tab ;
    t:tab;
    n,i,j: integer;
    eleve :fiche ;
     
    procedure creation (var eleve :fiche);
      var
        ch :string;
      begin
        ch:='c:\4si\moyenne.txt';
        assign(eleve,ch);
        {$i-}reset(eleve);{$i+}
        if ioresult <> 0 then
          rewrite(eleve);
      end;
     
    procedure saisie (var n :integer);
     begin
       writeln('Donner le nbre des élèves :');
       readln(n);
       if not(n in [2..10]) then
         saisie(n);
     end;
     
    procedure lecture (var t :tab ;d,f:integer);
      begin
        with t[d] do
         begin
           writeln('Donner le nom : ');readln(nom);
           writeln('Donner le prénom : ') ; readln(prenom);
           writeln('Donner la moyenne : ') ; readln(moy);
         end;
         if (d<f) then
           lecture (t,d+1,f);
      end;
     
    procedure tri_selection (var t : tab ; d,f:integer);
      var
        aux:info;
        max:integer;
      begin
        max:=d;
         for i:=d+1 to f-1 do
           if (t[i].moy>t[max].moy) then
             max:=i;
         if max<> d then
            begin
              aux:= t[max];
              t[max]:=t[d];
              t[d]:=aux;
            end;
         if (d+1<f) then
            tri_selection(t,d+1,f);
      end;
     
    procedure tri_shell(var t:tab ; n:integer);
      var
        i,j,pas:integer;
        aux:info;
      begin
        pas:=0;
        while (pas<n) do
         pas:=pas*3+1;
        while pas<> 0 do
         begin
           pas:=pas div 3 ;
           for i:= pas to n do
            begin
              aux:=t[i];
              j:=i;
              while (j>pas-1) and (t[j-pas].moy<aux.moy) do
                begin
                 t[j]:=t[j-pas];
                 j:=j-pas;
                end;
              t[j]:=aux;
            end;
         end;
      end;
     
    procedure fusion (t1,t2:tab;d1,f1,d2,f2:integer; var tableau:tab);
      var
        c1,c2,c3,i,j:integer;
      begin
        reset (eleve);
        c1:=d1;c2:=d2;
        repeat
          if (t1[c1].moy>t2[c2].moy) then
           begin
            tableau[c3]:=t1[c1];
            c1:=c1+1;
           end
          else
           begin
            tableau[c3]:=t2[c2];
            c2:=c2+1;
           end;
           c3:=c3+1;
        until (c1>f1) or (c2>f2) ;
       if (c1>d1) then
        for i:= c2 to f2 do
          begin 
           tableau[c3]:=t2[i];
           c3:=c3+1;
          end
       else
        for i:=c1 to f1 do
         begin
          tableau[c3]:=t1[c1];
          c3:=c3+1;
         end;
     end;
     
    procedure affiche (var f: fiche);
     var
      ele:info;
     begin
        if not (eof(f)) then
         begin
           read(f,ele);
           with ele do
            begin
             writeln(' le nom est ; ',nom);
             writeln(' le prénom est : ',prenom);
             writeln(' la moyenne est : ',moy);
            end;
           affiche (f);
         end;
     end;
     
    { PP }
    BEGIN
    creation(eleve);
    saisie(n);
    lecture(t,1,n);
    tri_shell(t,n div 2);
    tri_selection(t,((n div 2)+(n mod 2)),n);
    fusion (t,t,1,n div 2,(n div 2) +1,n , tableau);
    reset(eleve);
    affiche(eleve);
    close(eleve);  
    END.

  6. #6
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 967
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 967
    Par défaut
    Die,
    Citation Envoyé par petit programmeur Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    procedure saisie (var n :integer);
     begin
       writeln('Donner le nbre des élèves :');
       readln(n);
       if not(n in [2..10]) then
         saisie(n);
     end;
    C'est quoi cette horreur récusive ? Si c'est imposé par l'énoncé, il faut fusiller ton prof immédiatement.

    Après on s'étonne de l'utilisation absurde de la récursivité pour tout et n'importe quoi, en voilà un exemple à garder dans les annales.

    En voyant ça, je n'ai pas lu plus loin.

  7. #7
    Membre Expert
    Avatar de krachik
    Inscrit en
    Décembre 2004
    Messages
    1 964
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 964
    Par défaut
    mais avant cela, excuser moi, j'ai détecté la première faute (segment volumineux ), est alors la deuxième, c'est après l'exécution.
    Donc ce n'est plus une erreur de compilation mais d'execution?
    et c'est quoi le message d'erreur .? et a quel ligne ?

    Citation Envoyé par droggo
    C'est quoi cette horreur récusive ? Si c'est imposé par l'énoncé, il faut fusiller ton prof immédiatement.

    Après on s'étonne de l'utilisation absurde de la récursivité pour tout et n'importe quoi, en voilà un exemple à garder dans les annales.
    Apres ça soit:
    1- Ils ne diront pas qu'ils n'ont jamais entendu parler de "Recursivité"
    2- Ils auront du mal à comprendre la necessité d'utilisation de la recursivité dans telle ou telle situation
    3- Ils deviendront les portes paroles de la Recursivité.
    4- Pourquoi faire "Iteratif" si la recursivité s'en occupe
    5- J'espere aussi que le prof dit pourquoi il donne de tel exercice sur la recursivité)
    ()
    En tout cas avec tout ce que j'ai vu comme exercices sur la recursivité ces 6 derniers mois ,si j'ai le temps je ferai une compilation pour résumer tout ça(bon ou pas bon)(là c'est serieux qu'en pensez-vous)

  8. #8
    Membre très actif
    Avatar de diden138
    Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    714
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2006
    Messages : 714
    Par défaut Re : bonjour
    Tous d'abord excusez moi pour ce terme mais votre programme c'est du "grand n'importe quoi"
    tous d'abord comme la signaler droggo
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    procedure saisie (var n :integer);
     begin
       writeln('Donner le nbre des élèves :');
       readln(n);
       if not(n in [2..10]) then
         saisie(n);
     end;
    on va pas utiliser la récursivité pour tous et n'importe quoi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    procedure lecture (var t :tab ;d,f:integer);
      begin
        with t[d] do
         begin
           writeln('Donner le nom : ');readln(nom);
           writeln('Donner le prénom : ') ; readln(prenom);
           writeln('Donner la moyenne : ') ; readln(moy);
         end;
         if (d<f) then
           lecture (t,d+1,f);
      end;
    une simple boucle aurait suffit pourquoi tout ce bazare.
    et comme on garde le meilleur pour la fin voila le grand art la récursivité sur un fichier qui on le ferme même pas avant le prochain appel et je ne vois pas vraiment à quoi sert cette fonction vu que ton fichier tu ne le rempli jamais tu vérifie juste s'il existe si oui tant mieux sinon tu en crée un vide.
    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
    procedure affiche (var f: fiche);
     var
      ele:info;
     begin
        if not (eof(f)) then
         begin
           read(f,ele);
           with ele do
            begin
             writeln(' le nom est ; ',nom);
             writeln(' le prénom est : ',prenom);
             writeln(' la moyenne est : ',moy);
            end;
           affiche (f);
         end;
     end;
    un simple for sur le tableau aurait afficher le résultat du tri.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    tri_shell(t,n div 2);
    tri_selection(t,((n div 2)+(n mod 2)),n);
    fusion (t,t,1,n div 2,(n div 2) +1,n , tableau);
    à quoi sert de faire appel trois foies successivement au procédures de tries
    c'est pour t'assurer peut être que ton tableau a bien été trié ?
    Ps:
    1- je doute fort qu'un professeur a écrit ce code
    2- la récursivité est à utiliser avec modération et surtout quand c'est utile,n'oublie pas que la récursivité implique la sauvegarde de tous l'environnement d'exécution.
    cordialement @+

Discussions similaires

  1. Réponses: 1
    Dernier message: 21/11/2012, 09h59
  2. MaBase_Log.ldf est trop volumineux
    Par Fractal Blue dans le forum MS SQL Server
    Réponses: 14
    Dernier message: 15/01/2009, 20h17
  3. sql loader-fichier de données trop important
    Par lg_gaelle dans le forum Oracle
    Réponses: 2
    Dernier message: 12/10/2006, 18h13
  4. "nom de source de données trop long"
    Par Pau dans le forum ASP
    Réponses: 4
    Dernier message: 06/12/2004, 10h48
  5. GDT Descripteur de segment de code & segment de données
    Par Edouard Kaiser dans le forum x86 32-bits / 64-bits
    Réponses: 15
    Dernier message: 03/04/2004, 12h40

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