PDA

View Full Version : aiuto traduzione algoritmi in c++


alexcobuz
19-02-2017, 19:29
ho svolto questi 2 algoritmi in linguaggio plike(simile al pascal) solo che sono abbastanza inesperto di c++, qualcuno riuscirebbe ad aiutarmi a riuscire a trascriverli per farli funzionare in c:help: ?sono i seguenti e come li ho svolti
1**si consideri la successione a(1)=0, a(2)=2, a(3)=2 , a(n)=a(n-1)+2a(n-2)+a(n-3) per n>3
progettare un algoritmo che controlli se, sommando a mano a mano gli elementi di posto pari della successione(fino a un masssimo k) si trovi che tale somma sia uguale a *numero*(supponendo che *numero*>2), restituendo in tale caso attraverso la variabile logica *somma*,il valore *true*, attraverso la variabile *valore*,*numero*,e attraverso la variabile posizione la posizione che l'ultimo elemento sommato occupa nella successione; altrimenti, restituisca false, ed indichi inoltre, in *valore* e *posizione*, velore e posizione dell ultimo elemento sommato che oiu fa avvicinare somma a *numero*.

procedure somma_elementi_uguale_numero(in: k, NUMERO; out: somma, valore, posizione)

var : a_n, a_1, a_2, a_3, sum, NUMERO, k, posizione, pos, valore : integer
var : somma : logical

begin

a_1 := 0
a_2 := 1
a_3 := 2
pos := 3
somma := .false.
sum := 0


if (NUMERO > 2) then
while (pos <= k .OR. NOT somma) do
{Aggiorniamo la variabile posizione indicando la posizione del prossimo elemento calcolato}
pos := pos + 1
{Calcoliamo il nuovo termine della successione ed aggiorniamo gli altri termini per il prossimo calcolo}
a_n := a_1 + 2*a_2 + a3
a_1 := a_2
a_2 := a_3
a_3 := a_n

if (posizione % 2 = 0) then
sum := sum + a_n
endif

if (sum = NUMERO) then
somma := .true.
valore := NUMERO
posizione := pos
endif

if (sum > NUMERO) then
somma := .false.
valore := a_2
posizione := pos - 1
endif

endwhile

endif

end

2** dato un array di tipo 2d *a* di tipo intero, di dimensione alpha*beta, con alpha pari e beta>5, progettare un algoritmo con function logica che restituisca *true* se la somma del primo,terzo,quarto e penultimo elemento di tutte le righe pari e' uguale alla somma dei restanti elementi della medesima riga, altrimenti restituisca *false*. si tenga presente che i valorei dell'array a apparttengono ll insieme z, coma da definizione di tipo integer.

logical function quattro_elementi_uguali_somma_altri (A, alpha, beta)

var A[1..Alpha , 1..Beta]: array of integer
var sum1, sum2: integer
var controllo, somma : logical

begin

controllo := .false.
somma := .false.
i := 2
sum1 := 0
sum2 := 0

while (i < alpha .AND. controllo := .false.)
for (j = 1 to beta)
if (j = 1 or j = 3 or j = 4 or j = Beta-1) then
sum1 := sum1 + A[i,j]
else
sum2 := sum2 + A[i,j]
endif
endfor
if (sum1 != sum2)
controllo := .FALSE.
somma := .FALSE.
else
controllo := .TRUE.
somma := .TRUE.
endif
i := i+2
endwhile

end