-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmultescalar.c
59 lines (46 loc) · 2.43 KB
/
multescalar.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
#include <immintrin.h> // Esta librería proporciona funciones para operaciones intrínsecas de vectores en C.
#include <stdio.h> // Esta librería permite operaciones de entrada/salida estándar, como printf y scanf.
#include <stdlib.h>
#include <assert.h> // Esta librería proporciona la macro assert, que se utiliza para realizar verificaciones en tiempo de ejecución.
#define VECTORSIZE 4 // Define el tamaño del vector como 4.
// Función para realizar la multiplicación de un vector por un escalar
void vectorScalarMultiply(const double* vector, double scalar, double* result, int length) {
for (int i = 0; i < length; i++) {
result[i] = vector[i] * scalar; // Multiplica cada elemento del vector por el escalar y almacena el resultado en el vector de resultado.
}
}
int main(int argc, char* argv[]) {
int vectorSize;
double *vector;
double scalar = 2.0;
double *result;
// Verifica si se proporciona un argumento de línea de comandos para el tamaño del vector, de lo contrario, utiliza el tamaño predeterminado definido por VECTORSIZE.
if (argc == 1) {
vectorSize = VECTORSIZE;
} else {
// Convierte el argumento de la línea de comandos a un entero (tamaño del vector).
vectorSize = atoi(argv[1]);
}
// Asigna memoria para el vector de acuerdo con el tamaño dado. La función malloc se utiliza para asignar memoria dinámica.
vector = (double*)malloc(sizeof(double)*vectorSize);
assert(vector != NULL); // Verifica si la asignación de memoria ha sido exitosa.
result = (double*)malloc(sizeof(double)*vectorSize);
assert(result != NULL); // Verifica si la asignación de memoria ha sido exitosa.
// Inicializa el vector con algunos valores.
for (int i = 0; i < vectorSize; ++i) {
vector[i] = i + 1; // Llena el vector con valores, comenzando desde 1.
}
// Realiza la multiplicación de vector-escalar utilizando la función definida anteriormente.
vectorScalarMultiply(vector, scalar, result, vectorSize);
// Imprime el resultado.
#ifdef DEBUG
printf("Result:\n");
for (int i = 0; i < vectorSize; ++i) {
printf("%lf ", result[i]); // Imprime los valores del vector resultante.
}
#endif
// Libera la memoria asignada dinámicamente.
free(vector);
free(result);
return 0; // Devuelve 0 para indicar una ejecución exitosa.
}