Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    [C++] funzione clock_t (USO DI UN TIMER..? - millisecondi)

    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

  2. #2
    Nessuno può/sa darmi una mano??

  3. #3
    Utente di HTML.it L'avatar di Mods
    Registrato dal
    Jun 2004
    Messaggi
    302
    se fai una roba del tipo:

    codice:
    clock_t start,end;
    start=clock();
    ...
    end=clock();
    (end-start) dovrebbe restituirti il tempo in msec
    Ci sono 10 tipi di persone al mondo: quelli che conoscono il codice binario, e quelli che non lo conoscono!

  4. #4
    Funziona!
    grazie!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.