Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: m@o_614 en 2 Julio 2013, 03:59 am



Título: planteamiento de problema
Publicado por: m@o_614 en 2 Julio 2013, 03:59 am
Saludos, tengo que hacer el siguiente programa que dice:

 Inicializar dos matrices, la primera tendra 5 escuelas y la segunda sus respectivas ciudades.
   Pedir una escuela a buscar y si se encuentra imprimir la ciudad donde se encuentra, si no se encuentra
   imprimir el letrero respectivo. Pedir una ciudad a buscar y si se encuentra imprimir las escuelas de
   dicha ciudad, si no se encuentra imprimir el letrero respectivo.

El problema es que creo que esta mal planteado y no se como exactamente quiere que haga las matrices, me dice que en una matriz ingrese 5 escuelas pero eso no seria mas bien un vector???? y luego me dice que si le doy una ciudad a buscar me tiene que imprimir las escuelas de dicha ciudad, pero que no eran 5 escuelas cada una con su respectiva ciudad, no entiendo lo que me quiere decir si alguien me pudiera ayudar a entender

de antemano gracias


Título: Re: planteamiento de problema
Publicado por: engel lex en 2 Julio 2013, 04:02 am
bueno... 2 matrices de una dimensión XD (o tal vez asume que como son arrays de arrays de caracteres, son metrices (?) digo yo)


Título: Re: planteamiento de problema
Publicado por: m@o_614 en 2 Julio 2013, 04:47 am
si creo que se refiere mas a dos listas una con las escuelas y otra con las ciudades, pero tengo una ultima duda. Por cada ciudad tengo que ponerle 5 escuelas o son solo 5 escuelas y cada una con su ciudad respectiva???


Título: Re: planteamiento de problema
Publicado por: engel lex en 2 Julio 2013, 05:06 am
analizando tu pregunta me da que las ciudades es un vector y las escuelas una matriz...

Citar
Pedir una ciudad a buscar y si se encuentra imprimir las escuelas

varias por cada ciudad


Título: Re: planteamiento de problema
Publicado por: eferion en 2 Julio 2013, 08:38 am
También podrías tratarlo como un vector usando estructuras.


Título: Re: planteamiento de problema
Publicado por: rir3760 en 2 Julio 2013, 16:54 pm
Lo primero que debes indicar es el lenguaje de programación.

Inicializar dos matrices, la primera tendra 5 escuelas y la segunda sus respectivas ciudades.
Si se trata de C, Mas o menos así:
Código
  1. char *escuela[] = {
  2.   "Lopez Portillo",
  3.   "Miguel De la Madrid",
  4.   ...
  5. };
  6. char *ciudad[] = {
  7.   "Guadalajara",
  8.   "Guadalajara",
  9.   "Monterrey",
  10.   ...
  11. };
Los nombres de las escuelas deben ser únicos, los de las ciudades no.

Pedir una escuela a buscar y si se encuentra imprimir la ciudad donde se encuentra, si no se encuentra imprimir el letrero respectivo.
Eso lo implementas con un bucle:
Código
  1. for (i = 0; i < 5 && strcmp(escuela[i], buscar) != 0; i++)
  2.   ;
  3. if (i != 5){
  4.   /* Imprimir la ciudad con indice "i" */
  5. }else {
  6.   /* Indicar que la escuela no se encontro */
  7. }

Pedir una ciudad a buscar y si se encuentra imprimir las escuelas de dicha ciudad, si no se encuentra imprimir el letrero respectivo.
Un bucle donde recorres el array de ciudades, si coincide la imprimes y tomas nota con una bandera. Al final del bucle revisas la bandera para conocer si al menos una ciudad coincidió:
Código
  1. existe = 0;
  2. for (i = 0; i < 5; i++)
  3.   if (strcmp(ciudad[i], buscar) == 0){
  4.      existe = 1;
  5.  
  6.      /* La ciudad existe, imprimir la escuela correspondiente */
  7.   }
  8. if (!existe){
  9.   /* Indicar que la ciudad no existe en el array */
  10. }

