elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Estamos en la red social de Mastodon


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  ¡Ayuda sobre como crear una serie de servicios en un área gráfica determinada!
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: ¡Ayuda sobre como crear una serie de servicios en un área gráfica determinada!  (Leído 2,171 veces)
RaquelAG

Desconectado Desconectado

Mensajes: 6


Ver Perfil
¡Ayuda sobre como crear una serie de servicios en un área gráfica determinada!
« en: 29 Enero 2013, 12:52 pm »

Se que es mucho, pero no se por donde empezar, y me urge saber hacerlo, por favor les ruego que me ayuden, gracias.

ENUNCIADO:
En esta práctica se deberá desarrollar una aplicación para almacenar información sobre
distintos servicios disponibles en un área geográfica determinada. Este área se
representará por un mapa (del tipo  TMapa) de tamaño NxN ocupando la zona superior
izquierda de una rejilla (del tipo TMatrizMapa) de 100x100 celdas. Los objetos del tipo
TMapa deberán guardar la rejilla y el número  N (num_celdas)  que determina la zona
ocupada por el mapa. Cada servicio estará situado en una celda del mapa y su ubicación
vendrá dada por sus coordenadas (posición de  la celda) en el mapa que se expresarán
como dos números enteros correspondientes a la fila y la columna (tipo TCoordenadas).
En cada celda del mapa se podrá guardar un número variable de servicios (como máximo
10), se utilizará para ello una estructura del tipo TListaServicios. Cada servicio (del
tipo  TServicio) se identificará por el  tipo de servicio, su  ubicación  en el mapa (tipo
TCoordenadas), su nombre y su identificador (ambos cadenas de caracteres). El tipo de
servicio vendrá dado mediante un enumerado (del tipo TTipoServicio), con los valores
HOTEL, GASOLINERA, HOSPITAL y COLEGIO.
Teniendo en cuenta la descripción anterior del problema, así como la estructura de datos de la figura, se
pide:
1. (1 punto) Definir todos los tipos de datos necesarios para poder resolver el      problema.
2. Definir los siguientes subalgoritmos (funciones) para el manejo de un servicio:
a. leerTipoServicio: Lee el tipo de servicio como un número natural hasta
que el usuario introduzca un valor correcto, es decir, un valor que esté entre 0 y 3, y
genera el correspondiente valor del tipo enumerado TTipoServicio.
b. leerServicio: Lee los datos de un servicio (su tipo, sus coordenadas, su
nombre y su identificador). Este subalgoritmo devuelve el servicio leído (del  tipo
TServicio) como un parámetro de salida. Habrá que asegurarse de que el tipo de servicio
introducido por el usuario es correcto. Si no lo es se le volverá a preguntar hasta que
introduzca un tipo de servicio correcto.
c. mostrarServicio: Muestra por pantalla todos los datos de un servicio (del
tipo TServicio) pasado como parámetro. Para el tipo de servicio se mostrará una cadena
de caracteres con el nombre del tipo de servicio. Toda la información se mostrará en una
sola línea en el formato del ejemplo siguiente:
  HOTEL, posicion=(0,3), identificador=12320, nombre=Hotel Málaga Plaza
3. Definir los siguientes subalgoritmos (funciones) para el manejo de la lista de servicios localizada
en una celda determinada de un mapa:
a. Definir la igualdad de servicios (función iguales) teniendo en cuenta que
dos servicios se consideran iguales cuando son del mismo tipo y tienen el mismo
identificador. No se tiene en cuenta ni el nombre ni la ubicación de cada uno.
b. existeServicio: Dada una lista de servicios (del tipo TListaServicios)
y un servicio concreto (del tipo  TServicio) devuelve  true o  false dependiendo de si
existe o no ese servicio (u otro igual) en la lista de servicios.
c. insertarServicioEnLista: Dada una lista (del tipo TListaServicios) y
un servicio concreto (del tipo  TServicio) inserta el servicio dado en la lista si la lista
tiene menos de 10 servicios y no existe dicho servicio en la lista; en tal caso devuelve true
en un tercer parámetro OK de tipo bool. De lo contrario, no inserta y devuelve false en
el parámetro OK.
d. insertarServicio: Dado un mapa (del tipo TMapa) y un servicio (del tipo
TServicio) inserta el servicio en la lista de la celda correpondiente a las coordenadas del
servicio, respetando las condiciones del apartado anterior y siempre que las coordenadas
estén dentro del mapa. En caso de no poder insertarse el servicio por alguno de los
motivos anteriores, se indicará devolviendo false en un parámetro OK de tipo bool. Si la
inserción tiene éxito en OK se devuelve true.
e. mostrarServicios: Dado un mapa (tipo TMapa) y el tipo de servicio en el que
estamos interesados, este procedimiento muestra todos los servicios de dicho tipo que
haya en el mapa.
4. Definir los siguientes subalgoritmos (funciones) para el manejo del mapa:
a. leerMapa: Lee los datos de un mapa (tipo TMapa) desde la consola. Debe pedir
la dimensión N del mismo (será un mapa NxN) y el número de servicios con el que se va a
inicializar el mapa.  Después se solicitará al usuario que introduzca, uno a uno, tantos
servicios como haya indicado. Si por alguno de los motivos descritos en el apartado d un
servicio no puede ser insertado en el mapa, se mostrará el error en la pantalla y se pedirá
que se vuelva a introducir.
b. servicioMasCercano: Dado un mapa (del tipo TMapa), un tipo de servicio (del
tipo TTipoServicio) y una determinada posición (del tipo TCoordenadas) devuelve el servicio (del  tipo  TServicio) del tipo solicitado que se encuentre más cercano a la
posición introducida. Si se encuentra, se devuelve además true en un parámetro OK de
tipo bool. Si no se encuentra ningún servicio de ese tipo en el mapa se devolverá false
en  OK. Para localizar el servicio más cercano se buscará primero en la celda del mapa
correspondiente a la posición proporcionada (celda a distancia 0). Si en esa celda no hay
ningún servicio del tipo solicitado se buscará en las celdas adyacentes (celdas a distancia 1) y así se irá desplazando a distancia 2, 3, etc… hasta encontrar el servicio o  hasta
terminar de recorrer todo el mapa sin encontrarlo. Si se encuentra una celda con más de
un servicio del tipo buscado, se devolverá el primero que se aparezca.




