If(abc......) parametrizzato

di il
10 risposte

If(abc......) parametrizzato

Bungiorno a tutti,

purtroppo non saprei nemmeno dove andare a studiarmi questa cosa ma:

è possibile scrivere degli statement if(a&&b&&c&& etc etc ..... dove "letteralmente" le variabili possano non essere computate oppure essere aggiunte in modo automatico??

Ovviamente all'interno di un programma non creando un file a parte da compilare all'occorrenza ....

l'ideale sarebbe che le variabili fossero descritte in un char array che lo stesso venisse usato (posizione per posizione) all'interno della condizione logica ... per esempio in questo modo
if (*chAr[0] && *chAr[1] && etc etc ....

solo che a seconda della logica del programma *chAr[1] per esempio non dovrebbe avere significato logico e quindi non essere interpretato come uno "zero" o false .... dovrebbe diventare "invisibile" alla logica di scelta......

Ringrazio in anticipo per i suggerimenti (anche di puro studio)
Giorgio

10 Risposte

  • Re: If(abc......) parametrizzato

    Realmente, che devi fare?
  • Re: If(abc......) parametrizzato

    Non so se ho capito, intendi fare un if con una condizione che ti crei da un'altra parte?
  • Re: If(abc......) parametrizzato

    Si potrei anche creare la condizione in un'altra funzione .... ma la mia realtà è che ho una funzione con 15-18 if che dovrebbero ogniuno processare una serie di varibili (identiche per tipo) true/false legate a degli oggetti (15-18 per ogni oggetto ). gli oggetti sono creati dinamicamente ..... cosicchè non so mai se questi 15-18 if quane varibili contengano...ma facciamo n esempio..
    if (auto1_on & auto2_on & auto3_on......non so quante auto max 256) { tutte le auto on} else {non tutte le auto on}
    if (auto1_hailpieno & auto2_hailpieno & auto3_hailpieno......non so quante auto max 256) { tutte le auto hanno il pieno} else {non tutte le auto hanno il pieno}
    if (auto1_gommeok & auto2_gommeok  & auto3_gommeok ......non so quante auto max 256) { tutte le auto hanno le gomme ok} else {non tutte le auto hanno le gomme ok}
    ......//così per altre 12/15 variabili del tipo autoN_caratteristica
    Spero di essere stato più chiaro

    Grazie di Nuovo
    Giorgio
  • Re: If(abc......) parametrizzato

    Ma non puoi usare vettori e cicli ?
  • Re: If(abc......) parametrizzato

    Vettori ok..... cicli come? per riempire i vettori? .... non mi è chiaro come intenderesti fare....

    grazie
    Giorgio
  • Re: If(abc......) parametrizzato

    Per controllare ... ad esempio se avessi due vettori

    valid[] e check[]

    potresti controllare il sigolo elemento del vettore check solo se il corrispettivo elemento di valid è true. Tutti i valid false non verrebbero testati.

    E in un ciclo potresti ottenere una condizione AND complessiva, diciamo a grandi linee
    
    result = true;
    for(i=0; i<nelem; i++)
      if(valid[i])
         if(!check[i])
         {
            result=false;
            break;
        }
    
  • Re: If(abc......) parametrizzato

    In effetti può funzionare ma nn ci avevo pensato....... forse perchè come soluzione non mi piace ..... 256 elementi del vettore valid + 256 elementi del vettore check il tutto per 18 vettori tipo valid..... in 1-2msec ce la facciamo?

    dubbi a parte graZIE oREGON

    giorgio
  • Re: If(abc......) parametrizzato

    #include <stdio.h>
    #include <unistd.h>
    #include <string.h>
    #include <stdlib.h>
    #include <errno.h>
    #include <iostream>
    #include <math.h>
    #include <sys/time.h>
    
    
    
    
    //bool result;
    char valid[257];
    char check[257];
    
    
    int main()
    {
    
    for(int a = 0; a < 256; a = a +1){
      valid[a] = 1;
      check[a] = 1;
    }
    
    check[200] = 0;
    check[250] = 0;
    check[253] = 0;
    
    clock_t start,end;
    double tempo;
    start=clock();
    
    
    //result = true;
    for(int e = 0; e < 18; e = e +1){
    for(int i = 0; i < 256; i = i +1){
      if(valid[i] == 1){ //std::cout << "valid[" << i  << "] = controlled \n";
         if(check[i] == 0)
         {
            std::cout << "check[" << i  << "] = 0 \n";
            break;
         }
        else { std::cout << "check[" << i  << "] = 1 \n";}
       }
      }
      }
    
    end=clock();
    tempo=((double)(end-start))/CLOCKS_PER_SEC;
    
    std::cout << "tempo esecuzione:   " << tempo  << "\n\n";
    
    }
    tempo esecuzione: 0.007974


    10ms sono accettabili per la mia applicazione .... sotto i 5ms meglio .... l'ideale è fra i 1 e 3 ms...


    In ogni caso non è quello che cerco....... oggi per prima cosa ho controllato i tempi (come si vede) poi ho sostituito le variabile per capire meglio (sono moooolto assonnato).... i risultati:
    siamo nel ciclo di controllo nr.---> 0
    macchine[0] = controlled 
    valori[0] = 1 
    macchine[1] = controlled 
    valori[1] = 1 
    macchine[2] = controlled 
    valori[2] = 1 
    macchine[3] = controlled 
    valori[3] = 1 
    macchine[4] = controlled 
    valori[4] = 0 
    siamo nel ciclo di controllo nr.---> 1
    macchine[0] = controlled 
    valori[0] = 1 
    macchine[1] = controlled 
    valori[1] = 1 
    macchine[2] = controlled 
    valori[2] = 1 
    macchine[3] = controlled 
    valori[3] = 1 
    macchine[4] = controlled 
    valori[4] = 0 
    siamo nel ciclo di controllo nr.---> 2
    macchine[0] = controlled 
    valori[0] = 1 
    macchine[1] = controlled 
    valori[1] = 1 
    macchine[2] = controlled 
    valori[2] = 1 
    macchine[3] = controlled 
    valori[3] = 1 
    macchine[4] = controlled 
    valori[4] = 0 
    siamo nel ciclo di controllo nr.---> 3
    macchine[0] = controlled 
    valori[0] = 1 
    macchine[1] = controlled 
    valori[1] = 1 
    macchine[2] = controlled 
    valori[2] = 1 
    macchine[3] = controlled 
    valori[3] = 1 
    macchine[4] = controlled 
    valori[4] = 0 
    siamo nel ciclo di controllo nr.---> 4
    macchine[0] = controlled 
    valori[0] = 1 
    macchine[1] = controlled 
    valori[1] = 1 
    macchine[2] = controlled 
    valori[2] = 1 
    macchine[3] = controlled 
    valori[3] = 1 
    macchine[4] = controlled 
    valori[4] = 0 
    siamo nel ciclo di controllo nr.---> 5
    macchine[0] = controlled 
    valori[0] = 1 
    macchine[1] = controlled 
    valori[1] = 1 
    macchine[2] = controlled 
    valori[2] = 1 
    macchine[3] = controlled 
    valori[3] = 1 
    macchine[4] = controlled 
    valori[4] = 0 
    siamo nel ciclo di controllo nr.---> 6
    macchine[0] = controlled 
    valori[0] = 1 
    macchine[1] = controlled 
    valori[1] = 1 
    macchine[2] = controlled 
    valori[2] = 1 
    macchine[3] = controlled 
    valori[3] = 1 
    macchine[4] = controlled 
    valori[4] = 0 
    siamo nel ciclo di controllo nr.---> 7
    macchine[0] = controlled 
    valori[0] = 1 
    macchine[1] = controlled 
    valori[1] = 1 
    macchine[2] = controlled 
    valori[2] = 1 
    macchine[3] = controlled 
    valori[3] = 1 
    macchine[4] = controlled 
    valori[4] = 0 
    siamo nel ciclo di controllo nr.---> 8
    macchine[0] = controlled 
    valori[0] = 1 
    macchine[1] = controlled 
    valori[1] = 1 
    macchine[2] = controlled 
    valori[2] = 1 
    macchine[3] = controlled 
    valori[3] = 1 
    macchine[4] = controlled 
    valori[4] = 0 
    siamo nel ciclo di controllo nr.---> 9
    macchine[0] = controlled 
    valori[0] = 1 
    macchine[1] = controlled 
    valori[1] = 1 
    macchine[2] = controlled 
    valori[2] = 1 
    macchine[3] = controlled 
    valori[3] = 1 
    macchine[4] = controlled 
    valori[4] = 0 
    siamo nel ciclo di controllo nr.---> 10
    macchine[0] = controlled 
    valori[0] = 1 
    macchine[1] = controlled 
    valori[1] = 1 
    macchine[2] = controlled 
    valori[2] = 1 
    macchine[3] = controlled 
    valori[3] = 1 
    macchine[4] = controlled 
    valori[4] = 0 
    siamo nel ciclo di controllo nr.---> 11
    macchine[0] = controlled 
    valori[0] = 1 
    macchine[1] = controlled 
    valori[1] = 1 
    macchine[2] = controlled 
    valori[2] = 1 
    macchine[3] = controlled 
    valori[3] = 1 
    macchine[4] = controlled 
    valori[4] = 0 
    siamo nel ciclo di controllo nr.---> 12
    macchine[0] = controlled 
    valori[0] = 1 
    macchine[1] = controlled 
    valori[1] = 1 
    macchine[2] = controlled 
    valori[2] = 1 
    macchine[3] = controlled 
    valori[3] = 1 
    macchine[4] = controlled 
    valori[4] = 0 
    siamo nel ciclo di controllo nr.---> 13
    macchine[0] = controlled 
    valori[0] = 1 
    macchine[1] = controlled 
    valori[1] = 1 
    macchine[2] = controlled 
    valori[2] = 1 
    macchine[3] = controlled 
    valori[3] = 1 
    macchine[4] = controlled 
    valori[4] = 0 
    siamo nel ciclo di controllo nr.---> 14
    macchine[0] = controlled 
    valori[0] = 1 
    macchine[1] = controlled 
    valori[1] = 1 
    macchine[2] = controlled 
    valori[2] = 1 
    macchine[3] = controlled 
    valori[3] = 1 
    macchine[4] = controlled 
    valori[4] = 0 
    siamo nel ciclo di controllo nr.---> 15
    macchine[0] = controlled 
    valori[0] = 1 
    macchine[1] = controlled 
    valori[1] = 1 
    macchine[2] = controlled 
    valori[2] = 1 
    macchine[3] = controlled 
    valori[3] = 1 
    macchine[4] = controlled 
    valori[4] = 0 
    siamo nel ciclo di controllo nr.---> 16
    macchine[0] = controlled 
    valori[0] = 1 
    macchine[1] = controlled 
    valori[1] = 1 
    macchine[2] = controlled 
    valori[2] = 1 
    macchine[3] = controlled 
    valori[3] = 1 
    macchine[4] = controlled 
    valori[4] = 0 
    siamo nel ciclo di controllo nr.---> 17
    macchine[0] = controlled 
    valori[0] = 1 
    macchine[1] = controlled 
    valori[1] = 1 
    macchine[2] = controlled 
    valori[2] = 1 
    macchine[3] = controlled 
    valori[3] = 1 
    macchine[4] = controlled 
    valori[4] = 0 
    tempo esecuzione:   0.000814
    
    come si vede in realtà così controllo i valori serialmente ..... invece io dovrei ottenere:
    siamo nel ciclo di controllo nr.---> 0
    macchine[0] = controlled 
    valori[0] = 1 
    macchine[1] = controlled 
    valori[0] = 1 
    macchine[2] = controlled 
    valori[0] = 1 
    macchine[3] = controlled 
    valori[0] = 1 
    macchine[4] = controlled 
    valori[0] = 0
    siamo nel ciclo di controllo nr.---> 1
    macchine[0] = controlled 
    valori[1] = 1 
    macchine[1] = controlled 
    valori[1] = 1 
    macchine[2] = controlled 
    valori[1] = 1 
    macchine[3] = controlled 
    valori[1] = 1 
    macchine[4] = controlled 
    valori[1] = 0 .... e via di seguito ....
    ovviamente basta modificare i cicli ....


    GIorgio
  • Re: If(abc......) parametrizzato

    Giorgio ... non per non risponderti ma se proponi delle spiegazioni che gli altri non possono comprendere perché non conoscono il tuo problema reale, non potrò darti alcun suggerimento ...

    Cosa è

    macchine

    e cosa è

    valori?

    Come posso capire rispetto al mio suggerimento cosa non va?
  • Re: If(abc......) parametrizzato

    Scusami Oregon .... ho postato prima di leggere il tuo ultimo commento ...... comunque come vedi ho trovato 2 soluzioni che se anche non ottimizzano i tempi hanno il pregio di spiegare molto bene quello che mi serve ..... fino a 12 Machine e 20 MachineStat siamo nell'ordine di 0,00019 sec ...... poi se con 256 Machine e 256 MachineStat si riuscisse a trovare una soluzione di controllo entro i 5ms sarebbe ottimo ... per ora sono a 0.0014 sec.... un pò troppo i dati provengono da una linea dati ethernet(modbus) che di persè porta dei ritardi nell'acquisizione dati nell'ordine dei 30/40ms vorrei che il controllo eseguito avesse una rilevanza di tempo minima in modo da stare sicuramente sotto i 70ms totali ( ricezione dati, elaborazione, ricezione della risposta elaborata da parte degli slave...)..

    Sarebbe carino trovare un codice che lavora più rapidamente .....

    Quindi adesso la parte qui sotto è stata scritta prima che mi accorgessi della risposta di OREGON.................

    Questo era esattamente quello che cercavo .... prima ho provato con vector e gli array 2d .... ma avevo il problema che non avevo il controllo sullo stato generale della macchina ... ovvero quante macchine ci sono? .... adesso che scrivo mi rendo conto che potevo riservare il primo valore del secondo contenitore degli arrai 2d come stato esiste/non_esiste macchina ... ma tant'è che lavoro su c++ mi sono studiato le struct e ho creato il codice che segue ... i puristi potranno dire che ho un array e una struct in più adesso ... e vabbè vorrà dire che riserverò MachineStat[n][0] a valore di macchina presente ......

    #include <stdio.h>
    #include <unistd.h>
    #include <string.h>
    #include <stdlib.h>
    #include <errno.h>
    #include <iostream>
    #include <math.h>
    #include <sys/time.h>
    
    using namespace std;
    
    
    struct ControlMachine{ 
        bool MachineStat[256][50]; 
        bool Machine[256];};
    
    
    int main()
    {
    
    ControlMachine mk;
    
    
    for(int b = 0; b < 256; b = b +1){
    for(int a = 0; a < 50; a = a +1){
      mk.MachineStat[b][a] = true;
    }
    mk.Machine[b] = true;
    }
    
    mk.MachineStat[10][0] = false;   /* come test*/
    mk.MachineStat[10][1] = false;
    mk.MachineStat[10][2] = false;
    mk.MachineStat[10][3] = false;
    mk.MachineStat[10][4] = false;
    mk.MachineStat[10][5] = false;
    mk.MachineStat[10][6] = false;
    
    mk.Machine[12] = false;
    
    clock_t start,end;
    double tempo;
    start=clock();
    
    
    //result = true;
    for(int e = 0; e < 20; e = e + 1){
      for(int i = 0; i < 256; i = i +1){
    
      if (mk.Machine[i] == true) {//std::cout << "machine[" << i  << "] = control \n";
         
             if(mk.MachineStat[i][e] == true)
             {
                 std::cout << "value machine[" << i <<  "][" << e  <<  "] = ok \n";
            
             }
             else {std::cout << "value machine[" << i <<  "][" << e  <<  "] = NOK \n";}
         }
      else {std::cout << "machine[" << i  << "] = shutoff \n"; break;}
      }
    }
    
    end=clock();
    tempo=((double)(end-start))/CLOCKS_PER_SEC;
    
    std::cout << "execution time:   " << tempo  << "\n\n";
    
    }


    Saluti
    Giorgio
Devi accedere o registrarti per scrivere nel forum
10 risposte