Ver Mensaje Individual
  #5 (permalink)  
Antiguo 21/11/2009, 20:23
vrael
 
Fecha de Ingreso: mayo-2007
Mensajes: 200
Antigüedad: 17 años, 9 meses
Puntos: 1
Mensaje Respuesta: Ayuda urgentisima

De nada. Pues a ver:

Código:
#include <stdio.h>

#include <windows.h>  //solo sirve para poder utilizar la funcion system("pause");//

int main()
{
    char caracter;
    int i,j,an,al;

    /* an=0;al=0; */                 //esto se puede omitir. No necesitas inicializar las variables a 0 porque debajo ya les asignas un valor. Aunque no es que esté mal.//

    printf("Introduce caracter: ");
    scanf("%c", &caracter);
    printf("Introduce altura: ");
    scanf("%i", &al);
    printf("Introduce ancho: ");
    scanf("%i", &an);

    if (an==1)                              // Caso especial para 1 caracter de anchura//
    {
        for(i=1; i<=al; i++)             //Como solo tiene 1 de ancho, 1 solo bucle para controlar el numero de filas//
            printf("%c\n", caracter); //Voy escribiendo el caracter y salto de linea. Consigo hacer una columna de un solo caracter//
    }
    else
    {    
        for(i=1;i<=al;i++)                  //Controla el numero de filas//
        {
            printf("%c", caracter);         //Siempre escribe el primer caracter. Como todas las filas empiezan por caracter, lo escribo siempre, independientemente de lo que vaya a hacer despues//
            for(j=2;j<an;j++)                //Empiezo en j=2 quitando una columna, que es el caracter que he escrito antes. Por eso empieza con una "iteración" menos, en j=2 y no en j=1. Y le digo que mientras j<ancho, porque también voy a escribir siempre (+ abajo está puesto) el último caracter, independientemente de lo que tenga antes//
            {
            
                if( (i==1) || (i==al) )        //Si estamos en la primera fila (i==1) o en la última (i==altura), entonces escribe el caracter tantas veces como ancho se haya indicado - 2, que son los caracteres inicial y final que ya he escrito antes y después//
                    printf("%c",caracter);
                else                                //Si no estoy al principio ni al final, es que estoy en medio, y por tanto escribo solo espacios, ya que el primer caracter ya lo he escrito, y el último lo escribire después, pero fuera de este bucle!!//
                    printf(" ");
            }
            printf("%c", caracter);         //Siempre escribe el ultimo caracter//
        printf("\n");                              //Salto de linea //
        }
    }
    system("pause");                        //Esto solo sirve para parar el programa y poder ver el resultado: #include <windows.h>//
    return 0;
}
Te he puesto el código con comentarios al lado. Puede que aquí se mezcle un poco, pero si lo pegas en tu compilador, los comentarios (lo que hay entre // //) se te colearán de otro color seguramente (suelen ponerse azules).
Espero que te sirva como explicación.

Chao!