Convertion Du Basic au C++

Samiracle Messages postés 31 Statut Membre -  
Samiracle Messages postés 31 Statut Membre -
Salut , je cherche quelqu'un qui sais comment programmer en C++ et le basic ..je veux traduire un programme Du basic au C++ ( programme pour tracer le diagramme de circle machine asynchrone ) ..s'il vous plait si vous connaissez comment les traduire repondez moi ( c'est un mini projet que je doit renre avant le 15 mai ) Merci .. :(

3 réponses

  1. qbasic45 Messages postés 60 Statut Membre 3
     
    bounjour
    oui il son corriger dans le programme
    1
    1. Samiracle Messages postés 31 Statut Membre 1
       
      Merci ;D
      0
  2. BusyBeingDelicious Messages postés 4 Statut Membre
     
    poste le code source au moins, qu'on voit ce qu'on doit faire. Sinon pour apprendre le c++, le siteduzero peut tapprendre en tres peu de temps
    0
    1. Samiracle Messages postés 31 Statut Membre 1
       
      REM Programme en cours d''laboration
      REM fichier asynchro.bas
      REM Ce programme est 'crit en qbasic. L'interpr'teur qbasic.exe (et son aide
      REM qbasic.hlp) n'cessaire ... son ex'cution fait partie du DOS ... partir de la
      REM version 5. Il se trouve aussi
      REM sur le CD d'installation de windows 95 en \OTHER\OLDMSDOS\
      REM et sur le CD d'installation de windows 98 en \TOOLS\OLDMSDOS\
      REM Il fonctionne encore en windows 2000/XP mais sans possibilit' de copie
      REM d''cran. Pour contourner ce problSme, vous pouvez utiliser l'environnement
      REM de programmation t'l'chargeable gratuitement ... l'adresse
      REM http://fbide.freebasic.net/
      REM
      DEFSNG A-Z
      DECLARE SUB basin (a$, g!, b$)
      DECLARE FUNCTION argument! (X!, y!)
      DIM SHARED pi!
      REM n'cessite un 'cran ega ou vga
      SCREEN 9
      root3 = SQR(3!)
      pi! = 4 * ATN(1!)
      debut: 'choix des valeurs par d'faut
      rapecran = 1.6 'rapport largeur/hauteur de l''cran
      'ce rapport doit ^tre ajust' pour obtenir des graphes PQ corrects
      npp = 2! 'nombre de paires de p"les
      k = 1! 'rapport de transformation
      frequref = 50!
      frequ = frequref 'fr'quence statorique
      nref = frequref / npp * 60!
      pref = 70! 'pertes m'caniques ... la vitesse de r'f'rence
      r1 = 4.699 'r'sistance statorique mise en amont des 'l'ments //
      r1compl = 4.699 'r'sistance statorique mise en aval des 'l'ments //
      x1 = 0! 'r'actance statorique
      x2p = 10! 'r'actance rotorique ramen'e au stator
      r2p = 4! 'r'sistance rotorique ramen'e au stator
      u2seuil = 0! 'seuil de conduction rotorique (contact bague-balais)
      rp = 2064! 'r'sistance parallSle statorique
      flags% = 1
      xmuu = 254! 'r'actance parallSle non satur'e
      cnl = 1! / 300! 'inverse de la tension "de saturation"
      etnl = 6! 'exposant de la fonction de saturation
      u1 = 380!
      nrot = 0!
      i2n = 0!
      u2 = 0!
      fp2 = 1!
      flagc% = 0
      nbexp% = 0
      choixsol% = 1
      entree: CLS
      PRINT "E. Matagne 17-05-2010"
      PRINT
      PRINT "Ce programme analyse de fa#on exacte le comportement d'un"
      PRINT "moteur asynchrone triphas' mod'lis'"
      PRINT " soit par un circuit 'quivalent en T"
      PRINT " soit par un circuit 'quivalent en L (circuit 'quivalent simplifi')"
      PRINT
      PRINT "Pour obtenir un circuit 'quivalent en L, il suffit d'attribuer"
      PRINT " ... la r'sistance statorique Rs (mise en amont)"
      PRINT " et ... la r'actance de fuite statorique Xs la valeur z'ro"
      GOSUB pourconti
      CLS
      PRINT "Valeur des paramStres (page 1)"
      PRINT
      basin "Nombre de paires de p"les", npp, ""
      basin "fr'quence d'alimentation statorique", frequ, "Hz"
      nsyn = frequ * 60! / npp
      PRINT " vitesse de synchronisme = "; nsyn; " t/m"
      PRINT
      PRINT "Nous supposons les pertes m'caniques dues uniquement ... un couple de"
      PRINT " frottement sec."
      PRINT
      PRINT "Vitesse de r'f'rence pour exprimer les pertes m'caniques (df";
      PRINT nref; "t/m) =";
      INPUT in$
      IF in$ <> "" THEN nref = VAL(in$)
      PRINT "pertes m'caniques ..."; nref; "t/m (df"; pref; "W)=";
      INPUT in$
      IF in$ <> "" THEN pref = VAL(in$)
      cfrot = pref / nref * 30! / pi!
      COLOR 10
      PRINT "Le couple de frottement sec m'canique vaut donc"; cfrot; "Nm"
      COLOR 15
      PRINT
      PRINT "La valeur du rapport de transformation est sans importance si aucune"
      PRINT "mesure 'lectrique n'est faite au rotor."
      PRINT "Rapport de transformation k de la machine id'ale"
      PRINT " (plac' en aval de tout le circuit 'quivalent);"
      PRINT "ce rapport est d'fini comme le flux statorique de la machine id'ale"
      PRINT " divis' par le flux rotorique."
      PRINT " Votre choix k = (df"; k; ")";
      INPUT in$
      IF in$ <> "" THEN k = VAL(in$)
      GOSUB pourconti
      CLS
      PRINT "Valeur des paramStres (page 2)"
      PRINT
      PRINT "El'ments s'rie"
      PRINT
      PRINT "Valeur de la r'sistance statorique Rs (mise en amont)"
      PRINT " (Choisissez 0 si vous utilisez un circuit 'quivalent en L)"
      PRINT " votre choix (df"; r1; "ohms) =";
      INPUT in$
      IF in$ <> "" THEN r1 = VAL(in$)
      PRINT
      PRINT "Valeur de la r'actance de fuite statorique (..."; frequ; "Hz) Xs"
      PRINT " (Choisissez 0 si vous reportez toute la r'actance s'rie en aval";
      PRINT " des 'l'ments parallSles)"
      PRINT " votre choix (df"; x1; "ohms) =";
      INPUT in$
      IF in$ <> "" THEN x1 = VAL(in$)
      IF r1 = 0! THEN
      PRINT "r'sistance statorique s'rie Rs"
      PRINT " (en aval des 'l'ments parallSles)"
      PRINT " votre choix (df"; r1compl; ") =";
      INPUT in$
      IF in$ <> "" THEN r1compl = VAL(in$)
      ELSE
      r1compl = 0!
      END IF
      PRINT
      IF x1 = 0! THEN
      PRINT "r'actance s'rie 'quivalente (..."; frequ; "Hz) ramen'e au stator Xe'"
      ELSE
      PRINT "r'actance s'rie rotorique (..."; frequ; "Hz) ramen'e au stator Xr'"
      END IF
      PRINT " (en aval des 'l'ments parallSles)"
      PRINT " votre choix (df"; x2p; "ohms)=";
      INPUT in$
      IF in$ <> "" THEN x2p = VAL(in$)
      PRINT "r'sistance s'rie rotorique ramen'e au stator Rr'"
      PRINT " (en aval des 'l'ments parallSles)"
      PRINT " votre choix (df"; r2p; "ohms)=";
      INPUT in$
      IF in$ <> "" THEN r2p = VAL(in$)
      PRINT
      PRINT "Seuil de conduction des balais rotoriques (en tension de ligne)"
      PRINT "Il faut choisir 0 si le court-circuiteur se trouve dans le rotor m^me"
      PRINT "Dans le cas contraire, ce paramStre tient compte de fa#on"
      PRINT "approch'e de la non-lin'arit' due aux contacts bague-balais"
      PRINT "Votre choix (df"; u2seuil; "V) =";
      INPUT in$
      IF in$ <> "" THEN u2seuil = VAL(in$)
      GOSUB pourconti
      entmag: CLS
      PRINT "Valeur des paramStres (page 3)"
      PRINT
      PRINT "El'ments parallSle"
      PRINT
      PRINT "Entrez 0 pour une r'actance de magn'tisation lin'aire"
      PRINT " 1 pour une r'actance de magn'tisation non lin'aire"
      PRINT " votre choix (df"; flags%; ")=";
      INPUT in$
      IF in$ <> "" THEN flags% = VAL(in$)
      IF flags% <> 0 AND flags% <> 1 THEN GOTO entmag
      PRINT
      IF flags% = 0 THEN
      PRINT "R'actance de magn'tisation Xmu ";
      ELSE
      PRINT "R'actance de magn'tisation non satur'e Xmuu ";
      END IF
      PRINT "(df"; xmuu; "ohms) =";
      INPUT in$
      IF in$ <> "" THEN xmuu = VAL(in$)
      IF flags% = 1 THEN
      PRINT "La r'actance de magn'tisation non satur'e est divis'e en cours"
      PRINT "de calcul par"
      PRINT " ( 1 + (cnl * E) ^ etnl )";
      PRINT "o-- E est la force 'lectromotrice (de ligne)";
      PRINT " au niveau de l'inductance saturable"
      PRINT
      PRINT "co'fficient de non lin'arit' cnl (df"; cnl; "V^-1) = ";
      INPUT in$
      IF in$ <> "" THEN cnl = VAL(in$)
      PRINT "exposant etnl du terme non lin'aire (df"; etnl; ") =";
      INPUT in$
      IF in$ <> "" THEN etnl = VAL(in$)
      ELSE
      cnl = 0!
      etnl = 6!
      END IF
      PRINT
      PRINT "R'sistance de pertes magn'tiques rp (df"; rp; "ohms) =";
      INPUT in$
      IF in$ <> "" THEN rp = VAL(in$)
      PRINT

      GOSUB pourconti
      etat: CLS
      PRINT "Tension de ligne statorique Us (df"; u1; "volts) =";
      INPUT in$
      IF in$ <> "" THEN u1 = VAL(in$)
      u1m = u1 / root3
      ' provisoire
      nrothau = 1.3 * nsyn
      nrotbas = -.3 * nsyn
      zut1 = SQR((r1 + r1compl) * (r1 + r1compl) + (x1 + x2p) * (x1 + x2p))
      zut2 = (r1 + r1compl + zut1) * (r1 + r1compl + zut1) + (x1 + x2p) * (x1 + x2p)
      zut = u1 * u1 / zut2 * zut1
      cmecmax = zut * 60! / nsyn / 2 / pi - cfrot
      cmecmin = -zut * 60! / nsyn / 2 / pi - cfrot
      cmechau = cmecmax
      cmecbas = cmecmin
      zut1 = x1 + x2p
      qmax = u1 * u1 / (x1 + x2p)
      q1hau = qmax
      q1bas = 0!
      pmax = qmax / 2! + u1 * u1 / rp
      pmin = -qmax / 2! + u1 * u1 / rp
      p1hau = pmax
      p1bas = pmin
      PRINT
      menu: CLS
      PRINT "tension de ligne statorique Us ="; u1; "V (de ligne)"
      PRINT
      PRINT "menu principal"
      PRINT
      PRINT "entrez <R> pour revenir aux valeurs par d'faut"
      PRINT " <D> pour modifier les donn'es"
      PRINT " <E> pour red'finir la vitesse ou la tension statorique"
      PRINT " <C> pour analyser un r'gime avec rotor court-circuit'"
      PRINT " <U> pour analyser un r'gime ... tension rotorique impos'e"
      PRINT " <V> pour analyser un r'gime ... rotor ouvert"
      PRINT " <I> pour analyser un r'gime ... courant rotorique impos'"
      PRINT " <P> pour entrer ou modifier les points exp'rimentaux"
      PRINT " <T> pour tracer le diagramme couple-vitesse"
      PRINT " <Q> pour tracer le diagramme PQ (dit du cercle)"
      PRINT " <F> pour quitter le programme"
      INPUT menu$
      IF menu$ = "r" OR menu$ = "R" THEN GOTO debut
      IF menu$ = "d" OR menu$ = "D" THEN GOTO entree
      IF menu$ = "e" OR menu$ = "E" THEN GOTO etat
      IF menu$ = "c" OR menu$ = "C" THEN GOTO court
      IF menu$ = "u" OR menu$ = "U" THEN GOTO tension
      IF menu$ = "v" OR menu$ = "V" THEN GOTO vide
      IF menu$ = "i" OR menu$ = "I" THEN GOTO courant
      IF menu$ = "p" OR menu$ = "P" THEN GOTO entpoints
      IF menu$ = "t" OR menu$ = "T" THEN GOTO graphe1
      IF menu$ = "q" OR menu$ = "Q" THEN GOTO graphe2
      IF menu$ = "f" OR menu$ = "F" THEN GOTO fin
      GOTO menu


      court: CLS
      PRINT "Analyse ... rotor court-circuit'"
      GOSUB entvitesse
      u2 = 0!
      phich = 0!
      GOTO suitetension

      tension: CLS
      GOSUB entvitesse
      PRINT
      PRINT "Analyse pour une tension rotorique Ur impos'e"
      PRINT
      enttension:
      PRINT "amplitude de la tension rotorique (df"; u2; "Veff de ligne)=";
      INPUT in$
      IF in$ <> "" THEN u2 = VAL(in$)
      IF u2 < 0! THEN GOTO enttension
      PRINT
      IF u2 = 0! THEN
      phich = 0!
      ELSE
      GOSUB entphich
      END IF
      suitetension: CLS
      IF u2 <> 0! THEN
      PRINT "Analyse pour une tension rotorique Ur impos'e de";
      PRINT u2; "V"
      PRINT "angle phi de la charge 'lectrique ="; phich / pi! * 180!; "ø"
      ELSE
      PRINT "Analyse ... rotor court-circuit'"
      END IF
      zutr = u2 * COS(phich) + u2seuil
      zuti = u2 * SIN(phich)
      u2c = SQR(zutr * zutr + zuti * zuti)
      IF u2c = 0! THEN
      phichc = 0!
      ELSE
      phichc = argument(zutr, zuti)
      END IF
      u2cpmn = u2c / root3 * k
      GOSUB calcul1
      GOTO impr

      vide: CLS
      GOSUB entvitesse
      PRINT "Analyse pour un fonctionnement ... rotor ouvert"
      i2n = 0!
      phich = 0!
      GOTO suitecourant

      courant: CLS
      GOSUB entvitesse
      PRINT "Analyse pour un courant rotorique Ir impos'"
      PRINT
      entcharge:
      PRINT "amplitude du courant de charge (df"; i2n; "Aeff) =";
      INPUT in$
      IF in$ <> "" THEN i2n = VAL(in$)
      IF i2n < 0! THEN GOTO entcharge
      PRINT
      IF i2n = 0! THEN
      phich = 0!
      ELSE
      GOSUB entphich
      END IF
      CLS
      PRINT "Analyse pour un courant rotorique Ir impos'"
      PRINT
      suitecourant:
      PRINT "courant rotorique ="; i2n; "A"
      IF i2n <> 0! THEN PRINT "angle phi de l''l'ment connect' au rotor =";
      PRINT phich / pi! * 180!; "ø"
      i2pn = i2n / k
      xmu = xmuu
      nbsol% = 1
      choixsol% = 1
      nbiter% = 0
      itercourant:
      nbiter% = nbiter% + 1
      xmuold = xmu
      GOSUB precalcul
      du2cpmn = zen * i2pn
      u2c0pmminn = du2cpmn * ABS(SIN(zea - phich))
      u2cpmmoyn = -du2cpmn * COS(zea - phich)
      IF u2c0pmn < u2c0pmminn THEN
      nbsol% = -1
      PRINT "Aucune solution exacte ... l'it'ration No"; nbiter%
      PRINT "Le programme continue les it'rations avec une solution approch'e"
      GOSUB pourconti
      u2cpmn = u2cpmmoyn
      ELSE
      zut = SQR(u2c0pmn * u2c0pmn - u2c0pmminn * u2c0pmminn)
      u2cpmn = u2cpmmoyn - zut
      IF u2cpmn >= 0! THEN
      nbsol% = 2
      entchoixsoli:
      PRINT "il y a deux solutions ... l'it'ration No"; nbiter%
      PRINT "Entrez 1 pour la solution ... plus petite tension U2"
      PRINT " 2 pour la solution ... plus grande tension U2"
      PRINT " votre choix (df"; choixsol%; ")=";
      INPUT in$
      IF in$ <> "" THEN choixsol% = VAL(in$)
      IF choixsol% < 1 OR choixsol% > 2 THEN GOTO entchoixsoli
      ELSE
      choixsol% = 2
      END IF
      IF choixsol% = 2 THEN u2cpmn = u2cpmmoyn + zut
      IF u2cpmn >= 0! THEN
      nbsol% = 1
      ELSE
      nbsol% = 0
      PRINT "Il y a deux solutions inacceptables ... l'it'ration No"; nbiter%
      PRINT "Le programme continue les it'rations avec la moins mauvaise"
      GOSUB pourconti
      END IF
      END IF
      zuti = u2cpmn * SIN(zea - phich)
      zutr = du2cpmn + u2cpmn * COS(zea - phich)
      zut = argument!(zutr, zuti)
      i2a = u2c0a + zut - zea
      i2pr = i2pn * COS(i2a)
      i2pi = i2pn * SIN(i2a)
      u2ca = i2a + phich
      emr = e0mr - r1p * i2pr + x1p * i2pi
      emi = e0mi - r1p * i2pi - x1p * i2pr
      emn = SQR(emr * emr + emi * emi)
      en = emn * root3
      xmu = xmuu / (1! + (cnl * en) ^ etnl)
      IF ABS(xmuold - xmu) > .000001 * xmu THEN GOTO itercourant
      PRINT "terminaison aprSs "; nbiter%; "it'rations"
      u2cpmr = u2cpmn * COS(u2ca)
      u2cpmi = u2cpmn * SIN(u2ca)
      IF nbsol% = -1 THEN
      PRINT "convergence vers un 'tat sans solution"
      GOSUB pourconti
      GOTO menu
      END IF
      u2c = u2cpmn / k * root3
      u2 = u2c - u2seuil ' provisoire
      i2n = i2pn * k
      emr = e0mr - r1p * i2pr + x1p * i2pi
      emi = e0mi - r1p * i2pi - x1p * i2pr
      en = root3 * SQR(emr * emr + emi * emi)
      xmu = xmuu / (1 + (cnl * en) ^ etnl)
      ymur = 1! / rp
      ymui = -1! / xmu
      i1r = i2pr + emr * ymur - emi * ymui
      i1i = i2pi + emr * ymui + emi * ymur
      i1n = SQR(i1r * i1r + i1i * i1i)
      u1mr = emr + r1 * i1r - x1 * i1i
      u1mi = emi + r1 * i1i + x1 * i1r
      p1 = root3 * u1 * i1r
      q1 = -root3 * u1 * i1i
      ptransm = 3! * (emr * i2pr + emi * i2pi) - 3! * r1compl * i2pn * i2pn
      ctransm = ptransm / (2! * pi! * frequ) * npp
      GOTO impr

      impr:
      IF nbsol% = -1 THEN
      PRINT "convergence vers un 'tat sans solution"
      GOSUB pourconti
      GOTO menu
      END IF
      IF nbsol% = 0 THEN
      PRINT "Convergence vers une solution inacceptable."
      PRINT "Examinez soigneusement les r'sultats ci-dessous"
      END IF
      IF nbsol% = 2 THEN
      PRINT "convergence vers la plus ";
      IF choixsol% = 1 THEN
      PRINT "petite"
      ELSE
      PRINT "grande"
      END IF
      PRINT " de deux solutions possibles"
      END IF
      GOSUB pourconti
      CLS
      PRINT
      PRINT "tension rotorique ="; u2; "V (de ligne)"
      PRINT "courant rotorique ="; i2n; "A"
      PRINT
      PRINT "tension rotorique + seuil multipli's par k ="; u2cpm * root3;
      PRINT "V (de ligne)"
      PRINT "courant rotorique ramen' au stator ="; i2pn; "A"
      PRINT
      PRINT "force 'lectromotrice rotorique ="; en * ABS(gamma); "V (de ligne)"
      PRINT "force 'lectromotrice sur 'l'ments parallSles ="; en; "V (de ligne)"
      PRINT "r'actance parallSle ="; xmu; "ohm"
      PRINT
      COLOR 12
      PRINT "courant statorique ="; i1n; "A"
      COLOR 15
      PRINT "tension statorique (... titre de contr"le)"
      PRINT " = "; u1mr * root3; "+j"; u1mi * root3; "V (de ligne)"
      PRINT "facteur de puissance ="; i1r / i1n
      PRINT
      PRINT "couple 'lectromagn'tique ="; ctransm; "Nm"
      COLOR 12
      PRINT "couple m'canique ="; cmec; "Nm"
      COLOR 15
      GOSUB pourconti
      CLS
      COLOR 12
      PRINT "puissance entrant au stator ="; p1; "W"
      COLOR 15
      PRINT "puissance r'active ="; -root3 * u1 * i1i; "VAr"
      PRINT "pertes dans la r'sistance s'rie statorique (amont) = ";
      PRINT 3! * r1 * i1n * i1n; "W"
      PRINT "pertes dans la r'sistance rp ="; en * en / rp; "W"
      PRINT "pertes dans la r'sistance s'rie statorique (aval) = ";
      PRINT 3! * r1compl * i2pn * i2pn; "W"
      PRINT
      PRINT "puissance totale transmise au rotor ="; ptransm; "W"
      PRINT
      PRINT "puissance 'lectrique re#ue au rotor =";
      PRINT ptransm * gamma; "W"
      PRINT "puissance dissip'e dans la r'sistance rotorique (partie lin'aire)";
      PRINT 3! * r2p * i2pn * i2pn; "W"
      PRINT "puissance dissip'e dans le seuil de tension rotorique";
      PRINT root3 * u2seuil * i2n
      PRINT "puissance totale dissip'e par effet Joule au rotor";
      PRINT 3! * r2p * i2pn * i2pn + root3 * u2seuil * i2n
      PRINT "puissance 'lectrique fournie par le rotor";
      PRINT root3 * u2 * i2n * COS(phich); "W"
      PRINT
      pconv = ptransm * (1! - gamma)
      PRINT "puissance convertie ="; pconv; "W"
      pfrot = cfrot * nrot / 30! * pi!
      PRINT "pertes m'caniques ="; pfrot; "W"
      pmec = pconv - pfrot
      COLOR 12
      PRINT "puissance m'canique utile ="; pmec; "W"
      COLOR 15
      PRINT " soit"; pmec / 75 / 9.806; "CV"
      PRINT " ou encore"; pmec / 745.7; "HP"
      PRINT
      PRINT "rendement = "; pmec / p1 * 100!; "%"
      GOSUB pourconti
      GOTO menu

      entvitesse:
      PRINT "Vitesse de rotation (df"; nrot; "t/m) =";
      INPUT in$
      IF in$ <> "" THEN nrot = VAL(in$)
      gamma = 1! - nrot / (frequ * 60! / npp)
      PRINT
      PRINT "glissement = "; gamma
      PRINT "fr'quence rotorique ="; frequ * gamma; "Hz"
      RETURN

      entpoints: CLS
      IF nbexp% > 0 THEN nbexpold% = nbexp%
      PRINT "nombre de points exp'rimentaux (df "; nbexp%; ") =";
      INPUT in$
      IF in$ <> "" THEN nbexp% = VAL(in$)
      IF nbexp% > 0 THEN
      IF nbexpold% <> nbexp% THEN
      REDIM pexp1(1 TO nbexp%), pexp2(1 TO nbexp%)
      REDIM pexp3(1 TO nbexp%), pexp4(1 TO nbexp%)
      END IF
      FOR noexp% = 1 TO nbexp%
      PRINT
      PRINT "Point No"; noexp%
      PRINT "Vitesse de rotation (df"; pexp1(noexp%); "t/m) =";
      INPUT in$
      IF in$ <> "" THEN pexp1(noexp%) = VAL(in$)
      PRINT "Couple utile Cr (df"; pexp2(noexp%); "Nm) =";
      INPUT in$
      IF in$ <> "" THEN pexp2(noexp%) = VAL(in$)
      PRINT "Puissance active (df"; pexp3(noexp%); "W) =";
      INPUT in$
      IF in$ <> "" THEN pexp3(noexp%) = VAL(in$)
      PRINT "Puissance r'active (df"; pexp4(noexp%); "VAr) =";
      INPUT in$
      IF in$ <> "" THEN pexp4(noexp%) = VAL(in$)
      NEXT noexp%
      pexp1bas = pexp1(1)
      pexp1hau = pexp1(1)
      pexp2bas = pexp2(1)
      pexp2hau = pexp2(1)
      pexp3bas = pexp3(1)
      pexp3hau = pexp3(1)
      pexp4bas = pexp4(1)
      pexp4hau = pexp4(1)
      FOR noexp% = 1 TO nbexp%
      IF pexp1(noexp%) < pexp1bas THEN pexp1bas = pexp1(noexp%)
      IF pexp1(noexp%) > pexp1hau THEN pexp1hau = pexp1(noexp%)
      IF pexp2(noexp%) < pexp2bas THEN pexp2bas = pexp2(noexp%)
      IF pexp2(noexp%) > pexp2hau THEN pexp2hau = pexp2(noexp%)
      IF pexp3(noexp%) < pexp3bas THEN pexp3bas = pexp3(noexp%)
      IF pexp3(noexp%) > pexp3hau THEN pexp3hau = pexp3(noexp%)
      IF pexp4(noexp%) < pexp4hau THEN pexp4bas = pexp4(noexp%)
      IF pexp4(noexp%) > pexp4hau THEN pexp4hau = pexp4(noexp%)
      NEXT noexp%
      END IF
      GOSUB pourconti
      GOTO menu

      graphe1: CLS
      menu$ = "t"
      u2 = 0!
      phich = 0!
      u2c = u2seuil
      phichc = 0!
      u2cpmn = u2c / root3 * k
      IF nbexp% > 0 THEN
      PRINT "vitesse exp'rimentale la plus 'lev'e =";
      PRINT pexp1hau; "t/m"
      END IF
      PRINT "extr'mit' sup'rieure de l''chelle des vitesses (df"; nrothau; "t/m) =";
      INPUT in$
      IF in$ <> "" THEN nrothau = VAL(in$)
      IF nbexp% > 0 THEN PRINT "vitesse exp'rimentale la plus faible =";
      PRINT pexp1bas; "Nm"
      PRINT "extr'mit' inf'rieure de l''chelle des vitesses (df"; nrotbas; "t/m) =";
      INPUT in$
      IF in$ <> "" THEN nrotbas = VAL(in$)
      nrotgrad = (nrothau - nrotbas) / 20!
      PRINT "'cart entre deux graduations de vitesse (df"; nrotgrad; "t/m) =";
      INPUT in$
      IF in$ <> "" THEN nrotgrad = VAL(in$)
      nrotinc = (nrothau - nrotbas) / 50!
      IF nbexp% > 0 THEN PRINT "couple exp'rimental le plus 'lev' ="; pexp2hau; "Nm"
      PRINT "Extr'mit' sup'rieure de l''chelle des couples (df"; cmechau; "Nm) =";
      INPUT in$
      IF in$ <> "" THEN cmechau = VAL(in$)
      IF nbexp% > 0 THEN PRINT "couple exp'rimental le plus bas ="; pexp2bas; "Nm"
      PRINT "extr'mit' inf'rieure de l''chelle de couple (df"; cmecbas; "Nm) =";
      INPUT in$
      IF in$ <> "" THEN cmecbas = VAL(in$)
      cmecgrad = (cmechau - cmecbas) / 20! * rapecran
      PRINT "'cart entre deux graduations de couple (df"; cmecgrad; "Nm) =";
      INPUT in$
      IF in$ <> "" THEN cmecgrad = VAL(in$)
      cmecinc = (cmechau - cmecbas) * rapecran / 50!
      CLS
      WINDOW (nrotbas, cmecbas)-(nrothau, cmechau)
      PRINT "diagramme couple-vitesse 1 graduation horizontale ="; nrotgrad;
      PRINT "t/m";
      PRINT " 1 graduation verticale ="; cmecgrad;
      PRINT "Nm";
      LINE (0, cmecbas)-(0, cmechau)
      LINE (nrotbas, 0)-(nrothau, 0)
      FOR zut = 0! TO nrothau STEP nrotgrad
      LINE (zut, -cmecinc)-(zut, cmecinc)
      NEXT zut
      FOR zut = 0! TO nrotbas STEP -nrotgrad
      LINE (zut, -cmecinc)-(zut, cmecinc)
      NEXT zut
      FOR zut = 0! TO cmechau STEP cmecgrad
      LINE (-nrotinc, zut)-(nrotinc, zut)
      NEXT zut
      FOR zut = 0! TO cmecbas STEP -cmecgrad
      LINE (-nrotinc, zut)-(nrotinc, zut)
      NEXT zut
      IF nbexp% > 0 THEN
      FOR noexp% = 1 TO nbexp%
      nrotexp = pexp1(noexp%)
      cmecexp = pexp2(noexp%)
      LINE (nrotexp - nrotinc, cmecexp - cmecinc)-(nrotexp + nrotinc, cmecexp + cmecinc)
      LINE (nrotexp + nrotinc, cmecexp - cmecinc)-(nrotexp - nrotinc, cmecexp + cmecinc)
      gamma = 1! - pexp1(noexp%) / (frequ * 60! / npp)
      NEXT noexp%
      END IF
      nrot = nrotbas
      FOR i% = 1 TO 199
      nrot = nrot + nrotinc
      gamma = 1! - nrot / nsyn
      GOSUB calcul1
      IF i% <> 1 THEN LINE (nrotold, cmecold)-(nrot, cmec)
      nrotold = nrot
      cmecold = cmec
      NEXT i%
      INPUT dummy$
      GOTO menu





      graphe2: CLS
      menu$ = "q"
      u2 = 0!
      phich = 0!
      u2c = u2seuil
      phichc = 0!
      u2cpmn = u2c / root3 * k
      PRINT "rapport entre largeur et hauteur de l''cran (df"; rapecran; ") =";
      INPUT in$
      IF in$ <> "" THEN rapecran = VAL(in$)
      IF nbexp% > 0! THEN
      PRINT "puissance active exp'rimentale la plus 'lev'e"; pexp3hau; "W"
      END IF
      PRINT "extr'mit' de l''chelle des puissances (df"; p1hau; "VA) =";
      INPUT in$
      IF in$ <> "" THEN p1hau = VAL(in$)
      IF nbexp% > 0! THEN
      PRINT "puissance active exp'rimentale la plus basse"; pexp3bas; "W"
      END IF
      PRINT "extr'mit' inf'rieure de l''chelle des puissances actives (df";
      PRINT p1bas; "VA) =";
      INPUT in$
      IF in$ <> "" THEN p1bas = VAL(in$)
      q1hau = (p1hau - p1bas) * (rapecran + 1!) / 2!
      IF nbexp% > 0! THEN
      PRINT "puissance r'active exp'rimentale la plus 'lev'e"; pexp4hau; "W"
      END IF
      PRINT "extr'mit' sup'rieure de l''chelle des puissances r'actives(df";
      PRINT q1hau; "VAr) =";
      INPUT in$
      IF in$ <> "" THEN q1hau = VAL(in$)
      q1bas = q1hau - rapecran * (p1hau - p1bas)
      PRINT "l'extr'mit' inf'rieure de l''chelle des puissances r'actives est";
      PRINT "donc de"; q1bas; "VAr"
      pgrad = (p1hau - p1bas) / 20!
      PRINT "'cart entre les graduations des axes (df"; pgrad; "VA) =";
      INPUT in$
      IF in$ <> "" THEN pgrad = VAL(in$)
      pinc = pgrad / 3!
      CLS
      WINDOW (q1bas, p1bas)-(q1hau, p1hau)
      PRINT "diagramme P-Q 1 graduation horizontale ="; pgrad; "VAr"
      PRINT " 1 graduation verticale ="; pgrad; "W";
      LINE (0, p1bas)-(0, p1hau)
      LINE (q1bas, 0)-(q1hau, 0)
      FOR zut = 0! TO p1hau STEP pgrad
      LINE (-pinc, zut)-(pinc, zut)
      NEXT zut
      FOR zut = 0! TO p1bas STEP -pgrad
      LINE (-pinc, zut)-(pinc, zut)
      NEXT zut
      FOR zut = 0 TO q1hau STEP pgrad
      LINE (zut, -pinc)-(zut, pinc)
      NEXT zut
      FOR zut = 0 TO q1bas STEP -pgrad
      LINE (zut, -pinc)-(zut, pinc)
      NEXT zut
      IF nbexp% > 0 THEN
      FOR noexp% = 1 TO nbexp%
      p1exp = pexp3(noexp%)
      q1exp = pexp4(noexp%)
      LINE (q1exp - pinc, p1exp - pinc)-(q1exp + pinc, p1exp + pinc)
      LINE (q1exp + pinc, p1exp - pinc)-(q1exp - pinc, p1exp + pinc)
      gamma = 1! - pexp1(noexp%) / (frequ * 60! / npp)
      GOSUB calcul1
      COLOR 12
      LINE (q1, p1)-(q1exp, p1exp)
      COLOR 15
      NEXT noexp%
      END IF
      anglaux = -pi / 2!
      FOR i% = 1 TO 199
      anglaux = anglaux + pi / 200!
      gamma = r2p / (x1 + x2p) * TAN(anglaux)
      GOSUB calcul1
      IF i% <> 1 THEN LINE (q1old, p1old)-(q1, p1)
      q1old = q1
      p1old = p1
      NEXT i%
      INPUT dummy$
      GOTO menu






      calcul1:
      xmu = xmuu
      nbiter% = 0
      itertension:
      nbiter% = nbiter% + 1
      xmuold = xmu
      GOSUB precalcul
      u2c0pmminn = u2cpmn * ABS(SIN(zea - phichc))
      du2cpmmoyn = -u2cpmn * COS(zea - phichc)
      nbsol% = -1
      IF u2c0pmn >= u2c0pmminn THEN
      nbsol% = 0
      zut = SQR(u2c0pmn * u2c0pmn - u2c0pmminn * u2c0pmminn)
      du2cpmn = du2cpmmoyn + zut
      IF du2cpmn >= 0! THEN nbsol% = 1
      du2cpmn = du2cpmmoyn - zut
      IF du2cpmn >= 0! THEN nbsol% = 2
      END IF
      IF nbsol% <= 0 THEN
      BEEP
      REM SOUND 440, 10
      IF menu$ <> "q" AND menu$ <> "t" THEN
      PRINT "Aucune solution exacte ... l'it'ration No"; nbiter%
      PRINT "Le programme continue les it'rations ... i2 nul"
      GOSUB pourconti
      END IF
      i2pn = 0!
      i2a = 0!
      ELSE
      IF nbsol% = 1 OR choixsol% = 1 THEN du2cpmn = du2cpmmoyn + zut
      zutr = u2cpmn + du2cpmn * COS(zea - phichc)
      zuti = du2cpmn * SIN(zea - phichc)
      zut = argument!(zutr, zuti)
      u2ca = u2c0a - zut
      u2cpmr = u2cpmn * COS(u2ca)
      u2cpmi = u2cpmn * SIN(u2ca)
      du2cpmr = u2c0pmr - u2cpmr
      du2cpmi = u2c0pmi - u2cpmi
      du2cpmn = SQR(du2cpmr * du2cpmr + du2cpmi * du2cpmi)
      i2pn = du2cpmn / zen
      i2a = u2ca - phichc
      END IF
      i2pr = i2pn * COS(i2a)
      i2pi = i2pn * SIN(i2a)
      emr = e0mr - r1p * i2pr + x1p * i2pi
      emi = e0mi - r1p * i2pi - x1p * i2pr
      emn = SQR(emr * emr + emi * emi)
      en = emn * root3
      xmu = xmuu / (1! + (cnl * en) ^ etnl)
      IF ABS(xmuold - xmu) > .00001 * xmu THEN GOTO itertension
      IF menu$ <> "q" AND menu$ <> "t" THEN PRINT "terminaison aprSs "; nbiter%; "it'rations"
      i2n = i2pn * k
      i1r = i2pr + emr * ymur - emi * ymui
      i1i = i2pi + emr * ymui + emi * ymur
      i1n = SQR(i1r * i1r + i1i * i1i)
      p1 = root3 * u1 * i1r
      q1 = -root3 * u1 * i1i
      u1mr = emr + r1 * i1r - x1 * i1i
      u1mi = emi + r1 * i1i + x1 * i1r
      ptransm = 3! * (emr * i2pr + emi * i2pi) - 3! * r1compl * i2pn * i2pn
      ctransm = ptransm / (2! * pi! * frequ) * npp
      cmec = ctransm - cfrot
      RETURN

      entphich:
      PRINT "entrez -1 pour une charge capacitive"
      PRINT " 0 pour une charge purement r'sistive"
      PRINT " 1 pour une charge inductive"
      PRINT " votre choix (df"; flagc%; ") =";
      INPUT in$
      IF in$ <> "" THEN flagc% = VAL(in$)
      IF flagc% < -1 OR flagc% > 1 THEN GOTO entphich
      IF flagc% = 0 THEN
      phich = 0!
      RETURN
      END IF
      entfact:
      PRINT "facteur de puissance de la charge (df"; fp2; ") =";
      INPUT in$
      IF in$ <> "" THEN fp2 = VAL(in$)
      IF fp2 < -1! OR fp2 > 1! THEN GOTO entfact
      phich = ATN((1! - fp2 * fp2) / fp2)
      IF phich < 0! THEN phich = phich + pi!
      IF flagc% = -1 THEN phich = -phich
      RETURN

      entchoixsolt:
      PRINT "s'il y a deux solutions acceptables"
      PRINT "Entrez 1 pour la solution ... plus petit courant I2"
      PRINT " 2 pour la solution ... plus grand courant I2"
      PRINT "votre choix (df"; choixsol%; ")=";
      INPUT in$
      IF in$ <> "" THEN choixsol% = VAL(in$)
      IF choixsol% < 1 OR choixsol% > 2 THEN GOTO entchoixsolt
      RETURN


      precalcul:
      ymur = 1 / rp
      ymui = -1 / xmu
      denom = ymur * ymyr + ymui * ymui
      zmur = ymur / denom
      zmui = -ymui / denom
      zutr = r1 + zmur
      zuti = x1 + zmui
      denom = zutr * zutr + zuti * zuti
      y0r = zutr / denom
      y0i = -zuti / denom
      rappr = zmur * y0r - zmui * y0i
      rappi = zmur * y0i + zmui * y0r
      e0mr = u1m * rappr
      e0mi = u1m * rappi
      u2c0pmr = e0mr * gamma
      u2c0pmi = e0mi * gamma
      u2c0pmn = SQR(u2c0pmr * u2c0pmr + u2c0pmi * u2c0pmi)
      u2c0a = argument!(u2c0pmr, u2c0pmi)
      denom = r1 * r1 + x1 * x1
      IF denom = 0! THEN
      r1p = 0!
      x1p = 0!
      ELSE
      zutr = r1 / denom + 1 / rp
      zuti = -x1 / denom - 1 / xmu
      denom = zutr * zutr + zuti * zuti
      r1p = zutr / denom
      x1p = -zuti / denom
      END IF
      rep = (r1p + r1compl) * gamma + r2p
      xep = (x1p + x2p) * gamma
      denom = rep * rep + xep * xep
      zen = SQR(denom)
      zea = argument!(rep, xep)
      yer = rep / denom
      yei = -xep / denom
      RETURN

      pourconti: PRINT
      PRINT "pressez <enter> pour continuer";
      INPUT dummy$
      RETURN

      fin: END

      FUNCTION argument! (X!, y!)
      IF X! * X! + y! * y! = 0! THEN
      PRINT "argument ind'termin'"
      BEEP
      REM SOUND 100, 10
      argument! = 0!
      ELSEIF ABS(y!) <= ABS(X!) THEN
      zut = ATN(y! / X!)
      IF X! > 0! THEN
      argument! = zut
      ELSE
      argument! = zut + pi!
      END IF
      ELSE
      zut = ATN(X! / y!)
      IF y! > 0! THEN
      argument! = pi! / 2 - zut
      ELSE
      argument! = 3 * pi! / 2 - zut
      END IF
      END IF
      END FUNCTION

      SUB basin (a$, g!, b$)
      PRINT " "; a$; " (df "; g!; " "; b$; ")= ";
      INPUT in$
      IF in$ <> "" THEN g! = VAL(in$)
      END SUB
      0
    2. BusyBeingDelicious Messages postés 4 Statut Membre
       
      alors, le code est très long, et il n'y a pas de "traducteur" Basic/C++ il faut le faire à la main. ça aurait été plus court, à la limite je te l'aurais traduit, mais bon là faut pas exagérer.
      Si tu connais le basic, le c++ ne devrait pas etre très dur, aprends juste le C au pire, c'est suffisant.
      Bon courage pour la traduction
      0
    3. Samiracle Messages postés 31 Statut Membre 1
       
      je connais les base en c++ mais je connais rien en basic cest ça mon probleme , et il faut que je le rende le 15 may (4 jours ) STP :'(
      0
  3. qbasic45 Messages postés 60 Statut Membre 3
     
    bonjour le programme 3 petite eurreur

    REM Programme en cours d''laboration
    REM fichier asynchro.bas
    REM Ce programme est 'crit en qbasic. L'interpr'teur qbasic.exe (et son aide
    REM qbasic.hlp) n'cessaire ... son ex'cution fait partie du DOS ... partir de la
    REM version 5. Il se trouve aussi
    REM sur le CD d'installation de windows 95 en \OTHER\OLDMSDOS\
    REM et sur le CD d'installation de windows 98 en \TOOLS\OLDMSDOS\
    REM Il fonctionne encore en windows 2000/XP mais sans possibilit' de copie
    REM d''cran. Pour contourner ce problSme, vous pouvez utiliser l'environnement
    REM de programmation t'l'chargeable gratuitement ... l'adresse
    REM http://fbide.freebasic.net/
    REM
    DEFSNG A-Z
    DECLARE SUB basin (a$, g!, b$)
    DECLARE FUNCTION argument! (X!, y!)
    DIM SHARED pi!
    REM n'cessite un 'cran ega ou vga
    SCREEN 9
    root3 = SQR(3!)
    pi! = 4 * ATN(1!)
    debut: 'choix des valeurs par d'faut
    rapecran = 1.6 'rapport largeur/hauteur de l''cran
    'ce rapport doit ^tre ajust' pour obtenir des graphes PQ corrects
    npp = 2! 'nombre de paires de p"les
    k = 1! 'rapport de transformation
    frequref = 50!
    frequ = frequref 'fr'quence statorique
    nref = frequref / npp * 60!
    pref = 70! 'pertes m'caniques ... la vitesse de r'f'rence
    r1 = 4.699 'r'sistance statorique mise en amont des 'l'ments //
    r1compl = 4.699 'r'sistance statorique mise en aval des 'l'ments //
    x1 = 0! 'r'actance statorique
    x2p = 10! 'r'actance rotorique ramen'e au stator
    r2p = 4! 'r'sistance rotorique ramen'e au stator
    u2seuil = 0! 'seuil de conduction rotorique (contact bague-balais)
    rp = 2064! 'r'sistance parallSle statorique
    flags% = 1
    xmuu = 254! 'r'actance parallSle non satur'e
    cnl = 1! / 300! 'inverse de la tension "de saturation"
    etnl = 6! 'exposant de la fonction de saturation
    u1 = 380!
    nrot = 0!
    i2n = 0!
    u2 = 0!
    fp2 = 1!
    flagc% = 0
    nbexp% = 0
    choixsol% = 1
    entree: CLS
    PRINT "E. Matagne 17-05-2010"
    PRINT
    'PRINT "Ce programme analyse de fa#on exacte le comportement d'un"
    PRINT "Ce programme analyse de façon exacte le comportement d'un"
    PRINT "moteur asynchrone triphas' mod'lis'"
    PRINT " soit par un circuit 'quivalent en T"
    PRINT " soit par un circuit 'quivalent en L (circuit 'quivalent simplifi')"
    PRINT
    PRINT "Pour obtenir un circuit 'quivalent en L, il suffit d'attribuer"
    PRINT " ... la r'sistance statorique Rs (mise en amont)"
    PRINT " et ... la r'actance de fuite statorique Xs la valeur z'ro"
    GOSUB pourconti
    CLS
    PRINT "Valeur des paramStres (page 1)"
    PRINT
    'basin "Nombre de paires de p"les", npp, ""
    basin "Nombre de paires de ples", npp, ""
    basin "fr'quence d'alimentation statorique", frequ, "Hz"
    nsyn = frequ * 60! / npp
    PRINT " vitesse de synchronisme = "; nsyn; " t/m"
    PRINT
    PRINT "Nous supposons les pertes m'caniques dues uniquement ... un couple de"
    PRINT " frottement sec."
    PRINT
    PRINT "Vitesse de r'f'rence pour exprimer les pertes m'caniques (df";
    PRINT nref; "t/m) =";
    INPUT in$
    IF in$ <> "" THEN nref = VAL(in$)
    PRINT "pertes m'caniques ..."; nref; "t/m (df"; pref; "W)=";
    INPUT in$
    IF in$ <> "" THEN pref = VAL(in$)
    cfrot = pref / nref * 30! / pi!
    COLOR 10
    PRINT "Le couple de frottement sec m'canique vaut donc"; cfrot; "Nm"
    COLOR 15
    PRINT
    PRINT "La valeur du rapport de transformation est sans importance si aucune"
    PRINT "mesure 'lectrique n'est faite au rotor."
    PRINT "Rapport de transformation k de la machine id'ale"
    PRINT " (plac' en aval de tout le circuit 'quivalent);"
    PRINT "ce rapport est d'fini comme le flux statorique de la machine id'ale"
    PRINT " divis' par le flux rotorique."
    PRINT " Votre choix k = (df"; k; ")";
    INPUT in$
    IF in$ <> "" THEN k = VAL(in$)
    GOSUB pourconti
    CLS
    PRINT "Valeur des paramStres (page 2)"
    PRINT
    PRINT "El'ments s'rie"
    PRINT
    PRINT "Valeur de la r'sistance statorique Rs (mise en amont)"
    PRINT " (Choisissez 0 si vous utilisez un circuit 'quivalent en L)"
    PRINT " votre choix (df"; r1; "ohms) =";
    INPUT in$
    IF in$ <> "" THEN r1 = VAL(in$)
    PRINT
    PRINT "Valeur de la r'actance de fuite statorique (..."; frequ; "Hz) Xs"
    PRINT " (Choisissez 0 si vous reportez toute la r'actance s'rie en aval";
    PRINT " des 'l'ments parallSles)"
    PRINT " votre choix (df"; x1; "ohms) =";
    INPUT in$
    IF in$ <> "" THEN x1 = VAL(in$)
    IF r1 = 0! THEN
    PRINT "r'sistance statorique s'rie Rs"
    PRINT " (en aval des 'l'ments parallSles)"
    PRINT " votre choix (df"; r1compl; ") =";
    INPUT in$
    IF in$ <> "" THEN r1compl = VAL(in$)
    ELSE
    r1compl = 0!
    END IF
    PRINT
    IF x1 = 0! THEN
    PRINT "r'actance s'rie 'quivalente (..."; frequ; "Hz) ramen'e au stator Xe'"
    ELSE
    PRINT "r'actance s'rie rotorique (..."; frequ; "Hz) ramen'e au stator Xr'"
    END IF
    PRINT " (en aval des 'l'ments parallSles)"
    PRINT " votre choix (df"; x2p; "ohms)=";
    INPUT in$
    IF in$ <> "" THEN x2p = VAL(in$)
    PRINT "r'sistance s'rie rotorique ramen'e au stator Rr'"
    PRINT " (en aval des 'l'ments parallSles)"
    PRINT " votre choix (df"; r2p; "ohms)=";
    INPUT in$
    IF in$ <> "" THEN r2p = VAL(in$)
    PRINT
    PRINT "Seuil de conduction des balais rotoriques (en tension de ligne)"
    PRINT "Il faut choisir 0 si le court-circuiteur se trouve dans le rotor m^me"
    PRINT "Dans le cas contraire, ce paramStre tient compte de fa#on"
    PRINT "approch'e de la non-lin'arit' due aux contacts bague-balais"
    PRINT "Votre choix (df"; u2seuil; "V) =";
    INPUT in$
    IF in$ <> "" THEN u2seuil = VAL(in$)
    GOSUB pourconti
    entmag: CLS
    PRINT "Valeur des paramStres (page 3)"
    PRINT
    PRINT "El'ments parallSle"
    PRINT
    PRINT "Entrez 0 pour une r'actance de magn'tisation lin'aire"
    PRINT " 1 pour une r'actance de magn'tisation non lin'aire"
    PRINT " votre choix (df"; flags%; ")=";
    INPUT in$
    IF in$ <> "" THEN flags% = VAL(in$)
    IF flags% <> 0 AND flags% <> 1 THEN GOTO entmag
    PRINT
    IF flags% = 0 THEN
    PRINT "R'actance de magn'tisation Xmu ";
    ELSE
    PRINT "R'actance de magn'tisation non satur'e Xmuu ";
    END IF
    PRINT "(df"; xmuu; "ohms) =";
    INPUT in$
    IF in$ <> "" THEN xmuu = VAL(in$)
    IF flags% = 1 THEN
    PRINT "La r'actance de magn'tisation non satur'e est divis'e en cours"
    PRINT "de calcul par"
    PRINT " ( 1 + (cnl * E) ^ etnl )";
    PRINT "o-- E est la force 'lectromotrice (de ligne)";
    PRINT " au niveau de l'inductance saturable"
    PRINT
    PRINT "co'fficient de non lin'arit' cnl (df"; cnl; "V^-1) = ";
    INPUT in$
    IF in$ <> "" THEN cnl = VAL(in$)
    PRINT "exposant etnl du terme non lin'aire (df"; etnl; ") =";
    INPUT in$
    IF in$ <> "" THEN etnl = VAL(in$)
    ELSE
    cnl = 0!
    etnl = 6!
    END IF
    PRINT
    PRINT "R'sistance de pertes magn'tiques rp (df"; rp; "ohms) =";
    INPUT in$
    IF in$ <> "" THEN rp = VAL(in$)
    PRINT

    GOSUB pourconti
    etat: CLS
    PRINT "Tension de ligne statorique Us (df"; u1; "volts) =";
    INPUT in$
    IF in$ <> "" THEN u1 = VAL(in$)
    u1m = u1 / root3
    ' provisoire
    nrothau = 1.3 * nsyn
    nrotbas = -.3 * nsyn
    zut1 = SQR((r1 + r1compl) * (r1 + r1compl) + (x1 + x2p) * (x1 + x2p))
    zut2 = (r1 + r1compl + zut1) * (r1 + r1compl + zut1) + (x1 + x2p) * (x1 + x2p)
    zut = u1 * u1 / zut2 * zut1
    cmecmax = zut * 60! / nsyn / 2 / pi - cfrot
    cmecmin = -zut * 60! / nsyn / 2 / pi - cfrot
    cmechau = cmecmax
    cmecbas = cmecmin
    zut1 = x1 + x2p
    qmax = u1 * u1 / (x1 + x2p)
    q1hau = qmax
    q1bas = 0!
    pmax = qmax / 2! + u1 * u1 / rp
    pmin = -qmax / 2! + u1 * u1 / rp
    p1hau = pmax
    p1bas = pmin
    PRINT
    menu: CLS
    PRINT "tension de ligne statorique Us ="; u1; "V (de ligne)"
    PRINT
    PRINT "menu principal"
    PRINT
    PRINT "entrez <R> pour revenir aux valeurs par d'faut"
    PRINT " <D> pour modifier les donn'es"
    PRINT " <E> pour red'finir la vitesse ou la tension statorique"
    PRINT " <C> pour analyser un r'gime avec rotor court-circuit'"
    PRINT " <U> pour analyser un r'gime ... tension rotorique impos'e"
    PRINT " <V> pour analyser un r'gime ... rotor ouvert"
    PRINT " <I> pour analyser un r'gime ... courant rotorique impos'"
    PRINT " <P> pour entrer ou modifier les points exp'rimentaux"
    PRINT " <T> pour tracer le diagramme couple-vitesse"
    PRINT " <Q> pour tracer le diagramme PQ (dit du cercle)"
    PRINT " <F> pour quitter le programme"
    INPUT menu$
    IF menu$ = "r" OR menu$ = "R" THEN GOTO debut
    IF menu$ = "d" OR menu$ = "D" THEN GOTO entree
    IF menu$ = "e" OR menu$ = "E" THEN GOTO etat
    IF menu$ = "c" OR menu$ = "C" THEN GOTO court
    IF menu$ = "u" OR menu$ = "U" THEN GOTO tension
    IF menu$ = "v" OR menu$ = "V" THEN GOTO vide
    IF menu$ = "i" OR menu$ = "I" THEN GOTO courant
    IF menu$ = "p" OR menu$ = "P" THEN GOTO entpoints
    IF menu$ = "t" OR menu$ = "T" THEN GOTO graphe1
    IF menu$ = "q" OR menu$ = "Q" THEN GOTO graphe2
    IF menu$ = "f" OR menu$ = "F" THEN GOTO fin
    GOTO menu

    court: CLS
    PRINT "Analyse ... rotor court-circuit'"
    GOSUB entvitesse
    u2 = 0!
    phich = 0!
    GOTO suitetension

    tension: CLS
    GOSUB entvitesse
    PRINT
    PRINT "Analyse pour une tension rotorique Ur impos'e"
    PRINT
    enttension:
    PRINT "amplitude de la tension rotorique (df"; u2; "Veff de ligne)=";
    INPUT in$
    IF in$ <> "" THEN u2 = VAL(in$)
    IF u2 < 0! THEN GOTO enttension
    PRINT
    IF u2 = 0! THEN
    phich = 0!
    ELSE
    GOSUB entphich
    END IF
    suitetension: CLS
    IF u2 <> 0! THEN
    PRINT "Analyse pour une tension rotorique Ur impos'e de";
    PRINT u2; "V"
    PRINT "angle phi de la charge 'lectrique ="; phich / pi! * 180!; "ø"
    ELSE
    PRINT "Analyse ... rotor court-circuit'"
    END IF
    zutr = u2 * COS(phich) + u2seuil
    zuti = u2 * SIN(phich)
    u2c = SQR(zutr * zutr + zuti * zuti)
    IF u2c = 0! THEN
    phichc = 0!
    ELSE
    phichc = argument(zutr, zuti)
    END IF
    u2cpmn = u2c / root3 * k
    GOSUB calcul1
    GOTO impr

    vide: CLS
    GOSUB entvitesse
    PRINT "Analyse pour un fonctionnement ... rotor ouvert"
    i2n = 0!
    phich = 0!
    GOTO suitecourant

    courant: CLS
    GOSUB entvitesse
    PRINT "Analyse pour un courant rotorique Ir impos'"
    PRINT
    entcharge:
    PRINT "amplitude du courant de charge (df"; i2n; "Aeff) =";
    INPUT in$
    IF in$ <> "" THEN i2n = VAL(in$)
    IF i2n < 0! THEN GOTO entcharge
    PRINT
    IF i2n = 0! THEN
    phich = 0!
    ELSE
    GOSUB entphich
    END IF
    CLS
    PRINT "Analyse pour un courant rotorique Ir impos'"
    PRINT
    suitecourant:
    PRINT "courant rotorique ="; i2n; "A"
    IF i2n <> 0! THEN PRINT "angle phi de l''l'ment connect' au rotor =";
    PRINT phich / pi! * 180!; "ø"
    i2pn = i2n / k
    xmu = xmuu
    nbsol% = 1
    choixsol% = 1
    nbiter% = 0
    itercourant:
    nbiter% = nbiter% + 1
    xmuold = xmu
    GOSUB precalcul
    du2cpmn = zen * i2pn
    u2c0pmminn = du2cpmn * ABS(SIN(zea - phich))
    u2cpmmoyn = -du2cpmn * COS(zea - phich)
    IF u2c0pmn < u2c0pmminn THEN
    nbsol% = -1
    PRINT "Aucune solution exacte ... l'it'ration No"; nbiter%
    PRINT "Le programme continue les it'rations avec une solution approch'e"
    GOSUB pourconti
    u2cpmn = u2cpmmoyn
    ELSE
    zut = SQR(u2c0pmn * u2c0pmn - u2c0pmminn * u2c0pmminn)
    u2cpmn = u2cpmmoyn - zut
    IF u2cpmn >= 0! THEN
    nbsol% = 2
    entchoixsoli:
    PRINT "il y a deux solutions ... l'it'ration No"; nbiter%
    PRINT "Entrez 1 pour la solution ... plus petite tension U2"
    PRINT " 2 pour la solution ... plus grande tension U2"
    PRINT " votre choix (df"; choixsol%; ")=";
    INPUT in$
    IF in$ <> "" THEN choixsol% = VAL(in$)
    IF choixsol% < 1 OR choixsol% > 2 THEN GOTO entchoixsoli
    ELSE
    choixsol% = 2
    END IF
    IF choixsol% = 2 THEN u2cpmn = u2cpmmoyn + zut
    IF u2cpmn >= 0! THEN
    nbsol% = 1
    ELSE
    nbsol% = 0
    PRINT "Il y a deux solutions inacceptables ... l'it'ration No"; nbiter%
    PRINT "Le programme continue les it'rations avec la moins mauvaise"
    GOSUB pourconti
    END IF
    END IF
    zuti = u2cpmn * SIN(zea - phich)
    zutr = du2cpmn + u2cpmn * COS(zea - phich)
    zut = argument!(zutr, zuti)
    i2a = u2c0a + zut - zea
    i2pr = i2pn * COS(i2a)
    i2pi = i2pn * SIN(i2a)
    u2ca = i2a + phich
    emr = e0mr - r1p * i2pr + x1p * i2pi
    emi = e0mi - r1p * i2pi - x1p * i2pr
    emn = SQR(emr * emr + emi * emi)
    en = emn * root3
    xmu = xmuu / (1! + (cnl * en) ^ etnl)
    IF ABS(xmuold - xmu) > .000001 * xmu THEN GOTO itercourant
    PRINT "terminaison aprSs "; nbiter%; "it'rations"
    u2cpmr = u2cpmn * COS(u2ca)
    u2cpmi = u2cpmn * SIN(u2ca)
    IF nbsol% = -1 THEN
    PRINT "convergence vers un 'tat sans solution"
    GOSUB pourconti
    GOTO menu
    END IF
    u2c = u2cpmn / k * root3
    u2 = u2c - u2seuil ' provisoire
    i2n = i2pn * k
    emr = e0mr - r1p * i2pr + x1p * i2pi
    emi = e0mi - r1p * i2pi - x1p * i2pr
    en = root3 * SQR(emr * emr + emi * emi)
    xmu = xmuu / (1 + (cnl * en) ^ etnl)
    ymur = 1! / rp
    ymui = -1! / xmu
    i1r = i2pr + emr * ymur - emi * ymui
    i1i = i2pi + emr * ymui + emi * ymur
    i1n = SQR(i1r * i1r + i1i * i1i)
    u1mr = emr + r1 * i1r - x1 * i1i
    u1mi = emi + r1 * i1i + x1 * i1r
    p1 = root3 * u1 * i1r
    q1 = -root3 * u1 * i1i
    ptransm = 3! * (emr * i2pr + emi * i2pi) - 3! * r1compl * i2pn * i2pn
    ctransm = ptransm / (2! * pi! * frequ) * npp
    GOTO impr

    impr:
    IF nbsol% = -1 THEN
    PRINT "convergence vers un 'tat sans solution"
    GOSUB pourconti
    GOTO menu
    END IF
    IF nbsol% = 0 THEN
    PRINT "Convergence vers une solution inacceptable."
    PRINT "Examinez soigneusement les r'sultats ci-dessous"
    END IF
    IF nbsol% = 2 THEN
    PRINT "convergence vers la plus ";
    IF choixsol% = 1 THEN
    PRINT "petite"
    ELSE
    PRINT "grande"
    END IF
    PRINT " de deux solutions possibles"
    END IF
    GOSUB pourconti
    CLS
    PRINT
    PRINT "tension rotorique ="; u2; "V (de ligne)"
    PRINT "courant rotorique ="; i2n; "A"
    PRINT
    PRINT "tension rotorique + seuil multipli's par k ="; u2cpm * root3;
    PRINT "V (de ligne)"
    PRINT "courant rotorique ramen' au stator ="; i2pn; "A"
    PRINT
    PRINT "force 'lectromotrice rotorique ="; en * ABS(gamma); "V (de ligne)"
    PRINT "force 'lectromotrice sur 'l'ments parallSles ="; en; "V (de ligne)"
    PRINT "r'actance parallSle ="; xmu; "ohm"
    PRINT
    COLOR 12
    PRINT "courant statorique ="; i1n; "A"
    COLOR 15
    'PRINT "tension statorique (... titre de contr"le)"
    PRINT "tension statorique (... titre de contr le)"
    PRINT " = "; u1mr * root3; "+j"; u1mi * root3; "V (de ligne)"
    PRINT "facteur de puissance ="; i1r / i1n
    PRINT
    PRINT "couple 'lectromagn'tique ="; ctransm; "Nm"
    COLOR 12
    PRINT "couple m'canique ="; cmec; "Nm"
    COLOR 15
    GOSUB pourconti
    CLS
    COLOR 12
    PRINT "puissance entrant au stator ="; p1; "W"
    COLOR 15
    PRINT "puissance r'active ="; -root3 * u1 * i1i; "VAr"
    PRINT "pertes dans la r'sistance s'rie statorique (amont) = ";
    PRINT 3! * r1 * i1n * i1n; "W"
    PRINT "pertes dans la r'sistance rp ="; en * en / rp; "W"
    PRINT "pertes dans la r'sistance s'rie statorique (aval) = ";
    PRINT 3! * r1compl * i2pn * i2pn; "W"
    PRINT
    PRINT "puissance totale transmise au rotor ="; ptransm; "W"
    PRINT
    PRINT "puissance 'lectrique re#ue au rotor =";
    PRINT ptransm * gamma; "W"
    PRINT "puissance dissip'e dans la r'sistance rotorique (partie lin'aire)";
    PRINT 3! * r2p * i2pn * i2pn; "W"
    PRINT "puissance dissip'e dans le seuil de tension rotorique";
    PRINT root3 * u2seuil * i2n
    PRINT "puissance totale dissip'e par effet Joule au rotor";
    PRINT 3! * r2p * i2pn * i2pn + root3 * u2seuil * i2n
    PRINT "puissance 'lectrique fournie par le rotor";
    PRINT root3 * u2 * i2n * COS(phich); "W"
    PRINT
    pconv = ptransm * (1! - gamma)
    PRINT "puissance convertie ="; pconv; "W"
    pfrot = cfrot * nrot / 30! * pi!
    PRINT "pertes m'caniques ="; pfrot; "W"
    pmec = pconv - pfrot
    COLOR 12
    PRINT "puissance m'canique utile ="; pmec; "W"
    COLOR 15
    PRINT " soit"; pmec / 75 / 9.806; "CV"
    PRINT " ou encore"; pmec / 745.7; "HP"
    PRINT
    PRINT "rendement = "; pmec / p1 * 100!; "%"
    GOSUB pourconti
    GOTO menu

    entvitesse:
    PRINT "Vitesse de rotation (df"; nrot; "t/m) =";
    INPUT in$
    IF in$ <> "" THEN nrot = VAL(in$)
    gamma = 1! - nrot / (frequ * 60! / npp)
    PRINT
    PRINT "glissement = "; gamma
    PRINT "fr'quence rotorique ="; frequ * gamma; "Hz"
    RETURN

    entpoints: CLS
    IF nbexp% > 0 THEN nbexpold% = nbexp%
    PRINT "nombre de points exp'rimentaux (df "; nbexp%; ") =";
    INPUT in$
    IF in$ <> "" THEN nbexp% = VAL(in$)
    IF nbexp% > 0 THEN
    IF nbexpold% <> nbexp% THEN
    REDIM pexp1(1 TO nbexp%), pexp2(1 TO nbexp%)
    REDIM pexp3(1 TO nbexp%), pexp4(1 TO nbexp%)
    END IF
    FOR noexp% = 1 TO nbexp%
    PRINT
    PRINT "Point No"; noexp%
    PRINT "Vitesse de rotation (df"; pexp1(noexp%); "t/m) =";
    INPUT in$
    IF in$ <> "" THEN pexp1(noexp%) = VAL(in$)
    PRINT "Couple utile Cr (df"; pexp2(noexp%); "Nm) =";
    INPUT in$
    IF in$ <> "" THEN pexp2(noexp%) = VAL(in$)
    PRINT "Puissance active (df"; pexp3(noexp%); "W) =";
    INPUT in$
    IF in$ <> "" THEN pexp3(noexp%) = VAL(in$)
    PRINT "Puissance r'active (df"; pexp4(noexp%); "VAr) =";
    INPUT in$
    IF in$ <> "" THEN pexp4(noexp%) = VAL(in$)
    NEXT noexp%
    pexp1bas = pexp1(1)
    pexp1hau = pexp1(1)
    pexp2bas = pexp2(1)
    pexp2hau = pexp2(1)
    pexp3bas = pexp3(1)
    pexp3hau = pexp3(1)
    pexp4bas = pexp4(1)
    pexp4hau = pexp4(1)
    FOR noexp% = 1 TO nbexp%
    IF pexp1(noexp%) < pexp1bas THEN pexp1bas = pexp1(noexp%)
    IF pexp1(noexp%) > pexp1hau THEN pexp1hau = pexp1(noexp%)
    IF pexp2(noexp%) < pexp2bas THEN pexp2bas = pexp2(noexp%)
    IF pexp2(noexp%) > pexp2hau THEN pexp2hau = pexp2(noexp%)
    IF pexp3(noexp%) < pexp3bas THEN pexp3bas = pexp3(noexp%)
    IF pexp3(noexp%) > pexp3hau THEN pexp3hau = pexp3(noexp%)
    IF pexp4(noexp%) < pexp4hau THEN pexp4bas = pexp4(noexp%)
    IF pexp4(noexp%) > pexp4hau THEN pexp4hau = pexp4(noexp%)
    NEXT noexp%
    END IF
    GOSUB pourconti
    GOTO menu

    graphe1: CLS
    menu$ = "t"
    u2 = 0!
    phich = 0!
    u2c = u2seuil
    phichc = 0!
    u2cpmn = u2c / root3 * k
    IF nbexp% > 0 THEN
    PRINT "vitesse exp'rimentale la plus 'lev'e =";
    PRINT pexp1hau; "t/m"
    END IF
    PRINT "extr'mit' sup'rieure de l''chelle des vitesses (df"; nrothau; "t/m) =";
    INPUT in$
    IF in$ <> "" THEN nrothau = VAL(in$)
    IF nbexp% > 0 THEN PRINT "vitesse exp'rimentale la plus faible =";
    PRINT pexp1bas; "Nm"
    PRINT "extr'mit' inf'rieure de l''chelle des vitesses (df"; nrotbas; "t/m) =";
    INPUT in$
    IF in$ <> "" THEN nrotbas = VAL(in$)
    nrotgrad = (nrothau - nrotbas) / 20!
    PRINT "'cart entre deux graduations de vitesse (df"; nrotgrad; "t/m) =";
    INPUT in$
    IF in$ <> "" THEN nrotgrad = VAL(in$)
    nrotinc = (nrothau - nrotbas) / 50!
    IF nbexp% > 0 THEN PRINT "couple exp'rimental le plus 'lev' ="; pexp2hau; "Nm"
    PRINT "Extr'mit' sup'rieure de l''chelle des couples (df"; cmechau; "Nm) =";
    INPUT in$
    IF in$ <> "" THEN cmechau = VAL(in$)
    IF nbexp% > 0 THEN PRINT "couple exp'rimental le plus bas ="; pexp2bas; "Nm"
    PRINT "extr'mit' inf'rieure de l''chelle de couple (df"; cmecbas; "Nm) =";
    INPUT in$
    IF in$ <> "" THEN cmecbas = VAL(in$)
    cmecgrad = (cmechau - cmecbas) / 20! * rapecran
    PRINT "'cart entre deux graduations de couple (df"; cmecgrad; "Nm) =";
    INPUT in$
    IF in$ <> "" THEN cmecgrad = VAL(in$)
    cmecinc = (cmechau - cmecbas) * rapecran / 50!
    CLS
    WINDOW (nrotbas, cmecbas)-(nrothau, cmechau)
    PRINT "diagramme couple-vitesse 1 graduation horizontale ="; nrotgrad;
    PRINT "t/m";
    PRINT " 1 graduation verticale ="; cmecgrad;
    PRINT "Nm";
    LINE (0, cmecbas)-(0, cmechau)
    LINE (nrotbas, 0)-(nrothau, 0)
    FOR zut = 0! TO nrothau STEP nrotgrad
    LINE (zut, -cmecinc)-(zut, cmecinc)
    NEXT zut
    FOR zut = 0! TO nrotbas STEP -nrotgrad
    LINE (zut, -cmecinc)-(zut, cmecinc)
    NEXT zut
    FOR zut = 0! TO cmechau STEP cmecgrad
    LINE (-nrotinc, zut)-(nrotinc, zut)
    NEXT zut
    FOR zut = 0! TO cmecbas STEP -cmecgrad
    LINE (-nrotinc, zut)-(nrotinc, zut)
    NEXT zut
    IF nbexp% > 0 THEN
    FOR noexp% = 1 TO nbexp%
    nrotexp = pexp1(noexp%)
    cmecexp = pexp2(noexp%)
    LINE (nrotexp - nrotinc, cmecexp - cmecinc)-(nrotexp + nrotinc, cmecexp + cmecinc)
    LINE (nrotexp + nrotinc, cmecexp - cmecinc)-(nrotexp - nrotinc, cmecexp + cmecinc)
    gamma = 1! - pexp1(noexp%) / (frequ * 60! / npp)
    NEXT noexp%
    END IF
    nrot = nrotbas
    FOR i% = 1 TO 199
    nrot = nrot + nrotinc
    gamma = 1! - nrot / nsyn
    GOSUB calcul1
    IF i% <> 1 THEN LINE (nrotold, cmecold)-(nrot, cmec)
    nrotold = nrot
    cmecold = cmec
    NEXT i%
    INPUT dummy$
    GOTO menu

    graphe2: CLS
    menu$ = "q"
    u2 = 0!
    phich = 0!
    u2c = u2seuil
    phichc = 0!
    u2cpmn = u2c / root3 * k
    PRINT "rapport entre largeur et hauteur de l''cran (df"; rapecran; ") =";
    INPUT in$
    IF in$ <> "" THEN rapecran = VAL(in$)
    IF nbexp% > 0! THEN
    PRINT "puissance active exp'rimentale la plus 'lev'e"; pexp3hau; "W"
    END IF
    PRINT "extr'mit' de l''chelle des puissances (df"; p1hau; "VA) =";
    INPUT in$
    IF in$ <> "" THEN p1hau = VAL(in$)
    IF nbexp% > 0! THEN
    PRINT "puissance active exp'rimentale la plus basse"; pexp3bas; "W"
    END IF
    PRINT "extr'mit' inf'rieure de l''chelle des puissances actives (df";
    PRINT p1bas; "VA) =";
    INPUT in$
    IF in$ <> "" THEN p1bas = VAL(in$)
    q1hau = (p1hau - p1bas) * (rapecran + 1!) / 2!
    IF nbexp% > 0! THEN
    PRINT "puissance r'active exp'rimentale la plus 'lev'e"; pexp4hau; "W"
    END IF
    PRINT "extr'mit' sup'rieure de l''chelle des puissances r'actives(df";
    PRINT q1hau; "VAr) =";
    INPUT in$
    IF in$ <> "" THEN q1hau = VAL(in$)
    q1bas = q1hau - rapecran * (p1hau - p1bas)
    PRINT "l'extr'mit' inf'rieure de l''chelle des puissances r'actives est";
    PRINT "donc de"; q1bas; "VAr"
    pgrad = (p1hau - p1bas) / 20!
    PRINT "'cart entre les graduations des axes (df"; pgrad; "VA) =";
    INPUT in$
    IF in$ <> "" THEN pgrad = VAL(in$)
    pinc = pgrad / 3!
    CLS
    WINDOW (q1bas, p1bas)-(q1hau, p1hau)
    PRINT "diagramme P-Q 1 graduation horizontale ="; pgrad; "VAr"
    PRINT " 1 graduation verticale ="; pgrad; "W";
    LINE (0, p1bas)-(0, p1hau)
    LINE (q1bas, 0)-(q1hau, 0)
    FOR zut = 0! TO p1hau STEP pgrad
    LINE (-pinc, zut)-(pinc, zut)
    NEXT zut
    FOR zut = 0! TO p1bas STEP -pgrad
    LINE (-pinc, zut)-(pinc, zut)
    NEXT zut
    FOR zut = 0 TO q1hau STEP pgrad
    LINE (zut, -pinc)-(zut, pinc)
    NEXT zut
    FOR zut = 0 TO q1bas STEP -pgrad
    LINE (zut, -pinc)-(zut, pinc)
    NEXT zut
    IF nbexp% > 0 THEN
    FOR noexp% = 1 TO nbexp%
    p1exp = pexp3(noexp%)
    q1exp = pexp4(noexp%)
    LINE (q1exp - pinc, p1exp - pinc)-(q1exp + pinc, p1exp + pinc)
    LINE (q1exp + pinc, p1exp - pinc)-(q1exp - pinc, p1exp + pinc)
    gamma = 1! - pexp1(noexp%) / (frequ * 60! / npp)
    GOSUB calcul1
    COLOR 12
    LINE (q1, p1)-(q1exp, p1exp)
    COLOR 15
    NEXT noexp%
    END IF
    anglaux = -pi / 2!
    FOR i% = 1 TO 199
    anglaux = anglaux + pi / 200!
    gamma = r2p / (x1 + x2p) * TAN(anglaux)
    GOSUB calcul1
    IF i% <> 1 THEN LINE (q1old, p1old)-(q1, p1)
    q1old = q1
    p1old = p1
    NEXT i%
    INPUT dummy$
    GOTO menu

    calcul1:
    xmu = xmuu
    nbiter% = 0
    itertension:
    nbiter% = nbiter% + 1
    xmuold = xmu
    GOSUB precalcul
    u2c0pmminn = u2cpmn * ABS(SIN(zea - phichc))
    du2cpmmoyn = -u2cpmn * COS(zea - phichc)
    nbsol% = -1
    IF u2c0pmn >= u2c0pmminn THEN
    nbsol% = 0
    zut = SQR(u2c0pmn * u2c0pmn - u2c0pmminn * u2c0pmminn)
    du2cpmn = du2cpmmoyn + zut
    IF du2cpmn >= 0! THEN nbsol% = 1
    du2cpmn = du2cpmmoyn - zut
    IF du2cpmn >= 0! THEN nbsol% = 2
    END IF
    IF nbsol% <= 0 THEN
    BEEP
    REM SOUND 440, 10
    IF menu$ <> "q" AND menu$ <> "t" THEN
    PRINT "Aucune solution exacte ... l'it'ration No"; nbiter%
    PRINT "Le programme continue les it'rations ... i2 nul"
    GOSUB pourconti
    END IF
    i2pn = 0!
    i2a = 0!
    ELSE
    IF nbsol% = 1 OR choixsol% = 1 THEN du2cpmn = du2cpmmoyn + zut
    zutr = u2cpmn + du2cpmn * COS(zea - phichc)
    zuti = du2cpmn * SIN(zea - phichc)
    zut = argument!(zutr, zuti)
    u2ca = u2c0a - zut
    u2cpmr = u2cpmn * COS(u2ca)
    u2cpmi = u2cpmn * SIN(u2ca)
    du2cpmr = u2c0pmr - u2cpmr
    du2cpmi = u2c0pmi - u2cpmi
    du2cpmn = SQR(du2cpmr * du2cpmr + du2cpmi * du2cpmi)
    i2pn = du2cpmn / zen
    i2a = u2ca - phichc
    END IF
    i2pr = i2pn * COS(i2a)
    i2pi = i2pn * SIN(i2a)
    emr = e0mr - r1p * i2pr + x1p * i2pi
    emi = e0mi - r1p * i2pi - x1p * i2pr
    emn = SQR(emr * emr + emi * emi)
    en = emn * root3
    xmu = xmuu / (1! + (cnl * en) ^ etnl)
    IF ABS(xmuold - xmu) > .00001 * xmu THEN GOTO itertension
    IF menu$ <> "q" AND menu$ <> "t" THEN PRINT "terminaison aprSs "; nbiter%; "it'rations"
    i2n = i2pn * k
    i1r = i2pr + emr * ymur - emi * ymui
    i1i = i2pi + emr * ymui + emi * ymur
    i1n = SQR(i1r * i1r + i1i * i1i)
    p1 = root3 * u1 * i1r
    q1 = -root3 * u1 * i1i
    u1mr = emr + r1 * i1r - x1 * i1i
    u1mi = emi + r1 * i1i + x1 * i1r
    ptransm = 3! * (emr * i2pr + emi * i2pi) - 3! * r1compl * i2pn * i2pn
    ctransm = ptransm / (2! * pi! * frequ) * npp
    cmec = ctransm - cfrot
    RETURN

    entphich:
    PRINT "entrez -1 pour une charge capacitive"
    PRINT " 0 pour une charge purement r'sistive"
    PRINT " 1 pour une charge inductive"
    PRINT " votre choix (df"; flagc%; ") =";
    INPUT in$
    IF in$ <> "" THEN flagc% = VAL(in$)
    IF flagc% < -1 OR flagc% > 1 THEN GOTO entphich
    IF flagc% = 0 THEN
    phich = 0!
    RETURN
    END IF
    entfact:
    PRINT "facteur de puissance de la charge (df"; fp2; ") =";
    INPUT in$
    IF in$ <> "" THEN fp2 = VAL(in$)
    IF fp2 < -1! OR fp2 > 1! THEN GOTO entfact
    phich = ATN((1! - fp2 * fp2) / fp2)
    IF phich < 0! THEN phich = phich + pi!
    IF flagc% = -1 THEN phich = -phich
    RETURN

    entchoixsolt:
    PRINT "s'il y a deux solutions acceptables"
    PRINT "Entrez 1 pour la solution ... plus petit courant I2"
    PRINT " 2 pour la solution ... plus grand courant I2"
    PRINT "votre choix (df"; choixsol%; ")=";
    INPUT in$
    IF in$ <> "" THEN choixsol% = VAL(in$)
    IF choixsol% < 1 OR choixsol% > 2 THEN GOTO entchoixsolt
    RETURN

    precalcul:
    ymur = 1 / rp
    ymui = -1 / xmu
    denom = ymur * ymyr + ymui * ymui
    zmur = ymur / denom
    zmui = -ymui / denom
    zutr = r1 + zmur
    zuti = x1 + zmui
    denom = zutr * zutr + zuti * zuti
    y0r = zutr / denom
    y0i = -zuti / denom
    rappr = zmur * y0r - zmui * y0i
    rappi = zmur * y0i + zmui * y0r
    e0mr = u1m * rappr
    e0mi = u1m * rappi
    u2c0pmr = e0mr * gamma
    u2c0pmi = e0mi * gamma
    u2c0pmn = SQR(u2c0pmr * u2c0pmr + u2c0pmi * u2c0pmi)
    u2c0a = argument!(u2c0pmr, u2c0pmi)
    denom = r1 * r1 + x1 * x1
    IF denom = 0! THEN
    r1p = 0!
    x1p = 0!
    ELSE
    zutr = r1 / denom + 1 / rp
    zuti = -x1 / denom - 1 / xmu
    denom = zutr * zutr + zuti * zuti
    r1p = zutr / denom
    x1p = -zuti / denom
    END IF
    rep = (r1p + r1compl) * gamma + r2p
    xep = (x1p + x2p) * gamma
    denom = rep * rep + xep * xep
    zen = SQR(denom)
    zea = argument!(rep, xep)
    yer = rep / denom
    yei = -xep / denom
    RETURN

    pourconti: PRINT
    PRINT "pressez <enter> pour continuer";
    INPUT dummy$
    RETURN

    fin: END

    FUNCTION argument! (X!, y!)
    IF X! * X! + y! * y! = 0! THEN
    PRINT "argument ind'termin'"
    BEEP
    REM SOUND 100, 10
    argument! = 0!
    ELSEIF ABS(y!) <= ABS(X!) THEN
    zut = ATN(y! / X!)
    IF X! > 0! THEN
    argument! = zut
    ELSE
    argument! = zut + pi!
    END IF
    ELSE
    zut = ATN(X! / y!)
    IF y! > 0! THEN
    argument! = pi! / 2 - zut
    ELSE
    argument! = 3 * pi! / 2 - zut
    END IF
    END IF
    END FUNCTION

    SUB basin (a$, g!, b$)
    PRINT " "; a$; " (df "; g!; " "; b$; ")= ";
    INPUT in$
    IF in$ <> "" THEN g! = VAL(in$)
    END SUB
    0
    1. Samiracle Messages postés 31 Statut Membre 1
       
      Bonsoir ;
      dsl mais j'ai pas compris ce que tu voulais me dire , tu les a corriger et puis tu a recopier le programme ici ? :p
      0