Un saludo


Título: Re: planteamiento de problema
Publicado por: eferion en 2 Julio 2013, 17:10 pm
Si se trata de C, Mas o menos así:
Código
  1. char *escuela[] = {
  2.  "Lopez Portillo",
  3.  "Miguel De la Madrid",
  4.  ...
  5. };
  6. char *ciudad[] = {
  7.   "Guadalajara",
  8.   "Guadalajara",
  9.   "Monterrey",
  10.   ...
  11. };
Los nombres de las escuelas deben ser únicos, los de las ciudades no.

Y ahí exactamente cómo sabes qué escuelas se encuentran en cada ciudad ???

Aparte que no tengo yo muy claro que las ciudades deban repetir nombres... si tienes que poner el nombre de una ciudad e indicar las escuelas que se encuentran en dicha ciudad... cómo distingues entre dos ciudades que se llaman igual ???

Para hacer eso necesitas listas enlazadas

Código
  1. struct escuela
  2. {
  3.  char nombre[ 20 ];
  4. };
  5.  
  6. struct ciudad
  7. {
  8.  char nombre[ 20 ];
  9.  int num_escuelas; // para saber cuantas escuelas tiene la ciudad actual
  10.  struct escuela *escuelas[10]; // lista de punteros
  11. };
  12.  
  13. struct escuela escuelas[ 10 ]; // Lista para las escuelas
  14. struct ciudad ciudades[ 10 ]; // Lista de ciudades
  15.  

o algo así... pero dos vectores inconexos sin otro que los relacione... no se


Título: Re: planteamiento de problema
Publicado por: rir3760 en 2 Julio 2013, 17:48 pm
Y ahí exactamente cómo sabes qué escuelas se encuentran en cada ciudad ???
Me parece que se trata de un ejercicio sencillo, la parte clave del enunciado es:
Citar
Inicializar dos matrices, la primera tendra 5 escuelas y la segunda sus respectivas ciudades.
Yo supongo se deben declarar dos arrays de arrays de caracteres (usualmente los llaman "matrices"). El primero contiene los cinco nombres de las escuelas y el segundo los cinco nombres de las ciudades. Para conocer la escuela o ciudad correspondiente basta con utilizar el mismo indice.

Siendo estrictos la declaración de los arrays debería ser mas o menos así:
Código
  1. char escuela[5][20] = {
  2.   "Lopez Portillo",
  3.   "Miguel De la Madrid",
  4.   "Lopez Mateos",
  5.   "Benito Juarez",
  6.   "Miguel Hidalgo"
  7. };
  8. char ciudad[5][20] = {
  9.   "Guadalajara",
  10.   "Guadalajara",
  11.   "Monterrey",
  12.   "Monterrey",
  13.   "Merida"
  14. };

Un saludo


Título: Re: planteamiento de problema
Publicado por: eferion en 2 Julio 2013, 18:24 pm
Me parece que se trata de un ejercicio sencillo, la parte clave del enunciado es:Yo supongo se deben declarar dos arrays de arrays de caracteres (usualmente los llaman "matrices"). El primero contiene los cinco nombres de las escuelas y el segundo los cinco nombres de las ciudades. Para conocer la escuela o ciudad correspondiente basta con utilizar el mismo indice.

Siendo estrictos la declaración de los arrays debería ser mas o menos así:
Código
  1. char escuela[5][20] = {
  2.   "Lopez Portillo",
  3.   "Miguel De la Madrid",
  4.   "Lopez Mateos",
  5.   "Benito Juarez",
  6.   "Miguel Hidalgo"
  7. };
  8. char ciudad[5][20] = {
  9.   "Guadalajara",
  10.   "Guadalajara",
  11.   "Monterrey",
  12.   "Monterrey",
  13.   "Merida"
  14. };

Un saludo

Eso si, yo me refiero a la parte de...

Pedir una escuela a buscar y si se encuentra imprimir la ciudad donde se encuentra, si no se encuentra imprimir el letrero respectivo.

Y

