Ciao a tutti, mi sto cimentando con array e partizioni.
Vorrei sottoporre un problema alla vostra attenzione:
Dato A, array 1D di tipo integer di dimensione N, contenente N elem. positivi e N sottomultiplo di k.
Individuare le sottosequenze di lunghezza k;
Tale array A si può guardare come formato da successive sotto sequenze di lunghezza k.
progettare un algoritmo in pascal-like che restituisca in output un array "B" monodimensionale di tipo Logical in cui in ciascun elemento B(i), ci sia:
TRUE: se nella i-ma sottosequenza un elemento è uguale alla somma dei rimanenti elementi della sottosequenza.
FALSE: altrimenti.
Sono poco pratico sul partizionamento degli array, comunque ho elaborato un algoritmo risolutivo:
codice:
var A[n]: array of integer
var B[blocchi]: array of logical
var n, k, inizio, fine, blocchi, count: integer
begin
inizio = 1; fine = k; blocchi = n/k; count = 1;
while (fine <= n) do
Repeat
somma = 0.0;
for i=k to inizio+1 do
somma = somma + A[i]
endfor
if (A[inizio]=somma) then
B[count]=TRUE
else
B[count]=FALSE
endif
inizio=inizio+1; count=count+1;
Until (inizio >= k)OR(B[inizio-1]=TRUE)
inizio=inizio + k; fine = fine + k;
endwhile
end
Non credo di aver soddisfatto esattamente quello che chiedeva la traccia a livello di concezione dei passi risolutivi. Inoltre non mi piacciono istruzioni tipo Until (inizio >= k)OR(B[inizio-1]=TRUE).
Spero possiate voi darmi qualche dritta, correggere la mia soluzione o suggerire qualunque tipo di miglioramento che è possibile apportare. Ve ne sarei grato.
Cordialmente
Andrea