DECLARE FUNCTION maj$ (chaine$) DECLARE SUB centre (p, a$) DECLARE FUNCTION trunc (number) CLEAR CLS CALL centre(1, "Equation de JORGENSEN pour les complexes des metaux de Transitions") CALL centre(2, "(c) 1993 Gilles OLIVE - Version PC 1.01 du 26 novembre 1993") CALL centre(5, "Calcul de Delta O pour Complexe ML6 Oh") CALL centre(6, " _______________") PRINT DIM confi(5), confi$(5), tempo$(5) DIM metal$(12, 7) FOR n% = 1 TO 12 READ metal$(n%, 1), metal$(n%, 2), metal$(n%, 3), metal$(n%, 4), metal$(n%, 5), metal$(n%, 6), metal$(n%, 7) NEXT n% DIM ligand$(14, 7) FOR n% = 1 TO 14 READ ligand$(n%, 1), ligand$(n%, 2), ligand$(n%, 3), ligand$(n%, 4), ligand$(n%, 5), ligand$(n%, 6), ligand$(n%, 7) NEXT n% DIM couleur(9, 2), couleur$(9, 2) FOR n% = 1 TO 9 READ couleur(n%, 1), couleur(n%, 2), couleur$(n%, 1), couleur$(n%, 2) NEXT n% DO DO PRINT "Metaux possibles:"; FOR n% = 1 TO 12 PRINT " "; metal$(n%, 1); ";"; IF n% = 6 THEN PRINT : PRINT TAB(17); NEXT n% PRINT : PRINT PRINT "Quit pour Sortir" PRINT INPUT "Donnez le metal "; rep$ IF maj$(rep$) = "QUIT" THEN GOTO 6000 g = 0 FOR n% = 1 TO 12 IF maj$(metal$(n%, 1)) = maj$(rep$) THEN complexe$ = " [ " + metal$(n%, 1) + " (d" + metal$(n%, 3) + ")" g = VAL(metal$(n%, 2)) * 1000 K = VAL(metal$(n%, 6)) poidsmol = VAL(metal$(n%, 7)) electron = VAL(metal$(n%, 3)) electronmetal = VAL(metal$(n%, 3)) charge = VAL(metal$(n%, 4)) pairing$ = metal$(n%, 5) END IF IF g <> 0 THEN EXIT FOR NEXT n% LOOP UNTIL g <> 0 PRINT "Ligandes possibles: "; FOR n% = 1 TO 14 PRINT ligand$(n%, 2); " ["; ligand$(n%, 1); "];"; IF n% = 4 OR n% = 7 OR n% = 10 OR n% = 12 OR n% = 13 THEN PRINT : PRINT TAB(20); NEXT n% PRINT PRINT TAB(20); "-:Veut dire pas de ligande" PRINT PRINT "Quit pour Sortir" PRINT f = 0 h = 0 m% = 1 DO DO PRINT "Donnez le ligande "; m%; " (Lettres entre [] au dessus) "; INPUT rep$ IF maj$(rep$) = "QUIT" OR rep$ = "-" THEN EXIT DO GOSUB 1000 IF fl <> 0 THEN EXIT DO LOOP IF maj$(rep$) = "QUIT" THEN GOTO 6000 IF rep$ = "-" THEN fl = 0: h$ = "0" f = f + fl IF h$ <> "Inc" AND h >= 0 THEN h = h + VAL(h$) ELSE h = -1 IF m% = 6 THEN EXIT DO m% = m% + 1 LOOP IF maj$(rep$) = "QUIT" THEN GOTO 6000 f = f / 6 h = h / 6 delta = g * f lambda = 1 / delta * 100000000 l = lambda: GOSUB 2000 absorbee$ = a$ complementaire$ = c$ temperature = (6.6260755D-34 * 299792458 * delta) / 1.380658E-23 b = 1 - (h * K) IF h >= 0 THEN b$ = "= " + STR$(b) ELSE b$ = "est INCONNU" ' k$ = "CON:" ' e$ = "" ' DO PRINT "Complexe : "; complexe$; " ]"; ABS(charge); MID$("- +", 2 + SGN(charge), 1); " ("; electron; " electrons) (PM="; poidsmol; " g/mol)" IF VAL(pairing$) <> 0 THEN IF delta > VAL(pairing$) THEN sp$ = "W" ELSE sp$ = "S" ELSE sp$ = pairing$ END IF IF sp$ = "W" THEN spin$ = "faible" ELSE IF sp$ = "S" THEN spin$ = "FORT" ELSE spin$ = "Inconnu" PRINT "Complexe a Spin "; spin$ IF sp$ = "S" THEN nbrelectron = electronmetal: GOSUB 3000 GOSUB 5000 confi$ = confi$ + " (æs=" + STR$(SQR(neceli * (neceli + 2))) + ")" END IF IF sp$ = "W" THEN nbrelectron = electronmetal: GOSUB 4000 GOSUB 5000 confi$ = confi$ + " (æs=" + STR$(SQR(neceli * (neceli + 2))) + ")" END IF espinw$ = "" espins$ = "" musw$ = "" muss$ = "" IF sp$ = "I" THEN nbrelectron = electronmetal: GOSUB 4000 GOSUB 5000 FOR n = 1 TO 5: tempo$(n) = "": NEXT n FOR n = 1 TO 5: tempo$(n) = confi$(n): NEXT n tempo$ = confi$ IF confi(1) <> 2 THEN energie = 0 multi = -2 / 5 FOR n = 1 TO 5: energie = energie + confi(n) * multi * delta IF n = 3 THEN multi = 3 / 5 NEXT n espinw$ = "E sf=" + STR$(trunc(energie)) + " cm^-1" ELSE espinw$ = "E sf= Impossible" END IF musw$ = "æs sf=" + STR$(SQR(neceli * (neceli + 2))) nbrelectron = electronmetal: GOSUB 3000 GOSUB 5000 FOR n = 1 TO 5 IF n <> 1 THEN confi$(n) = confi$(n) + " " + tempo$(n) ELSE confi$(n) = confi$(n) + "Spin FORT " + tempo$(n) + "Spin faible" END IF NEXT n confi$ = confi$ + " " + tempo$ IF confi(1) <> 2 THEN energie = 0 multi = -2 / 5 FOR n = 1 TO 5: energie = energie + confi(n) * multi * delta IF n = 3 THEN multi = 3 / 5 NEXT n espins$ = "E SF=" + STR$(trunc(energie)) + " cm^-1" ELSE espins$ = "E SF= Impossible" END IF muss$ = "æs SF=" + STR$(SQR(neceli * (neceli + 2))) MID$(confi$(5), 12, 2) = "ou" END IF energie = 0 multi = -2 / 5 IF VAL(pairing$) <> 0 THEN FOR n = 1 TO 5 energie = energie + confi(n) * multi * delta IF confi(n) = 2 THEN energie = energie + VAL(pairing$) IF n = 3 THEN multi = 3 / 5 NEXT n PRINT "Energie totale complexe:"; trunc(energie); " cm^-1 (Energie d'appariement:"; pairing$; " cm^-1)" ELSE IF confi(1) <> 2 AND sp$ <> "I" THEN FOR n = 1 TO 5 energie = energie + confi(n) * multi * delta IF n = 3 THEN multi = 3 / 5 NEXT n PRINT "Energie totale complexe:"; trunc(energie); " cm^-1" ELSE IF sp$ = "I" THEN PRINT "Voir l'energie totale complexe en dessous" ELSE PRINT "Energie totale complexe inconnue car energie d'appariement non connue !" END IF END IF END IF PRINT "Configuration electronique:"; TAB(30); confi$(5) PRINT TAB(25); "eg*"; TAB(30); confi$(4) PRINT CHR$(13) PRINT espins$; TAB(30); confi$(3) PRINT muss$; TAB(25); "t2g*"; TAB(30); confi$(2) PRINT espinw$; TAB(30); confi$(1) PRINT musw$; TAB(25); confi$ PRINT "Delta o = "; delta; " cm^-1 (E="; delta * 299792458 * 6.6260755D-34 * 100 * 6.0221367D+23; " joules/mole = "; PRINT (delta * 299792458 * 6.6260755D-34 * 100 * 6.0221367D+23) / 1.60217733D-19; " eV/mole)" PRINT "Temperature = "; temperature; " K ("; temperature - 273.15; " øC)" PRINT "Lambda = "; lambda; " Amgstrom (E="; 299792458 * 6.6260755D-34 / (lambda * 1E-10); " joules/molecules = "; PRINT (299792458 * 6.6260755D-34 / (lambda * 1E-10)) / 1.60217733D-19; " eV/molecules)" PRINT "Couleur Absorbee : "; absorbee$; PRINT " - Couleur probable du Complexe : "; complementaire$ PRINT "á (Serie Nephelauxetique) "; b$ PRINT "Toutes choses etant egales par ailleurs :" PRINT "Delta t = "; 4 * delta / 9; " cm^-1" lambda2 = 1 / (4 * delta / 9) * 1E+08 PRINT "Lambda2 = "; lambda2; " Amgstrom" l = lambda2: GOSUB 2000 absorbee2$ = a$ complementaire2$ = c$ PRINT "Couleur Absorbee : "; absorbee2$; PRINT " - Couleur probable du Complexe : "; complementaire2$ PRINT SPC(30); "Appuyez sur une touche"; 10 IF INKEY$ = "" THEN 10 ' LOOP PRINT "-----------------------------------------------------------------------------" PRINT : PRINT LOOP 1000 fl = 0 h$ = "" FOR n% = 1 TO 14 IF maj$(rep$) = maj$(ligand$(n%, 1)) THEN fl = VAL(ligand$(n%, 3)) complexe$ = complexe$ + ", " + ligand$(n%, 1) electron = electron + VAL(ligand$(n%, 4)) charge = charge + VAL(ligand$(n%, 5)) poidsmol = poidsmol + VAL(ligand$(n%, 7)) h$ = ligand$(n%, 6) END IF NEXT n% IF fl = 0 THEN PRINT "Ligandes possibles:"; FOR n% = 1 TO 14 IF n% = 9 THEN PRINT : PRINT TAB(9); PRINT " ["; ligand$(n%, 1); "];"; NEXT n% PRINT END IF RETURN 2000 IF l < 4000 THEN a$ = "Ultra Violet" c$ = "Ultra Violet" ELSE IF l > 7200 THEN a$ = "Infra Rouge" c$ = "Infra Rouge" ELSE FOR n% = 1 TO 9 IF l > couleur(n%, 1) AND l < couleur(n%, 2) THEN a$ = couleur$(n%, 1) c$ = couleur$(n%, 2) END IF NEXT n% END IF END IF RETURN 3000 FOR n = 1 TO 5: confi(n) = 0: NEXT n compteur = 1 nbre = 0 DO IF nbre = nbrelectron THEN EXIT DO confi(compteur) = confi(compteur) + 1 nbre = nbre + 1 IF compteur = 5 THEN compteur = 0 compteur = compteur + 1 LOOP RETURN 4000 FOR n = 1 TO 5: confi(n) = 0: NEXT n compteur = 1 total = 1 nbre = 0 DO IF nbre = nbrelectron THEN EXIT DO confi(compteur) = confi(compteur) + 1 nbre = nbre + 1 IF compteur = 3 AND total = 1 THEN compteur = 0: total = 2 IF compteur = 5 AND total = 2 THEN compteur = 3 compteur = compteur + 1 LOOP RETURN 5000 FOR n = 1 TO 5: confi$(n) = "": NEXT n confi$ = "Diamagnetique" neceli = 0 FOR n = 1 TO 5 IF confi(n) = 0 THEN confi$(n) = "----" IF confi(n) = 1 THEN confi$(n) = "-*--" IF confi(n) = 2 THEN confi$(n) = "-**-" IF confi(n) = 1 THEN confi$ = "Paramagnetique": neceli = neceli + 1 NEXT n RETURN DATA V(II),12.3,3,2,I,0.08,50.942,Cr(III),17.4,3,3,I,0.21,51.996,Mn(II),8.0,5,2,25500,0.07,54.938,Mn(IV),23,3,4,I,0.5,54.938,Fe(III),14.0,5,3,30000,0.24,55.847,Co(III),19.0,6,3,21000,0.35,58.933 DATA Ni(II),8.9,8,2,I,0.12,58.69,Mo(III),24,3,3,W,0.15,95.94,Rh(III),27,6,3,28000,0.30,102.91,Re(IV),35,3,4,W,0.2,186.2,Ir(III),32,6,3,W,0.3,192.22,Pt(IV),36,6,4,W,0.5,195.08 DATA F,6F-,0.9,2,-1,0.8,18.998,H2O,6H2O,1.00,2,0,1.0,18.02,Uree,6Uree,0.91,2,0,1.2,60.06,NH3,6NH3,1.25,2,0,1.4,17.03,en,3en (Ethylene Diamine),2.56,4,0,1.5,60.099 DATA ox,3ox-2 (Oxalate),1.96,4,-2,1.5,88.01,Cl,6Cl-,0.80,2,-1,2.0,35.453,CN,6CN-,1.7,2,-1,2.0,26.017,Br,6Br-,0.76,2,-1,2.3,79.904,dtp,3dtp- (Diethyldithiophosphate),1.72,4,-1,2.8,186.22,Py,6Py (Pyridine),1.25,2,0,Inc,79.10 DATA DMA,6DMA (Di Methyl Acetamide),0.85,2,0,Inc,87.12,DMSO,6DMSO (Di Methyl Sulfoxyde),0.91,2,0,Inc,78.13,DMF,6DMF (Di Methyl Formamide),0.98,2,0,Inc,73.10 DATA 4000,4200,Violet Jaune,Jaune Verdatre,4200,4450,Bleu Indigo,Jaune,4450,4900,Bleu,Orange DATA 4900,5100,Bleu Vert,Rouge,5100,5300,Vert,Pourpre,5300,5450,Vert Jaune,Violet DATA 5450,5800,Jaune,Bleu Indigo,5800,6300,Orange,Bleu,6300,7200,Rouge,Bleu Vert 6000 RANDOMIZE TIMER a = RND IF a < .35 THEN CLS CALL centre(1, "Equation de JORGENSEN pour les complexes des metaux de Transitions") CALL centre(2, "(c) 1993 Gilles OLIVE - Version PC 1.0 du 1 mai 1993") PRINT : PRINT PRINT "JORGENSEN inaugure un nouveau concept qui est le 'ScienceWare'.Ce concept " PRINT "se rencontre pour des logiciels scientifiques, et se base sur une collaboration" PRINT "entre scientifiques. Ce concept se rapproche un peu du Shareware, mais au lieu" PRINT "d'envoyer de l'argent pour avoir la derniere version, il suffit de me faire " PRINT "parvenir une information manquante (par expl une energie d'appariement de spin)." PRINT "Vous pouvez librement le copier tant que vous ne modifiez pas le message de" PRINT "depart, ni la notice l'accompagnant." PRINT PRINT "Pour l'instant, pour avoir la derniere version (qui inclura d'office vos infor-" PRINT "mations), fournissez une (ou plusieurs) donnee(s) ainsi que vos coordonnees a la" PRINT "personne qui vous a fournit JORGENSEN, et ainsi de suite jusqu'a moi." PRINT "Vous serez alors enregistres, et vous recevrez les dernieres versions." PRINT PRINT "Malgre les soins apportees et les nombreuses verifications effectuees, je ne" PRINT "peux pas etre tenu responsable des erreurs comises par ce logiciel." CALL centre(24, "Appuyer sur une touche") 6010 IF INKEY$ = "" THEN 6010 END IF END SUB centre (p, a$) z% = 40 - (LEN(a$) / 2) LOCATE p, z%: PRINT a$; END SUB FUNCTION maj$ (chaine$) a$ = chaine$ FOR n = 1 TO LEN(a$) IF MID$(a$, n, 1) >= "a" AND MID$(a$, n, 1) <= "z" THEN MID$(a$, n, 1) = CHR$(ASC(MID$(a$, n, 1)) - 32) NEXT n maj$ = a$ END FUNCTION FUNCTION trunc (number) IF number >= 0 THEN trunc = INT(number) ELSE IF INT(number) <> number THEN trunc = INT(number) + 1 ELSE trunc = INT(number) END FUNCTION