Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Mario Olivera en 21 Julio 2014, 07:48 am



Título: Mi programa que dibuja un cuadrado
Publicado por: Mario Olivera en 21 Julio 2014, 07:48 am
Hola gente, pensé en hacer un programa con instrucciones while (mientras) que lo que haga sea pedir el ancho de un cuadrado y el largo, y el programa lo dibuja con *, quisas sea algo facil de programar con otro tipos de funciones que posea C++ pero la verdad es que yo lo hice con while y me rompí un poco la cabeza, asi que les dejo el codigo para que lo vean los que tengan dificultades con while o simplemente para entender un poco como trabaja el programa.

Lo hice separando la interfaz de la implementacion.

Main.cpp

Código
  1. #include <iostream>
  2. using std::cin;
  3. using std::cout;
  4. using std::endl;
  5.  
  6. #include "Cuadrado.h"
  7.  
  8. int main()
  9. {
  10. //Inicializacion de variables
  11. int anchoCuadrado;
  12. int largoCuadrado;
  13. cout <<"Ingrese el ancho del cuadrado: ";
  14. cin >> anchoCuadrado;
  15. cout <<"Ingrese el largo del cuadrado: ";
  16. cin >> largoCuadrado;
  17. cout <<endl <<endl <<endl;
  18.  
  19. Cuadrado Cuadrado1(anchoCuadrado,largoCuadrado);
  20. cin.get();
  21. cin.get();
  22. return 0;
  23. }

Cuadrado.h

Código
  1. class Cuadrado
  2. {
  3. public:
  4. Cuadrado(int,int);
  5. void imprime(int,int);
  6. private:
  7. int anchoCuadrado;
  8. int largoCuadrado;
  9. };

Cuadrado.cpp

Código
  1. #include <iostream>
  2. using std::cout;
  3. using std::cin;
  4. using std::endl;
  5.  
  6. #include <string>
  7. using std::string;
  8.  
  9. #include "Cuadrado.h"
  10.  
  11. Cuadrado::Cuadrado(int ancho,int largo)
  12. {
  13. imprime(ancho,largo);
  14. }
  15.  
  16. void Cuadrado::imprime(int a, int l)
  17. {
  18. //Tamaño Cuadrado
  19. anchoCuadrado= a;
  20. largoCuadrado= l;
  21.  
  22.  
  23. string caracter = "*";
  24. int contador = 0;
  25.  
  26. // HORIZONTAL
  27. while (contador < anchoCuadrado)
  28. {
  29. cout <<caracter;
  30. ++contador;
  31. }
  32.  
  33. cout <<endl;
  34. contador = 0; //establece a 0 para el lugar de abajo
  35.  
  36. //VERTICAL
  37.  
  38. largoCuadrado -= 2; //por los caracteres que se usa arriba y abajo
  39. int contadorlargo = 0;
  40.  
  41. while (contadorlargo != largoCuadrado)
  42. {
  43. while (contador < anchoCuadrado)
  44.    {
  45.    cout <<caracter;
  46.    ++contador;
  47.    }
  48. cout <<endl;
  49. contador=0;
  50. ++contadorlargo;
  51. }
  52.  
  53. // HORIZONTAL
  54. while (contador < anchoCuadrado)
  55. {
  56. cout <<caracter;
  57. ++contador;
  58. }
  59. }
  60.  
  61.  


Eso es todo  ;D


Título: Re: Mi programa que dibuja un cuadrado
Publicado por: CalgaryCorpus en 21 Julio 2014, 20:33 pm
¿Por que solicitas ancho y largo del cuadrado, si ellos son siempre iguales?


Título: Re: Mi programa que dibuja un cuadrado
Publicado por: ivancea96 en 21 Julio 2014, 21:57 pm
En un lugar pones "espacio()", mientras que en otro pones directamente "cout<<endl;".
Aclárate xD


Título: Re: Mi programa que dibuja un cuadrado
Publicado por: Mario Olivera en 22 Julio 2014, 03:11 am
¿Por que solicitas ancho y largo del cuadrado, si ellos son siempre iguales?


cómo qué son siempre iguales? son datos ingresados por un actor/usuario  :-\

En un lugar pones "espacio()", mientras que en otro pones directamente "cout<<endl;".
Aclárate xD

JAJAJA la verdad es que estaba probando con un while y no podía usar el endl porque se me imprimía una vez el salto de línea y hice esa función y quedó xD, cansancio nomás pero ahí edité el código


Título: Re: Mi programa que dibuja un cuadrado
Publicado por: kutcher en 22 Julio 2014, 03:27 am
como que son siempre iguales? son datos ingresados por un actor/usuario

Lo que dice CalgaryCorpus es cierto, al tratarse de un cuadrado todos los lados del mismo son iguales.


Título: Re: Mi programa que dibuja un cuadrado
Publicado por: Mario Olivera en 22 Julio 2014, 06:47 am
Lo que dice CalgaryCorpus es cierto, al tratarse de un cuadrado todos los lados del mismo son iguales.

SISI, es cierto en realidad puede dibujar un cuadrado o un rectángulo, puse para que el actor/usuario ingrese el largo y el ancho para que se pueda dibujar cualquiera de los dos, pero el ejercicio me pedia que dibuje un cuadrado  :laugh:


Título: Re: Mi programa que dibuja un cuadrado
Publicado por: CalgaryCorpus en 22 Julio 2014, 07:00 am
¿que ocurre si se ingresan numeros negativos?


Título: Re: Mi programa que dibuja un cuadrado
Publicado por: ivancea96 en 22 Julio 2014, 10:44 am
Dado que el método imprime es privado, creo que sería más conveniente hacer una función en vez de una clase, ya que la clase se quedará en memoria sin hacer nada.


Título: Re: Mi programa que dibuja un cuadrado
Publicado por: eferion en 22 Julio 2014, 11:13 am
Dado que el método imprime es privado, creo que sería más conveniente hacer una función en vez de una clase, ya que la clase se quedará en memoria sin hacer nada.

Si la idea es permitir la creación de una escena en la que se van insertando elementos, lo suyo sería que el método "imprime" sea propio del objeto... así cada objeto de la escena sabe cómo ha de pintarse... claro que en tal caso el método debería ser público y únicamente debería ser llamado por un objeto tipo "escena".

Lo que está claro es que no tiene ningún sentido que el método "imprime" sea privado... una clase que únicamente tiene un constructor y un destructor... salvo excepciones contadas, no sirve absolutamente para nada.


Título: Re: Mi programa que dibuja un cuadrado
Publicado por: Mario Olivera en 22 Julio 2014, 19:43 pm
¿que ocurre si se ingresan numeros negativos?

No se dibuja la figura, en éste caso el cuadrado, igual con instrucciones if...else se puede editar el código para que si son números negativos los pida devuelta y también se puede hacer otra que determine si en realidad se va a imprimir un cuadrado o un rectángulo

Si la idea es permitir la creación de una escena en la que se van insertando elementos, lo suyo sería que el método "imprime" sea propio del objeto... así cada objeto de la escena sabe cómo ha de pintarse... claro que en tal caso el método debería ser público y únicamente debería ser llamado por un objeto tipo "escena".

Lo que está claro es que no tiene ningún sentido que el método "imprime" sea privado... una clase que únicamente tiene un constructor y un destructor... salvo excepciones contadas, no sirve absolutamente para nada.

Ahí puse la función miembro imprime a public, pues la verdad es que nose por qué lo hice  :P