Foros aprenderaprogramar.com

Aprender a programar => C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más => Mensaje iniciado por: rackdon en 22 de Abril 2014, 12:04

Título: Problema en C, dibujar cuadradado con asteriscos y círculos
Publicado por: rackdon en 22 de Abril 2014, 12:04
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
Título: Re:Problema en C, dibujar cuadradado con asteriscos y círculos
Publicado por: Alex Rodríguez 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.
Título: Re:Problema en C, dibujar cuadradado con asteriscos y círculos
Publicado por: rackdon en 22 de Abril 2014, 12:55
Muchas gracias por todo. Ya he entendido donde estaba el fallo de razonamiento.
Título: Re:Problema en C, dibujar cuadradado con asteriscos y círculos
Publicado por: rackdon en 22 de Abril 2014, 12:58

Una ultima pregunta ya que estoy.
¿Habria alguna forma de hacer el codigo mas eficiente?
Título: Re:Problema en C, dibujar cuadradado con asteriscos y círculos
Publicado por: Alex Rodríguez 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  :)

 
Título: Re:Problema en C, dibujar cuadradado con asteriscos y círculos
Publicado por: rackdon en 22 de Abril 2014, 19:46
jajajaja. Me ha gustado esa respuesta. Muchisimas gracias.
Pues nada a seguir mejorando  ;D