Gioco di logica

« Older   Newer »
  Share  
Elemento 38
view post Posted on 26/4/2018, 21:20




Un metodo che mi ha molto aiutato, è stato disegnare diagrammi per funzioni combinatorie sempre nello stesso modo.
A sinistra due linee per ogni variabile (normale e negata), al centro le porte OR e a destra la porta (o porte) AND. Lo vedo come un modo più semplice per visualizzare il circuito e vedere realmente quante porte servono (molte NOT si possono riutilizzare, se il fan out lo permette!).
Sketch molto veloce:
87D98DD4_A8EC_4407_8236_91684CD64462

Attached Image: 235C6441-D466-436A-8BBE-335A0E22B4A9

235C6441-D466-436A-8BBE-335A0E22B4A9

 
Top
view post Posted on 26/4/2018, 21:31
Avatar

GWFstory

Group:
Administrator
Posts:
359
Location:
da qui...., quo, qua. Siete curiosi di saperlo, vero? No? Beh, tanto non ve l'avrei detto.

Status:


CITAZIONE
Un metodo che mi ha molto aiutato, è stato disegnare diagrammi per funzioni combinatorie sempre nello stesso modo.

:lol: Sarebbe stata anche la mia intenzione fare così (è poi la iper-collaudata architettuta usata nei datasheet di PAL, GAL & c.), purtroppo stavo usando un programma carino ma decisamente rudimentale, e così ho avuto un risultato non proprio eclatante :sick: (per usare un eufemismo). Tanto per intenderci oltre le 20 porte logiche / componenti (testi ed etichette per i nodi comprese) avrei dovuto pagare la licenza. Così pure se avessi voluto esportare lo schema in un formato decente (bitmap o pdf). Alla fine ho fatto in modo di visualizzare lo schema ingrandito, ho catturato lo schermo e l'ho salvato in bitmap. :shifty:

