Foros del Web » Programación para mayores de 30 ;) » C/C++ »

[SOLUCIONADO] Problema al ingresar datos a matriz

Estas en el tema de Problema al ingresar datos a matriz en el foro de C/C++ en Foros del Web. Hola estaba haciendo algo como un semanario en C++, entonces creo que lo mas sencillo es hacerlo como una matriz (horas a la izquierda y ...
  #1 (permalink)  
Antiguo 20/09/2014, 22:22
 
Fecha de Ingreso: marzo-2014
Mensajes: 41
Antigüedad: 10 años, 1 mes
Puntos: 0
Pregunta Problema al ingresar datos a matriz

Hola estaba haciendo algo como un semanario en C++, entonces creo que lo mas sencillo es hacerlo como una matriz (horas a la izquierda y dias arriba)...
El asunto es que a la hora de agregar datos no los ingresa donde quiero, sino en la casilla [0][0] y [1][0] de la matriz...
Alguien me podria ayudar?


Código:
#include <iostream>
#include"Calendario.h"
#include <algorithm>
using namespace std;

    Calendario::Calendario(){
		mat= new string* [49];
		for(int i=0;i<49;i++)
			mat[i]=new string[8];
		inicializar();
        llenarHoras();
        llenarDias();
    }
    Calendario::~Calendario(){
        
    }
	void Calendario::inicializar(){
		for(int i=0;i<49;i++)
			for(int j=0;j<8;j++)
				mat[i][j]="-";
	}
    string Calendario::getDia(){
        return dia;
    }
    string Calendario::getHora(){
        return hora;
    }
    string Calendario::getEvento(){
        return evento;
    }
    void Calendario::setDia(string d){
        dia=d;
    }
    void Calendario::setHora(string h){
        hora=h;
    }
    void Calendario::setEvento(string e){
        evento=e;
    }
    void Calendario::imprimeContenedor(){
    	for(int i=0;i<49;i++){
			for(int j=0;j<8;j++)
				cout<<mat[i][j]<<"\t";
			cout<<endl;
		}
    }
    void Calendario::setCelda(int fil, int col, string val){
    	mat[fil][col]=val;
    }
    string Calendario::getCelda(int fil, int col){
    	return mat[fil][col];
    }
    void Calendario::llenarHoras(){
		mat[1][0]="00:00";
		mat[2][0]="00:30";
		mat[3][0]="01:00";
		mat[4][0]="01:30";
		mat[5][0]="02:30";
		//aqui van las demas horas, lo quite para que no se hiciera muy largo el msj
		mat[46][0]="23:00";
		mat[47][0]="23:30";
		mat[48][0]="24:00";
		mat[48][0]="24:30";
    }
    void Calendario::llenarDias(){
           mat[0][0]="-";
           mat[0][1]="Lunes";
           mat[0][2]="Martes";
           mat[0][3]="Miercoles";
           mat[0][4]="Jueves";
           mat[0][5]="Viernes";
           mat[0][6]="Sabado";
           mat[0][7]="Domingo";
    }
	int Calendario::casillaDia(string dia){
		for(int i=1;i<8;i++){
			if(dia==mat[0][i])
				return i;
	        else
				return 0;}
	}
	int Calendario::casillaHora(string hora){
		for(int i=1;i<49;i++){
			if(hora==mat[i][0])
				return i;
			else
				return 0;}
	}
	bool Calendario::verificaDisponibilidad(int fil, int col){
		if(mat[fil][col] == "-")
			return true;
		else
			return false;
	}
	void Calendario::imprimirPordia(int d){
		cout<<mat[0][d]<<"\t"; //imprime el dia a la izquierda
		for(int i=1;i<49;i++){
			while(mat[i][d]!="-")
				cout<<mat[i][d]<<"\t"; //imprime solo los eventos, deja por fuera los dias que no tienen evento
			cout<<endl;}
}
	void Calendario::imprimirPorhora(int h){
		cout<<mat[h][0]<<"\t"; //para imprimir la hora a la izquierda
		for(int i=1;i<8;i++){
			while(mat[h][i]!="-")
				cout<<mat[h][i]<<"\t"; //imprime solo los eventos, deja por fuera los dias que no tienen evento
			cout<<endl;}
	}

	int Calendario::Menu(){
	    int op=0;
		do{
		system("cls");
		cout<<"--------------Menu---------------"<<endl;
		cout<<"Para agregar evento de 1 hora de duracion digite 1   "<<endl;
		cout<<"Para agregar evento de 30 minutos de duracion digite 2   "<<endl;
		cout<<"Para ver reporte por dia digite 3  "<<endl;
		cout<<"Para ver reporte por hora digite 4  "<<endl;
		cout<<"Para Salir digite 5"<<endl;
		cout<<"----------------------------------"<<endl;
		cin>>op;
		}while(!(op>0 && op<6));
		return op;
		system("cls");}
		




		void Calendario::Opciones(){
		int salir=1;
        while(salir!=0){
		switch(Menu()){
		case 1: {
			    string even,h,d;

				cout<<"Digite el dia: ";
				cin>>d;
				transform(d.begin(), d.end(),d.begin(), ::tolower);
				if(d == "lunes" || d == "martes" || d == "miercoles"|| d == "jueves" || d == "viernes"|| d == "sabado" || d == "domingo"){
				cout<<"Digite la hora de inicio del evento (en formato de 24h con dos puntos separando la hora de los min, ejemplo, 13:30): ";
				cin>>h;

				if(verificaDisponibilidad(casillaHora(h),casillaDia(d))){
					cout<<"Digite los detalles del evento: ";
					cin>>even;
					mat[casillaHora(h)][casillaDia(d)]=even;
					mat[casillaHora(h)+1][casillaDia(d)]=even;
					cout<<"Evento agregado satisfactoriamente..."<<endl;
					cout<<"Digite 1 para volver al menu principal o digite 0 para salir del programa: ";
					cin>>salir;
				}
				else{
					cout<<"Ese espacio esta ocupado..."<<endl;
				    cout<<"Digite 1 para volver al menu principal o digite 0 para salir del programa: ";
					cin>>salir;
					system("cls");}
				}
				else{
					cout<<"Lo que digito no es un dia de la semana..."<<endl;
				    cout<<"Digite 1 para volver al menu principal o digite 0 para salir del programa: ";
					cin>>salir;
					system("cls");}
				}
				system("cls");
				break;
		case 2: {
			     string even,h,d;

				cout<<"Digite el dia: ";
				cin>>d;
				transform(d.begin(), d.end(),d.begin(), ::tolower);
				cout<<"Digite la hora de inicio del evento (en formato de 24h con dos puntos separando la hora de los min, ejemplo, 13:30): ";
				cin>>h;
				if(verificaDisponibilidad(casillaHora(h),casillaDia(d))){
					cout<<"Digite los detalles del evento: ";
					cin>>even;
					mat[casillaHora(h)][casillaDia(d)]=even;
					cout<<"Evento agregado satisfactoriamente... Regresando al menu principal"<<endl;
				}
				else{
					cout<<"Ese espacio esta ocupado..."<<endl;
				    cout<<"Digite 1 para volver al menu principal o digite 0 para salir del programa: ";
					cin>>salir;
					system("cls");
				}
				}
				
				break;
		case 3: {
			    string d;
				cout<<"Digite el dia: ";
				cin>>d;
				imprimirPordia(casillaDia(d));
				system("pause");
				}
				break;
		case 4: {
				string h;
				cout<<"Digite el dia: ";
				cin>>h;
				imprimirPorhora(casillaHora(h));
				}
				break;
		case 5: {
			    salir=0;
				break;
				}
		}
		}
}

Última edición por newb; 20/09/2014 a las 22:28
  #2 (permalink)  
Antiguo 21/09/2014, 06:58
 
Fecha de Ingreso: junio-2008
Ubicación: Seattle, USA
Mensajes: 733
Antigüedad: 15 años, 10 meses
Puntos: 61
Respuesta: Problema al ingresar datos a matriz

Tus metodos casillaHora o casillaDia etc intentan hacer un ciclo, parece, pues tienen un for() ahi, pero si lo primero que hacen es hacer return, ya sea porque ocurre una condicion o si no ocurre, entonces el ciclo nunca va a llegar a mas de 1 vuelta.
__________________
Visita mi perfil en LinkedIn
  #3 (permalink)  
Antiguo 21/09/2014, 07:34
 
Fecha de Ingreso: marzo-2014
Mensajes: 41
Antigüedad: 10 años, 1 mes
Puntos: 0
Respuesta: Problema al ingresar datos a matriz

El for es para recorrer la matriz y buscar coincidencias con el string que entra por parametro (dia o la hora)... Que otro condicional puedo usar en lugar del if para comparar? intente con while pero me da varios errores :S Tambien intente con un acumulador que vaya sumando 1 si no hay coincidencia pero igual da errores

Edito:
Ya lo solucione, el problema es que estaba haciendo una comparacion de minusculas (las que digita el usuario) con mayusculas (las que estaban en la matriz)

Última edición por newb; 21/09/2014 a las 10:30

Etiquetas: c++, matriz
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 03:00.