Programmino per successione geometrica
ciao ragazzi, vorrei scrivere il seguente programmino preferibilmente nel linguaggio di octave (se qualcuno me lo sa tradurre in un altro linguaggio va bene lo stesso!); cercherò di essere il più chiaro possibile:
partendo da due numeri a=87 e b=93 calcolo il successivo c=rb procedendo in progressione geometrica con ragione r=b/a; dopodicchè dovendo richiedere un'approssimazione intera di di c dovrò, al ciclo successivo, ricalcolarmi la ragione e così via per 30 cicli.
ho pensato ad una struttura del tipo qui sotto (va bene?) ma non conosco bene le istruzioni di octave:
a=87
b=93
for n=1,30
r=b/a
c=rb
?? chiedo qui appossimazione intera di c??? quale istruzione uso?
a=b
b=c
scrivi a
scrivi b
se n<31 ritorna altrimenti
end
va bene?
partendo da due numeri a=87 e b=93 calcolo il successivo c=rb procedendo in progressione geometrica con ragione r=b/a; dopodicchè dovendo richiedere un'approssimazione intera di di c dovrò, al ciclo successivo, ricalcolarmi la ragione e così via per 30 cicli.
ho pensato ad una struttura del tipo qui sotto (va bene?) ma non conosco bene le istruzioni di octave:
a=87
b=93
for n=1,30
r=b/a
c=rb
?? chiedo qui appossimazione intera di c??? quale istruzione uso?
a=b
b=c
scrivi a
scrivi b
se n<31 ritorna altrimenti
end
va bene?
Risposte
io so usare solo matlab dove esiste una funzione floor che restituisce la parte intera di un numero;
Ovviamente a te non va bene se però vuoi un'approssimazione intera del numero c puoi fare floor(c+0.5) così se un numero ha la prima cifra decimale tra 0 e 4 compresi abbiamo che floor(c+0.5)=floor(c) se invece c ha la prima cifra decimale compresa tra 5 e 9 floor(c+0.5)=floor(c+1) proprio come ci aspettiamo
ti posto un'idea di programmino(in matlab):
non conosco octave però sono sicuro che esiste un comando analogo!
Ovviamente a te non va bene se però vuoi un'approssimazione intera del numero c puoi fare floor(c+0.5) così se un numero ha la prima cifra decimale tra 0 e 4 compresi abbiamo che floor(c+0.5)=floor(c) se invece c ha la prima cifra decimale compresa tra 5 e 9 floor(c+0.5)=floor(c+1) proprio come ci aspettiamo
ti posto un'idea di programmino(in matlab):
a=87;
b=93;
for i=1:30
c=(b/a)*b;
display(['al passo ' num2str(i) ' abbiamo a= ' num2str(a) 'e b= ' num2str(b)])
end
non conosco octave però sono sicuro che esiste un comando analogo!
il programma non mi gira! ma sei sicuro che funziona? non bisogna ridefinire a e b in modo da aggiornare i valori?
ahi scusa!! ho fatto una scemata... ti ho scritto il programma sbagliato!!
anche perchè ho fatto una sbrodolata sul comando floor e poi floor non c'era nemmeno...
mea culpa!
anche perchè ho fatto una sbrodolata sul comando floor e poi floor non c'era nemmeno...

mea culpa!
a=87;
b=93;
for i=1:30
c=floor(((b/a)*b)+0.5);a=b;b=c;
display(['al passo ' num2str(i) ' abbiamo a= ' num2str(a) 'e b= ' num2str(b)])
end