Autor Tema: Problema en C, dibujar cuadradado con asteriscos y círculos  (Leído 26342 veces)

rackdon

  • Principiante
  • **
  • APR2.COM
  • Mensajes: 50
    • Ver Perfil
Buenos dias. Tengo un ejercicio que consiste en mostrar un cuadrado en funcion del lado que se introduzca. El codigo que he escrito es el siguiente:

Código: [Seleccionar]

// Ejercicio 3.34: Mostrar con "*" el perimetro de un cuadrado en funcion de su lado //


#include <stdio.h>

main()
{
      int lado = 0;
      int horizontal = 1;
      int vertical = 1;
     
      printf("Por favor introduzca la medida del lado (entre 1 y 20): "); scanf("%d", &lado);
      printf("\n");
     
      // Si se introduce un numero erroneo //
      while (lado < 1 || lado > 20) {
            printf("El numero introducido no es correcto\n\n");
            printf("Por favor introduzca la medida del lado (entre 1 y 20): "); scanf("%d", &lado);
            printf("\n");
            } // Fin while //
     
     
     // Si el numero es correcto //
         
     while (vertical <= lado) {
           while (horizontal <= lado) {
                 if (vertical != 1 || vertical != lado){
                               if (horizontal != 1 || horizontal != lado){
                                             printf("o");
                                             horizontal++; } // fin if 2 //
                               else {
                                    printf("*");
                                    horizontal++;}
                               } // fin if 1 //             
                                             
                 else {
                 printf("*");
                 horizontal++; }
                 } // fin while 2 //
           horizontal = 1;
           printf("\n");
           vertical++; } // fin while 1 //
     
     printf("\n");
           
     
system("pause");
return 0;
}
     

Lo que yo esperaba que saliera era, si por ejemplo introducia de lado 4, era esto:

****
*oo*
*oo*
****

Por el contrario, lo que sale es esto:

oooo
oooo
oooo
oooo

Agradeceria si alguien me pudiera decir donde esta el error, porque he estado revisandolo pero no consigo ver el fallo, ya que no veo por que solo entra en el bucle de mostrar "o" y no "*".

Muchas gracias
« Última modificación: 22 de Abril 2014, 12:33 por Alex Rodríguez »

Alex Rodríguez

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2050
    • Ver Perfil
Re:Problema en C, dibujar cuadradado con asteriscos y círculos
« Respuesta #1 en: 22 de Abril 2014, 12:35 »
Hola, no tienes bien las condiciones, estás poniendo "OR" cuando debes poner "AND"

Tienes escrito:

Código: [Seleccionar]
if (vertical != 1 || vertical != lado){
                               if (horizontal != 1 || horizontal != lado){
                                             printf("o");
                                             horizontal++; } // fin if 2 //
                               else {
                                    printf("*");
                                    horizontal++;}
                               } // fin if 1 //

                 else {
                 printf("*");
                 horizontal++; }


Debe ser:

Código: [Seleccionar]
if (vertical != 1 && vertical != lado){
                               if (horizontal != 1 && horizontal != lado){
                                             printf("o");
                                             horizontal++; } // fin if 2 //
                               else {
                                    printf("*");
                                    horizontal++;}
                               } // fin if 1 //

                 else {
                 printf("*");
                 horizontal++; }


Completo:
Código: [Seleccionar]
#include <stdio.h>
#include <stdlib.h>

// Ejercicio 3.34: Mostrar con "*" el perimetro de un cuadrado en funcion de su lado //

int main() {
      int lado = 0;
      int horizontal = 1;
      int vertical = 1;

      printf("Por favor introduzca la medida del lado (entre 1 y 20): "); scanf("%d", &lado);
      printf("\n");

      // Si se introduce un numero erroneo //
      while (lado < 1 || lado > 20) {
            printf("El numero introducido no es correcto\n\n");
            printf("Por favor introduzca la medida del lado (entre 1 y 20): "); scanf("%d", &lado);
            printf("\n");
            } // Fin while //


     // Si el numero es correcto //

     while (vertical <= lado) {
           while (horizontal <= lado) {
                 if (vertical != 1 && vertical != lado){
                               if (horizontal != 1 && horizontal != lado){
                                             printf("o");
                                             horizontal++; } // fin if 2 //
                               else {
                                    printf("*");
                                    horizontal++;}
                               } // fin if 1 //

                 else {
                 printf("*");
                 horizontal++; }
                 } // fin while 2 //
           horizontal = 1;
           printf("\n");
           vertical++; } // fin while 1 //

     printf("\n");


system("pause");
return 0;
}

Saludos.

rackdon

  • Principiante
  • **
  • APR2.COM
  • Mensajes: 50
    • Ver Perfil
Re:Problema en C, dibujar cuadradado con asteriscos y círculos
« Respuesta #2 en: 22 de Abril 2014, 12:55 »
Muchas gracias por todo. Ya he entendido donde estaba el fallo de razonamiento.
« Última modificación: 22 de Abril 2014, 13:09 por rackdon »

rackdon

  • Principiante
  • **
  • APR2.COM
  • Mensajes: 50
    • Ver Perfil
Re:Problema en C, dibujar cuadradado con asteriscos y círculos
« Respuesta #3 en: 22 de Abril 2014, 12:58 »

Una ultima pregunta ya que estoy.
¿Habria alguna forma de hacer el codigo mas eficiente?
« Última modificación: 22 de Abril 2014, 13:10 por rackdon »

Alex Rodríguez

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2050
    • Ver Perfil
Re:Problema en C, dibujar cuadradado con asteriscos y círculos
« Respuesta #4 en: 22 de Abril 2014, 19:16 »
Seguramente sí, hay un dicho que dice que un programa siempre se puede hacer más eficiente, y otro que dice que si pretendes esperar a que un programa tenga la máxima eficiencia antes de comenzar a utilizarlo, nunca comenzarás a utilizarlo. Para mejorar la eficiencia de los programas hay varias vías, las principales estudiar, razonar, practicar y aprender de otros... Así que aquí seguimos aprendiendo  :)

 

rackdon

  • Principiante
  • **
  • APR2.COM
  • Mensajes: 50
    • Ver Perfil
Re:Problema en C, dibujar cuadradado con asteriscos y círculos
« Respuesta #5 en: 22 de Abril 2014, 19:46 »
jajajaja. Me ha gustado esa respuesta. Muchisimas gracias.
Pues nada a seguir mejorando  ;D

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".