Newsgroup: it.comp.lang.pascal
Titolo: La matematica è un'opinione...

Cari membri,
  vorrei sottoporre alla vostra attenzione un programma che ho scritto
questo pomeriggio, il quale dovrebbe simulare il suono di una sirena. Fin
qui, non c'è che dire, funziona, ed in maniera soddisfacente. Il problema
riguarda la durata della sirena, che ho voluto impostare come costante, in
modo da facilitare (e di molto, visto che non riesco a raccapezzarmi, ogni
tanto), le modifiche. Il codice è:
program sirena;
uses crt;
const intmin=400; (*intensita' minima della sirena in Mhz*)
      intmax=1600; (*intensita' massima della sirena in Mhz*)
      rip=10; (*durata della sirena in secondi*)
      durata=2; (*durata del singolo suono emesso in millesimi di secondo*)
var i,j,sire,dif:integer;
     dur,cont,rip2:real;
begin
  clrscr;
  write('Premi un tasto per sentire la sirena!');
  readkey;
  sire:=intmin;
  clrscr;
  cont:=0;
  dur:=1000/durata;
  rip2:=rip*dur;
  dif:=intmax-intmin;
  repeat
       cont:=cont+1;
      if sire=intmax then
         for j:=1 to dif do
            begin
              sire:=sire -1;
              sound(sire);
              delay(durata)
            end
          else
         begin
         sire:=sire + 1;
      sound(sire);
      delay(durata)
      end;
  until (cont = rip2);
    nosound;
  clrscr;
  write('Ti e'' piaciuta? Premi un tasto per uscire.');
  readkey
end.
Il problema è questo: considerato che la costante "rip" contiene i secondi
di sirena (equivalenti a 1000 millesimi di secondo, si intende), e che la
costante "durata" contiene la durata del singolo suono emesso, visto che ho
assegnato alla variabile "dur" il numero di cicli necessari per emettere un
suono di un secondo (1000 millesimi di secondo / durata di ogni singolo
suono), e che a "rip2", ovviamente, ho assegnato il numero di cicli
necessari per avere la durata impostata nella costante "rip" (il numero di
cicli necessari per emettere un suono di un secondo, contenuto in "dur", *
il numero di secondi voluti, contenuto in "rip"):
se io voglio far durare la sirena per 10 secondi:
assegno a rip il valore 10;
scelgo una durata del singolo suono (sound(durata del singolo suono)) di 2
millesimi di secondo;
a durata assegno quindi il valore 2;
dur, il numero di cicli necessari per emettere un secondo di sirena
continua, vale quindi 500 (se ci pensiamo, 500 cicli da 2 millesimi l'uno,
fanno 1000 millesimi in tutto);
rip2, il numero di cicli necessari per compiere una sirena di secondi
prestabiliti in "rip", vale quindi 5000 (infatti 5000 per 2 millesimi di
secondo, fa 10000 millesimi di secondo, ovvero 10 secondi);
Mi spiegate, premesso tutto questo, perché per avere una durata di 10
secondi devo assegnare:
dur:=500/durata; ==> sbagliato, secondo i calcoli che ho esposto qui sopra
invece di:
dur:=1000/durata; ==> secondo me il calcolo corretto?
Vi chiedo ciò perché, provare per credere, se si imposta la seconda ipotesi,
la sirena durerà 20 secondi, il doppio. Ho sbagliato qualcosa di certo,
eppure il ragionamento fila...
Specifico che ho un processore a 500 Mhz, quindi se proprio il programma
deve disfunzionare, dovrebbe dare una durata di sirena minore, non certo
maggiore.
Mi aiutate?
Ciao!
Filippo

 - rimuovi XXX  x  rispondere  ICQ	#8814554
 
Nell'arco di centosettantasei anni il Mississippi si  e'  accorciato  di
duecentoquarantadue miglia.  Percio'...  nell'antico  periodo  Siluriano
il fiume Mississippi era lungo oltre un milione e trecentomila miglia...
Fra settecentoquarantadue anni sara' lungo solamento  un  miglio  e  tre
quarti...
C'e' qualcosa  di  affascinante  nella	scienza.   Si  ottiene	un  tale
ritorno di congetture per un tale insignificante investimento di  fatti.
		-- Mark Twain