Skip to content

Instantly share code, notes, and snippets.

@dennisangemi
Last active December 5, 2022 13:33
Show Gist options
  • Save dennisangemi/1f6eab6d2dbe11e44632de08f0800f54 to your computer and use it in GitHub Desktop.
Save dennisangemi/1f6eab6d2dbe11e44632de08f0800f54 to your computer and use it in GitHub Desktop.
/*
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;
}
@dennisangemi
Copy link
Author

plot

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment