Mi programa que dibuja un cuadrado

Iniciado por Mario Olivera, 21 Julio 2014, 07:48 AM

0 Miembros y 2 Visitantes están viendo este tema.

Mario Olivera

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 (cpp) [Seleccionar]
#include <iostream>
using std::cin;
using std::cout;
using std::endl;

#include "Cuadrado.h"

int main()
{
//Inicializacion de variables
int anchoCuadrado;
int largoCuadrado;
cout <<"Ingrese el ancho del cuadrado: ";
cin >> anchoCuadrado;
cout <<"Ingrese el largo del cuadrado: ";
cin >> largoCuadrado;
cout <<endl <<endl <<endl;

Cuadrado Cuadrado1(anchoCuadrado,largoCuadrado);
cin.get();
cin.get();
return 0;
}


Cuadrado.h

Código (cpp) [Seleccionar]
class Cuadrado
{
public:
Cuadrado(int,int);
void imprime(int,int);
private:
int anchoCuadrado;
int largoCuadrado;
};


Cuadrado.cpp

Código (cpp) [Seleccionar]
#include <iostream>
using std::cout;
using std::cin;
using std::endl;

#include <string>
using std::string;

#include "Cuadrado.h"

Cuadrado::Cuadrado(int ancho,int largo)
{
imprime(ancho,largo);
}

void Cuadrado::imprime(int a, int l)
{
//Tamaño Cuadrado
anchoCuadrado= a;
largoCuadrado= l;


string caracter = "*";
int contador = 0;

// HORIZONTAL
while (contador < anchoCuadrado)
{
cout <<caracter;
++contador;
}

cout <<endl;
contador = 0; //establece a 0 para el lugar de abajo

//VERTICAL

largoCuadrado -= 2; //por los caracteres que se usa arriba y abajo
int contadorlargo = 0;

while (contadorlargo != largoCuadrado)
{
while (contador < anchoCuadrado)
   {
   cout <<caracter;
   ++contador;
   }
cout <<endl;
contador=0;
++contadorlargo;
}

// HORIZONTAL
while (contador < anchoCuadrado)
{
cout <<caracter;
++contador;
}
}




Eso es todo  ;D

CalgaryCorpus

¿Por que solicitas ancho y largo del cuadrado, si ellos son siempre iguales?
Aqui mi perfil en LinkedIn, invitame un cafe aqui

ivancea96

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

Mario Olivera

#3
Cita de: CalgaryCorpus en 21 Julio 2014, 20:33 PM
¿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  :-\

Cita de: ivancea96 en 21 Julio 2014, 21:57 PM
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

kutcher

Cita de: 718208 en 22 Julio 2014, 03:11 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.

Mario Olivera

#5
Cita de: kutcher en 22 Julio 2014, 03:27 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:

CalgaryCorpus

¿que ocurre si se ingresan numeros negativos?
Aqui mi perfil en LinkedIn, invitame un cafe aqui

ivancea96

#7
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.

eferion

#8
Cita de: 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.

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.

Mario Olivera

#9
Cita de: CalgaryCorpus en 22 Julio 2014, 07:00 AM
¿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

Cita de: eferion en 22 Julio 2014, 11:13 AM
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