|
|
|
|
8
|
![main1.png](images/main1.png)
|
8
|
![main1.png](images/main1.png)
|
9
|
![main2.png](images/main2.png)
|
9
|
![main2.png](images/main2.png)
|
10
|
|
10
|
|
11
|
-[Verano 2016 - Ive]
|
|
|
|
|
11
|
+[Verano 2016 - Ive- Tatiana]
|
12
|
|
12
|
|
13
|
Los arreglos de datos (*arrays*) nos facilitan guardar y trabajar con grupos de datos del mismo tipo. Los datos se guardan en espacios de memoria consecutivos a los que se puede acceder utilizando el nombre del arreglo e índices o suscritos que indican la posición en que se encuentra el dato. Las estructuras de repetición nos proveen una manera simple de acceder a los datos de un arreglo.
|
13
|
Los arreglos de datos (*arrays*) nos facilitan guardar y trabajar con grupos de datos del mismo tipo. Los datos se guardan en espacios de memoria consecutivos a los que se puede acceder utilizando el nombre del arreglo e índices o suscritos que indican la posición en que se encuentra el dato. Las estructuras de repetición nos proveen una manera simple de acceder a los datos de un arreglo.
|
14
|
|
14
|
|
15
|
|
15
|
|
16
|
-Un *objeto* es una entidad que se utiliza en muchos lenguajes de programación para integrar los datos y el código que opera en ellos, haciendo más fácil el modificar programas grandes. Una tarea bien común en programación usando C++ lo es el trabajar con arreglos de objetos. En la experiencia de laboratorio de hoy estarás trabajando con datos "georeferenciados" de pueblos en Puerto Rico, en donde tendrás atributos, como el nombre del pueblo, la latitud y longitud de su localización, que utilizarás para ilustrar propiedades en un mapa.
|
|
|
|
|
16
|
+Un *objeto* es una entidad que se utiliza en muchos lenguajes de programación para integrar los datos y el código que opera en ellos, haciendo más fácil el modificar programas grandes. Una tarea bien común en programación usando C++ es el trabajar con arreglos de objetos. En la experiencia de laboratorio de hoy estarás trabajando con datos "georeferenciados" de pueblos en Puerto Rico, en donde tendrás atributos, como el nombre del pueblo, la latitud y longitud de su localización, que utilizarás para ilustrar propiedades en un mapa.
|
17
|
|
17
|
|
18
|
|
18
|
|
19
|
|
19
|
|
|
|
|
|
59
|
4. Estudiado los conceptos e instrucciones para la sesión de laboratorio.
|
59
|
4. Estudiado los conceptos e instrucciones para la sesión de laboratorio.
|
60
|
|
60
|
|
61
|
|
61
|
|
62
|
-5. Tomado el quiz Pre-Lab que se encuentra en Moodle.
|
|
|
|
|
62
|
+5. Tomado el quiz Pre-Lab, disponible en Moodle.
|
63
|
|
63
|
|
64
|
|
64
|
|
65
|
---
|
65
|
---
|
|
|
|
|
73
|
##Datos "georeferenciados"
|
73
|
##Datos "georeferenciados"
|
74
|
|
74
|
|
75
|
|
75
|
|
76
|
-Trabajar con arreglos de objetos es una tarea bien común en la programación usando C++. Una vez has leido la información de los objetos de un archivo o provenientes de un usuario, debes depender de tus destrezas algorítmicas y conocimiento sobre C++ para invocar los métodos y funciones adecuadas para procesar los datos correctamente.
|
|
|
|
|
76
|
+Trabajar con arreglos de objetos es una tarea bien común en la programación usando C++. Una vez has leído la información de los objetos de un archivo o provenientes de un usuario, debes depender de tus destrezas algorítmicas y conocimiento sobre C++ para invocar los métodos y funciones adecuadas para procesar los datos correctamente.
|
77
|
|
77
|
|
78
|
|
78
|
|
79
|
En esta experiencia de laboratorio estarás trabajando con datos "georeferenciados" sobre las ciudades en Puerto Rico. El que un dato sea "georeferenciado" quiere decir que el dato tiene una localización física asociada. Típicamente, esta **localización** son coordenadas de longitud y latitud. Por ejemplo, lo que sigue es parte de un archivo que contiene datos georeferenciados de pueblos en Puerto Rico:
|
79
|
En esta experiencia de laboratorio estarás trabajando con datos "georeferenciados" sobre las ciudades en Puerto Rico. El que un dato sea "georeferenciado" quiere decir que el dato tiene una localización física asociada. Típicamente, esta **localización** son coordenadas de longitud y latitud. Por ejemplo, lo que sigue es parte de un archivo que contiene datos georeferenciados de pueblos en Puerto Rico:
|
|
|
|
|
100
|
###Distancia ortodrómica
|
100
|
###Distancia ortodrómica
|
101
|
|
101
|
|
102
|
|
102
|
|
103
|
-Para calcular la distancia entre dos puntos en el plano Euclideano, trazas el segmento de línea recta que une a los puntos y calculas su largo utilizando la fórmula de distancia que estudiaste en tu curso de Pre-cálculo. Para calcular la distancia entre dos puntos en la superficie de una esfera no utilzas el segmento de línea que los une, utilizas la distancia más corta entre esos puntos medida sobre la esfera. Esta distancia se llama *distancia ortodrómica*. Para calcular la distancia ortodrómica entre dos puntos en el globo terráqueo se usan las coordenadas de latitud y longitud.
|
|
|
|
|
103
|
+Para calcular la distancia entre dos puntos en el plano Euclidiano, trazas el segmento de línea recta que une a los puntos y calculas su largo utilizando la fórmula de distancia que estudiaste en tu curso de Pre-cálculo. Para calcular la distancia entre dos puntos en la superficie de una esfera no utilizas el segmento de línea que los une, utilizas la distancia más corta entre esos puntos medidos sobre la esfera. Esta distancia se llama *distancia ortodrómica*. Para calcular la distancia ortodrómica entre dos puntos en el globo terráqueo se usan las coordenadas de latitud y longitud.
|
104
|
|
104
|
|
105
|
|
105
|
|
106
|
|
106
|
|
|
|
|
|
131
|
* `void setAll(string s, double a, double b)`: "setter" para todas las propiedades (a la vez)
|
131
|
* `void setAll(string s, double a, double b)`: "setter" para todas las propiedades (a la vez)
|
132
|
|
132
|
|
133
|
|
133
|
|
134
|
-* `double odDistance(const GISPOI &B) const`: dado otro objeto `B` de la clase `GPOI`, devuelve la distancia *ortodrómica* (*orthodromic*) (la distancia más corta) entre el `GPOI` que invoca y `B`
|
|
|
|
|
134
|
+* `double odDistance(const GISPOI &B) const`: dado otro objeto `B` de la clase `GPOI`, devuelve la distancia *ortodrómica* (*orthodromic*) (la distancia más corta) entre el `GPOI` que la invoca y `B`
|
135
|
|
135
|
|
136
|
|
136
|
|
137
|
---
|
137
|
---
|
|
|
|
|
186
|
|
186
|
|
187
|
6. `double cycleDistance(GISPOI A[], int size, int P[])`: Dado un arreglo `A` de pueblos, el tamaño de este arreglo, y un arreglo `P` con una permutación de los enteros en `[0,size-1]`, computa y devuelve la distancia de viajar el ciclo de pueblos `A[P[0]]` $$\rightarrow$$ `A[P[1]]` $$\rightarrow \cdots \rightarrow$$ `A[P[size-1]]`. Recuerda que la distancia que calcularás será la distancia *ortodrómica*.
|
187
|
6. `double cycleDistance(GISPOI A[], int size, int P[])`: Dado un arreglo `A` de pueblos, el tamaño de este arreglo, y un arreglo `P` con una permutación de los enteros en `[0,size-1]`, computa y devuelve la distancia de viajar el ciclo de pueblos `A[P[0]]` $$\rightarrow$$ `A[P[1]]` $$\rightarrow \cdots \rightarrow$$ `A[P[size-1]]`. Recuerda que la distancia que calcularás será la distancia *ortodrómica*.
|
188
|
|
188
|
|
189
|
- Por ejemplo, si los pueblos que se leen del archivo fueran Mayaguez, Ponce, Yauco y San Juan (en ese orden) y la permutación `P` es $$(3, 1, 0, 2$$, la función debe computar la distancia del ciclo San Juan $$\rightarrow$$ Ponce $$\rightarrow$$ Mayaguez $$\rightarrow$$ Yauco $$\rightarrow$$ San Juan.**Esta es una función que tú implementarás**.
|
|
|
|
|
189
|
+ Por ejemplo, si los pueblos que se leen del archivo fueran Mayagüez, Ponce, Yauco y San Juan (en ese orden) y la permutación `P` es $$(3, 1, 0, 2$$, la función debe computar la distancia del ciclo San Juan $$\rightarrow$$ Ponce $$\rightarrow$$ Mayagüez $$\rightarrow$$ Yauco $$\rightarrow$$ San Juan.**Esta es una función que tú implementarás**.
|
190
|
|
190
|
|
191
|
|
191
|
|
192
|
Hay otras dos funciones que debes conocer:
|
192
|
Hay otras dos funciones que debes conocer:
|
|
|
|
|
203
|
|
203
|
|
204
|
|
204
|
|
205
|
|
205
|
|
206
|
-1. En la función `main()`, añade las instrucciones necesarias para abrir el archivo que contiene la información de los pueblos georeferenciados. El archivo que usarás primero está en el directorio `data` y es `pr10.txt`. Necesitas dar el `path` completo del archivo como parámetro del método `open()` de tu objeto `ifstream`. Como siempre, cuando uses archivos debes verificar si el nombre del archivo que pusiste se puede abrir para leer exitosamente.
|
|
|
|
|
206
|
+1. En la función `main()`, añade las instrucciones necesarias para abrir el archivo que contiene la información de los pueblos georeferenciados. El archivo que usarás primero está en el directorio `data` y se llama `pr10.txt`. Necesitas dar el `path` completo del archivo como parámetro del método `open()` de tu objeto `ifstream`. Como siempre, cuando uses archivos debes verificar si el nombre del archivo que pusiste se puede abrir para leer exitosamente.
|
207
|
|
207
|
|
208
|
|
208
|
|
209
|
-2. Invoca la función `int countLinesInFile(ifstream &inFile)` para obtener el número de líneas en el archivo. Puedes imprimir el número de líneas obtenido de modo que valides que tu programa está funcionando correctamente.
|
|
|
|
|
209
|
+2. Invoca la función `int countLinesInFile(ifstream &inFile)` para obtener el número de líneas en el archivo. Puedes imprimir el número de líneas obtenido de modo que verifiques que tu programa está funcionando correctamente.
|
210
|
|
210
|
|
211
|
|
211
|
|
212
|
3. Crea un arreglo **dinámicamente** tan grande como el número de líneas en tu programa.
|
212
|
3. Crea un arreglo **dinámicamente** tan grande como el número de líneas en tu programa.
|
|
|
|
|
218
|
5. En la función `main()`, invoca la función `readFileToArray`, pasando la referencia al archivo, el arreglo que creaste en el paso 3, y su tamaño.
|
218
|
5. En la función `main()`, invoca la función `readFileToArray`, pasando la referencia al archivo, el arreglo que creaste en el paso 3, y su tamaño.
|
219
|
|
219
|
|
220
|
|
220
|
|
221
|
-6. Luego de invocar la función `readFileToArray` puedes invocar la función `void printArrayOfCities(GISPOI A[], int size)` para imprimir los nombres y georeferencias de los puntos leidos del archivo.
|
|
|
|
|
221
|
+6. Luego de invocar la función `readFileToArray` puedes invocar la función `void printArrayOfCities(GISPOI A[], int size)` para imprimir los nombres y georeferencias de los puntos leídos del archivo.
|
222
|
|
222
|
|
223
|
|
223
|
|
224
|
7. Invoca el método `drawPoints(GISPOI* gisLocations, unsigned int size)` en el objeto `w` de modo que se muestre un punto en el mapa para cada pueblo. La invocación debe hacerse de esta manera: `w.drawPoints(A, size)` (*asumiendo que `A` es el nombre de tu arreglo*). Debes obtener algo parecido a la siguiente figura:
|
224
|
7. Invoca el método `drawPoints(GISPOI* gisLocations, unsigned int size)` en el objeto `w` de modo que se muestre un punto en el mapa para cada pueblo. La invocación debe hacerse de esta manera: `w.drawPoints(A, size)` (*asumiendo que `A` es el nombre de tu arreglo*). Debes obtener algo parecido a la siguiente figura:
|
|
|
|
|
317
|
|
317
|
|
318
|
|
318
|
|
319
|
|
319
|
|
|
|
320
|
+
|
|
|
321
|
+
|
|
|
322
|
+
|