Necesito ayuda con este programa

Simule el comportamiento del insecto dentro de una habitación de NxM. En ésta habitación irán apareciendo cada vez que avanza el insecto, uno de los 5 tipos de alimentos, y con el lanzamiento de una moneda (random de 2 aleatorios, uno será cara y otro será sello) decide si lo come o no, en caso de decidir comerlo el insecto de manera automática buscará el alimento, sino simplemente lo ignorará y seguirá vagando por la habitación.
En caso que en la habitación lleguen a existir 4 alimentos simultáneamente que no sean devorados por el insecto, los mismos se recogerán, para que la habitación quede limpia de nuevo. Se debe mostrar los cambios de colores que sufre el insecto. La simulación termina a lo que el usuario presione la tecla "Z". Cada vez que avanza el insecto un paso (1 casilla) se debe mostrar la habitación y sus incidencias.
Datos de Entrada: vienen en un archivo de datos denominado entrada.txt, con las siguientes características:
En la primera línea vienen 2 enteros separados por un espacio en blanco, que representan la cantidad de filas y columnas de la habitación, respectivamente.
En la segunda línea hay un entero que es la cantidad QUE de alimentos que consume el insecto.
En las QUE líneas siguientes se encuentran los distintos colores que toma el insecto con cada tipo de alimento. Por ejemplo si hay 3 tipos de alimentos, asuma que los alimentos se identifican con un número entero consecutivo, 1,2,3,.
Ejemplo:
Entrada.txt
15 10                 filas=15  columnas=10
4 Hay 4 tipos de alimentos (1,2,3,4)
Azul Si consume el alimento 1 cambia a Azul
Amarillo Si consume el alimento 2 cambia a Amarillo
Verde Si consume el alimento 3 cambia a Verde
Morado Si consume el alimento 4 cambia a Morado
Datos de salida: Cada vez que avanza el insecto un paso (1 casilla) se debe guardar la habitación y sus incidencias en un archivo de salida denominado salida.txt.

1 Respuesta

Respuesta
1
Veo interesante tu problema, mi pregunta es, para ayudarte:
¿Los alimentos que aparecen en la habitación, aparecen cada cierto tiempo? Si fuera así ¿qué tiempo?
Los alimentos ¿aparecen de uno en uno? ¿O aparecen de 2 o de 3 simultanemente también?
Si el insecto ignora el alimento, ¿este queda en la habitación?
Bueno eso sería todo. ¿Ok? Estaré esperando tu respuesta para ayudarte.
Si aparecen cada cierto tiempo mientras que el avanza se puede tomar un tiempo cualquiera
los alimentos aparecen uno por uno y en caso de que aparezcan los cuatro simultanemente
que no sean devorados por el insecto y la habitación tiene debe quedar limpia y debe permanecer en ella
de verdad necesito ayuda los más proto posible ya que es para mañana martes
Te he respondido en la otra pregunta ;)
Yo lo tengo de esta forma para leer el archivo
//---------------------------------------------------------------------------
 #include<fstream.h>
 #include<iostream.h>
 #include<stdlib.h>
 #include<string.h>
 #include<conio.h>
#pragma hdrstop
//---------------------------------------------------------------------------
#pragma argsused
struct insecto{
        unsigned short int cant_alimentos:4;
        unsigned  char color:4;
};
void main()
{
       ifstream in("entrada.txt",ios::in);
        while (in.good())
{
  char linea[1000];
  in.getline(linea, 1000);
  cout << linea << endl;
}
         getch();
}
el archivo es 
15 10                 
4                        
Azul                   
Amarillo            
Verde               
Morado           
y como hago para llenar la matriz xq lo estaba declarando
struct insecto{
unsigne color:4;
unsigne cant_alemento:4;
}MATRIZ;
void main(){
int alimento;
char color;
Matriz mat[10][15];
ifstream in("entrada.txt",ios::in);
        while (in.good())
{
  char linea[1000];
  in.getline(linea, 1000);
  cout << linea << endl;
}
         getch();
}
Pues mira, en tu matriz primero tienes que ubicar al insecto.
El insecto debe tener una posición (x, y), color, tal vez elementos digeridos, y nada más.
La matriz vacía es una matriz de enteros, donde en la casilla que no tiene alimento ni insecto, se le puede asignar un cero, y en la casilla donde aparezca alimento 1, un uno, alimento 2, un dos, y así sucesivamente.
La posición del insecto puedes representarla con el numero 10, o 9, no se, el numero solo debe ser diferente a los del color.
Por ejemplo si tu matriz es de 5x10, ademas el insecto debe aparecer, si lo desea así el enunciado, en una posición aleatoria. Y los alimentos deben aparecer, de forma aleatoria también en cada paso de tiempo (los pasos detiempo se pueden representar por cada pasada o cada ejecución de unidad de un for).
¿Cómo el tiempo es indeterminado, y solo se para si el usuario teclea la tecla z, entonces ... pues me suena a computación gráfica, es eso? ¿Si es así entonces estamos hablando de OPENGL? Me respondes eso por favor.
Bueno, entonces digamos que hasta ahora podemos hablar de la matriz, y como es que se tienen o deben generarse los datos.
dentro del FOR
Aquí debemos hacer un aleatorio de 1 a 4 para hacer que la mosca vaya de arriba, a vaya a la derecha o izquierda o abajo en la matriz. Ya que su comportamiento es aleatorio.
Debemos cuidar que si la mosca a decidido no comer un alimento entonces si estamos a la derecha de un alimento, no podemos ir en esa dirección. También debes tener en cuenta que es posible que aparezca un alimento, y la mosca desee comerlo, entonces se dirige hacia el, y en el camino aparece otro, y decide comerlo también, entonces debes guardar la ubicación de cada alimento, y hacer que el insecto vaya acercándose para comer cada uno por orden.
Entonces en algún momento tu matriz puede empezar así
000000000
009000000
000000000 aquí vemos que la mosca en algún momento esta en la posición 3,2
000000020
000100000
Y ha aparecido un alimento del tipo 2 y uno del 1, entonces la mosca debe decidir en el momento en que aparece uno por uno, y luego dirigirse a esas posiciones para comer.
Entonces la lógica va de este modo
En un momento o lapso de tiempo, aparece un alimento o no, puedes hacer que sea una ley de probabilidad de uno a 5, ¿cómo hacerlo? Un rand de 1 a 5, y si el valor es 1 entonces que aparezca el alimento, si es cualquiera de los otros 4 no aparecerá (esto es para que la aparición de los alimentos no sea muy simultanea) ahora aparece tal vez o no. entonces si hay un alimento en el lugar la mozca decide con un rand de 1 a 2, si es 1 si come y entonces guardas la ubicación para dirigirse hacia el, sino entonces sigue su camino.
Mientras la mosca no tenga que comer, su movimiento se rige al aleatorio de 1 a 4, 1 para ir arriba, 2 derecha, 3 abajo, 4 izquierda. Luego si tiene algo que comer, entonces debe dirigirse hacia el alimento, y dependiendo de su ubicación y de la del alimeto se dirige dando sus pasos, teniendo cuidado de no cruzarse con otro alimento.
0000000000
0010000000
0000000000
0002009000
0000000000
Si la mosca quiere comer el alimento 1 y no el alimento dos, entonces si se dirige hacia la izquierda, cuando encuentre ese espacio distinto a cero, como no es su objetivo, entonces lo desviará. Y así sucesivamente. En cada pasada también debe hacerse la revisión. Si la mozca no desea comer nada y hay 4 alimentos simultáneos sin comer o más, entonces se limpia la habitación.
Los archivos de salida solo serán txt que contengan la matriz que representa a tu habitación con la mozca y los alimentos.
Bueno si tienes dudas dímelo, y confírmame si es en OPENGL, por que si es así, entonces mejor para ayudarte en código. Hasta luego (también dime, si no es en opengl, como quiere tu profesor que representes con colores a tu insecto).
<div id="_mcePaste" style="overflow: hidden; position: absolute; left: -10000px; top: 219px; width: 1px; height: 1px;">
</div>
No es en interfaz gráfica
Es a modo consola
Bien, ¿entonces tienes problema aun con tu código? ¿O todo va bien?
Ya pude terminar con el código ahora tengo un pequeño problema con el siguiente ejercicio
Como hago que me lea el archivo de método listar
Cuando ingresa en nombre del departamento a buscar
Y muestre lo que esta en el archivo ordenes.txt
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
#include <vcl.h>
#include<iostream.h>
#include<conio.h>
#include<stdlib.h>
#include<fstream.h>
#pragma hdrstop
//---------------------------------------------------------------------------
#pragma argsused
class orden_compras{
        char *nombre;
        int dia,mes, ano,cant;
        char *tam;
        public:
                void set_nombre(char *nombre);
                char* get_nombre();
                void set_dia(int dia);
                int get_dia();
                void set_mes(int mes);
                int get_mes();
                void set_ano(int ano);
                int get_ano();
                void set_cant(int cant);
                int get_cant();
                void set_tam(char*tam );
                char* get_tam();
};
void orden_compras::set_nombre(char*nuevo_nombre){
        nombre=nuevo_nombre;
}
char* orden_compras::get_nombre(){
        return nombre;
}
void orden_compras::set_dia(int d){
        dia=d;
}
int orden_compras::get_dia(){
        return dia;
}
void orden_compras::set_mes(int m){
        mes=m;
}
int orden_compras::get_mes(){
        return mes;
}
void orden_compras::set_ano(int a){
        ano=a;
}
int orden_compras::get_ano(){
        return ano;
}
void orden_compras::set_cant(int c){
        cant=c;
}
int orden_compras::get_cant(){
        return cant;
}
void orden_compras::set_tam(char* t){
        tam=t;
}
char* orden_compras::get_tam(){
        return tam;
}
void listar(){
char*nom=new char;
char resp;
        cout<<"Ingrese nombre del departamento a solicitar: ";
        cin>>nom;
        //ifstream leer("ordenes.txt",ios::in);
        FILE *leer;
        //leer=fopen("ordenes.txt","rt");
        leer=fopen("ordenes.txt","rt");
        do{
        char*nombre=new char;
        char *tm=new char;
        int dia,ano,mes,cant;
        fscanf(leer,"%s %d %d %d %d %s",nom,dia,mes,ano,cant,tm);
         if (strcmp(nombre,nom)==0)
         {
                cout<<"la orden de %s es %d %d %d %d %s",nombre,dia,mes,ano,cant,tm;
                return;
         }
        }while(!feof(leer));
        return;
}
int main(int argc, char* argv[])
{
         orden_compras obj;
         char *nom=new char;
         int di,an,me,can;
         char *tm=new char;
         char resp;
        //ofstream archivo;
        //archivo.open("ordenex.txt",ios::app);
       // archivo.open("ordenex.txt");
       FILE* archivo;
       archivo=fopen("ordenes.txt","wt");
                do {
                    clrscr();
                    cout<<"nombre del departamento: ";
                    fflush(stdin);
                    cin>>nom;
                    obj.set_nombre(nom);
                    fprintf(archivo,"%s",obj.get_nombre());
                    cout<<"dia: ";
                    cin>>di;
                    obj.set_dia(di);
                    fprintf(archivo,"%d",obj.get_dia()," ");
                    cout<<"mes: ";
                    cin>>me;
                    obj.set_mes(me);
                    fprintf(archivo,"%d",obj.get_mes()," ");
                    cout<<"a#o: ";
                    cin>>an;
                    obj.set_ano(an);
                    fprintf(archivo,"%d",obj.get_ano()," ");
                    cout<<"ingrese cantidad: ";
                    cin>>can;
                    obj.set_cant(can);
                    fprintf(archivo,obj.get_tam()," ");
                    cout<<"ingrase el tama#o: ";
                    cin>>tm ;
                    obj.set_tam(tm);
                    fprintf(archivo,obj.get_tam()," ");
                    cout<<"nuevo nombre:"<<nom<<endl;
                    cout<<"hay otra orden?(S/N):";
                    cin>>resp;
                }while(resp=='S'||resp=='s');
                fclose(archivo);
                listar();
         getch();
        return 0;
}
//---------------------------------------------------------------------------
;) que te parece si me haces una nueva pregunta, ya que no podemos entremezclar problemas en un solo tema. y si te fui de ayuda al principio espero me puedas puntuar.
A otra cosa, este nuevo ejercicio dime de que se trata por que sino no voy a entender nada de tu código. O no voy a saber si está bien o no

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas