variabili strane

Moderator: Enrico Maria Giordano

variabili strane

Postby Silvio.Falconi » Sat Apr 02, 2022 5:24 pm

In un vecchio programma in clipper ho delle strane variabili cioè non sono dichiarate con local oppure public
queste variabili servono a caricare dei numeri
sono chieste in un ciclo di get ovviamente ti fa scegliere quanti numeri vuoi caricare max 22


Code: Select all  Expand view  RUN

do while (!esatto)
         numeri:= Space(2)
         set color to GR+/N
         @  8, 30 say "MIN: " + scelta + " MAX: 22:" get NUMERI ;
            picture "99"
         read
         set color to
         esatto:= Val(numeri) >= Val(scelta) .AND. Val(numeri) <= 22
      enddo
 


e se io poi faccio

? n1, n2, n3, n4, n5, n6, n7, n8, n9, n10, n11, n12, n13, n14, n15, n16, n17, n18, n19, n20, n21, n22

loro ci sono e rimangono per tutta la procedura che sto usando ma a me fa errore

perchè in fwh ho problemi a convertire il vecchio programma in clipper e non so come fare

perchè se ne inserisco solo 5 quando vado a vedere n6 per esempio non lo trova
Since from 1991/1992 ( fw for clipper Rel. 14.4 - Momos)
I use : FiveWin for Harbour November 2023 - January 2024 - Harbour 3.2.0dev (harbour_bcc770_32_20240309) - Bcc7.70 - xMate ver. 1.15.3 - PellesC - mail: silvio[dot]falconi[at]gmail[dot]com
User avatar
Silvio.Falconi
 
Posts: 7090
Joined: Thu Oct 18, 2012 7:17 pm

Re: variabili strane

Postby mauri.menabue » Sat Apr 02, 2022 9:02 pm

Ciao Silvio
Le variabili non dichiarate nel vecchio Clipper ma anche in Harbour / xHarbour sono private e sono "vive" e visibili
nell'ambito della funzione dove sono inizializzate, e in tutte le funzioni sottostanti di fatto :
Code: Select all  Expand view  RUN

Function RichiediNumeri

   n1 := 0
   n2 := 0
 
 VisualizzaeCambiaNumeri()

  ? n1   // visualizza 10
  ? n2   // visualizza 20

return NIL

Function VisualizzaeCambiaNumeri
 
   ? n1     // visualizza 0
   ? n2     // visualizza 0

  n1 := 10
  n2 := 20

return NIL
 


Le variabili così definite sono comode perchè le usi quando di pare (occorre dare una direttiva al compilatore di non segnalarti un warning)
però occupano più memoria e sono armi a doppio taglio perchè e facile perderne il controllo e addio ricorsività delle funzioni.
Grazie per avermi aiutato con le immagini
User avatar
mauri.menabue
 
Posts: 155
Joined: Thu Apr 17, 2008 2:38 pm

Re: variabili strane

Postby Silvio.Falconi » Sun Apr 03, 2022 10:19 am

mauri.menabue wrote:Ciao Silvio
Le variabili non dichiarate nel vecchio Clipper ma anche in Harbour / xHarbour sono private e sono "vive" e visibili
nell'ambito della funzione dove sono inizializzate, e in tutte le funzioni sottostanti di fatto :
Code: Select all  Expand view  RUN

Function RichiediNumeri

   n1 := 0
   n2 := 0
 
 VisualizzaeCambiaNumeri()

  ? n1   // visualizza 10
  ? n2   // visualizza 20

return NIL

Function VisualizzaeCambiaNumeri
 
   ? n1     // visualizza 0
   ? n2     // visualizza 0

  n1 := 10
  n2 := 20

return NIL
 


Le variabili così definite sono comode perchè le usi quando di pare (occorre dare una direttiva al compilatore di non segnalarti un warning)
però occupano più memoria e sono armi a doppio taglio perchè e facile perderne il controllo e addio ricorsività delle funzioni.
Grazie per avermi aiutato con le immagini


si ma nel mio sorgente non ci sta neppure una dichiarazione tipo n1 oppure n1:=0
Since from 1991/1992 ( fw for clipper Rel. 14.4 - Momos)
I use : FiveWin for Harbour November 2023 - January 2024 - Harbour 3.2.0dev (harbour_bcc770_32_20240309) - Bcc7.70 - xMate ver. 1.15.3 - PellesC - mail: silvio[dot]falconi[at]gmail[dot]com
User avatar
Silvio.Falconi
 
Posts: 7090
Joined: Thu Oct 18, 2012 7:17 pm

Re: variabili strane

Postby mauri.menabue » Sun Apr 03, 2022 1:19 pm

Ciao Silvio
potrebbero essere in un'altro prg che fa main e poi chiama
in programma dove cè il ciclo DO WHILE con le get.
Potresti fare un test per vedere se esistono e si cosa contengono.

IF type('n1') = 'U'
alert("non definita")
else
alert(valtype(n1))
alert(n1)
endif

è una pista di ricerca !
User avatar
mauri.menabue
 
Posts: 155
Joined: Thu Apr 17, 2008 2:38 pm

Re: variabili strane

Postby Silvio.Falconi » Sun Apr 03, 2022 2:40 pm

nel ciclo delle get si chiedono dei numeri essendo un sorgente che va a fare statistiche lotto, tu puoi inserire fino a 22numeri anche sta cosa non l'ho capita probabilmente io nel lontano 92 avevi visto che potevo chiedere solo 22 numeri perché non avevo spazio oppure siccome il calcolo andava a stampare a video i risultati poi erano troppi e non entravano che ti devo dire ...non lo so...quindi il ciclo get chiede 22numeri che tu puoi anche non inserite tutti anche perché il ciclo va a adfizionare un contatore "numeri" anch'esso non dichiarato . e poi chiama un altra procedura. Quindi in memoria abbiamo "numeri" con un valore ad esempio 3 e quindi quando va a fare il ciclo sul dbf per fare una statistica oppure la stessa previsione oppure vedere quali numeri sono ritardatari fa un ciclo do while fino a che conta sia minore di *numeri* e salva in num quello che sta in N+ltrim(str(&num)). e poi va a cercare il numero
Since from 1991/1992 ( fw for clipper Rel. 14.4 - Momos)
I use : FiveWin for Harbour November 2023 - January 2024 - Harbour 3.2.0dev (harbour_bcc770_32_20240309) - Bcc7.70 - xMate ver. 1.15.3 - PellesC - mail: silvio[dot]falconi[at]gmail[dot]com
User avatar
Silvio.Falconi
 
Posts: 7090
Joined: Thu Oct 18, 2012 7:17 pm

Re: variabili strane

Postby mauri.menabue » Mon Apr 04, 2022 8:48 am

Proviamo a ripetere la logica

Code: Select all  Expand view  RUN


do while (!esatto)     <------------------------------ 'esatto' deve essere .F. all'inizio del ciclo se no non partirebbe il ciclo
         numeri:= Space(2)
         set color to GR+/N
         @  8, 30 say "MIN: " + scelta + " MAX: 22:" get NUMERI ; <---- '
Scelta' variabile di tipo ('C') determina il valore minimo di selezione , che valore ha  ?
                                                                                                   '
Numeri' variabile di tipo('C') è ciò che l'utente digita e ogni loop è inizializzata a space(2)
            picture "99"
         read
         set color to
         esatto:= Val(numeri) >= Val(scelta) .AND. Val(numeri) <= 22 <------- Se il contenuto di numeri  è un valore compreso fra VAL(scelta) e 22 (estremi compresi) 'Esatto' vale .T.
                                                                                                              e il ciclo DO/WHILE esce
      enddo
 
 


dimmi se quello che ho scritto è corretto.
Rifletti se 22 è legato al fatto che il video in formato DOS (Console carattere) aveva nel 1992 max 25 righe
perciò 22 è legato ad un problema di visualizzazione video.
'Numeri' rappresenta la riga video dove visualizzare i dati
Il ciclo DO/WHILE permetteva all' utente di selezionare la riga della città dell lotto su cui lavorare ?

Saluti
Maurizio Menabue
User avatar
mauri.menabue
 
Posts: 155
Joined: Thu Apr 17, 2008 2:38 pm

Re: variabili strane

Postby Silvio.Falconi » Mon Apr 04, 2022 1:58 pm

si adesso io me lo sono ricordato era probabilmente e quasi certamente perché avevamo 25 righe e quindi 22 +1 o 2 per la scritta del read....

io adesso per far prima ho lasciato 22
per numeri è inteso il totale dei numeri ricercati si andava a salvare questo contatore per poi richiamare le famose variabili N con il numero esempio N1 N2 ed ho scoperto questa mattina che erano testi perché quando sono andato a cercare il valore con val(&num) mi ha ridato il numero giusto, quindi poi facendo un test ho salvato in un array il valore e la variabile.

nello stesso sorgente sto incasinato nel riprodurre una serie fdi comandi locate probabilmente in clipper summer 87 io non avevo i cdx e facevamo tutti sequenzialmente le ricerche e quindi con "locate for" poi io sto usando Tdatabase e trovo ostico a dover ricinvertite tutto.

nei comandi locate io andavo a cercare nell'archivio il numero del record di inizio e fine (per fare una ricerca) e l'utente finale inseriva il numero degli anni ad esempio dal 2004 a 2021, ed io avevo cisi i numeri dei record corrispondenti .Con Tdatabase ho trovato difficoltà l'avevo messo anche nel firum inglese e nages mi ha detto che non c'era una logica....ma a me sembra strano dato che prg in dos funziona bene, già è stato difficilissimo trovare un pc che supporta ancira il dos a 16bit ma a scuola ne abbiamo ancora.

adesso forse ho risolto con una serie di setfilter e poi non lo so se va bene

ma stamattina quando sono andato a fare il test sulle frequenze ho trovato un problema cioè

se parto dalla fine dell'archivio e vado induetro fino ad arrivare al numero del record trovato (primo) funzionicchia

se parto dal record primo e vado avanti fino arrivare alla fine o comunque al recird nultimo è cone se volesse crashare ci pensa tanto tempo poi alla fine io blocco l'exe....

è strano è un 'operazione che dovrebbe fare subito , in sostanza se io gli passo la ruota ad esempio bari e 5numeri da cercare lui va a vedere se li trova per ambata (non ci sono problemi è un numero solo) , per ambi ne deve cercare almeno due tra i 5 e le 5 estrazioni, il problema viene con tre numeri cioè terni, e poi con 4 cioè le quaterne....non ho capito perché si ferma....se va bene il ragionamento con gli ambi perché con i terni si blocca?

il ciclo che fa va a scrivere un contatore frequenzaba e se trova la combinazione salva in un array l'estrazione che ha trovato.
Since from 1991/1992 ( fw for clipper Rel. 14.4 - Momos)
I use : FiveWin for Harbour November 2023 - January 2024 - Harbour 3.2.0dev (harbour_bcc770_32_20240309) - Bcc7.70 - xMate ver. 1.15.3 - PellesC - mail: silvio[dot]falconi[at]gmail[dot]com
User avatar
Silvio.Falconi
 
Posts: 7090
Joined: Thu Oct 18, 2012 7:17 pm


Return to All products support

Who is online

Users browsing this forum: No registered users and 7 guests