Nel caso, il numero in esame è piccolo, il controllo comunque agisce in pochissimo tempo ed iterare (a vuoto) non implica problemi. La logica comunque deve incontrare una soluzione che sia adeguata ad ogni situazione, senza basarsi su supposizioni. Ii tuo programma funziona? Certo, nessuno lo mette in dubbio! E' logicamente corretto? Non direi! Dato che p98 è variabile il valore di p96 deve assumere la potenza di 10 tale da garantire la lettura di p98. Ora la logica dice che un programma deve essere valido per qualsiasi numero: 5, 1000, 10EXP300 10EXP1000000. In questo ultimo caso, volendo eseguire una singola operazione, il tuo programma gira a vuoto per 10EXP999999 prima di incontrare il valore corretto. Quindi non si tratta di dire che un modo funziona l'altro no, si tratta di logica, di incontrare un metodo universale indipendente dalla scelta fatta. Io con un menu del genere itero 1 singola volta, tu fino a che non incontri la prima cifra.
E' chiaro che nel nostro caso (menu ridotto) non fa molta differenza, ma io esamino la logica non il risultato. Esiste una procedura per determinarlo e quindi tanto vale usarla! Non voglio insistere ma preferisco usare il mio metodo, che trovo logico e semplice.
Si sono d'accordo sul fatto che la routine non debba essere modificata, altrimenti perderemmo gran parte del lavoro svolto che potremmo effettuare con semplici programmi. Comunque non è strettamente essenziale; passando dei parametri alle funzioni, (lavorazioni) potremmo comunque avere un utilizzo dello stesso senza perdita di concretezza o di tempo. Di solito, scrivendo programmi del genere adotto questa filosofia: una modalità di default, che mi permette di mantenere standardizzata la lavorazione, e una modalità di eccezione che uso in quei casi dove la prima non può intervenire. Vorrei riflettere sul fatto che questo modo di operare è la base per la realizzazione di quei software visivi e dialogali che si sono diffusi sempre più ultimamente nel mondo cnc. Il controllo vi chiede che tipo di lavorazione volete effettuare, poi vi chiede di inserire ogni sorta di parametro atto a definirla.. e cosi per ogni lavorazione. Questo è il concetto di menu con passaggio di argomenti, reso semplice per l'utilizzatore, ma che in fondo esprime lo stesso concetto: un menu!
Molti sono i metodi per avere un menu di voci superiore a 9, gli esempi che ho postato servivano ad incuriosire. Le iterazioni le conosciamo e le abbiamo applicate, quindi non ci sono problemi particolari. Un metodo che a me piace molto è quello di utilizzare delle matrici, ovvero un insieme di numeri disposti secondo righe e colonne (10*10 per esempio), il che permetterebbe di realizzare un menu di 100 voci utilizzando le 10 cifre. Se poi utilizzassimo la notazione esadecimale le cifre a disposizione diventerebbero 16, il che fa aumentare enormemente le scelte del menu (256), direi sufficienti a coprire una ampia gamma di lavorazioni.
claugo ti è mai passato per la testa che potresti usare una base 100 piuttosto che 10? Il programma che usi (con pochissime variazioni) continuerà a funzionare con la variante di avere a disposizione un menu molto più vasto.
Adesso mostro l'esempio, ma vorrei spiegare il concetto di base numerica per mostrare che è possibile contare in modi differenti e per definire il significato delle cifre che useremo.
Base 10, quella che noi usiamo. Le cifre sono 10 attraverso le quali scriviamo ogni numero.
0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ogni dieci numeri si aggiunge una cifra e si ripete l'operazione
(1) 0, 1, 2, 3, ....
(2) 0, 1, 2, 3, ....
Ora vogliamo realizzare il conteggio utilizzando una base 2, cioè due numeri per contare (di solito si usano i numeri 0 e 1, ma 2 simboli generici fa lo stesso).
0, 1 con due cifre possiamo solo scrivere 0 e 1, poi ripetiamo il ragionamento visto per la base 10, quindi
0, 1, 10, 11, 100, 101, 110, 111, ....ogni due numeri si ripete l'operazione di conteggio
Se volessimo utilizzare una base differente la logica non cambia. esempio base 100
Dovremmo avere 100 simboli differenti per scrivere in questa base, non avendoli useremo le stesse cifre della base 10, considerando però che un numero come
33 non è formato da due cifre bensi è una entità unica, non scindibile o divisibile. 33 non può essere diviso in quanto entità unica (come 2, 5). Contare in questa base significa andare da 0 a 99 e ripetere il ragionamento.
0 -> 9 base dieci 0 -> 99 base cento
0, 1, 2, .....98, 99 queste le prime cifre della nostra base (98 non è 90 + 8 ma semplicemente una entità scritta usando i simboli 9 e 8) poi faremo la stessa cosa fatta per il sistema decimale, una cifra ulteriore ed il conteggio si ripete.
Non ci interessa andare oltre (si creerebbe confusione) ma l'ho mostrato per introdurre il programma in base 100.
claugo, prendi il programma in base 10 e modificalo con la base 100
%
<K0500>(PROVA MENU)
(1 CENTRINO)
(2 FORATURA)
(3 MASCHIO)
(4 LAMATURA)
(5 SMUSSO)
(44 ------)
(67 ------)
(97 ------)
#100=11123445677193 ( SCELTA DAL MENU #100=(11)(12)(34)(45)(67)(71)(93) )
#101=100 (BASE 100 PER CALCOLO)
#102=1 (CONTATTORE CIFRE SCELTA MENU)
DO1
IF[[#100/#101]LT100]GOTO100
#102=[#102+1]
#101=[#101*100]
END1
N100#101=[#101/100]
DO2
#104=FIX[#100/#101]
M98P[1000+#104]
#100=[#100-[#104*#101]]
IF[#100LT100]GOTO200
#101=[#101/100]
END2
N200M30
%
Il concetto è sempre lo stesso, ma cambia la base e quindi ogni relazione diretta con questa. Il p98 (#100) dovrà essere formato da un numero di cifre in base 100 (due cifre decimali per ogni lavorazione) Nell'esempio non considero lo 0 (dato che a te è cosi caro), ma nulla vieta di usarlo!
La prima lavorazione è 11, la seconda 12, ec.. Questo programma funziona per ogni base e non presenta problemi particolari. Se noi prendiamo un numero (1234) e lo dividiamo per 100 (base 100) otteniamo (nell'esempio) due "cifre" o meglio entità (12 e 34) che rappresentano le lavorazioni da eseguire. poi il programma segue fedelmente il ragionamento precedente con l'accortezza di usare sempre la base 100. Quindi moltiplicazioni e divisioni devono essere fatte con 100 e non con 10
Ecco una relazione tra le basi
base 100: 11 23 45 56 78 99 (11, 23, 45, sono singole entità in base 100)
base 10: 1 2 4 6 8 9 (1, 2, 4, sono singole entita in base 10)
Se pensi in base 100 sicuramente creerai un menu più grande!
Questi argomenti mi affascinano, ma non vorrei esagerare, esporre idee personali che forse poco interessano.
Penso sempre ci sia qualcuno (tra cui anche io) che possa avere beneficio, ma mi rendo conto che non è di tutti i giorni lavorare e pensare in
questa ottica. Personalmente è una sfida a me stesso, ma anche la voglia di lanciare nuove motivazioni a voi tutti
(magari più semplici, vero? rivolgetevi a claugo! ops!). Comunque dico sempre che tutto nasce da una idea, pensare e poi realizzare...
dopo tutto è il pensiero l'unica cosa che nessuno potrà mai toglierci!
(claugo, cosa hai in programma adesso?)