En línea

amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: ¡Ayuda sobre como crear una serie de servicios en un área gráfica determinada!
« Respuesta #1 en: 29 Enero 2013, 15:05 pm »

Divide y venceras. Ve aplicando los conceptos que te piden de uno en uno, por ejemplo te piden un mapa. Pues ya sabes que tienes crear una matriz de 100x100.

Te piden que cada elemento de la matriz contenga una estructura TMapa, pues crea una estructura TMapa con sus datos (Coordenada y numero de celdas).

Te piden que se puedan introducir valores en el mapa por una función, pues defines esa función.

Te piden tal cosa... Tienes que ser mecánica e ir creando todos lo que te vayan pidiendo.


En línea

Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar
RaquelAG

Desconectado Desconectado

Mensajes: 6


Ver Perfil
Re: ¡Ayuda sobre como crear una serie de servicios en un área gráfica determinada!
« Respuesta #2 en: 29 Enero 2013, 18:58 pm »

Ya se que debo de hacerlo por pasos, pero mi problema es que no se como hacer esa matriz para insentarle todos los datos y demás. He intentado hacer el 2 a. y b. pero no funciona bien, ¿alguien puede decirme que hago mal?




#include <iostream>
using namespace std;
void leerTipoServicio(int a[][100]);
void TTipoServicio(int a[][100]);
void leerServicio(int a[][100], int a[][100], int a, int a[][100]);
void TCoordenadas(int a[][100]);
void Tidentificador(int a[][100], int a[][100]);
int n;

int main() {
   int a[100][100];
   leerTipoServicio(a);
   leerServicio(a,a,a,a);
   return 0;
}
void leerTipoServicio(int a[][100]){
   do{
     cout<< "Introduzca un valor entero entre 0 y 3: \n"<< endl;
     cin>>n;
     }while(n<0 or n>3);
     a[n][100];
    TTipoServicio(a);
}
void TTipoServicio(int a[][100]){
     if (n=0){
       cout<< "Hotel"<< endl;
       }
     if (n=1){
     cout<< "Gasolinera"<< endl;
     }
     if (n=2){
     cout<< "Hospital"<< endl;
     }
     if (n=3){
     cout<< "Colegio"<< endl;
     }
}
void leerServicio(int a[][100], int a[][100], int a,  int a[][100]){
    TTipoServicio(a);
    TCoordenadas(a);
    cout<< "Hotel Malaga Plaza"<< endl;
    Tidentificador(a, a);
   
 }
void TCoordenadas(int a[][100]){
   for(int i=0; i<100; i++)
   for(int j=0; j<100; j++)
   a[j]=i*j;
   while{
   cout<< "Ingrese una coordenada -1,-1 para salir\n";
   cout<< "Introduce las coordenadas: "<< i << j << endl;
        if(i<=-1 || j<=-1 || i>=100 || j>=100){
        cout<< "Coordenada fuera de los limites\n";
        }
        else{
        cout<< "El valor en la coordenada es: \n"<< a[j]<< endl;
        }
        }
}
void Tidentificador(int a[][100], int a[][100]){
   for (int i=0; i<100; i++)
   cout<< "La fila es: "<< i << endl;
   for(int j=0; j<100; j++)
   cout<< " La columna es: "<< j << endl;
}
En línea

amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: ¡Ayuda sobre como crear una serie de servicios en un área gráfica determinada!
« Respuesta #3 en: 29 Enero 2013, 20:18 pm »

He intentado hacer el 2 a. y b. pero no funciona bien
Deberías dar más datos, porque "no funcionar bien" es algo muy ambiguo.

Estos son los fallos que encuentro en el código:

Código
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. void leerTipoServicio(int a[][100]);
  6.  
  7. /* Podrías definir un tipo matriz con typedef para evitar escribir tanto, tal que así:
  8.  
  9. typedef int Matriz[100][100]; */
  10.  
  11. void TTipoServicio(int a[][100]);
  12.  
  13. void leerServicio(int a[][100], int a[][100], int a, int a[][100]);  /* Porque declaras 4 matrices iguales (y con el mismo nombre) aqui? */
  14.  
  15. void TCoordenadas(int a[][100]);
  16. void Tidentificador(int a[][100], int a[][100]);  /* Porque declaras 2 matrices iguales (y con el mismo nombre) aqui? */
  17.  
  18. int n; // Variable global? Eso es MUY MALA práctica de programación, te lo aviso
  19.  
  20. int main() {
  21.   int a[100][100];
  22.   leerTipoServicio(a);
  23.   leerServicio(a,a,a,a);
  24.   return 0;
  25. }
  26. void leerTipoServicio(int a[][100]){
  27.   do{
  28.     cout<< "Introduzca un valor entero entre 0 y 3: \n"<< endl;
  29.     cin>>n;
  30.     }while(n<0 or n>3);
  31.  
  32.     a[n][100]; /* Esta linea no hace nada */
  33.  
  34.    TTipoServicio(a);
  35. }
  36.  
  37. /* Lo ideal sería que le pasases el parametro n a la función y no usaras variables
  38. globales...*/
  39.  
  40. void TTipoServicio(int a[][100]){
  41.     if (n=0){
  42.       cout<< "Hotel"<< endl;
  43.       }
  44.     if (n=1){
  45.     cout<< "Gasolinera"<< endl;
  46.     }
  47.     if (n=2){
  48.     cout<< "Hospital"<< endl;
  49.     }
  50.     if (n=3){
  51.     cout<< "Colegio"<< endl;
  52.     }
  53. }
  54.  
  55. void leerServicio(int a[][100], int a[][100], int a,  int a[][100]){
  56.    TTipoServicio(a); /* Esta función ya las has llamado en leertiposervicio ¿Por que
  57. la llamas otra vez? */
  58.  
  59.    TCoordenadas(a);
  60.    cout<< "Hotel Malaga Plaza"<< endl;
  61.    Tidentificador(a, a);
  62.  
  63. }
  64. void TCoordenadas(int a[][100]){
  65.   for(int i=0; i<100; i++)
  66.   for(int j=0; j<100; j++)
  67.   a[j]=i*j;
  68.  
  69. /* Si querias seleccionar una casilla de la matriz tendrás que poner las dos coordenadas y no solo una:
  70.  
  71. a[i][j] = i*j
  72.  
  73. Recuerda que estas tratanto con matrices y no vectores.
  74.  
  75. */
  76.  
  77.   while{
  78.   cout<< "Ingrese una coordenada -1,-1 para salir\n";
  79.   cout<< "Introduce las coordenadas: "<< i << j << endl;
  80.  
  81.   // Aqui tendrias que pedir la coordenada con cin no?
  82.  
  83.        if(i<=-1 || j<=-1 || i>=100 || j>=100){
  84.        cout<< "Coordenada fuera de los limites\n";
  85.        }
  86.        else{
  87.        cout<< "El valor en la coordenada es: \n"<< a[j]<< endl;
  88.        }
  89.        }
  90. }
  91. void Tidentificador(int a[][100], int a[][100]){
  92.   for (int i=0; i<100; i++)
  93.   cout<< "La fila es: "<< i << endl;
  94.  
  95. /* Si lo que quieres es ver lo que valga
  96. cada coordenada de la matriz prueba con esto:
  97.   for(int j=0; j<100; j++)
  98.    for (int i=0; i<100; i++)
  99.           cout<<"La coordenada (<<i<<","<<j<<" )  vale "<<a[i][j]<<endl;
  100.  
  101. */
  102.  
  103.   for(int j=0; j<100; j++)
  104.   cout<< " La columna es: "<< j << endl;
  105. }
« Última modificación: 29 Enero 2013, 20:33 pm por amchacon » En línea

Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar
RaquelAG

Desconectado Desconectado

Mensajes: 6


Ver Perfil
Re: ¡Ayuda sobre como crear una serie de servicios en un área gráfica determinada!
« Respuesta #4 en: 30 Enero 2013, 16:42 pm »

Gracias por tu paciencia, ya si que me funciona^^
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
ayuda con area cuadrado
PHP
General Dmitry Vergadoski 2 4,322 Último mensaje 2 Mayo 2013, 00:28 am
por #!drvy
Crear servicios de Windows??
Windows
gregory90 3 2,784 Último mensaje 16 Agosto 2013, 22:46 pm
por d3xf4ult
Ayuda sobre factor comunde una serie de numeros
Hacking
jabrajam 0 2,372 Último mensaje 7 Abril 2020, 16:20 pm
por jabrajam
Crear servicios como archivos .service pero para android
Android
Drakaris 0 4,869 Último mensaje 28 Agosto 2021, 23:00 pm
por Drakaris
Quiero aprender a crear programas que hagan determinada acción
Scripting
JuanChisss 2 1,657 Último mensaje 17 Noviembre 2022, 21:43 pm
por wvb
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines