Mentre mi esercitavo con questo testo mi sono chiesto una cosa: e se nel punto 6 venisse chiesto di stampare, eventualmente ci fossero, il valore di ym di più massimi come dovrei fare? qualcuno può darmi una mano?
Allego il mio codice:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
double genInput(double, double, char *strn);
void distanza(double D, double d, double ym, double *A, double *B);
double onda(double L);
double genRand(double a, double b);
int main() {
srand(time(NULL));
double d, D, yM;
d = genInput(5, 40, "la distanza delle sorgenti dall'asse x");
D = genInput(90, 140, "l' ascissa del microfono");
yM = genInput(0, 70, "Il valore assoluto dell' ordinata del microfono");
int i;
double A, B, ym, dist=0, oA, oB, a[101][2];
ym = genRand(yM, -yM);
for (i = 0; i < 101; i++) {
dist += ym;
distanza(D,d,dist,&A,&B);
oA = onda(A);
oB = onda(B);
a[i][0] = pow(oA + oB,2);
a[i][1] = dist;
}
double max = a[0][0];
int segnaposto;
for (i = 0; i < 101; i++) {
if (a[i][0] >= max) {
max = a[i][0];
segnaposto = i;
}
}
printf("Le coordinate del microfono con maggiore intensita' sono: (%.3lf,%.3lf)\n",D,a[segnaposto][1]);
FILE *f;
f = fopen("young.dat","w");
fprintf(f, "%lf %lf %lf\n",D,a[segnaposto][1],max);
fclose(f);
}
double genInput(double a, double b, char *strn) {
double N;
do {
printf("Inserisci %s: ",strn);
scanf("%lf",&N);
if (N <= a || N >= b) {
printf("ERRORE: il numero deve appartenere all'intervallo (%.3lf,%.3lf)\n",a,b);
}
} while (N <= a || N >= b);
return N;
}
void distanza(double D, double d, double ym, double *A, double *B) {
double La, Lb;
La = sqrt(D*D + pow(d - ym,2));
Lb = sqrt(D*D + pow(-d - ym,2));
*A = La;
*B = Lb;
}
double genRand(double a, double b) {
double rnd;
rnd = rand()/((double)RAND_MAX)*(a - (b)) + b;
return rnd;
}
double onda(double L) {
double delta;
delta = genRand(0.05, -0.05);
return sin(2*M_PI*15000*L/343)*(1+delta);
}