Pedir una ciudad a buscar y si se encuentra imprimir las escuelas de dicha ciudad, si no se encuentra imprimir el letrero respectivo.


Ahí tienes que relacionar las escuelas con las ciudades y viceversa... en tu ejemplo eso no está contemplado ;)


Título: Re: planteamiento de problema
Publicado por: CCross en 2 Julio 2013, 21:31 pm
Pedir una escuela a buscar y si se encuentra imprimir la ciudad donde se encuentra, si no se encuentra imprimir el letrero respectivo.

Creo que que el amigo rir3760 ya propuso una solución, siendo estricto seria algo como esto

Código
  1. int i, existe = 0;
  2.    char buscar[20] = "";
  3.  
  4.    scanf("%[^\n]s", buscar);
  5.  
  6.    for(i = 0; i < 5; i++){
  7.        if(strcmp(escuela[i], buscar)==0){
  8.          existe = 1;
  9.          printf("Ubicacion: %s", ciudad[i]);
  10.        }
  11.    }
  12.    if(!existe)
  13.        printf("Escuela no encontrada\n");
  14.  

Pedir una ciudad a buscar y si se encuentra imprimir las escuelas de dicha ciudad, si no se encuentra imprimir el letrero respectivo.

Y la solucion a esta no varia mucho respecto a la anterior

Código
  1. int i, existe = 0;
  2.    char buscar[20] = "";
  3.  
  4.    scanf("%[^\n]s", buscar);
  5.  
  6.    for(i = 0; i < 5; i++){
  7.        if(strcmp(ciudad[i], buscar)==0){
  8.          existe = 1;
  9.          printf("%s\n", escuela[i]);
  10.        }
  11.    }
  12.    if(!existe)
  13.        printf("No existe Escuela en esa ciudad\n");
  14.  

Saludos


Título: Re: planteamiento de problema
Publicado por: eferion en 2 Julio 2013, 21:54 pm
Tu estás presuponiendo que la relación es ciudad[ i ] <-> escuela[ i ]

Yo lo que he entendido del problema es que una ciudad puede tener varias escuelas...


Título: Re: planteamiento de problema
Publicado por: CCross en 2 Julio 2013, 22:16 pm
Yo lo que he entendido del problema es que una ciudad puede tener varias escuelas...

Si efectivamente, pero observa el ultimo codigo que postee con eso obtenemos cada coincidencia
encontrada con la ciudad ingresada y sus respectivas escuelas, es decir imprimimos todas las ecuelas relacionadas con la ciudad ingresada.

Saludos   


Título: Re: planteamiento de problema
Publicado por: eferion en 2 Julio 2013, 22:23 pm
Entonces lo que tu dices es tener un registro por cada pareja ciudad - escuela...

Si es así, funcionar, funciona, pero no me gusta como solución porque entonces no se ve cómo se enlazan los datos por código.

En cualquier aplicación real los datos se encuentran relacionados unos con otros... y el que opte por defecto por duplicar la información en vez de enlazarla va a buscarse problemas... no es buena opción.


Título: Re: planteamiento de problema
Publicado por: CCross en 2 Julio 2013, 22:45 pm
En cualquier aplicación real los datos se encuentran relacionados unos con otros... y el que opte por defecto por duplicar la información en vez de enlazarla va a buscarse problemas... no es buena opción.

Totalmente de acuerdo contigo, pero para este preciso caso no es muy necesario ya que solo se trata de un sencillo ejercicio de escuela, ademas solo se sigue lo indicado por el enunciado para que complicarse

Saludos


Título: Re: planteamiento de problema
Publicado por: eferion en 3 Julio 2013, 07:16 am
Totalmente de acuerdo contigo, pero para este preciso caso no es muy necesario ya que solo se trata de un sencillo ejercicio de escuela, ademas solo se sigue lo indicado por el enunciado para que complicarse

Saludos

Precisamente... ahora que es cuando se plantean problemas sencillos es cuando hay que empezar a aplicar soluciones completas. Luego cuesta más y vienen los llantos.

El que empieza racaneando al principio va a ir a rastras durante todas las prácticas.