Considerānd notaţia N – numărul natural şi D – unul dintre divizorii
acestuia mai mic sau egal cu N şi nenul, se ştie că restul
īmpărţirii lui N la D este egal cu zero. Pentru a putea realiza
seria de īmpărţiri succesive N la D, se utilizează o structură
repetitivă FOR. Divizorul D ia valori de la 1 la N, la fiecare
iteraţie a buclei FOR realizāndu-se īmpărţirea N/D, iar dacă restul
este egal cu zero, divizorul D găsit este scris īntr-un şir de
numere de tip Array.
Īn bucla FOR există
un indicator i care stochează valoarea iteraţiei curente şi ia
valori īntre 0 şi N-1. Acest indicator i poate fi unul dintre
divizorii D ai numărului natural N. Primul pas īn realizarea
programului este dispunerea pe diagrama acestuia a unei bucle FOR
(care conţine două elemente predefinite: terminalul N care determină
numărul de execuţii ale buclei şi i care oferă valoarea iteraţiei
curente). De asemenea, pe panoul aplicaţiei se dispune şi un element
de control pentru data de intrare numerică Numar natural,
reprezentānd numărul natural ai cărui divizori trebuie determinaţi.
Divizorii găsiţi
vor fi stocaţi īntr-un şir de numere de tip Array, care trebuie
iniţializat la īnceputul aplicaţiei cu un şir constant nul,
transferul valorilor găsite corespunzătoare īn interiorul buclei FOR
realizāndu-se printr-un registru de transfer (Shift Register). De
asemenea, īn interiorul buclei FOR se va mai utiliza o structură
CASE care ajută īn procesul de decizie dacă un număr este sau nu
divizor şi dacă va fi adăugat īn şirul acestora (Fig. 1).
Fig. 1
Īn continuare, se īmparte Numărul natural N la valoarea
i+1, cu ajutorul funcţiei Quotient and Remainder,
pentru a calcula cātul şi, mai ales, restul acestei īmpărţiri.
Valoarea restului se compară cu zero, ieşirea din funcţia de
comparaţie Equal to 0 fiind de tip boolean (True sau
False) se utilizează ca modalitate de decizie şi selecţie
pentru structura CASE, aşa cum se observă īn Figura 2.
Fig. 2
Īn
interiorul structurii CASE se utilizează o funcţie Build
Array pentru a colecta valorile determinate īn urma īmpărţirilor
succesive N la i+1 ca fiind divizorii numărului
natural considerat. Desigur, această funcţie Build Array este
poziţionată pe ramura True a structurii CASE, adică
atunci cānd restul īmpărţirii este egal cu zero, caz īn care a fost
găsit un divizor (Fig. 3). Pe ramura False, şirul aflat īn
registrul de transfer trece nemodificat.
Fig. 3
La
ieşirea din bucla FOR este conectat un
şir de numere de tip
Array, denumit, īn acest caz, Divizori. Schema din Figura
3 reprezintă o modalitate de rezolvare a problemei propuse.
Īn
figura 4 este prezentat un exemplu de determinare a divizorilor
pentru N=250. Se observă elementul de control
pentru data de
intrare numerică Numar natural şi şirul de divizori ai
acestuia.
Fig. 4 |