ranim نائب المدير
عدد المساهمات : 1413 السٌّمعَة : 1 العمر : 36 المهنة : الحمد لله
| موضوع: CORRIGER exercice les polynômes en lng C الجمعة يناير 14, 2011 7:50 am | |
| program projet; type pnoeud=^noeud; noeud=record coef:real; {$V 0:25} expo:real; {$V 25:50} op:char; {$V 50:60} g:pnoeud; d:pnoeud; end; function cree(n,e:real;op:char):pnoeud; begin new(result); result^.coef:=n; result^.expo:=e; result^.op:=op; result^.d:=nil; result^.g:=nil; end; var s,mot:string; sgn:boolean; { Cette procédure sert à nettoyer le txt entré par l'utilisateur (espaces inutiles et signe * oublié, elle prend en charge l'éventuel - en début de polynôme géré par un booléen} procedure nettoie; var i,p:integer; begin sgn:=false; if length(s)=0 then exit; p:=length(s); i:=1; while i<>p do begin {on enlève tous les espaces inutiles } if s[i]=' ' then begin delete(s,i,1); i:=i-1; p:=p-1 end; i:=i+1 end ; p:=length(s); i:=1; while i<>p+1 do begin {on ajoute le signe * si il a été oublié} if (s[i]='x') and_then (i>1) then begin if (s[i-1] in ['0'..'9','.']) then begin insert('*',s,i); p:=p+1 end end; i:=i+1 end; if s[1]='-' then begin {gestion du moins en début d'expression} delete (s,1,1); sgn:=true end end; {Cette procédure prépare le mot suivant (nombre ou signe) pour la fonction polytotree} procedure mot_suivant; begin if length(s)=0 then mot:=' ' else begin if s[1] in ['0'..'9'] then begin mot:=''; while (length(s)>0) and_then (s[1] in ['0'..'9','.']) do begin mot:=mot+s[1]; delete(s,1,1); end end else begin if s[1]='-' then begin mot:='+'; sgn:=true; end else mot:=s[1]; delete(s,1,1); end end end; {fonction principale qui met mon polynôme dans un arbre, elle est composée de la sous fonction termtotree qui met un terme de la forme a*x^n dans un noeud de la forme coefficient/exposant/champs op vide } function polytotree:pnoeud; function termtotree:pnoeud; var valeur1,valeur2:real;er:integer; begin if mot[1] in ['0'..'9'] then begin val(mot,valeur1,er); mot_suivant; if mot='*' then begin mot_suivant;mot_suivant; if mot='^' then begin mot_suivant; val(mot,valeur2,er); if sgn=true then begin result:=cree(-valeur1,valeur2,' '); sgn:=false; end else result:=cree(valeur1,valeur2,' '); mot_suivant; end else if sgn=true then begin result:=cree(-valeur1,1,' '); sgn:=false end else result:=cree(valeur1,1,' '); end else if sgn=true then begin result:=cree(-valeur1,0,' '); sgn:=false end else result:=cree(valeur1,0,' '); end else if mot[1]='x' then begin mot_suivant; if mot='^' then begin mot_suivant; val(mot,valeur1,er); if sgn=true then begin result:=cree(-1,valeur1,' '); sgn:=false end else result:=cree(1,valeur1,' '); mot_suivant; end else if sgn=true then begin result:=cree(-1,1,' '); sgn:=false end else result:=cree(1,1,' '); end else result:=nil end; var p:pnoeud; begin result:=termtotree; if result=nil then exit; if mot='+' then begin mot_suivant; p:=cree(0,0,'+'); p^.g:=result; p^.d:=polytotree; if p^.d=nil then begin //gestion erreur // libere(p); result:=nil end else result:=p; end; end; {programme principal} var p:pnoeud; begin write('Entrez un polynôme : ');readln(s); nettoie; writeln('chaîne nettoyée : ',s); {mot_suivant; p:=polytotree;} end. | |
|
زائر زائر
| موضوع: رد: CORRIGER exercice les polynômes en lng C الثلاثاء يونيو 28, 2011 4:28 pm | |
| سلام شكرا الكثير موضوع رائع |
|
زائر زائر
| موضوع: رد: CORRIGER exercice les polynômes en lng C الثلاثاء يونيو 28, 2011 4:28 pm | |
| |
|