-
Notifications
You must be signed in to change notification settings - Fork 0
/
examen - copia.c
113 lines (82 loc) · 2.91 KB
/
examen - copia.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
//Header para funciones scanf y printf
#include<stdio.h>
//Header para función malloc
#include<stdlib.h>
#define n 3 //tamaño v1
#define m 4 //tamaño v2
//función de la gestión de memoria fácil, aquí el tamaño de los vectores viene definido por las constantes declaradas anteriormente
void facil(void){
//declaro los vectores de tamaño fijo
int v1[n];
int v2[m];
int v[n + m];
int i = 0;
//escaneo los vectores v1 y v2
for(i = 0; i < n; i ++){
scanf("%d", &v1[i]);
}
for(i = 0; i < m; i ++){
scanf("%d", &v2[i]);
}
//asigno los n elementos del vector v1 a las primeras "n" posiciones del vector v
for(i = 0; i < n; i++){
v[i] = v1[i];
}
//asigno los m elementos del vector v2 a v a partir de la posición v[n]
for(i = 0; i< m; i++){
v[n + i] = v2[i];
}
//imprimo el vector v para comprovar el resultado
for(i = 0; i < n + m; i++){
printf("%d\n", v[i]);
}
}
/*función de la gestión de memoria difícil, aquí declaramos punteros y les asignamos el espacio que le introduzcamos en cada ejecución
utilizamos la función malloc
*/
void dificil(void){
//declaro los 3 punteros a variables enteras
int *v1;
int *v2;
int *v;
//declaro los enteros que servirán para dar tamaño a los vectores v1 y v2 respectivamente
int a = 0;
int b = 0;
//escaneo los valores a y b y luego asigno ese valor a la longitud del puntero
scanf("%d %d",&a,&b);
/* Como la función malloc es void hay que decirle qué tipo de variable se le asigna, como v1 es un puntero a enteros, se escrive como (int*)
para asignar un número "a" de enteros (recordemos que un tipo de variable entero es un conjunto de casillas de la memoria de tamaño definido).
Cuantas casillas de la memoria son un entero se conoce por sizeof(int).
De este modo, <a * sizeof(int)> es "a" veces la cantidad de casillas que ocupa un int, por lo que se puede entender como "a" enteros.
Es decir, un vector de "a" enteros.*/
v1 = (int*)malloc(a * sizeof(int));
v2 = (int*)malloc(b * sizeof(int));
//El vector v tiene una longitud a + b
v = (int*)malloc((a + b) * sizeof(int));
int i = 0;
//escaneo los vectores v1 y v2
for(i = 0; i < a; i ++){
scanf("%d",&v1[i]);
}
for(i = 0; i < b; i ++){
scanf("%d",&v2[i]);
}
//asigno los n elementos del vector v1 a las primeras "n" posiciones del vector v
for(i = 0; i < a; i ++){
v[i] = v1[i];
}
//asigno los m elementos del vector v2 a v a partir de la posición v[n]
for(i = 0; i < b; i ++){
v[n + i] = v2[i];
}
//imprimo el vector v para comprovar el resultado
for(i = 0; i < a + b; i++){
printf("%d\n", v[i]);
}
}
int main(){
//Llamo las funciones en el main para que se ejecuten cuando corro el programa
facil();
dificil();
return 0;
}