Praticamente mi sembrava di essere il toro che uccise il topo (prendendolo un po' alla larga e con qualche passaggio intermedio) nella nota canzone di Branduardi. :rolleyes:
 
Top
Elemento 38
view post Posted on 26/4/2018, 21:34




Ho dovuto anche io fare uno screenshot dall’iPad ... :rolleyes: la voglia di accendere il PC e cercare OrCad era poca :lol:
 
Top
view post Posted on 26/4/2018, 21:38
Avatar

GWFstory

Group:
Administrator
Posts:
359
Location:
da qui...., quo, qua. Siete curiosi di saperlo, vero? No? Beh, tanto non ve l'avrei detto.

Status:


Fra un po' torneremo alla clava..... -_- <_<

....ma con touch-screen :woot: , tanto per dare un'idea di modernità. :D
 
Top
view post Posted on 26/4/2018, 21:46
Avatar

Rompiball

Group:
Appassionati
Posts:
2,612
Location:
briansa

Status:


CITAZIONE (Elemento 38 @ 26/4/2018, 22:06) 
CITAZIONE
Ma se nego i bit a 0 mi diventano 1, mentre quelli a 1 stanno a 1.

Secondo me stai facendo confusione con le funzioni logiche. Wiki ha un buon riassunto: https://it.m.wikipedia.org/wiki/Porta_logica

Puo' essere. Domani leggo bene la spiegazione che ha messo GWF.
Porcaccia, ricordo davvero pochissimo di quello che avevo imparato.
E' cosi' se non ci lavori su tutti i giorni, certe cose se ne vanno come neve al sole, mannaggia !!!
 
Top
view post Posted on 26/4/2018, 22:02
Avatar

GWFstory

Group:
Administrator
Posts:
359
Location:
da qui...., quo, qua. Siete curiosi di saperlo, vero? No? Beh, tanto non ve l'avrei detto.

Status:


CITAZIONE
certe cose se ne vanno come neve al sole

L'unica possibilità è trasferirsi in Siberia :lol: :lol:
 
Top
view post Posted on 26/4/2018, 22:07
Avatar

Rompiball

Group:
Appassionati
Posts:
2,612
Location:
briansa

Status:


Porca miseria. Mi state facendo venire voglia di tirare fuori l'oscilloscopio e tutto il resto...pero' c'e' python da studiare...ma aspetta, non e' che se studio python scordo il C ?
Ma che caxxo, non potevo avere l'hobby del calcio...e che so io delle macchine ???!!?
 
Top
view post Posted on 26/4/2018, 22:34
Avatar

GWFstory

Group:
Administrator
Posts:
359
Location:
da qui...., quo, qua. Siete curiosi di saperlo, vero? No? Beh, tanto non ve l'avrei detto.

Status:


CITAZIONE
non e' che se studio python scordo il C

Beh, non c'è solo il problema di ricordarsi o scordarsi, ma anche di "caricarsi le configurazioni" quando passi da un linguaggio all'altro.

A me ad esempio capita di sviluppare in contemporanea il firmware lato controllore (usando l'assembler o, peggio, il C) e il software lato PC in Visual Basic. :wacko:

Ho scritto "peggio" riferendomi al C anche se è più facile dell'assembler perchè quando mi "configuro" per usarlo è per alcuni aspetti simile al VB, quindi finisci per confondere le istruzioni del primo con quelle del secondo, anche perchè magari stai lavorando con le finestre dei 2 ambienti di sviluppo su 2 monitor diversi per fare prima. A quel punto ti sembra di essere lo spettatore di una partita di tennis :unsure: e tutto avresti voglia di fare tranne quello di dovere continuamente commutare il "data base di nozioni" legato ai 2 diversi linguaggi.

Ad esempio quando devi fare selezioni multiple in base al valore di una variabile in VB6 scrivi:
select case (variabile)
case is = valore1
.........bla,bla,bla
case is = valore2
.........bla,bla,bla
end select

In C invece:
switch (variabile)
{
case valore1:
.........bla,bla,bla
case valore2:
.........bla,bla,bla
}

In più, cosa ancora più insidiosa, il C ha bisogno del break; dopo ogni condizione per uscire dallo switch quando ha eseguito il case attuale, mentre il VB no (ce l'ha implicito/automatico).
Se mentalmente sei in modalità VB e vai a scrivere in C senza caricare la "configurazione da C" rischi di non mettere il break; col risultato che il programma analizza i case successivi, situazione che può portare a funzionamenti indesiderati.

Sai quante volte ho sacramentato con chi ha scritto i linguaggi pensando che almeno un minimo di sforzo avrebbero potuto farlo per standardizzare le istruzioni comuni ai vari linguaggi? Tantissime

Perchè lo switch del C in basic si deve chiamare select case? Non avrebbe potuto avere lo stesso nome (ad esempio Ugo, tanto per non fare torti a nessuno degli ideatori dei 2 linguaggi)? :stres:

E perchè il FOR NEXT del VB è così diverso dal FOR del C pur facendo le stesse funzioni? :angry: :wb:

Misteri dell'informatica.....

Magari un giorno mi verrà voglia di crearmi un linguaggio di programmazione chiamato, che so, Trottolino il cui listato va scritto dal basso veerso l'alto e da destra verso sinistra.....(tanto per creare disagi a chi lo usa) e che lavora solo con i numeri complessi invece che interi e a virgola mobile (quindi per usare quelli reali uno deve farsi continuamente le conversioni). :ph34r:
 
Top
view post Posted on 27/4/2018, 06:48
Avatar

Rompiball

Group:
Appassionati
Posts:
2,612
Location:
briansa

Status:


E pensa che python3 per alcuni versi non e' retrocompatibile con python 2 !!!!
Bho, ne ho discusso altrove, ma io rimango un po' dell'idea che e' assurdo !!
 
Top
view post Posted on 27/4/2018, 08:40
Avatar

GWFstory

Group:
Administrator
Posts:
359
Location:
da qui...., quo, qua. Siete curiosi di saperlo, vero? No? Beh, tanto non ve l'avrei detto.

Status:


Almeno python è gratis!!
Microsoft fa la stessa cosa con le varie versione del pacchetto Visual Studio (Visual C,Visual Basic, ecc.). C'ho fatto solo alcuni esperimenti prima che la rotazione dei cosiddetti mi facesse propendere a restare a VB6, ma un collega che ci ha lavorato più di me mi ha detto che compilare un programma con una versione più nuova di Visual Studio non è proprio banale.
 
Top
view post Posted on 27/4/2018, 09:41
Avatar

Rompiball

Group:
Appassionati
Posts:
2,612
Location:
briansa

Status:


Non ho capito a cosa ti serve visual basic...non credo propio per lavoro.
Se e' lato hobby/pc secondo me buttati su python
 
Top
view post Posted on 27/4/2018, 09:51
Avatar

GWFstory

Group:
Administrator
Posts:
359
Location:
da qui...., quo, qua. Siete curiosi di saperlo, vero? No? Beh, tanto non ve l'avrei detto.

Status:


Invece è proprio per lavoro.

Molti puristi storcono il naso sentendo parlare di Visual Basic, perchè è considerato un linguaggio di serie B, adatto a chi non sa programmare.
Io so programmare (abbastanza) bene, tant'è che uso anche assembler e C, ma VB6 mi serve lato PC come interfaccia utente per impostare i parametri. Anche se VB6 non è il massimo dell'efficienza per creare delle form e inviarle su porta seriale va benissimo, quindi continuo ad usare lui.

Per MP ti mando il link ad un esempio.
 
Top
view post Posted on 27/4/2018, 10:24
Avatar

Rompiball

Group:
Appassionati
Posts:
2,612
Location:
briansa

Status:


CITAZIONE
mi serve lato PC come interfaccia utente per impostare i parametri.

Ah ok. Non avevo inteso. Mi pareva strano far girare un micro con quel linguaggio.

CITAZIONE
Molti puristi storcono il naso sentendo parlare di Visual Basic, perchè è considerato un linguaggio di serie B, adatto a chi non sa programmare.

Bhè , qui è la solita guerra di religioni. Ci eravamo passati molto tempo fa se ricordi. Meglio l'asm o il C ??
Io, non sono nessuno per poter dire, ma se a te va bene VB6, va bene no?
Certo forse Python per quell'uso potrebbe rimpiazzare. Poi se non ho capito male VB lo paghi, Python no.
Capisco anche che per chi lavora è uno "sbattimento" esagerato mollare il vecchio per il nuovo, richiede tempo
e fatica.
Ma insisto...io posso anche fregarmene, ma tu che sei nel campo, conviene
 
Top
view post Posted on 27/4/2018, 10:37
Avatar

GWFstory

Group:
Administrator
Posts:
359
Location:
da qui...., quo, qua. Siete curiosi di saperlo, vero? No? Beh, tanto non ve l'avrei detto.

Status:


CITAZIONE
Capisco anche che per chi lavora è uno "sbattimento" esagerato mollare il vecchio per il nuovo, richiede tempo
e fatica.

Infatti, complice anche il mio poco tempo libero, mi sono ormai stufato di dovermi ogni volta preoccupare di trovare un giacimento di ferro per procurarmi il cacciavite che mi servirà per regolare un trimmer.
Ora devo badare più al sodo e cercare di andrare diritto all'obiettivo, altrimenti...... non si mangia. Quindi continuerò ad usare un vecchio cacciavite mezzo spuntato che però mi dà il risutato subito.

Ormai ho tempo 0 per coltivare i miei hobby e così cerco di ritagliarmi un po' di spazio portandomi a casa i lavori più interessati (non riuscirò a fare esterimenti "tanto per fare", ma li farò portandomi avanti nel lavoro).
Certo che mi manca molto la condizione di quando studiavo senza fini diretti, solo per il gusto d'imparare, ma purtroppo bisogna essere anche concreti.

Rispetto a qualche anno fa sono un po' più schizzinoso nella scelta dei lavori: preferisco prendermi quelli che mi piacciono e che mi danno sodisfazione piuttosto che quelli, magari più remunerativi, che giudico noiosi o poco qualificanti.
 
Top
icon6  view post Posted on 27/4/2018, 10:46
Avatar

Rompiball

Group:
Appassionati
Posts:
2,612
Location:
briansa

Status:


già...poi, facile quanto vuoi Python, è pur sempre un linguaggio bello vasto, con un sacco di metodi.
Poi (OT), io sto avendo molte difficoltà, tendo a ragionare in C.
Ma per usare bene Python, bisogna entrare nella filosofia, solo così lo si sfrutta.

certo che se penso che un dizionario ( gli hash che dicevamo ieri) lo fai con:
CODICE
d={"a":1,"b":2,"c":3}


e in C (liste di trabocco, malloc, gestione collisioni) è:
CODICE
//
// TABELLA DI HASH CON LISTE DI TRABOCCO
// IMPLEMENTATA CON ARRAY DI PUNTATORI A STRUCT
// CHE FUNGONO DA TESTA DELLE LISTE



#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#define M 10

#define LEN_STR 6
#define RANGE 26
#define OFFSET 97
#define MAX_STR 100
int pos=0;

struct dati
{
       char string[100];
       struct dati *next;
};

void genera_Str                (char *array_str);
int key                                (char *array_str,int m);
void ins_dati                 (struct dati **head,int h,char array_str[]);
int input_parola    (char str[]);
int cerca           ( struct dati **head,int key,char str[]);
void stampa_liste   ( int key,struct dati *head[]);


int cerca ( struct dati **head,int key,char str[])
{
       struct dati *new_node;
       new_node=head[key];
       int x;
       pos=0;
       if (new_node==NULL) // se nodo==NULL non scansiono nemmeno
       {
               puts("parola non trovata");
               return -1;
       }
       else
       {
               while (new_node!=NULL)
               {
                       x=strcmp(new_node->string,str);
                       if (x==0)
                               return key;
                     new_node=new_node->next;
                       pos++;
               }
       }        
       return -1;                                        
}


//*******************************************
//      STAMPA TUTTE LE LISTE
//*******************************************

void stampa_liste ( int key, struct dati **head)
{
       int k;
       puts("STAMPO TUTTE LE LISTE\n");  
       for (k=0; k<key; k++)
       {
               struct dati *new_node;
               new_node=head[k];
               if (new_node!=NULL)
               {
                       printf (" STAMPA LISTA n° [%d]\n",k);
                       printf ("%s-->",new_node->string);
                       new_node=new_node->next;
                       while (new_node!=NULL)
                       {
                               printf ("%s-->", new_node->string);
                               new_node=new_node->next;
                       }
                       puts("");
               }
       }
}


//***********************************************
int input_parola (char str[])
{
       int len,k;
       puts ("inserisci parola da cercare");
       fgets(str,MAX_STR,stdin);
       len=strlen(str);
       str[len-1]='\0';
       k=key(str,M);
       return k;
}


//******************************************
//        INSERISCI DATI IN TESTA
//******************************************

void ins_dati (struct dati **head,int h,char array_str[])
{
       struct dati *new_node;
       new_node=*head;
       new_node=malloc(sizeof( struct dati));
        if (NULL==new_node)
       {
               printf ("abort\n");
               exit(0);
       }
       strcpy (new_node->string,array_str);
       new_node->next=*head;
       *head=new_node;
}
                               
   

//*******************************************
// genera stringa random
//*******************************************
void genera_Str(char *array_str)
{
       int rnd,i;
       for (i=0;i<LEN_STR;i++)
       {
               rnd=rand() % RANGE;
               array_str[i]=rnd+OFFSET;
       }
       array_str[LEN_STR]='\0';
}
//*******************************************
// genera chiave Alg hash universale (credo)
//*******************************************
int key        (char *array_str,int m)
{
       int h,a=11,b=13;
       char tmp_array[100];
       strcpy (tmp_array,array_str);
       for (h=0; *array_str!='\0'; array_str++,a=a*b % (m-1))
               h=(a*h+ *array_str)%m;
               printf ("generata chiave %d da parola [%s]\n", h,tmp_array);//getchar();
       return h;
}

int main(void)
{
       struct dati **first;
       srand((unsigned) time(NULL));
       char array_str[MAX_STR];
       int j,h,i;
       
       first=  malloc(M*sizeof(struct dati**));
       if (first==NULL)
       {
               puts("error");
               return -1;
       }    
       for (i=0; i<M; i++)
               first[i]=NULL;
       for (j=0; j<M; j++)
       {
               genera_Str(array_str);
               h=key(array_str,M);
               ins_dati(&first[h],h,array_str);        
       }
       stampa_liste (M,first);
       while(1)
       {
               h=input_parola(array_str);
               j=cerca(first,h,array_str);
               if (j!=-1)
                       printf ("trovata in array[%d]--->pos %d\n",j,pos);
               else
                       puts ("parola insesistente!");
       }
       return 0;
}


Mi girano parecchio le scatole !!!!
Ma ne parleremo altrove, era solo per mettere in evidenza quanto siano ad alto livello certi linguaggi.
 
Top
50 replies since 14/4/2018, 11:35   660 views
  Share