Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Ayuda urgentisima

Estas en el tema de Ayuda urgentisima en el foro de C/C++ en Foros del Web. Ahi va el ejercicio que me saca de mis casillas xdxd, que no hay manera de que me salga, os cuento. Ejercicio: Diseñar un programa ...
  #1 (permalink)  
Antiguo 21/11/2009, 11:38
 
Fecha de Ingreso: noviembre-2009
Mensajes: 14
Antigüedad: 14 años, 5 meses
Puntos: 0
Ayuda urgentisima

Ahi va el ejercicio que me saca de mis casillas xdxd, que no hay manera de que me salga, os cuento.

Ejercicio: Diseñar un programa en C que pida por teclado un carácter, una anchura y una altura y presente en pantalla un cuadro con esas dimensiones y donde el borde esté formado por ese carácter.

Un ejemplo: introduzco como caracter e, altura 4 y ancho 6, pues me tendria que mostrar esto:

eeeeee
e------e
e------e
eeeeee

Nota: los guiones son espacios, estos no deben ser visibles

Aqui esta mi codigo:

Código:
#include <stdio.h>
#include <stdlib.h>


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

    i=0;j=0;an=0;al=0;

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

    for(i=0;i<al;i++)
    {
        for(j=0;j<an;j++)
        {
            if((i==0)||(j==0))
            {
            printf("%c",caracter);
            }
            else
            {
            if((j!=an)||(i!=al))
            {
            printf(" ");
            }
            }
        }
     printf("\n");
    }
    return 0;
}
Si nos basamos en el ejemplo anterior con el codigo solo consigo que me salga:

eeeeee
e
e
e


Espero que me podais ayudar por favor
  #2 (permalink)  
Antiguo 21/11/2009, 12:31
 
Fecha de Ingreso: mayo-2007
Mensajes: 200
Antigüedad: 17 años
Puntos: 1
Respuesta: Ayuda urgentisima

Código:
#include <stdio.h>
#include <windows.h>

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

    an=0;al=0;

    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 de anchura//
    {
        for(i=1; i<=al; i++)
            printf("%c\n", caracter);
    }
    else
    {    
        for(i=1;i<=al;i++)                  //Controla el numero de filas//
        {
            printf("%c", caracter);         //Siempre escribe el primer caracter//
            for(j=2;j<an;j++)
            {
            
                if( (i==1) || (i==al) )
                    printf("%c",caracter);
                else
                    printf(" ");
            }
            printf("%c", caracter);         //Siempre escribe el ultimo caracter//
        printf("\n");
        }
    }
    system("pause");                        //Esto solo sirve para parar el programa y poder ver el resultado: windows.h//
    return 0;
}
Te fallataban un par de printf y cambiar un poco los bucles. Te comento un par de cosas. La librería stdlib.h (#include <stdlib.h>) no te hace falta aquí para nada. Luego, si las variables i, j las estas utilizando unicamente en bucles for, no hace falta que las inicialices antes, porque ya lo haces en el for: for(i=0; i<....)
  #3 (permalink)  
Antiguo 21/11/2009, 12:47
 
Fecha de Ingreso: noviembre-2009
Mensajes: 14
Antigüedad: 14 años, 5 meses
Puntos: 0
Respuesta: Ayuda urgentisima

Diosss muchisimas gracias vrael, llevaba ayer y hoy calentandome la cabeza y que no habia manera, y llegas tu y lo resuelves en nada, muchisimas gracias
  #4 (permalink)  
Antiguo 21/11/2009, 14:22
 
Fecha de Ingreso: noviembre-2009
Mensajes: 14
Antigüedad: 14 años, 5 meses
Puntos: 0
Respuesta: Ayuda urgentisima

Y esto como funcionaria realmente paso por paso?como si lo explicarais a un niño de 3 años xdxd, ske no veo muy bien la logica de las cosas :(
  #5 (permalink)  
Antiguo 21/11/2009, 20:23
 
Fecha de Ingreso: mayo-2007
Mensajes: 200
Antigüedad: 17 años
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!
  #6 (permalink)  
Antiguo 22/11/2009, 06:37
 
Fecha de Ingreso: noviembre-2009
Mensajes: 14
Antigüedad: 14 años, 5 meses
Puntos: 0
Respuesta: Ayuda urgentisima

ya lo voy entendiendo mejor gracias :D
  #7 (permalink)  
Antiguo 23/11/2009, 08:31
 
Fecha de Ingreso: noviembre-2009
Mensajes: 14
Antigüedad: 14 años, 5 meses
Puntos: 0
Respuesta: Ayuda urgentisima

Otro problema, y si ahora partiendo del cuadrado quiero meter otros cuadrados dentro, como seria?
Me explico introducimos caracter, ancho y alto , y nos muestra el cuadrado en forma de ventana, es decir, asin:

eeeeeee
e--e--e
eeeeeee
e--e--e
eeeeeee

Nota: los guiones son como espacios
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:01.