Red de conocimiento informático - Conocimiento del nombre de dominio - Algoritmos de programación formal

Algoritmos de programación formal

Se ha modificado, principalmente cambiando de ubicación.

Su código es demasiado antiguo, mucho más antiguo que C99, incluso más antiguo que C89.

Simplemente lo cambié y no sé si fue tu petición.

Sin TC, la verificación no se puede ejecutar.

# include & ltstdio.h & gt

# include & ltgraphics.h & gt

#Definición izquierda 1

#Definición Derechos 2

#define abajo 4

#define arriba 8

/*

#define XL 100

#Definition XR 400

#Definition YB 100

#Definition YT 400

*///El código ha sido eliminado

float XL, YB, XR, YT; /// Código agregado // Movido de la función principal.

Codificación nula (coma flotante x, coma flotante y, int * código)

{

int c = 0;

if (x & lt; XL)c = c | IZQUIERDA

si no (x & lt; c = c | ABAJO;

si no (y & gt; YT)c = c | ARRIBA;

* código = c;

Retorno;

}

/*(x1, y1) y ( x2, y2) son las coordenadas del punto final del segmento de línea.

Los otros cuatro parámetros definen los límites izquierdo, inferior, derecho y superior de la ventana*/

void C_S_LineCLip(punto flotante x1, punto flotante y1, punto flotante x2, punto flotante y2 )

{

int código1, código2, código;

Punto flotante x, y;

Codificación (x1, y1, & amp code 1);

Codificación (x2, y2 y ampcode 2);

while((code1!=0) ||(code2!=0))

{

if((código 1 y código 2)! = 0) devuelve

código = código 1

if( código 1 == 0)código = código 2;

if ((left & code)!=0)/*El segmento de línea cruza el límite izquierdo*/

{

x = XL

y = y 1+(y2-y 1)*(XL-x 1)/(x2-x 1);

}< / p>

else if((Código derecho y amp)!=0)/*El segmento de línea cruza el límite derecho*/

{

x = XR

y = y 1+(y2-y 1)*(XR-x 1)/(x2-x 1);

}

si no(( BOTTOM & amp ; código)! =0)/*El segmento de línea intersecta el límite inferior*/

{

y = YB

x = x 1 +(x2-x 1)*(y B- y 1)/(y2-y 1);

}

else if((TOP & amp; código)!= 0) /*Segmento de línea intersecta el límite superior*/

{

y = YT

x = x 1+(x2-x 1)*( YT-y 1)/ (y2-y 1);

}

if(código==código1)

{ x 1 = x 1; = y; código(x, y y código de amplificador 1);}

Otro

{ x2 = x; y2 = y; codificación (x, y y código de amplificador 2);}

}

Fila ((int)x1, (int)y1, (int)x2, (int)y2);

Retorno;

}

int main()

{

int Graphdriver = VGA

int Graphmode = VGAHI

Punto flotante px1, py1, px2, py2

//float XL, YB, XR, YT /// El código agregado se mueve al frente.

init graph(& controlador de gráficos y modo gráfico, " c:\\turbo 2 "

scanf("%f%f%f%f ", & ampXL & amp ;YB & Introduzca los dos puntos finales de la línea que desea recortar: ");

scanf("%f%f%f%f",&px1.py1.px2&py2);

C_S_LineCLip(px1, py1, px2, py2);

closegraph();

getchar();

Devuelve 0;

}