UNED: FUNDAMENTOS DE PROGRAMACIÓN: SEGUNDA PRÁCTICA
SEGUNDA PRÁCTICA: ROMBOS.
Enunciado de la práctica:
Esta práctica consiste en realizar un programa que imprima por pantalla rombos concéntricos dibujados con los caracteres '@', 'o' y '.'.
El programa solicitará, como dato de entrada, la longitud del lado del rombo más externo (es decir, su número de caracteres). De fuera hacia dentro, el primer rombo estará formado por caracteres '@', el segundo por caracteres '.', el tercero por caracteres 'o', el cuarto nuevamente por caracteres '.', el quinto por caracteres '@', el sexto también por caracteres '.', el séptimo por caracteres 'o' y así sucesivamente.
El rombo siempre debe quedar ajustado a la izquierda de la pantalla y estar separado con una línea en blanco después de la pregunta ¿lado del rombo?
El tamaño más grande del rombo será de 20 caracteres de lado. El programa no deberá imprimir nada para tamaños cero o negativo, ni para tamaños superiores a 20.
La secuencia cíclica de caracteres repite siempre este esquema: '@.0.'
Esta secuencia puede implementarse utilizando el operador % de resto de división.
Solución:
/************************************
* NOMBRE: #Perico#
* PRIMER APELLIDO: #Palotes#
* SEGUNDO APELLIDO: #Zutano#
* DNI: #99999999W#
* EMAIL: #99999999@yahoo.es#
************************************/
#include <stdio.h>
int main() {
int lado; /* lado del rombo */
/* Leer el lado del rombo deseado */
printf( "¿Lado del rombo?" );
scanf( "%d", &lado );
/* saltar una línea */
printf( "\n" );
/* Condicional para que el programa no se ejecute si el lado es menor a 0 o mayor de 20 */
if( lado > 0 && lado <= 20) {
/* Una iteración por cada línea del rombo en la parte superior */
for( int linea = 1; linea <= lado; linea++) {
/* Paso 1º: Espacios en blanco a la izquierda del rombo */
for( int posicion = 1; posicion <= lado - linea; posicion++ ) {
printf( " " );
}
/* Paso 2º: Escribir caracteres en cada línea hasta la mitad del rombo */
for( int posicion = 1; posicion <= linea; posicion++ ) {
if( posicion % 4 == 1) {
printf( "@" );
} else if( posicion % 4 == 2) {
printf( "." );
} else if( posicion % 4 == 3) {
printf( "o" );
} else {
printf( "." );
}
}
/* Paso 3º: Escribir caracteres en cada línea desde la mitad del rombo hasta el final */
for( int posicion = linea - 1; posicion >= 1; posicion-- ) {
if( posicion % 4 == 1) {
printf( "@" );
} else if( posicion % 4 == 2) {
printf( "." );
} else if( posicion % 4 == 3) {
printf( "o" );
} else {
printf( "." );
}
}
/* Pasar a la línea de abajo */
printf( "\n" );
}
/* Una iteración por cada línea del rombo en la parte inferior */
for( int linea = lado + 1; linea <= (lado * 2) - 1; linea++ ) {
/* Paso 1º: Espacios en blanco a la izquierda del rombo */
for( int posicion = 1; posicion <= linea - lado; posicion++ ) {
printf( " " );
}
/* Paso 2º: Escribir caracteres en cada línea hasta la mitad del rombo */
for (int posicion = 1; posicion <= lado - (linea - lado); posicion++ ) {
if( posicion % 4 == 1) {
printf( "@" );
} else if( posicion % 4 == 2) {
printf( "." );
} else if( posicion % 4 == 3) {
printf( "o" );
} else {
printf( "." );
}
}
/* Paso 3º: Escribir caracteres en cada línea desde la mitad del rombo hasta el final */
for( int posicion = lado - (linea - lado + 1); posicion >= 1 ; posicion--) {
if( posicion % 4 == 1) {
printf( "@" );
} else if( posicion % 4 == 2) {
printf( "." );
} else if( posicion % 4 == 3) {
printf( "o" );
} else {
printf( "." );
}
}
/* Pasar a la línea de abajo */
printf( "\n" );
}
}
}
Adjunto el enlace al archivo cpp: http://www.lacoctelera.com/myfiles/arquitrasto/practica_2_publica.rar
pedro dijo
aunque parece que va bien no pasa el corrector del entorno. ....
27 Diciembre 2011 | 04:55 PM