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