JCeb's Blog

Programación, investigación, proyectos, vida y mas…

Matriz en espiral con C++

with one comment

Hola, publico está entrada con un ejercicio de programación que alguna vez me salió en un concurso de programación, en el que por cierto no me fue muy bien, bueno aquí les dejo mi clase en C++ para que les sea util, hasta la proxima entrada.

espiral1

#include
using namespace std;
class Espiral{
private:
int rastro;
int cPasos;
int nPasos;
int longitud;
int posicion[2];
int pasosH, pasosV;
int nFilas, nColumnas;
int matriz[999][999];
int direccion;
const static int ESTE=0;
const static int SUR=1;
const static int OESTE=2;
const static int NORTE=3;
public:
Espiral();
void setMatriz();
int getLongitud();
void makeEspiral();
void pedirDatos();
void movEste();
void movSur();
void movOeste();
void movNorte();
void cambiarDireccion(int nuevaDireccion);
void imprimir(int x);
void imprimirMatriz();
};
Espiral::Espiral(){
rastro=0;
posicion[0]=0;
posicion[1]=-1;
pasosH=0;
pasosV=0;
nFilas=0;
nColumnas=0;
direccion=0;
}
void Espiral::pedirDatos(){
cout<>nFilas;
cout<<"Numero de columnas:"<>nColumnas;
return;
}
void Espiral::setMatriz(){
matriz[nFilas][nColumnas];
for(int i=0;i<nFilas;i++){
for(int j=0;j<nColumnas;j++){
matriz[i][j]=0;
}
}
return;
}
int Espiral::getLongitud(){
return (longitud=nFilas*nColumnas);
}
void Espiral::makeEspiral(){
pasosH=nColumnas;
pasosV=nFilas-1;
cout<<"nMatriz de:"<<nFilas<<"X"<<nColumnas<<", ";
cout<<getLongitud()<<" elementosn"<<endl;
while(rastro < getLongitud()){
switch(direccion){
case ESTE:
movEste();
cambiarDireccion(SUR);
break;
case SUR:
movSur();
cambiarDireccion(OESTE);
break;
case OESTE:
movOeste();
cambiarDireccion(NORTE);
break;
case NORTE:
movNorte();
cambiarDireccion(ESTE);
break;
}
}
return;
}
void Espiral::movEste(){
cPasos=0;
nPasos=pasosH;
for(cPasos;cPasos<nPasos;cPasos++){
posicion[1]++;
matriz[posicion[0]][posicion[1]]=rastro;
rastro++;
}
pasosH–;
return;
}
void Espiral::movSur(){
cPasos=0;
nPasos=pasosV;
for(cPasos;cPasos<nPasos;cPasos++){
posicion[0]++;
matriz[posicion[0]][posicion[1]]=rastro;
rastro++;
}
pasosV–;
return;
}
void Espiral::movOeste(){
cPasos=0;
nPasos=pasosH;
for(cPasos;cPasos<nPasos;cPasos++){
posicion[1]–;
matriz[posicion[0]][posicion[1]]=rastro;
rastro++;
}
pasosH–;
return;
}
void Espiral::movNorte(){
cPasos=0;
nPasos=pasosV;
for(cPasos;cPasos<nPasos;cPasos++){
posicion[0]–;
matriz[posicion[0]][posicion[1]]=rastro;
rastro++;
}
pasosV–;
return;
}
void Espiral::cambiarDireccion(int nuevoCurso){
direccion=nuevoCurso;
}
void Espiral::imprimir(int x){
if(x<10)
cout<<" 00"<<x;
else if(x<100)
cout<<" 0"<<x;
else
cout<<" "<<x;
}
void Espiral::imprimirMatriz(){
for(int i=0;i<nFilas;i++){
for(int j=0;j<nColumnas;j++){
imprimir(matriz[i][j]);
}
cout<<endl;
}
}
int main(){
Espiral e;
e.pedirDatos();
e.setMatriz();
e.makeEspiral();
e.imprimirMatriz();
return 0;
}

Written by JCeb

15 enero, 2009 a 3:08 pm

Una respuesta

Subscribe to comments with RSS.

  1. ya quedó x_x

    wordpress le pone muchos símbolo raros

    ed

    15 enero, 2009 at 4:48 pm


Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: