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:
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).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
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

Rispondi quotando