Miki88
20-01-2013, 00:03
Ciao a tutti,
Premetto che sono un "programmatore" alle prime armi con qualche mese di studio alle spalle e niente più, sto svolgendo un esercizio con l'ausilio dei thread. però dal mio codice c'è qualcosa che non torna nel senso funziona, fa i calcoli ma rispetta solo una delle tue condizioni per cui dovrebbe uscire dal ciclo.
IL codice è il seguente
#include <stdio.h>
#include <pthread.h>
#include <time.h>
#include <math.h>
int timeout = 0;
void *thread_check_time(void *arg)
{
int t_max;
printf("Inserisci il tempo massimo di attesa(espresso in secondi): ");
scanf("%d", &t_max);
sleep(t_max);
timeout = 1;
}
int main(void)
{
float pi_greco = 0;
float pi_grecotot = 0;
float error;
int i = 0;
int denominatore = 1;
float accuracy;
printf("Inserisci il grado di accuratezza : ");
scanf("%f", &accuracy);
pthread_t thread_time;
pthread_create(&thread_time, NULL, thread_check_time, NULL);
do {
if (i%2 == 0) {
pi_greco = (float)4 / (float) denominatore;
denominatore = denominatore + 2;
}
else{
pi_greco = -(float)4 / (float)denominatore;
denominatore = denominatore + 2;
}
pi_grecotot = pi_grecotot + pi_greco;
i++;
error = pi_grecotot - M_PI;
} while ((fabs(error) > accuracy) || (timeout==1));
pthread_join(thread_time,NULL);
printf("Il valore di pigreco approssimato a %f è %f\n", accuracy, pi_grecotot);
}
Le prove che ho svolto sono semplicemente queste:
- Ho provato a dare un valore di accuracy basso e un tempo alto e il programma dopo i secondi di sleep che imposto esce dal ciclo
- Ho provato a dare un valore di accuracy alto e un tempo alto ma il programma esce dal ciclo solo quando sono passati i secondi (dando un'approssimazione alta tipo 0.85 il sfw dovrebbe funzionare solo per pochi secondi tempo di eseguire 1 / 2 cicli invece continua a ciclare per tutta la durata dei secondi che ho impostato all'inizio.
Mi potete dire dove sbaglio?
Premetto che sono un "programmatore" alle prime armi con qualche mese di studio alle spalle e niente più, sto svolgendo un esercizio con l'ausilio dei thread. però dal mio codice c'è qualcosa che non torna nel senso funziona, fa i calcoli ma rispetta solo una delle tue condizioni per cui dovrebbe uscire dal ciclo.
IL codice è il seguente
#include <stdio.h>
#include <pthread.h>
#include <time.h>
#include <math.h>
int timeout = 0;
void *thread_check_time(void *arg)
{
int t_max;
printf("Inserisci il tempo massimo di attesa(espresso in secondi): ");
scanf("%d", &t_max);
sleep(t_max);
timeout = 1;
}
int main(void)
{
float pi_greco = 0;
float pi_grecotot = 0;
float error;
int i = 0;
int denominatore = 1;
float accuracy;
printf("Inserisci il grado di accuratezza : ");
scanf("%f", &accuracy);
pthread_t thread_time;
pthread_create(&thread_time, NULL, thread_check_time, NULL);
do {
if (i%2 == 0) {
pi_greco = (float)4 / (float) denominatore;
denominatore = denominatore + 2;
}
else{
pi_greco = -(float)4 / (float)denominatore;
denominatore = denominatore + 2;
}
pi_grecotot = pi_grecotot + pi_greco;
i++;
error = pi_grecotot - M_PI;
} while ((fabs(error) > accuracy) || (timeout==1));
pthread_join(thread_time,NULL);
printf("Il valore di pigreco approssimato a %f è %f\n", accuracy, pi_grecotot);
}
Le prove che ho svolto sono semplicemente queste:
- Ho provato a dare un valore di accuracy basso e un tempo alto e il programma dopo i secondi di sleep che imposto esce dal ciclo
- Ho provato a dare un valore di accuracy alto e un tempo alto ma il programma esce dal ciclo solo quando sono passati i secondi (dando un'approssimazione alta tipo 0.85 il sfw dovrebbe funzionare solo per pochi secondi tempo di eseguire 1 / 2 cicli invece continua a ciclare per tutta la durata dei secondi che ho impostato all'inizio.
Mi potete dire dove sbaglio?