Curso-lenguaje-C/fundamentos-programacion/PR4/README.md

168 lines
3.8 KiB
Markdown
Raw Normal View History

2024-05-30 18:31:59 +02:00
# PR 3
[Volver a la página principal de "Fundamentos de la Programación"](../README.md)
**Índice**
- [PR 3](#pr-3)
- [17. Esquemas de recorrido y búsqueda](#17-esquemas-de-recorrido-y-búsqueda)
- [17.1. Aprocimación intuitiva](#171-aprocimación-intuitiva)
2024-06-02 19:51:39 +02:00
- [17.1.1. Ejemplo temperatura media](#1711-ejemplo-temperatura-media)
- [17.1.2. Ejemplo](#1712-ejemplo)
2024-05-30 18:31:59 +02:00
- [17.2. Esquema de recorrido](#172-esquema-de-recorrido)
- [17.3. Esquema de búsqueda](#173-esquema-de-búsqueda)
- [17.3.1. Ejemplo](#1731-ejemplo)
- [17.4. Ejercicios](#174-ejercicios)
## 17. Esquemas de recorrido y búsqueda
2024-06-01 21:31:47 +02:00
Ya hemos visto las estructuras secuencial, alternatica e iterativa, con esto, ya podemos resolver cualquier problema. Ahora vamos a ver esquemas de recorrido y búsqueda, que son una especie de patrones o estructuras predeterminadas para diseñar algoritmos de manera más sistemática y ganar en eficiencia y fiabilidad.
2024-05-30 18:31:59 +02:00
2024-06-01 21:31:47 +02:00
Un esquema es una especie de plantilla que nos permite solucionar un tipo de problema específico con adaptaciones a cada caso concreto. Un ejemplo de aplicación de esquemas de recorrido y búsqueda es para resolver problemas de tratamiento de secuencias de manera más eficiente y sistemática.
2024-05-30 18:31:59 +02:00
### 17.1. Aprocimación intuitiva
2024-06-01 21:31:47 +02:00
La idea es que, en lugar de ir a ciegas, sigamos un esquema de recorrido o búsqueda que nos permita ir avanzando de manera sistemática y eficiente. Por ejemplo, si tenemos que recorrer una matriz, podemos hacerlo por filas o por columnas, o si tenemos que buscar un elemento en una lista, podemos hacerlo de manera secuencial o binaria.
2024-05-30 18:31:59 +02:00
2024-06-02 19:51:39 +02:00
#### 17.1.1. Ejemplo temperatura media
2024-05-30 18:31:59 +02:00
2024-06-02 19:51:39 +02:00
Vamos a calcular la temperatura media de todo el año suponiendo que vamos leyendo por el canal de entrada las temperaturas medias de cada día:
2024-06-01 21:31:47 +02:00
```alg
algorithm averageTemp
var
temperature: real;
average: real;
i: integer;
end var
i:= 0;
average:= 0;
while i < 365 do
temperature:= readReal();
average:= average + temperature;
i:= i + 1;
end while
write(average / 365.0);
end algorithm
```
```c
#include <stdio.h>
int main(int argc, char** argv) {
float temperature;
float average;
int i;
i = 0;
average = 0;
while (i < 365) {
scanf("%f", &temperature);
average = average + temperature;
i = i + 1;
}
printf("%f\n", average / 365.0);
2024-05-30 18:31:59 +02:00
2024-06-01 21:31:47 +02:00
return 0;
}
```
2024-05-30 18:31:59 +02:00
2024-06-02 19:51:39 +02:00
#### 17.1.2. Ejemplo
2024-05-30 18:31:59 +02:00
2024-06-02 19:51:39 +02:00
Cargamos los datos de una tabla de recaudaciones de una sala de cine a partir de lo leído por el canal de entrada estándar.
2024-05-30 18:31:59 +02:00
2024-06-02 19:51:39 +02:00
```alg
const
MAX_THEATERS: integer = 20;
END_SEQ: real = -1.0;
end const
type
tTheater = record
collect: vector[MAX_THEATERS] real;
numTheaters: integer;
end record
end type
action fillTable(inout movieTheater:tTheater);
var
i: integer;
temp: real;
end var
temp:= readReal(); {We read the first value}
movieTheater.numTheaters:= 0;
while temp ≠ END_SEQ do
movieTheater.numTheaters:= movieTheater.numTheaters + 1;
movieTheater.collect[movieTheater.numTheaters]:= temp;
temp:= readReal();
end while
end action
```
```c
#include <stdio.h>
#define END_SEQ -1
#define MAX_THEATERS 20
typedef struct {
float collect[MAX_THEATERS];
int numTheaters;
} tTheater;
void fillTable(tTheater *movieTheater) {
/* var definition */
int i;
float temp;
/* table initialization */
temp = 0;
movieTheater->numTheaters = 0;
scanf("%f", &temp); /* read the first value */
/* iteration while the read number is not -1 */
while (temp != END_SEQ) {
/* Save the read number in the table */
movieTheater->collect[movieTheater->numTheaters] = temp;
movieTheater->numTheaters = movieTheater->numTheaters + 1;
scanf("%f", &temp);
}
}
```
2024-05-30 18:31:59 +02:00
### 17.2. Esquema de recorrido
2024-06-02 19:51:39 +02:00
2024-05-30 18:31:59 +02:00
### 17.3. Esquema de búsqueda
#### 17.3.1. Ejemplo
### 17.4. Ejercicios
[Volver arriba](#pr-1)