Ciao a tutti, sono nuovo di questo forum e da quest'anno a scuola ho cominciato a programmare, quindi sono alle prime armi. La mia domanda sarà banale, ma non riesco a venire a capo del problema.
Mi serve un piccolo programma che funga da conta BPM (leggi: contabattute). Per chi non sappia cos'è, mi spiego meglio: tralasciando lo scopo, devo poter calcolare l'intervallo di tempo che intercorre tra l'inserimento di un primo e un ultimo valore. Il numero di inserimenti non è fisso, e io non so creare un timer.
Ora, se qualcuno mi spiega il timer, meglio; altrimenti sarei contento anche che qualcuno mi correggesse il listato che adesso allego. Ho usato la funzione clock_t (trovata nell'help) e ottengo l'intervallo di tempo creando due variabili dove salvo il tempo corrente. Comunque è tutto commentato nel listato. Eccolo:
#include <conio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
#include <iostream.h>
#include <stdio.h>
#include <dos.h>
#include <sys\timeb.h>
int main(void) //utilizzo del void per la funzione
//clock_t
{
float bpm_on; //BPM del brano in cassa
float bpm_in; //BPM del brano in ingresso
float pitch; //variazione di velocità da far assumere
//al brano 2 per raggiungere il brano 1
float beat1; //1 beat per il brano 1
float beat2; //1 beat per il brano 2
float tempo_di_battuta1; //differenza di tempo nel calcolo dei bpm del brano 1
float tempo_di_battuta2; //differenza di tempo nel calcolo dei bpm del brano 2
float conta1; //numero di pressioni nel calcolo dei bpm del brano 1
float conta2; //numero di pressioni nel calcolo dei bpm del brano 2
clock_t first, second, third, fourth; //?? (differenza di tempo in secondi, preso dall'help)
conta1=0;
cout<<"Per ogni battuta, inserisci un valore DIVERSO da 1 e premi INVIO per "
"determinare i BPM del brano in cassa. Premi 1 per terminare la sequenza. \n\n";
cin>>beat1;
first = time(NULL);
while (beat1!=1)
{
cin>>beat1;
conta1=conta1+1;
}
second = time(NULL);
tempo_di_battuta1=difftime(second,first);
bpm_on=(conta1*60)/tempo_di_battuta1;
clrscr();
conta2=0;
cout<<"Per ogni battuta, inserisci un valore DIVERSO da 1 e premi INVIO per "
"determinare i BPM del brano in ingresso. Premi 1 per terminare la sequenza. \n\n";
cin>>beat2;
third = time(NULL);
while (beat2!=1)
{
cin>>beat2;
conta2=conta2+1;
}
fourth = time(NULL);
tempo_di_battuta2=difftime(fourth,third);
bpm_in=(conta2*60)/tempo_di_battuta2;
clrscr();
cout<<"\nBPM IN CASSA: "<<bpm_on<<" \n\n";
cout<<"BPM IN INGRESSO: "<<bpm_in<<" \n\n\n";
pitch=((bpm_on*100)/bpm_in)-100;
cout<<"Variazione di pitch del brano in ingresso: "<<pitch<<" %";
getch();
return 0;
}
Il programma funziona, non da errori, ma c'è un problema: il tempo è calcolato in secondi. Per avere una buona precisione anche con soli 30 secondi di pressioni, ho bisogno di usare i centesimi/millesimi di secondo. Questo è quello che non so fare.
Come avrete notato ho già provato a dichiarare tutte le variabili float, nella speranza che calcolando i bpm mi considerasse anche i secondi come float, ma niente. Ottengo solo il dato finale in millesimi ma i secondi restano approssimati all'unità.
A questo punto, spero di essermi spiegato bene e spero che qualche "navigato" di C++ e di html.it mi dia il supporto necessario.
Grazie