Last active
December 5, 2022 13:33
-
-
Save dennisangemi/1f6eab6d2dbe11e44632de08f0800f54 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
ESERCIZIO | |
- crea un vettore di interi random | |
- crea file csv | |
- salva il vettore su file csv | |
- crea script matlab che importa e visualizza istogramma del file csv | |
*/ | |
/* includo librerie */ | |
#include <stdio.h> | |
#include <stdlib.h> | |
#include <time.h> | |
/* includo libreria personale */ | |
/* #include "../libraries/my_library.h" */ | |
/* definisco costanti */ | |
#define VEC_LEN 100000 | |
#define ESTREMO_INFERIORE 0 | |
#define ESTREMO_SUPERIORE 100 | |
/* definisco nuovi tipi */ | |
typedef float* pfloat; | |
typedef int* pint; | |
typedef FILE* pfile; | |
/* definisco funzioni */ | |
/********************************************************* | |
FUNZIONE rand_int(valmin,valmax) | |
nome funzione: rand_int (che sta per random integer) | |
input: integer che rappresentano estremo inferiore ed estremo superiore di valori casuali | |
output: int casuale tra valmin e valmax | |
*********************************************************/ | |
int rand_int(int valmin, int valmax) | |
{ | |
return ((int)((((float)(rand()*((float)(valmax-valmin+1))))/RAND_MAX)+valmin)); | |
} | |
/******************************************************** | |
FUNZIONE crea_array_rand_double(length,valmin,valmax) | |
nome funzione: crea_array_rand_double (che sta per array di random double) | |
input: interi che rappresentano lunghezza vettore da generare, estremo inferiore ed estremo superiore di valori casuali | |
output: vettore di double casuali tra valmin e valmax | |
********************************************************/ | |
pint crea_array_rand_int(int length, int valmin, int valmax) | |
{ | |
/* variabili temporanee */ | |
unsigned i; | |
int* pvettore; | |
/* crea vettore dinamico e inizializza con double casuali se la malloc viene eseguita correttamente */ | |
if ( (pvettore=((pint)malloc(length*sizeof(int)))) != NULL) | |
{ | |
/* inizializzo con valori casuali */ | |
for(i=0;i<length;i++) | |
{ | |
pvettore[i]=rand_int(valmin,valmax); | |
} | |
} | |
return pvettore; | |
} | |
/* core */ | |
int main(void) | |
{ | |
/* definisco variabili */ | |
unsigned i; | |
pint pnumeri_casuali; | |
pfile pdata; | |
pfile pscript; | |
/* setto seeds */ | |
/* srand(time(NULL)); */ | |
/* creo vettore di interi */ | |
printf("Sto creando un vettore di numeri interi casuali di dimensione %d...\n",VEC_LEN); | |
if((pnumeri_casuali = crea_array_rand_int(VEC_LEN,ESTREMO_INFERIORE,ESTREMO_SUPERIORE))==NULL) | |
goto MEM_ERR; | |
/* crea e apri file data.csv */ | |
printf("Sto salvando i dati generati nel file data.csv\n"); | |
pdata = fopen("data.csv","w"); | |
if (pdata == NULL) | |
goto FILE_ERR; | |
/* salva pnumeri_casuali in data.csv */ | |
/* crea header */ | |
/* fprintf(pdata,"numeri_casuali\n"); */ | |
/* salva dati */ | |
for(i=0;i<VEC_LEN;i++) | |
{ | |
fprintf(pdata,"%d\n",pnumeri_casuali[i]); | |
} | |
/* chiudi data.csv */ | |
fclose(pdata); | |
/* libera memoria */ | |
printf("Sto liberando spazio in RAM ;)\n"); | |
free(pnumeri_casuali); | |
/* crea e apri script matlab */ | |
printf("Sto creando script.m\n"); | |
pscript = fopen("script.m","w"); | |
if (pscript == NULL) | |
goto FILE_ERR; | |
/* scrivi script matlab */ | |
/* shabang */ | |
fprintf(pscript,"#!/usr/bin/octave\n"); | |
/* importa dati in octave */ | |
fprintf(pscript,"df = csvread('data.csv');\n"); | |
/* crea histogramma */ | |
fprintf(pscript,"hist(df);\n"); | |
/* pausa */ | |
fprintf(pscript,"input('Premi INVIO per chiudere lo script...');\n"); | |
/* chiudi script matlab */ | |
fclose(pscript); | |
/* rendi eseguibile lo script matlab */ | |
printf("Sto rendendo eseguibile il file script.m\n"); | |
system("chmod +x script.m"); | |
/* esegui lo script matlab */ | |
printf("Sto eseguendo script.m\n"); | |
system("./script.m"); | |
printf("A presto!\n"); | |
return EXIT_SUCCESS; | |
MEM_ERR: | |
printf("Errore! Spazio di archiviazione RAM consecutivo non disponibile.\n"); | |
goto END; | |
FILE_ERR: | |
printf("Errore nella creazione del file! Sorry\n"); | |
goto END; | |
END: | |
return EXIT_FAILURE; | |
} |
Author
dennisangemi
commented
Dec 5, 2022
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment