Programmino per successione geometrica

zypepox
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?

Risposte
andreo1
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):
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!

zypepox
il programma non mi gira! ma sei sicuro che funziona? non bisogna ridefinire a e b in modo da aggiornare i valori?

andreo1
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... :-D
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

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.