domingo, octubre 02, 2005

Práctica 1. Crear un rombo.

(**************************************************** *NOMBRE: #Alejandro# *PRIMER APELLIDO: #XXXX# *SEGUNDO APELLIDO: #XXXXX# *DNI: #XXXXXXXX# ****************************************************) MODULE Rombo; FROM InOut IMPORT WriteString, WriteLn, Write, ReadInt; VAR nLinea : INTEGER; (* fila *) columna : INTEGER; (* columna *) sumFilCol : INTEGER; (* suma de filas y columnas *) lado : INTEGER; (* lado del rombo *) eje : INTEGER; (* eje para marcar el final de fila *) espacios : INTEGER; (* espacios en blanco *) esp1, esp2, esp3, esp4, esp5 : INTEGER; (* espacios del caracter '@' *) BEGIN
(*--Leer dato desde consola. --*)
WriteString ("Lado del rombo? "); ReadInt (lado); WriteLn; WriteLn;
(*-- Inicializamos los contornos '@' --*)
esp1 := lado + 1; esp2 := esp1 + 4; esp3 := esp2 + 4; esp4 := esp3 + 4; esp5 := esp4 + 4;
(*-- Algoritmo para imprimir el rombo --*)
(*-- SI EL DATO INTRODUCIDO ESTA ENTRE 1 Y 20 Y ES PAR MOSTRAMOS ESTE ALGORITMO --*)
IF (lado > 0) AND (lado < 2 =" 0)" href="mailto:">'@', o si la suma es número par se imprime '.' o si la suma es número impar se imprime 'o' --*) sumFilCol := nLinea + columna; IF (sumFilCol = esp1) OR (sumFilCol = esp2) OR (sumFilCol = esp3) OR (sumFilCol = esp4) OR (sumFilCol = esp5) THEN Write ('@'); ELSIF sumFilCol MOD 2 = 0 THEN Write ('.'); ELSIF sumFilCol MOD 2 # 0 THEN Write ('o'); END; END; (*-- CUADRANTE SUPERIOR DERECHO --*) eje := (lado +1) - nLinea; (* el eje determina el final de la escritura por pantalla *) FOR columna := lado - 1 TO eje BY -1 DO (* recorremos todas las columnas hasta el eje *) (*-- Si la suma de la fila y columna es un contorno se imprime '@', o si la suma es número par se imprime '.' o si la suma es número Impar se imprime 'o' --*) sumFilCol := nLinea + columna; IF (sumFilCol = esp1) OR (sumFilCol = esp2) OR (sumFilCol = esp3) OR (sumFilCol = esp4) OR (sumFilCol = esp5) THEN Write ('@'); ELSIF sumFilCol MOD 2 = 0 THEN Write ('.'); ELSIF sumFilCol MOD 2 # 0 THEN Write ('o'); END; END; WriteLn; (* un salto de linea par el final de cada fila *) END; (*-- CUADRANTES INFERIORES --*) FOR nLinea := lado - 1 TO 1 BY - 1 DO (* filas del cuadrante *) eje := lado; (* el eje determina el final de la escritura por pantalla *) columna := lado - nLinea; (* primer columna *) (*-- Preparamos los espacios en blanco --*) FOR espacios := 1 TO columna DO Write (' '); END; (*-- CUADRANTE INFERIOR IZQUIERDO --*) FOR columna := (lado + 1) - nLinea TO eje DO (* recorremos todas las columnas hasta el eje *) (*-- Si la suma de la fila y columna es un contorno se imprime '@', o si la suma es número par se imprime '.' o si la suma es número impar se imprime 'o' --*) sumFilCol := nLinea + columna; IF (sumFilCol = esp1) OR (sumFilCol = esp2) OR (sumFilCol = esp3) OR (sumFilCol = esp4) OR (sumFilCol = esp5) THEN Write ('@'); ELSIF sumFilCol MOD 2 = 0 THEN Write ('.'); ELSIF sumFilCol MOD 2 # 0 THEN Write ('o'); END; END; (*-- CUADRANTE INFERIOR DERECHO --*) eje := (lado +1) - nLinea; (* el eje determina el final de la escritura por pantalla *) FOR columna := lado - 1 TO eje BY -1 DO (* recorremos todas las columnas hasta el eje *) (*-- Si la suma de la fila y columna es un contorno se imprime '@', o si la suma es número par se imprime '.' o si la suma es número impar se imprime 'o' --*) sumFilCol := nLinea + columna; IF (sumFilCol = esp1) OR (sumFilCol = esp2) OR (sumFilCol = esp3) OR (sumFilCol = esp4) OR (sumFilCol = esp5) THEN Write ('@'); ELSIF sumFilCol MOD 2 = 0 THEN Write ('.'); ELSIF sumFilCol MOD 2 # 0 THEN Write ('o'); END; END; WriteLn; END; (*-- SI EL DATO INTRODUCIDO ESTA ENTRE 1 Y 20 Y ES IMPAR MOSTRAMOS ESTE ALGORITMO --*) ELSIF (lado > 0) AND (lado < href="mailto:">'@', o si la suma es número par se imprime 'o' o si la suma es número impar se imprime '.' --*) sumFilCol := nLinea + columna; IF (sumFilCol = esp1) OR (sumFilCol = esp2) OR (sumFilCol = esp3) OR (sumFilCol = esp4) OR (sumFilCol = esp5) THEN Write ('@'); ELSIF sumFilCol MOD 2 = 0 THEN Write ('o'); ELSIF sumFilCol MOD 2 # 0 THEN Write ('.'); END; END; (*-- CUADRANTE SUPERIOR DERECHO --*) eje := (lado +1) - nLinea; (* el eje determina el final de la escritura por pantalla *) FOR columna := lado - 1 TO eje BY -1 DO (* recorremos todas las columnas hasta el eje *) (*-- Si la suma de la fila y columna es un contorno se imprime '@', o si la suma es número par se imprime 'o' o si la suma es número Impar se imprime '.' --*) sumFilCol := nLinea + columna; IF (sumFilCol = esp1) OR (sumFilCol = esp2) OR (sumFilCol = esp3) OR (sumFilCol = esp4) OR (sumFilCol = esp5) THEN Write ('@'); ELSIF sumFilCol MOD 2 = 0 THEN Write ('o'); ELSIF sumFilCol MOD 2 # 0 THEN Write ('.'); END; END; WriteLn; (* un salto de linea par el final de cada fila *) END; (*-- CUADRANTES INFERIORES --*) FOR nLinea := lado - 1 TO 1 BY - 1 DO (* filas del cuadrante *) eje := lado; (* el eje determina el final de la escritura por pantalla *) columna := lado - nLinea; (* primer columna *) (*-- Preparamos los espacios en blanco --*) FOR espacios := 1 TO columna DO Write (' '); END; (*-- CUADRANTE INFERIOR IZQUIERDO --*) FOR columna := (lado + 1) - nLinea TO eje DO (* recorremos todas las columnas hasta el eje *) (*-- Si la suma de la fila y columna es un contorno se imprime '@', o si la suma es número par se imprime 'o' o si la suma es número impar se imprime '.' --*) sumFilCol := nLinea + columna; IF (sumFilCol = esp1) OR (sumFilCol = esp2) OR (sumFilCol = esp3) OR (sumFilCol = esp4) OR (sumFilCol = esp5) THEN Write ('@'); ELSIF sumFilCol MOD 2 = 0 THEN Write ('o'); ELSIF sumFilCol MOD 2 # 0 THEN Write ('.'); END; END; (*-- CUADRANTE INFERIOR DERECHO --*) eje := (lado +1) - nLinea; (* el eje determina el final de la escritura por pantalla *) FOR columna := lado - 1 TO eje BY -1 DO (* recorremos todas las columnas hasta el eje *) (*-- Si la suma de la fila y columna es un contorno se imprime '@', o si la suma es número par se imprime 'o' o si la suma es número impar se imprime '.' --*) sumFilCol := nLinea + columna; IF (sumFilCol = esp1) OR (sumFilCol = esp2) OR (sumFilCol = esp3) OR (sumFilCol = esp4) OR (sumFilCol = esp5) THEN Write ('@'); ELSIF sumFilCol MOD 2 = 0 THEN Write ('o'); ELSIF sumFilCol MOD 2 # 0 THEN Write ('.'); END; END; WriteLn; END; END; END Rombo.

No hay comentarios: