Problème dans boucle for(programme de visualisation de fonctions z= f(x,y)
cs_avedis
Messages postés1Date d'inscriptionmardi 24 octobre 2006StatutMembreDernière intervention26 octobre 2006
-
26 oct. 2006 à 14:44
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 2014
-
26 oct. 2006 à 15:07
Je suis sur Qbasic( j'ai pas le choix) et j'ai un problème dans une boucle for.
voilà le programme, c'est un programme pour dessiner des fonction de type z = f(x,y) dans l'espace par quadrillage, mais en tenant compte des "lignes cachées".
j'ai un problème dans ma boucle "FOR W=...", il ne l'a reconnait pas.
J'ai mis les passages concernés dans le programme en bleu.
si vous pouvez m'aider je vous en serais reconnaissant.
merci
' SUPERFICIES Z=F(X,Y)
'
SCREEN 11
PRINT "(ESCRIBA LA FUNCION z=f(x,y) EN LA RUTINA 'ECUACION')"
PRINT<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>
LIM = 640: DIM MIN(LIM), MAX(LIM)
FOR I 1 TO LIM: MIN(I) GV: MAX(I) = -GV: NEXT I
X3 (X2 - X1) / P0: Y3 (Y2 - Y1) / L0
IF TH <= 0 OR TH >= 180 THEN AUX = X1: X1 = X2: X2 = AUX: AUX = Y1: Y1 = Y2: Y2 = AUX: X3 = -X3: Y3 = -Y3
W1 GV: W2 -GV: W3 = GV: W4 = -GV
FOR U 0 TO L0: Y Y2 - U * Y3
FOR V 0 TO P0: X X1 + V * X3
GOSUB ECUACION
IF XE < W1 THEN W1 = XE
IF XE > W2 THEN W2 = XE
IF YE < W3 THEN W3 = YE
IF YE > W4 THEN W4 = YE
NEXT V
NEXT U
U1 (V2 - V1) / (W2 - W1): U2 (V4 - V3) / (W4 - W3)
'
IF V$ <> "U" THEN
IF U2 < U1 THEN U1 U2 ELSE U2 U1
END IF
'
' *** BUCLE U
FOR U 0 TO L0: Y Y2 - U * Y3: X = X1: GOSUB ECUACION
A1 (XE - W1) * U1 + V1: B1 CY - (YE - W3) * U2 - V3
P = 2
IF MAX(A1) <> -GV THEN
P 0: IF MAX(A1) < B1 THEN P 2
IF MIN(A1) > B1 THEN P = 1
END IF
'
' *** BUCLE W
FOR W 1 TO L0 + 1: Y Y2 - W * Y3: X = X1: GOSUB ECUACION
A2 (XE - W1) * U1 + V1: B2 CY - (YE - W3) * U2 - V3
GOSUB TRAZA: GOTO OTROV
'
' *** BUCLE V
FOR V 0 TO P0: X X1 + V * X3: GOSUB ECUACION
A2 (XE - W1) * U1 + V1: B2 CY - (YE - W3) * U2 - V3
Q P: IF MAX(A2) -GV THEN GOSUB TRAZA: GOTO OTROV
AIG 0: Q 0: IF MAX(A2) < B2 THEN Q = 2
IF MIN(A2) > B2 THEN Q = 1
IF P 0 AND Q 0 THEN GOTO OTROV
IF P 0 OR Q 0 THEN TB = P + Q: GOTO ONTB
IF P = Q THEN GOSUB TRAZA: GOTO OTROV
AIG 1: TB 1: IF P <> 1 THEN TB = 2
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 26 oct. 2006 à 15:07
Et si tu fais la modif précédente, tu auras en plus un problème avec les GOTO OTROV.
L'étiquette va se retrouver à l'intérieur de la boucle V, donc le GOTO OTROV de la boucle W sera incorrecte. Si tu place l'étiquette à l'extérieur de la boucle V, c'est ceux de la boucle V qui seront incorrect
---- Sevyc64 (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #