diff --git a/fundamentos-programacion/PEC3/README.md b/fundamentos-programacion/PEC3/README.md index 5d33fbc..7add19b 100644 --- a/fundamentos-programacion/PEC3/README.md +++ b/fundamentos-programacion/PEC3/README.md @@ -198,8 +198,118 @@ Podemos definir variables que contienen varios elementos de un mismo tipo. Seg ### 6.1. Vectores +Los vectores o arrays, son estructuras de una sola dimensión, que contienen n valores de un mismo tipo. + +```c +var + t : vector[7] of real; +end var +/* Variable definition */ +float t[7]; +``` + +Para acceder a una posición de un vector se utiliza el índice de la posición deseada. El índice de un vector empieza en 0. + +Es importante el valor que tiene la primera posición. En algunos lenguajes el valor 0 es el primer valor definido y en otros lenguajes el primer valor es 1. + +En lenguaje algorítmico el primer valor es 1. + +En lenguaje C el primer valor es 0. + +Por ejemplo, para acceder a los valores de un vector de 7 posiciones en lenguaje algorítmico se haría de la siguiente forma: + +``` +algorithm tempAverage + var + t: vector[7] of real; + m: real; + end var + t[1] := readReal(); + t[2] := readReal(); + t[3] := readReal(); + t[4] := readReal(); + t[5] := readReal(); + t[6] := readReal(); + t[7] := readReal(); + m := (t[1] + t[2] + t[3] + t[4] + t[5] + t[6] + t[7]) / 7.0; + writeReal(m); +end algorithm +``` + +Y en lenguaje C se haría de la siguiente forma: +```c +#include + +int main(int argc, char** argv) { + float t[7]; + float m; + scanf("%f", &t[0]); + scanf("%f", &t[1]); + scanf("%f", &t[2]); + scanf("%f", &t[3]); + scanf("%f", &t[4]); + scanf("%f", &t[5]); + scanf("%f", &t[6]); + m=(t[0] + t[1] + t[2] + t[3] + t[4] + t[5] + t[6]) / 7.0; + printf("%f", m); + return 0; +} +``` +Dado que cuando se carga un programa para su ejecución se reserva la memoria para sus variables, cuando definimos un vector podemos utilizar constantes para su dimensión, pero nunca variables, ya que estas no tienen un valor conocido hasta que ya se está ejecutando el programa. + +✅ +```c +#include +#define N 3 +int main(int argc, char** argv) { + float v[N]; +} +``` + +❌ +```c +#include +int main(int argc, char** argv) { + int m; + m := 3; + float v[m]; +}x +``` + +Cuando la longitud de un vector es un dato conocido, es una buena práctica definirla como una constante. De esta forma, si en algún momento necesitamos cambiar la longitud del vector, solo tendremos que modificar el valor de la constante. + #### 6.1.1. Cadenas de caracteres o strings +Un tipo muy utilizado de vector son las cadenas de caracteres o strings. En C, las cadenas de caracteres son vectores de caracteres terminados en el carácter nulo `\0` (Valor ASCII 0). + +Por lo tanto, si queremos guardar una cadena de caracteres será necesario reservar memoria para una posición adicional. + +```c +algorithm sayHello + var + name: string; + end var + writeString("What's your name?"); + name := readString(); + writeString("Hello"); + writeString(name); +end algorithm + +#include + +#define MAX_NAME_LEN 25 +int main(int argc, char** argv) { + char name[MAX_NAME_LEN]; + printf("What's your name?\n"); + scanf("%s", name); + printf("Hello %s\n", name); + return 0; +} +``` + +Cuando utilizamos la instrucción en C scanf no ponemos el símbolo & delante. + +Con los strings podemos utilizar los mismos operadores externos que con los caracteres =, ≠, <, >, ≤, ≥ para compararlos. La comparación se hace siguiendo el orden alfabético empezando por el primer caracter. #### 6.1.2. Representación de memoria