Codice dei programmi nella directory:

///File: CompilatoreOnLine.html
<html> <head> <meta http-equiv="refresh" content="0; url=http://dsacco.alwaysdata.net/compilatore/ide.php" /> </head> </html>
///(Fine file: CompilatoreOnLine.html)

///File: GeneraPDFdaHTML-LibreriaFPDF.html
<h2><hr><a href=../../_fpdf181/html2pdf/ex.php>Genera file PDF online da HTML o dalla tua pagina PHP...</a><hr><h2> <h3><a href=../../_fpdf181/tutorial>Esempi in PHP della libreria FPDF</a><hr></h3> <h3><a href=http://www.fpdf.org/it/script/index.php>Numerosi e utili Script PHP di FPDF on line (dal sito: http://fpdf.org/it) </a><hr><h3>
///(Fine file: GeneraPDFdaHTML-LibreriaFPDF.html)

///File: GeneraQRcodeOnLine.html
<h2><hr><a href="http://dsacco.alwaysdata.net/qrcode/myindex.html">Genera Qr code online...</a><hr><h2> <h5>( o dalla tua pagina PHP/HTML con <b>action: http://dsacco.alwaysdata.net/qrcode/myindex.php?qrcodestring=stringadagenerare&livello=L&dimensione=4)</a><hr><h5>
///(Fine file: GeneraQRcodeOnLine.html)

///File: index.html
<html> <head> <meta http-equiv="refresh" content="0; url=http://www.itis.pr.it/~dsacco/" /> </head> </html>
///(Fine file: index.html)

///File: LinguaggioDiProgettoJP.html
<html> <head> <meta http-equiv="refresh" content="0; url=http://dsacco.alwaysdata.net/jp/ide.html" /> </head> </html>
///(Fine file: LinguaggioDiProgettoJP.html)

///File: programmi-utili-C.html
<html> <head> <body> <h1><hr>Programmi utili in C - ult. modif. 23-1-2016</h1> <br><br> <h3>Segui il <a href=http://tohtml.com/>link</A> se vuoi copiare in Office con colori evidenziati!!! </h3><hr> <FONT FACE="Arial"> <tr> <td> <h3><i>Funzioni: random()/RANDOMIZE() </i> </h3> <table border=0> <TEXTAREA NAME="EsempiC" ROWS=20 COLS=80> /* Funzione C random(n) Restituisce un valore fra o ed n-1 Usare: x = random(10) +1; per un valore fra 1 e 10 Scritto da: F. Sacco */ #include <time.h> #include <stdlib.h> void RANDOMIZE() /* Chiamare 1 sola volta, prima di random() */ { time_t t; srand((unsigned) time(&t)); /* inizializza generatore pseudocasuale sul tempo di sistema */ } int random(int n) // ritorna un numero pseudocasuale fra 0 ed n-1 { return rand() % n; } /*---------------------FINE--------------------------*/ </TEXTAREA> </td> <tr> <td> <h3><i>Funzioni I/O C</i> </h3> <table border=0> <TEXTAREA NAME="IOC" ROWS=20 COLS=80> /* Funzioni base su I/O Scritto da: F. Sacco */ #include <stdio.h> void getstr(char str[], int lun) /* legge una stringa dall'input: + sicura di gets() */ { fgets(str,lun,stdin); str[strlen(str)-1] = '\0'; /* metto il \0 anzichè il \n di fgets() */ } double getnum() /* legge un numero da tastiera - meglio della scanf() non si pianta x input sbagliati ... non lascia il '\n' nel flusso di input... */ { char str[128+2]; double num; getstr(str,128); num=atof(str); return num; } double getnumck(double min, double max) /* accetta un numero solo se compreso fra min e max (fa ChecK) */ { double num; do { num = getnum(); if (num < min || num > max ) { printf("\n7Accetto valori SOLO fra 10.2lf e %10.2 lf [PREMI INVIO] ...",min,max); getchar(); } } while(num < min || num > max); return num; } /*---------------------FINE--------------------------*/ </TEXTAREA> </td> <tr> <td> <h3><i> Vettori C </i> </h3> <TEXTAREA NAME="VettoriC" ROWS=20 COLS=80> /* Funzione C scanfvet() legge da tastiera un vettore di LIM interi ( o fino a LIM elementi) Scritto da: F. Sacco */ void scanfvet(int vett[], int LIM) { int i; for(i=0; i < LIM; i++) { printf("Elemento v[%d]->",i); // il primo ha indice 0 scanf("%d",&vett[i]); } } /* Funzione C printfvet() visualizza a video un vettore di LIM interi ( o fino a LIM elementi) Scritto da: F. Sacco */ void printfvet(int vett[], int LIM) { int i; for(i=0; i < LIM; i++) printf("Elemento v[%d]->%d\n",i,vett[i]); // il primo ha indice 0 } /* Funzione C minvet() (maxvet e' simile) ritorna l'elemento minimo di un vettore di LIM interi ( o fino a LIM elementi) Scritto da: F. Sacco */ int minvet(int vett[], int LIM) { int i,minimo=0; /* minimo indica la posizione del minimo */ for(i=1; i < LIM; i++) if (vett[i] < vett[minimo]) minimo=i; return minimo; } /* Funzione C scambia() scambia due elementi di posizione i e j nel vettore E' indipendente dalla dimensione del vettore!!! Scritto da: F. Sacco */ void scambia(int vett[],int i, int j) { int dep=vett[i]; if (i!=j) // altrimenti e' inutile scambiare!!! { vett[i]=vett[j]; vett[j]=dep; } } /* Funzione C sortvet() ordina un vettore di LIM interi ( o fino a LIM elementi) - usa: scambia() Scritto da: F. Sacco */ void sortvet(int vett[], int LIM) { int i,j; for(i=0; i < LIM-1; i++) for(j=i+1; j < LIM; j++) if (vett[i] > vett[j]) scambia(vett,i,j); } /*---------------------FINE--------------------------*/ </TEXTAREA> <tr> <td> <FONT FACE="Arial"> <h3><i>Mybyte4.h - Gestione Byte/Parallela/Seriale (GIVEIO) </i> </h3> <table border=0> <TEXTAREA NAME="EsempiC" ROWS=20 COLS=80> /* programma per classe 3^B AND, OR, NOT, XOR, CICLO(), GIVEIO e controllo parallela e seriale // metti nei programmi #include "mybyte4.h" AND: spegne i bit con maschera a zeri per i bit da spegnere OR: accende i bit con maschera a uni per i bit da accendere NOT: capovolge tutti i bit SHIFT a destra: divide per due ad ogni posizione (divisione intera) SHIFT a sinistra: moltiplica per due (fino al raggiungimento del valore massimo) CODIFICA NEL main() !!!!!! */ #include <stdio.h> #include <stdlib.h> // per atoi() #include <string.h> // per strlen() #include <windows.h> // per giveio #include <time.h> void RANDOMIZE() // per compatibilità Borland C { time_t t; srand((unsigned) time(&t)); } int random(int n) { return rand() % n; } #define BYTE unsigned char // un carattere senza segno equivale ad un BYTE #define LEN 80 // lunghezza stringhe #define CICLO(X,N) for(X=0; X < N; X++) // ciclo semplificato #define GIVEIO() giveio() // accesso porte consentito Wxp // Parallela #define PARALL(valore) _outp(0x378,valore) // accesso a porta parallela #define PARALLDEB(valore) scrivibyte(valore) // debug parallela --> il valore va su schermo // Seriale (segue parametri x porta seriale #define PORTA 0X300 // 0x300 = seriale1, 0X200 = seriale2 void SETTA_SERIALE(void) // seriale 1, 8 bit, 1 di stop, No parity, 2400 Baud { BYTE velocita = 0X30; // se dimezzi 0X30 ... raddoppia velocita' _outp(PORTA+0xFB,0x80); /* Dico all'8250 (UART) che sto X programmarla..*/ /* FB == REGISTRO CONTROLLO LINEA */ _outp(PORTA+0xF9,0); /* BYTE ALTO baud rate, sempre 0 */ _outp(PORTA+0xF8,velocita);/* BYTE basso baud rate */ _outp(PORTA+0xFB,0x3); /* 0x3 == 8 bit, 1 stop, NO Parity */ /* FB = REGISTRO CONTROLLO LINEA */ } void ATTESA_SERIALE_RICEZIONE() { BYTE c; do { c = _inp(PORTA+0xfD); } while((c & 1) == 0); } void ATTESA_SERIALE_TRASMISSIONE() { BYTE c; do { c = _inp(PORTA+0xfD); } while((c & 32) == 0); } void INVIA_SERIALE(BYTE c) { _outp(PORTA+0xF8,c); } BYTE RICEVI_SERIALE(void) { BYTE c; c = _inp(PORTA+0xF8,c); return c; } // FINE funzioni sulla seriale void leggistr(char str[]) // legge una stringa { fgets(str,LEN,stdin); str[strlen(str)-1] = '\0'; // metto il \0 anzichè il \n } BYTE binario(char str[]) // trasforma un stringa contenente un numero in binario in decimale { int somma = 0; int pot=1; int i; char c; for(i=strlen(str)-1; i>=0; i--) { c = str[i]; if (c == '0' || c == '1') { somma+= pot*(str[i]-'0'); pot*=2; } else { printf("\nfunzione binario() - il valore [%s] NON e' in binario\n",str); exit(0); } } return somma; } void scrivibyte(BYTE b) // scrive un byte in binario / ricorsiva { int i; printf("\n "); for (i=0; i < 8; i++) { printf("%d",b % 2); b/=2; printf("\b\b"); // torno indietro di 2 caratteri } } BYTE leggibyte(char modo) // legge un byte in 'D' -> decimale, 'B' -> binario { char stringa[LEN+2]; printf("digita un valore in "); if (modo == 'D') printf(" decimale ->"); else if (modo == 'B') printf(" binario ->"); else { printf("Errore chiamata funzione leggibyte()"); exit(0); }; leggistr(stringa); if (modo == 'D') return atoi(stringa); else return binario(stringa); } void giveio() // WOW provato giveio su seven a scuola 32 bit: VA!!!!! 14 nov 2012 { int i; HANDLE h; printf("\nCHIAMATO GIVEIO()\7\n"); h = CreateFile("\\\\.\\giveio", GENERIC_READ, 0, NULL,OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if(h == INVALID_HANDLE_VALUE) { printf("%c\nErrore, driver GiveIo NON installato\n",7); exit(1); } CloseHandle(h); } // vedi prova2.c per utilizzo!!! // prova.c - prova mybyte.h #include "Mybyte4.h" int main() // prova { BYTE uno, due; int i; uno = leggibyte('D'); due = leggibyte('B'); printf("primo byte in binario ->"); scrivibyte(uno); printf("\n"); printf("Secondo byte in decimale -> %d\n",due); printf("Secondo byte in ottale -> %o\n",due); printf("Secondo byte in esadecimale -> %x\n",due); CICLO(i,5) // test ciclo { printf("i=%d\n",i); } GIVEIO(); // test giveio uno = 8; // byte da produrre su parallela PARALL(uno); // produco il byte uno su parallela PARALLDEB(uno); // produco il byte uno su schermo X debug return 0; } /*---------------------FINE--------------------------*/ </TEXTAREA> </td> <tr> <td> <FONT FACE="Arial"> <h3><i> CGI Windows/Linux compatibili (Header cgi.h 2014)</i> </h3> <table border=0> <TEXTAREA NAME="CGI" ROWS=20 COLS=80> /******************************************************************/ /**** Scritto Da F.Sacco *****************************/ /**** Ultima mod. 19 Febbraio 2014 */ /**** File: CGI.H *****************************/ /*** Tratto da cgi_sql.c (routine di base X cgi) */ /*** in piu' mask() per maschere di ritorno (caratteri '$' */ /******************************************************************/ /** Feb 2014: corretto riconoscimento caratteri esa (es. '/', ',',':' **/ /** funzionalità nuova in debug() --> vedo vcgi[] posizioni */ /** Implementato request(nomecampo) --> ritorna il contenuto o NULL se non c'e' /** Il modulo" cgi.h", puo' essere utile per interpretare la QUERY_STRING in ricezione da un applicativo C CGI. Il metodo sopportato, e' sia il GET che il POST. I campi NON sopportati sono i TEXTAREA. Viene fatta la sostituzione del solo carattere particolare '+' in ' ' (spazio). Il parsing della query string viene fatto alla chiamata della funzione "cgi()". La funzione "cgi()" prende l'input dalla stringa d'ambiente QUERY_STRING (percio' e' possibile anche simularne il lancio impostando con il comando dos/unix "set QUERY_STRING=.......") e ne spezza il contenuto in un vettore di strutture cgi(); la struttura cgi contiene due campi: "nome" che conterra' il nome del campo FORM assegnato dal modulo HTML. "contenuto" che sara' cio' che l'utente ha scritto nel campo "nome" Una volta chiamata la funzione cgi(), e' possibile cercare cio' che e' stato digitato dall'utente nel modulo HTML (modulo FORM) direttamente conoscendo il nome del campo, utilizzando la funzione cerca(). La cerca(), riceve in ingresso il nome del campo e ritorna il contenuto */ /** ATTENZIONE: il programma CGI deve costruire il modulo HTML: possono essere utili le funzioni: 1) testa() : apre il documento HTML, segnalando anche al browser (explorer o netscape) il tipo di documento di ritorno (content type). Il documento e' generato dinamicamente dall'applicativo CGI, dopo aver chiamato la funzione cgi(). 2) piede() : chiude il documento HTML generato dinamicamente 3) fatalerror(): interrompe l'esecuzione del programma CGI e segnala l'errore direttamente al BROWSER. Utile per condizioni anomale o debug... 4) debug(): Fatta il 26-02-2004, per stampare il vettore vcgi[] in forma di tabella ***********/ #include <fcntl.h> #include <stdio.h> #include <ctype.h> #include <stdio.h> #include <string.h> #include <stdlib.h> #define MAX 128 /* massimo numero campi nel modulo */ #define LMAX 32000 /* massima lunghezza di un nome variabile o di un suo contenuto */ struct cgi { char *nome; /* nome variabile */ char *contenuto; /* contenuto */ } vcgi[MAX]; char buffer[LMAX]; /* buffer di appoggio: LMAX */ char campo[LMAX/2]; /* Max lunghezza di un contenuto di campo */ int numerocampi = 0; /* numero campi modulo cgi */ // Nuova 2014 !!! char *request(char nomecampo[]) // come $_REQUEST di PHP { int i; for (i=0; i < numerocampi; i++) if (strcmp(vcgi[i].nome,nomecampo)==0) return vcgi[i].contenuto; return NULL; } void testa(void) /* testa per ogni HTML generato dinamicamente */ { printf("Content-type: text/html\n\n"); /* Senza questa, il browser non interpreta l'HTML di ritorno!!!*/ printf("<HTML>\n"); /* Parte da qui l'HTML di ritorno.. dinamico!! */ printf("<BODY>\n"); } void piede() /* CHIUDE il documento HTML .. dinamico */ { printf("</BODY>"); printf("</HTML>"); } void fatalerror(char *msgerr) /* errore che implica la terminzione */ /* Interfaccia standard in HTML */ { testa(); printf("<H2><HR>Errore [%s] <HR></H2>",msgerr); piede(); exit(1) ; /* Il cgi termina qui...*/ } // Nov 2002: traduzione in una stringa della codifica '+' in spazio // e %hh in valore carattere (es %25 -> '%', %3d -> '=', etc... // Febbraio 2014 :: modificata con sscanf: static int valore(char s[]) // Ricevuto %hh ritorna valore decimale { int v; char appoggio[10]; strncpy(appoggio,s+1,2); appoggio[2]='\0'; sscanf(appoggio,"%x",&v); // printf("<br>stringa=[%s] valore=[%d] carattere=[%c]\n",appoggio,v,v); return v; } char *decod(char cod[]) // riceve la stringa CODificata { // e la DECodifica, ritornandola // in se stessa, visto che la // dimensione della stringa decodificata // dovrebbe essere minore dell'originale char *l, *s; // (l)eggo, (s)crivo l = s = cod; while(*l) { switch (*l) { case '+': // spazio NON dovrebbe esserci... *s = ' '; break; case '&': // NON dovrebbe esserci *s = '\n'; /// ????? break; case '%': *s = valore(l); if ( s[1] && s[2]) // c'e' ancora qualcosa... l+=2; // salto 2 caratteri, dopo il % break; default: *s = *l; } ++s; ++l; // prox carattere... } *s = '\0'; // chiudo la stringa ... se serve return(cod); } /* la getword NON fa controlli sulla lunghezza stringhe... in certi ambiti la sicurezza potrebbe essere NON sufficiente... La funzione spezza in parole la stringa QUERY_STRING ritornando il puntatore al punto in cui si era interrotta nel penultimo richiamo. Inoltre vengono trasformati i '+' in spazi ' '*/ char *getword(char *s, char *w) /* restituisce in w la prossima parola presa da *s */ /* (fino al carattere '&', '=' o a '\0') */ /* trasforma i '+' in spazi in w */ { for (; *s && *s != '&' && *s != '='; s++) *w++ = (*s == '+') ? ' ': *s; *w = '\0'; if (*s != '\0') ++s; return s; } void *duplica(char *s) /* duplica con malloc() una stringa *s */ /* e ritorna il puntatore alla copia */ { void *p = malloc(strlen(s)+1); if (p) { strcpy((char *)p,s); } else fatalerror("Malloc: fine memoria"); return p; } void cgi(void) /* interpretazione query_string con getword() */ { int i; char *query; /* punatore alla query_strimg */ char *method; /* puntatore alls request_method */ char *env; /* puntatore di appoggio... */ int ldati; /* numero byte in input (caratteri ricevuti) */ method = getenv("REQUEST_METHOD"); if ( method == NULL) fatalerror("Non trovo var. REQUEST_METHOD"); if (strcmp(method,"GET") == 0) { query = getenv("QUERY_STRING"); if ( query == NULL) fatalerror("Non trovo var. QUERY_STRING\n"); strcpy(buffer,query); /* La metto nel buffer */ ldati = strlen(query); } else if (strcmp(method,"POST") == 0) { // attenzione, sotto windows 98, c'e' un limite piu' stretto // con UNA SOLA READ... ; in UNIX e' OK!! // (per migliorare, se e' il caso usare CONTENT_LENGHT // e piu' di una write()! ldati = read(0,buffer,LMAX); /* pesco dall'input standard */ /* e metto nel buffer */ } env = buffer; // Buffer OK sia per GET che per POST !! // FUNZIONA CON env == buffer la getword ??? BOH!!!! // eventualmente dichiarare un secondo buffer... for (i = 0; i < MAX && *env; i++) { env = getword(env,campo); /* pesco nome */ vcgi[i].nome = (char *)duplica(campo); env = getword(env,campo); /* pesco contenuto */ vcgi[i].contenuto = (char *) duplica(decod(campo)); } if (i == MAX) fatalerror("Troppi campi nel modulo!"); numerocampi = i; /* numero campi del modulo */ } char *cerca(char *nomevariabile) /* dato il nome della variabile */ /* mi ritorna il suo contenuto */ { int i; char *errore = "VARIABILE NON TROVATA!"; for (i =0; i < numerocampi; i++) if (strcmp(nomevariabile,vcgi[i].nome) == 0) return(vcgi[i].contenuto); return (errore); } void debug(void) { int i; printf("<table border=1>\n"); printf("<th colspan=4>Funzione debug()</th><tr>\n"); printf("<th>request()</th><th>Vettore CGI</th><th>Nome Campo</th><th>Contenuto</th><tr>\n"); for (i=0; i < numerocampi; i++) { printf("<td>request(\"%s\")==%s</td><td>vcgi[%d]</td><td>%s</td><td>%s</td><tr>\n", vcgi[i].nome, request(vcgi[i].nome),i,vcgi[i].nome,vcgi[i].contenuto); } printf("</table>\n"); } /* Ultima modifica 27-04-2002 ********/ /* Programma CGI-MASK.C - per sostituire maschere */ /* Uso: richiamare mask("nomefile.html"), dopo aver lanciato cgi() **********/ /* Il seguente modulo C serve per organizzare le risposte dell'applicativo */ /* CGI, in modo da semplificare l'output in HTML; la funzione mask() e' */ /* LA FUNZIONE principale, E VA USATA con il nome del file (html) che si */ /* intende usare come maschera fissa HTML di risposta dati. */ /* la funzione mask() accetta anche in ingresso un vettore di strutture */ /* di tipo "struct cgi" ed il numero di campi contenuti. */ /* Per quanto riguarda il tipo "struct cgi" si veda il file cgi-sql.c; */ /* in pratica la struttura cgi, viene utilizzata da mask() per sostituire*/ /* i campi dinamici (marcati dal carattere "$" (dollaro)) che devono essere*/ /* presenti sia nel file html (il cui nome costituisce il primo parametro */ /* in ingresso per la mask() ) che nel vettore di strutture cgi ( passato */ /* sempre alla mask() come secondo parametro in ingresso); */ /* nel vettore di strutture cgi, i campi "nome" NON debbono invece */ /* cominciare con il carattere speciale "$" (dollaro) */ #define SMAX 512 /* lunghezza massima stringhe locali */ /* funzioni di base */ /* rimpiazza nella stringa stringa[], la parola vecchia oldword[] con la parola nuova newword[]. NON usa caratteri speciali '$' */ void replace(char stringa[], char oldword[], char newword[]) { char buffer[SMAX]; int car; char *o; o = strstr(stringa,oldword); if ( o == NULL) return; /* NON POSSO FARE replace */ car = (int) (o - stringa); strncpy(buffer,stringa,car); /* copio la prima parte */ sprintf(buffer+car,"%s",newword); strcat(buffer,o+strlen(oldword)); strcpy(stringa,buffer); } int loadfile(char file[], char *vs[], int max) /* carica un file in un vettore di max-1 puntatori. Attenzione alla */ /* lunghezza stringa che nel file NON deve superare SMAX */ /* Viene allocata la memoria per ogni stringa caricata */ /* vs[] = vettore di stringhe; carico un file in vs[], allocando memoria */ /* Metto ultimo pointer a NULL e ritorno anche numero linee lette ...*/ /* viene usata dalla mask() per caricare in memoria il file HTML */ { FILE *fd; char buffer[SMAX]; int i; fd = fopen(file,"r"); if (fd == NULL) fatalerror("Errore loadfile() apertura file ..."); for ( i = 0; i < max-1 && (fgets(buffer,SMAX-1,fd)!=NULL); i++) { vs [i] = (char *) malloc(strlen(buffer)+1); if (vs[i] == NULL) fatalerror("Da loadfile, funz. malloc()"); strcpy(vs[i],buffer); } fclose(fd); vs[i] = NULL; return (i); } int sostituisci(char *vs[], char oldword[], char newword[]) { /* scandisce un file di testo e per ogni occorrenza di parole oldword[], viene sostituita la parola oldword[] con newword[]. Se strlen(newword) > strlen(oldword) viene riallocata la memoria ... per contenerla...!!; ATTENZIONE: Occorre che il puntatore in fondo a vs[] sia NULL per segnalare la dimensione (come, ad es. il '\0' nelle stringhe..) del vettore di stringhe vs[]; Ritorna al chiamante il numero di sostituzioni fatte. E' usata direttamente dalla mask() ***/ int i, sostituzioni; char buffer[SMAX]; /* appoggio */ for (i=0, sostituzioni = 0; vs[i]; i++) { strcpy(buffer,vs[i]); /* buffer[] dovrebbe essere abbastanza capiente ...*/ while(strstr(buffer,oldword) != NULL) /* finche ho sostituito almeno una stringa oldword[] */ { replace(buffer,oldword,newword); sostituzioni++; } if (strlen(buffer) > strlen(vs[i])) { /* occore fare spazio....*/ free(vs[i]); vs[i] = (char *)malloc(strlen(buffer)+1); if (vs[i] == NULL) fatalerror("da sostituisci(), malloc()"); } strcpy(vs[i],buffer); } return sostituzioni; } void stampavs(char *vs[]) /* stampa un vettore di stringhe sull'output */ /* viene usata dalla mask(), una volta sostituiti i campi dinamici con '$'*/ /* l'output viene rediretto dal server web (apache..) direttamente al */ /* browser (client) */ { int i=0; while(vs[i]) printf("%s",vs[i++]); } /* libero memoria */ void freevs(char *vs[]) /* una volta caricato il file da mask() in un vettore di pointer a stringa */ /* e, dopo essere stato stampato con stampavs(), viene liberata la memoria */ /* allocata da loadfile con malloc() */ { int i; for (i = 0; vs[i]; i++) { free(vs[i]); vs[i] = NULL; } } static char *dollaro(char str[]) /* ritorna una stringa con un dollaro in testa */ /* in questo modo NON e' necessario immettere forzamente un '$' nei campi*/ /* di tipo "nome", nel vettore di struct cgi passato alla mask()*/ /* Attenzione alla lunghezza SMAX delle stringhe ...*/ /* Il vettore e' STATICO INTERNO, cioe' privato .. ma SEMPRE definito */ { static char buffer[SMAX]; strcpy(buffer,"$"); strcat(buffer,str); return buffer; } /*** mask() ==> funzione principale. Vedi la documentazione a linea 1 */ void mask(char file[], struct cgi vcgi[], int numerocampi) /* FUNZIONE PRINCIPALE */ { char *vs[SMAX]; int i; loadfile(file,vs,SMAX); for (i = 0; i < numerocampi; i++) sostituisci(vs,dollaro(vcgi[i].nome),vcgi[i].contenuto); stampavs(vs); freevs(vs); } /************************************/ /** Esempi di utilizzo di cgi.h: ****/ /************************************/ // debug.c: Uso della routine debug() di cgi.h // Ultima modifica 28 Feb 2004 // STAMPA IN TABELLA I VALORI PASSATI COME GET O POST da un MODULO #include "cgi.h" int main() { cgi(); testa(); debug(); // stampa in tabella le variabili del modulo form html piede(); return 0; } /**** provacgi.c: Pesco i campi di un modulo ****/ #include "cgi.h" // modulo di prova... ult mod 27-11-02 void test_cgi(void) /* per test...*/ { int i; char w[256]; cgi(); testa(); printf("<pre>"); for (i = 0; i < numerocampi; i++) printf("Nome [%s], contenuto [%s]\n", vcgi[i].nome, vcgi[i].contenuto); piede(); /*** test X cerca() ******************************* do { printf("Nome variabile [INVIO = FINE] ->"); gets(w); printf("Contenuto [%s]\n",cerca(w)); } while(*w); fine test X funzione cerca() ***/ } main() { test_cgi(); } /**** provamask.c: presento i dati con maschera HTML preconfezionata (mask.html) ****/ #include "cgi.h" /*** void test_cgimask() /* SOLO PER DEBUG di prova............ { char w1[100], w2[100], w3[100]; char *vs[100]; printf("File di testo ->"); gets(w1); printf("Parola vecchia ->"); gets(w2); printf("Parola nuova->"); gets(w3); loadfile(w1,vs,100); sostituisci(vs,w2,w3); stampavs(vs); } ******************/ int main() { cgi(); testa(); mask("./mask.html",vcgi,numerocampi); return 0; } </TEXTAREA> </td> <tr> <td> <FONT FACE="Arial"> <h3><i> Sock.h Windows/Linux compatibili</i> </h3> <table border=0> <TEXTAREA NAME="Sock" ROWS=20 COLS=80> /***************************************************************/ // sock.h : definizioni per rendere + semplici le chiamate di sistema // della famiglia socket!! (23/01/2004) F. Sacco // funziona: linux, cygwin, mingw, djgpp (DOS EXT 386),... // Grazie anche a P. Ollari X la parte sulle Winsock // Corretto buco closesocket() invece di close() (23/01/2004) // Ok anche per Visual C++ 19 Marzo 2004 // F. Sacco /***************************************************************/ #include <stdio.h> #ifdef WIN32 // se siamo in windows #include <winsock.h> #else // o in altri sistemi (UNIX, LINUX, CYGWIN...) #include <unistd.h> #include <sys/socket.h> #include <netinet/in.h> #include <netdb.h> #endif static struct sockaddr_in sai; static struct hostent * ht; int Socket(void) // Sia per SERVER, CHE PER CLIENT { int sock =-1; #ifdef WIN32 // Parte aggiunta per winsock .... static int primavolta = TRUE; // per chiamare inizializzazione void win_inizio(); // win_inizio() solo una volta! if ( primavolta ) { win_inizio(); primavolta = FALSE; } #endif // FINE PARTE SOLO PER X Winsock sock = socket( PF_INET, SOCK_STREAM, IPPROTO_IP ); // IPPROTO_IP = 0 if ( sock < 0 ) { perror( "Errore chiamata sock()" ); return -1; } return sock; } void Close(int socket) { // In windows NON close ma closesocket() #ifdef WIN32 closesocket( socket); // SOlo WIN #else close(socket); // SOLO UNIX/LINUX #endif } void Connect(int sock, int port, char server[]) // SOLO LATO CLIENT { sai.sin_family = AF_INET; sai.sin_port = htons((unsigned short) port); ht = gethostbyname(server); sai.sin_addr = * (struct in_addr *) ht->h_addr_list[0]; if ( connect( sock, (struct sockaddr *) &sai, sizeof( struct sockaddr_in ) ) < 0 ) { perror( "1) Errore connect()" ); Close( sock ); return; } } // DEFINIZIONI PER LATO SERVER struct sockaddr_in client; int addr_len = sizeof(struct sockaddr_in); void Bind(int port,int sock) // SOLO LATO SERVER { sai.sin_family = AF_INET; sai.sin_port = htons( (unsigned short) port ); sai.sin_addr.s_addr = INADDR_ANY; if( bind( sock, (struct sockaddr *)&sai, sizeof( struct sockaddr_in ) ) < 0 ) { perror( "Errore bind()" ); Close( sock ); } } void Listen(int sock) // SOLO LATO SERVER { if ( listen( sock, 5 ) < 0 ) { perror( "Errore: listen( sock, 5 )" ); Close( sock ); } } int Accept(int sock , char cliente[]) // SOLO LATO SERVER { int stream; stream = accept( sock, (struct sockaddr *)&client,&addr_len); if ( stream > 0 ) strcpy(cliente,(char *)inet_ntoa( client.sin_addr )); return(stream); } int Read(int socket, char buffer[], int len) { return recv(socket, buffer, len,0); } int Write(int socket, char buffer[], int len) { return send(socket, buffer, len,0); } void Sockend(void) { // Serve SOLO per WINDOWS: per compatibilità .. #ifdef WIN32 void win_fine(void); // prototipo win_fine(); #endif } // SEGUE Parte SOLO X WINDOWS #ifdef WIN32 void win_inizio(void) // Inizializzazione SOLO X WINDOWS // NON CHIAMARE da applicativi!!! // Gia' chiamata da Socket { // Parte aggiunta per winsock .... WORD wd; WSADATA ws; int esito; wd = MAKEWORD(1,1); esito = WSAStartup(wd, &ws); if ( esito != 0) printf("Attenzione, win_inizio() : esito [%d]=",esito); } void win_fine(void) // Chiusura: solo per windows // NON CHIAMARE da applicativi!!! // Gia' chiamata da Sockend(); { int esito = WSACleanup(); if ( esito != 0 ) printf("Attenzione, win_fine() : esito [%d]=",esito); } #endif // fine parte SOLO PER WINDOWS /*-----Segue esempio Client/server/myapache----------*/ /***************************************************************/ /* CLIent ESempio: CLIES.C: client esempio */ // Ultima modifica 4 febbraio 2003 // CLIENT Esempio: invia una stringa "Ci sei???\n" ad il server e // legge il messaggio di risposta dal server, mostrandolo su // standard output (schermo) // Richiede all'utente l'ip o il name del server ed il Numero di porta // da usarsi per lo scambio. // Provare con server /***************************************************************/ #include "sock.h" // Attenzione: le chiamate di sistema Virtuali // Hanno la prima lettera Maiuscola // Es. Socket() invece di socket(), Write() invece di write(), etc... #define LMAX 1024 int sock; int port; int msg_len; char server[LMAX], buffer[LMAX]; void parametri(void) { char invio; printf("Porta tcp-ip ->"); scanf("%d%c",&port,&invio); printf("Server con cui connettersi ->"); gets(server); } void connetti(void) { sock = Socket(); Connect(sock,port,server); } int main(void) { int i; printf("Sono il client!\n"); parametri(); connetti(); // comunicazione client/server //...... Invio dati o richiesta strcpy(buffer,"Ci Sei???\n"); Write(sock,buffer,strlen(buffer)); // Invio al server la richiesta for (i = 0; i < LMAX; i++) buffer[i] = '\0'; // Svuoto il buffer... msg_len = Read( sock, buffer,LMAX ); // leggo dal server la risposta... printf("Ricevuto messaggio ->%slungo [%d] byte\n",buffer,msg_len); // .. e la stampo su schermo... printf("Premi invio..."); getchar(); Close( sock ); Sockend(); // fine uso socket... return 0; } /***************************************************************/ /*SERver ESempio SERVES.C (da usarsi con clies.c) */ // Ultima modifica 4 febbraio 2003 // riceve una stringa dal client e rimanda al client un messaggio // stampando sullo schermo sia la stringa ricevuta che l'ip di // provenienza del client. // Richiede all'utente solo il Numero di porta // da usarsi per lo scambio. // Provare con client.c /***************************************************************/ #include "sock.h" // Attenzione: le chiamate di sistema Virtuali // Hanno la prima lettera Maiuscola // Es. Socket() invece di socket(), Write() invece di write(), etc... int sock, newsock; int port; int msg_len; #define LMAX 1024 char buffer[LMAX]; char messaggio[LMAX]; void parametri(void) { char invio; printf("Porta tcp-ip ->"); scanf("%d%c",&port,&invio); printf("Messaggio da inviare al client ? ->"); gets(messaggio); } void prepara(void) { sock = Socket(); Bind(port,sock); Listen(sock); } int main(void) { #define MAX 256 char cliente[MAX]; int i; printf("Sono il SERVER !!\n"); parametri(); prepara(); // comunicazione client/server do // Il server e' sempre attivo... { newsock = Accept(sock,cliente); if ( newsock > 0) // Mi e' arrivata una richiesta... { printf("Richiesta da [%s]\n",cliente); fflush(stdout); for ( i = 0; i < LMAX; i++) buffer[i] = '\0'; // svuoto buffer msg_len = Read(newsock,buffer,LMAX); // ho letto il msg dal client... if (msg_len > 0) { printf("Letto da messaggio ->%slungo [%d] byte\n",buffer,msg_len); Write(newsock,messaggio,strlen(messaggio)); // .. e gli ho risposto! } Close( newsock ); } } while(1); // Sempre attivo // .. qui il programma NON ci arriva, ma le istruzioni seguenti // andrebbero fatte, nel caso di un server che termina... Close( sock ); Sockend(); // Fine uso socket return 0; } /***************************************************************/ /*SERver ESempio myapache.C */ // Ultima modifica 23 gennaio 2004 // Nuovo server web ....con sock.h - Usare Close() per Closesocket /***************************************************************/ #include "sock.h" #include <string.h> // Attenzione: le chiamate di sistema Virtuali // Hanno la prima lettera Maiuscola // Es. Socket() invece di socket(), Write() invece di write(), etc... int sock, newsock; int port = 80; // Cambia porta se già attivo l'apache o altro ... int msg_len; #define LMAX 65535 // lungh. massima pagina HTML o immagine .... #define MAX 1024 // lungh. max stringa char buffer[LMAX]; char messaggio[LMAX]; void prepara(void) { sock = Socket(); Bind(port,sock); Listen(sock); } int servi_client(int link) { int msg_len; char *errore = /** NON serve Content type!!! */ "<HTML> <H1> <BR> Errore, myapache: link NON valido! <BR> </HTML>"; if ((msg_len = Read(link,buffer,LMAX)) > 0) /* se il client invia almeno 1 byte ... */ { FILE *fd; int i =0; char nomefile[MAX]; char *inizio, *fine; puts("Ricevuto messaggio:"); fflush(stdout); write(1,buffer,msg_len); /* scrive su output standard ...*/ inizio = strstr(buffer,"GET "); // Richiesta GET del browser remoto fine = strstr(buffer,"HTTP"); // Pesco il nome del file richiesto for ( inizio+=5, i = 0; inizio && fine && inizio < fine-1 && i < 255; inizio++,i++) { nomefile[i]=*inizio; } nomefile[i] = 0; printf("\n\nmyapache: Richiesto:[%s]\n",nomefile); if (strcmp(nomefile,"") == 0) { strcpy(nomefile,"index.html"); /* richiesta base */ printf("\nmyapache risponde inviando il file: [%s]\n",nomefile); } if ((fd = fopen(nomefile,"rb")) == NULL) // NON dimenticare parametro b { Write(link,errore,strlen(errore)); return(1); } if ((msg_len = fread(buffer,1,LMAX,fd)) <=0) { Write(link,errore,strlen(errore)); } else { // write(1,buffer,msg_len); scrivo sull'output, se voglio debug if (Write(link,buffer,msg_len) < 0) { perror("errore scrittura messaggio"); exit(-1); } Close(newsock); // printf("\n\n\nFINE INVIO!!!\n\n\n"); per debug } fclose(fd); } return(0); } int main() { char cliente[MAX]; printf("SERVER WEB Ultra semplificato, ma rapido (myapache.c) !!\n"); printf("Compatibile Windows/Linux!!!\n"); printf("(Max dimensione pagina o immagine o file: 64Kbytes)\n"); prepara(); // comunicazione client/server do // Il server e' sempre attivo... { newsock = Accept(sock,cliente); if ( newsock > 0) // Mi e' arrivata una richiesta... { printf("Richiesta da [%s]\n",cliente); fflush(stdout); servi_client(newsock); // servi il client } } while(1); // Sempre attivo // .. qui il programma NON ci arriva, ma le istruzioni seguenti // andrebbero fatte, nel caso di un server che termina... Close( sock ); Sockend(); // Fine uso socket return 0; } /*---------------------FINE--------------------------*/ </TEXTAREA> </td> <tr> <td> <FONT FACE="Arial"> <h3><i> Calendar.c - Calendario perpetuo</i> </h3> <table border=0> <TEXTAREA NAME="Calendar" ROWS=20 COLS=120> #include <stdio.h> #include <string.h> // calendar.c written by martin for 59.102 July 1999 // verson 1.1 multiple columns int leapyear(int year) { // is year a leap year? // the rule for leap years is that a year is a leap year if it // is divisible by four but not by 100 or it is divisible by 400 if(((year%4==0) && (year%100!=0)) || (year%400==0)) return 1; else return 0; } int daysinmonth(int year, int month) { // Thirty days hath September, April, June, and November; // All the rest have thirty-one // Excepting February alone: Which hath but twenty-eight, in fine, // Till leap year gives it twenty-nine. int monthlengths[]={31,28,31,30,31,30,31,31,30,31,30,31}; if ((month==1) && leapyear(year)) return 29; else return monthlengths[month]; } int printmonth(char s[8][32],int year, int month, int firstday) { // print a complete month into the string s // firstday gives the number for the first day of the month (0 is sunday) char *monthnames[]={"January","February"," March"," April"," May"," June"," July","August","September","October","November","December"}; int i; sprintf(s[0]," %-8s ",monthnames[month]); // print month name sprintf(s[1]," Su Mo Tu We Th Fr Sa "); // print day heading for(i=2;i<8;i++) strcpy(s[i]," "); // blank week for(i=0;i<daysinmonth(year,month);i++) { sprintf(s[(i+firstday)/7+2]+(i+firstday)%7*3+2,"%2d",i+1); // print day no s[(i+firstday)/7+2][(i+firstday)%7*3+4]=' '; // remove string termimator } return (firstday+i)%7; } int main(int argc,char *argv[]) { int i,j,k; int day; int year=2006; char months[3][8][32]; // array to store three months if(argc==2) sscanf(argv[1],"%d",&year); else { printf("What year would you like a calendar for? "); scanf("%d",&year); } // work out what day of the week the first day of the year is // add no of leap years to 365*(year-1) day=((year-1)*365+(year-1)/4+(year-1)/400-(year-1)/100+1)%7; // print title printf("\n Calendar for %d\n\n",year); for(j=0;j<4;j++) { // print 4 rows of months for(i=0;i<3;i++) // print months into the array day=printmonth(months[i],year,i+j*3,day); for(i=0;i<8;i++) { // print all 8 rows for(k=0;k<3;k++) // of three months from the array printf(months[k][i]); puts(""); // return at end of line } } return 0; // success } /*---------------------FINE--------------------------*/ </TEXTAREA> </td> <tr> <td> <FONT FACE="Arial"> <h3><i> Pesco i nomi di file in una cartella (solo Windows) </i> </h3> <table border=0> <TEXTAREA NAME="EsempiC" ROWS=20 COLS=80> /* Programma C: dir.c Scritto da: F. Sacco Descrizione: lista file cartella (SOLO WINDOWS!!!) */ #include <stdio.h> #include <dir.h> /******************** definite in io.h struct _finddata_t { unsigned attrib; * Attributes, see constants above. * time_t time_create; time_t time_access; * always midnight local time * time_t time_write; _fsize_t size; char name[FILENAME_MAX]; * may include spaces. * }; int _findfirst (const char* szFilespec, struct _finddata_t* find); int _findnext (int nHandle, struct _finddata_t* find); int _findclose (int nHandle); int _chdir (const char* szPath); char* _getcwd (char* caBuffer, int nBufferSize); int _mkdir (const char* szPath); char* _mktemp (char* szTemplate); int _rmdir (const char* szPath); *****************/ void mydir(char *path) // lista la cartella { struct _finddata_t ff; int handle; printf("Lista dei file *.*\n"); handle = _findfirst(path,&ff); //printf("Handle = %d\n",handle); while (_findnext(handle,&ff)!= -1) { printf(" %s\n", ff.name); } return; } int main() { char w[256]; printf("Cartella e file da listare [esempio C:\\*.*] ->"); gets(w); mydir(w); return 0; } /*---------------------FINE--------------------------*/ </TEXTAREA> </td> <tr> <td> <FONT FACE="Arial"> <h3><i>Generatore di password data la partenza (X Smemorati!!!)</i> </h3> <table border=0> <TEXTAREA NAME="passwd" ROWS=20 COLS=100> /* Programma C: paswd-html.c Scritto da: F. Sacco Genera una serie di password con una sola password... */ #include <stdio.h> #include <ctype.h> char paswd[128]; char *password(char paswd[]) { int i; int c; static long base=0x12345678; int len = strlen(paswd); for (i=0; i<len; i++) { paswd[i]=(long)paswd[i] ^ base; base--; c = paswd[i]; while(!(isalpha(c) || isalnum(c))) { paswd[i]=(long)paswd[i] ^ base; base--; c = paswd[i]; if (c <'A' || c > 'z') c=0; } } return(paswd); } int main() { int i,quante; FILE *fd; if ((fd = fopen("password.html","w"))==0) printf("\nERRORE: non riesco ad aprire in scrittura il file password.html\n\7\nPremi INVIO..."),getchar(),exit(0); printf("Password di base --->"); gets(paswd); printf("Quante password genero ?--->"); scanf("%d",&quante); fprintf(fd,"<html><body><table border=1><tr><th>Numero</th><th>Password</th><tr>\n"); for (i=0; i < quante; i++) { fprintf(fd,"<td>%3d</td><td>%s</td><tr>\n",i+1,password(paswd)); } fclose(fd); fprintf(fd,"\n</table></html>"); printf("\nFile password.html creato con successo!\nAttendere visualizzazione con browser..."); system("explorer password.html"); return 0; } /*---------------------FINE--------------------------*/ </TEXTAREA> </td> <tr> <td> <FONT FACE="Arial"> <h3><i>Reti.c / Capire meglio le reti tcp/ip</i> </h3> <table border=0> <TEXTAREA NAME="EsempiC" ROWS=20 COLS=100> /* Programma C: reti.c Scritto da: F. Sacco */ // reti.c : per capire il TCP/IP aprile 2004 // Funziona anche sotto Linux (29 apr. 2004) #include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h> char *version = "Reti.c, by F.Sacco - versione 5/5/2004\n"; #define gets(s) { fgets(s,sizeof(s)-1,stdin); s[strlen(s)-1]='\0'; } // funzione pericolosa ... typedef unsigned char BYTE; #define LUN 4 // ipv4 #define LSTR 128 union myip { BYTE decimale[LUN]; // notazione decimale puntata unsigned long l; // notazione long }; typedef union myip MYIP; typedef int BOOLEAN; #define TRUE 1 #define FALSE 0 struct rete { MYIP ip; MYIP netmask; }; typedef struct rete RETE; RETE dieci, unonovedue, unosettedue; // Reti private 10.*, 192.168.*, 172.16.* // inizio funzioni.... void binario(FILE *fd,BYTE b) // stampa in binario { int i; for (i=0; i < 8; i++, b<<=1) (b&128) ? putc('1',fd) : putc('0',fd); } void stampa_binario(FILE *fd,MYIP ip) { int i; for (i=0; i < LUN; i++) { binario(fd,ip.decimale[i]); if ( i != LUN -1) putc('.',fd); } } unsigned long atoip(char *strip) // data la stringa "001.002.003.004" // mi ritorna il valore in long { MYIP ip; int i = 0; char *p; strcat(strip,"."); // un punto in piu' ... while((p = strchr(strip,'.')) != NULL && i < LUN) if (p) { *p =0; ip.decimale[i++] = atoi(strip); strip = p+1; } return ip.l; } char *iptoa(MYIP ip) { static char buf[LSTR]; buf[0]='\0'; // pulizia sprintf(buf,"%3d.%3d.%3d.%3d",ip.decimale[0],ip.decimale[1],ip.decimale[2],ip.decimale[3]); return buf; } unsigned rete_del_nodo(MYIP ip, RETE r) // ritorna la rete a cui appartiene il nodo, secondo la netmask di R { return ip.l & r.netmask.l; } BOOLEAN appartiene(MYIP ip, RETE r) // verifica se il nodo "ip" appartiene alla rete "r" { //int i; //for (i = 0; i < LUN; i++) // ip.decimale[i] &= r.netmask.decimale[i]; //printf("Rete [%ld]\n",r.ip.l); //printf("ip & netmask [%ld]\n",(ip.l & r.netmask.l)); //printf("netmask [%ld]\n",r.netmask.l); //printf("ip [%ld]\n",ip.l); return (ip.l & r.netmask.l) == r.ip.l; // vero se ip AND netmask == rete } MYIP indirizzo_del_nodo(MYIP ip, RETE r) // ritorna l'indirizzo relativo al nodo, es. 0.0.0.253 su rete 255.255.255.0 { MYIP dep; dep.l = (ip.l & ~r.netmask.l); // indirizzo di rete AND (not(netmask)) return dep; } MYIP indirizzo_broadcast(RETE r) // ritorna l'indirizzo relativo al broadcast: es 192.168.64.0/24 = 192.168.64.255 { MYIP dep; dep.l = (r.ip.l | ~r.netmask.l); // indirizzo di rete OR (not(netmask)) return dep; } long inverse(long l) // capotta un long!!! { long dep; char *pl = (char *)&l; char *pdep = (char *)&dep; int i=4; pdep+=3; while(i--) *pdep-- = *pl++; return dep; } void print_rete(RETE r, int maxnodi) // stampa la rete, mi fermo a maxnodi ... { int i; MYIP broadcast; BOOLEAN fine = FALSE; broadcast = indirizzo_broadcast(r); for (i=0; i < maxnodi && !fine; i++) { printf("[%s]\n",iptoa(r.ip)); r.ip.l = inverse(r.ip.l); // LA RAPPRESENTAZIONE IN ram DEL LONG ... E' INVERTITA r.ip.l++; r.ip.l = inverse(r.ip.l); if (r.ip.l == broadcast.l) fine = TRUE; } } MYIP primo_nodo(RETE r) // calcola il primo nodo di rete { MYIP n = r.ip; n.l = inverse(n.l); // LA RAPPRESENTAZIONE IN ram DEL LONG ... E' INVERTITA n.l++; n.l = inverse(n.l); return n; } MYIP ultimo_nodo(RETE r) // calcola l'ultimo nodo di rete { MYIP n = indirizzo_broadcast(r); n.l = inverse(n.l); // LA RAPPRESENTAZIONE IN ram DEL LONG ... E' INVERTITA n.l--; n.l = inverse(n.l); return n; } long numero_nodi(RETE r) { MYIP primo,ultimo; primo = primo_nodo(r); ultimo = ultimo_nodo(r); return (inverse(ultimo.l) - inverse(primo.l))+1; } void visrete(RETE r) { MYIP dep; printf("Indirizzo di rete [%s] [",iptoa(r.ip)); stampa_binario(stdout,r.ip); putchar('\n'); printf("Netmask [%s] [",iptoa(r.netmask)); stampa_binario(stdout,r.netmask); putchar('\n'); dep = indirizzo_broadcast(r); printf("Broacast [%s] [",iptoa(dep)); stampa_binario(stdout,dep); putchar('\n'); dep = primo_nodo(r); printf("Primo ip libero [%s] [",iptoa(dep)); stampa_binario(stdout,dep); putchar('\n'); dep = ultimo_nodo(r); printf("Ultimo ip libero [%s] [",iptoa(dep)); stampa_binario(stdout,dep); putchar('\n'); printf("Numero nodi rete [%ld]\n",numero_nodi(r)); } void print_html(FILE *fd, RETE r, int n, int bit) // scrive su file HTML le informazioni relative ad una rete ... { char s[LSTR]; unsigned long l; MYIP dep; fprintf(fd,"\n<br>"); fprintf(fd,"<table border=1>\n"); strcpy(s,iptoa(r.netmask)); fprintf(fd,"<th>[Rete N. %d] <br> %s/%s</th>\n",n,iptoa(r.ip),s); fprintf(fd,"<th>Decimale</th><th>Binario</th><tr>\n"); fprintf(fd,"<td>Indirizzo di rete </td> <td>%s</td>",iptoa(r.ip)); fprintf(fd,"<td>"); stampa_binario(fd,r.ip); fprintf(fd,"</td><tr>\n"); // 1a riga fprintf(fd,"<td>Netmask</td><td>%s</td>",iptoa(r.netmask)); fprintf(fd,"<td>"); stampa_binario(fd,r.netmask); fprintf(fd,"</td><tr>\n"); // 2a riga dep = indirizzo_broadcast(r); fprintf(fd,"<td>Broacast</td><td>%s</td>",iptoa(dep)); fprintf(fd,"<td>"); stampa_binario(fd,dep); fprintf(fd,"</td><tr>\n"); // 3a riga dep = primo_nodo(r); fprintf(fd,"<td>Primo ip libero</td><td>%s</td>",iptoa(dep)); fprintf(fd,"<td>"); stampa_binario(fd,dep); fprintf(fd,"</td><tr>\n"); // 3a riga dep = ultimo_nodo(r); fprintf(fd,"<td>Ultimo ip libero</td><td>%s</td>",iptoa(dep)); fprintf(fd,"<td>"); stampa_binario(fd,dep); fprintf(fd,"</td><tr>\n"); // 3a riga l = numero_nodi(r); fprintf(fd,"<tr><tr><th>Nodi liberi di rete</th><th>Nodi totali di rete</th>\n"); if (bit > 0) fprintf(fd,"<th>Bit X Nodo</th><tr>\n"); fprintf(fd,"<td>%ld</td><td>%ld</td>",l,l+2); if (bit > 0) fprintf(fd,"<td>%d</td><tr>\n",bit); fprintf(fd,"</table>\n"); } FILE *apri_html(RETE r) { FILE *fd=NULL; char s[LSTR]; printf("\nNome del file da generare [INVIO=rete.html] ->"); gets(s); if (s[0] == '\0') // invio strcpy(s,"rete.html"); fd = fopen(s,"w"); if (fd == NULL) { printf("Non riesco a creare il file [%s]\n",s); return fd; } strcpy(s,iptoa(r.netmask)); fprintf(fd,"<html><head><title>Rete %s/%s</title></head>\n",iptoa(r.ip),s); fprintf(fd,"<body>\n"); return fd; } void chiudi_html(FILE *fd) { fprintf(fd,"</body>\n</html>\n"); } // Parte relativa alle sottoreti ... 14 apr 2004 BYTE inv_byte(BYTE b) // inverte i bit da dx a sx -> da sx a dx { BYTE app=0; int i = 8; int p = 128; while(i--) { if ( b & 1) app+=p; b>>=1; p/=2; } return app; } RETE crea_net_mask(RETE r, int uni) // data una rete che parte da r.ip, viene calcolata ed inserita una netmask con // "uni" numero di uni (es 24 uni = 255.255.255.0) { unsigned long primobit = 1; int i; uni = 32 - uni; r.netmask.l=0; // azzerata while(uni--) // limito la netmask { r.netmask.l |= primobit; primobit<<=1; } for (i=0; i < LUN; i++) // LUN = 4 r.netmask.decimale[i] = inv_byte(r.netmask.decimale[i]); // bit riempiti al contrario return r; } int bit_per_nodi(unsigned long nodi) // ritorna quanti bit servono per "nodi" nodi. es 1024 nodi= 10 bit { unsigned long pot=1; int n = 0; do { ++n; pot=pot*2; } while(pot < nodi); return n; } unsigned long prox_potenza(unsigned long num) // ritorna la prossima potenza di due // maggiore o uguale a num { unsigned long pot=1; int n = 0; do { ++n; pot=pot*2; } while(pot < num); return pot; } RETE pianifica_sottoreti(RETE r) // modifica 21 aprile 2004 { unsigned long sottoreti; unsigned long nodi; int bit; char invio; int i; unsigned long l; RETE app; FILE *fd; //char s[128]; printf("Quante sottoreti prevedi ? ->"); scanf("%ld%c",&sottoreti,&invio); printf("Quanti nodi per sottorete ? ->"); scanf("%ld%c",&nodi,&invio); l = nodi; // Numero di gradi di libertà bit = bit_per_nodi(l); //printf("Bit occorrenti = %d\n",bit); getchar(); app = crea_net_mask(r,bit); fd = apri_html(r); for (i=0; i < (int) sottoreti; i++) { //printf("\nRete N. %6d\n",i+1); decommenta se visrete() print_html(fd,app,i+1,bit); //visrete(app); decommenta se vuoi vedere a video app.ip.l = inverse(app.ip.l); app.ip.l+=prox_potenza(nodi); // prossima potenza di due //printf("[Prox pot [%ld] di [%ld]\n",prox_potenza(nodi),nodi); //getchar(); app.ip.l = inverse(app.ip.l); //getchar(); decommenta se decommenti visrete() } chiudi_html(fd); return r; } void menu() { RETE r; MYIP ip, nodo; int scelta,n; char invio; char s[LSTR]; do { printf("\n\n\n\n\%s\n\n",version); printf("1) Immetti la rete\n"); printf("2) Immetti la netmask\n"); printf("3) Verifica se un ip appartiene alla rete\n"); printf("4) Visualizza dati relativi alla rete\n"); printf("5) Visualizza l'elenco dei nodi della rete\n"); printf("6) Genera tabulato html\n"); printf("7) Scegli una rete privata\n"); printf("8) Pianificazione sottoreti e generazione tabulato HTML\n"); printf("0) Uscita dal programma\n"); scanf("%d%c",&scelta,&invio); switch(scelta) { case 1: printf("Indirizzo di rete (esempio 192.168.64.0 ) ->"); gets(s); r.ip.l = atoip(s); putchar('\n'); stampa_binario(stdout,r.ip); putchar('\n'); printf("%s\n",iptoa(r.ip)); break; case 2: printf("Netmask (esempio 255.255.240.0 ) ->"); gets(s); r.netmask.l = atoip(s); putchar('\n'); stampa_binario(stdout,r.netmask); putchar('\n'); printf("%s\n",iptoa(r.netmask)); break; case 3: printf("Indirizzo da verificare (esempio 192.168.57.132) ->"); gets(s); ip.l = atoip(s); nodo.l = rete_del_nodo(ip,r); printf("Rete di appartenenza [%s]\n",iptoa(nodo)); printf("Il nodo "); appartiene(ip,r) ? printf("appartiene\n") : printf("non appartiene\n"); break; case 4: // visualizzazione dati rete visrete(r); break; case 5: printf("Quanti nodi vuoi vedere della rete ? ->"); scanf("%d%c",&n,&invio); print_rete(r,n); break; case 6: { FILE *fd; fd = apri_html(r); print_html(fd,r,1,0); chiudi_html(fd); } break; case 7: printf("quale rete (A=10.*/24), (B=172.16.*/16) (C=192.168.*/16) ->"); gets(s); if (toupper(s[0])== 'B') r=unosettedue; else if(toupper(s[0]) == 'C') r=unonovedue; else r=dieci; break; case 8: pianifica_sottoreti(r); break; } } while(scelta != 0); } // Perte per il calcolo delle sottoreti 14 Aprile 2004 void inizializza_reti_private(void) { char w[128]; strcpy(w,"10.0.0.0"); dieci.ip.l = atoip(w); strcpy(w,"255.0.0.0"); dieci.netmask.l = atoip(w); // CLASSE A 10.*/24 strcpy(w,"172.16.0.0"); unosettedue.ip.l = atoip(w); strcpy(w,"255.255.0.0"); unosettedue.netmask.l = atoip(w); // CLASSE B 172.16.*/16 strcpy(w,"192.168.0.0"); unonovedue.ip.l = atoip(w); strcpy(w,"255.255.0.0"); unonovedue.netmask.l = atoip(w); // CLASSE C 192.168.*/16 } int main() { inizializza_reti_private(); menu(); return 0; } /*---------------------FINE--------------------------*/ </TEXTAREA> </td> <tr> <td> <FONT FACE="Arial"> <h3><i> Ordinamenti ingenui e confronto tempi con quicksort di sistema</i> </h3> <table border=0> <TEXTAREA NAME="sort" ROWS=20 COLS=80> /// ORDINAMENTI: VERSIONE IN C .- 1 ott 2009: per provare i tempi di ordinamento /// Contiene 3 algoritmi di ordinamento (di complessità n^2 ): per scambio, per selezione e per tabella /// Contiene anche il richiamo alla funzione di sistema qsort() #include <stdio.h> #include <conio.h> #include <stdlib.h> #include <time.h> int limite; #define MAX 1000000 // limite max vettore: 1 milione di interi int v[MAX]; void RANDOMIZE() { time_t t; srand((unsigned) time(&t)); } int random(int n) { return rand() % n; } void pulisci() { int i; for (i=0; i < 25; i++) printf("\n"); } #define randomize RANDOMIZE() // chiamata "randomize;" in borland C #define clrscr pulisci int scelta (void) // { int sc; // scelta utente clrscr(); printf("1) Dimensionamento vettore\n"); printf("2) Riempimento vettore \n"); printf("3) Stampa vettore \n"); printf("4) Ordinamento X scambio ------> (n^2)\n"); printf("5) Ordinamento X selezione ----> (n^2)\n"); printf("6) Ordinamento X tabella ------> (n^2)\n"); printf("7) Ordinamento con QuickSort --> (n*log(n))\n"); printf("8) Esci ..."); scanf("%d",&sc); return sc; } void scambia (int v[], int i, int j) { int tmp=v[i]; v[i]=v[j]; v[j]=tmp; } //======================================================= /*Algoritmo di Ordinamento per Selezione (select sort)*/ void SelectSort(int v[], int n) { int min,i,j; for (i=0; i<n-1; i++) { min=i; for (j=i+1; j<n; j++) if (v[j]<v[min]) min=j; if (min!=i) scambia(v,i,min); } } //======================================================= /*Algoritmo di insert sort [tabella]*/ void InsertSort(int v[], int n) { int tmp; // appoggio int i,j; for (i=1; i<n; i++) { tmp=v[i]; j=i-1; while (j>=0 && v[j]>tmp) { v[j+1]=v[j]; j--; } v[j+1]=tmp; } } //======================================================= /*Algoritmo di Ordinamento per Scambio:BubbleSort*/ void BubbleSort(int v[], int n) { int ordinato,i; do { ordinato =1; // booleano for (i=0; i < n-1; i++) if (v[i] > v[i+1]) { scambia(v,i,i+1); ordinato=0; } } while (!ordinato); } void dimensionamento() { printf("Quanti elementi vuoi nel vettore ...."); scanf("%d",&limite); } void riempimento(int v[], int n) { int i; int valmax; printf("Valore Massimo generato da random() ->"); scanf("%d",&valmax); for (i = 0; i < n; i++) v[i] = random(valmax) +1; } void stampa() { int i; int ancora = 1; // ancora == 1 significa continuo a stampare for (i=0; i < limite && ancora; i++) { printf("v[ %d] = %d\n",i,v[i]); if ((i+1) % 20 == 0 ) // ogni 20 stampati ... chiedo se continuare { printf("Ancora [0=no, 1=si] ->"); scanf("%d",&ancora); } } printf("Premi INVIO ..."); getchar(); getchar(); } void tasto(char msg[],int tempo) // se tempo = SI, visualizzo anche il tempo { static time_t vecchio; static time_t nuovo; // per contare la differenza di tempo... static int primavolta = 1; // booleano nuovo = time(NULL); if ( primavolta ) { primavolta=0; vecchio = nuovo; } printf("%s",msg); if (tempo) printf(" (Tempo trascorso in secondi:) %10.2lf - Elementi ordinati: %d " ,difftime(nuovo,vecchio), limite); else printf("\nPremi INVIO PER FAR PARTIRE L'ALGORITMO SCELTO ED IL CRONOMETRO..."); vecchio = nuovo; getchar(); getchar(); printf("\n Sto ordinando, attendere ....\n"); } //======================================================= /*Ordinamento (funzione di liberira standard C qsort() */ int confronto( const void *i, const void *j) // serve per qsort { return *((int*) i) - *((int*)j); } void QuickSort(int v[], int n) { qsort((void *)v, n, sizeof(int), confronto); } int main(void) { int sc; randomize; // va fatto 1 sola volta do { sc = scelta(); switch(sc) { case 1: dimensionamento(); break; case 2: riempimento(v,limite); break; case 3: stampa(); break; case 4: tasto("Inizializzo tempo !",0); BubbleSort(v,limite); tasto("\nFine BubbleSort()\n\7",1); break; case 5: tasto("Inizializzo tempo !",0); SelectSort(v,limite); tasto("\nFine SelectSort()\n\7",1); break; case 6: tasto("Inizializzo tempo !",0); InsertSort(v,limite); tasto("\nFine InsertSort()\n\7",1); break; case 7: tasto("Inizializzo tempo !",0); QuickSort(v,limite); tasto("\nFine QuickSort()\n\7",1); break; } // end switch } while(sc != 8); printf("\n\nFine programma\n"); return 1; } </TEXTAREA> <FONT FACE="Arial"> <h3><i> Nasconde file (.exe o .zip o altro) in immagine (.jpg o altro) </i> </h3> <table border=0> <TEXTAREA NAME="EsempiC" ROWS=20 COLS=80> /// F. Sacco - nasconde file compresso in immagine /// 27 ott 2014 #include <stdio.h> #define LMAX 80 void fatalerror(char msg[]) { printf("Errore apertura file [%s]\n\7",msg); exit(0); } void copiafile(FILE *in, FILE *out) { int c; while((c=getc(in))!=EOF) putc(c,out); } int main() { char nomefile[LMAX],invio; FILE *in, *out; printf("Nome file input immagine ->"); scanf("%s%c",nomefile,&invio); in=fopen(nomefile,"rb"); if (in == NULL) fatalerror(nomefile); printf("Nome file output (immagine) ->"); scanf("%s%c",nomefile,&invio); out=fopen(nomefile,"wb"); if (out == NULL) fatalerror(nomefile); copiafile(in,out); fclose(in); printf("Nome file dati (zip/7z) ->"); scanf("%s%c",nomefile,&invio); in=fopen(nomefile,"rb"); if (in == NULL) fatalerror(nomefile); copiafile(in,out); fclose(in); fclose(out); return 0; } /*---------------------FINE--------------------------*/ </TEXTAREA> <FONT FACE="Arial"> <h3><i> ricerca Dicotomica (in vettore ordinato) </i> </h3> <table border=0> <TEXTAREA NAME="EsempiC" ROWS=20 COLS=80> /// F. Sacco - ricerca Dicotomica (in vettore ordinato) /// 27 ott 2014 #define MAX 10 int vet[] = { -3, -1, 0, 5, 7, 9, 13 , 20, 46, 100}; /// Vettore gia' ordinato' int ricerca_dicotomica(int v[], int ricercato, int nelementi) { int mezzo, sinistra=0, destra=nelementi-1; while (sinistra <= destra) { mezzo=(sinistra+destra)/2; /// ricalcolo dell'elemento in mezzo all'intervallo if (ricercato > vet[mezzo]) sinistra = mezzo + 1; /// Ricerco fra i piu' grandi else if(ricercato < vet[mezzo]) destra = mezzo -1; /// Ricerco fra i piu' piccoli else /// vet[mezzo] == ricercato return(mezzo); /// ritorno la posizione dell'elemento uguale al ricercato } return -1; /// elemento NON trovato } </TEXTAREA> <FONT FACE="Arial"> <h3><i> Ordinamento e Scambio di stringhe </i> </h3> <table border=0> <TEXTAREA NAME="EsempiC" ROWS=20 COLS=80> /// F. Sacco - Ordinamento e Scambio di stringhe / senza limiti di lunghezza // da completare, con 3 scambi: fatti con malloc, new e carattere x carattere #include <stdio.h> #include <string.h> #define LMAX 256 #define LINEE 100 char vs[LINEE][LMAX+1]; void sporca() // se vs NON fosse pulito..... { int i,j; char c='A'; for (i=0; i < LINEE; i++) for (j=0; j < LMAX; j++) { vs[i][j]=c++; if (c > 'Z') c='A'; } } void stampa() { int i,j; for (i=0; i < LINEE; i++) printf("[%s]\n",vs[i]); } void scambio1(char s1[], char s2[]) { // con malloc e free } void scambio2(char s1[], char s2[]) { // con new e dispose } void scambio3(char s[], char t[]) // carattere x carattere { char dep; int i,ls=strlen(s), lt=strlen(t), lmax,lmin; lmax= ls > lt ? ls : lt; lmin= ls < lt ? ls : lt; for (i=0; i < lmin; i++) dep = s[i],s[i]=t[i], t[i]=dep; if (ls == lmin) // se s e' la + corta ora diventa la + lunga... { while( i < lmax) s[i]=t[i],i++; s[i]='\0'; t[lmin]='\0'; // t diventa la + corta } else // se t e' la + corta ora diventa la + lunga... { while( i < lmax) t[i]=s[i],i++; t[i]='\0'; s[lmin]='\0'; // s diventa la + corta } } void scambio4(char s[], char t[]) // con pointer, carattere x carattere { char *max=s, *min=t,dep; if ( strlen(s) < strlen(t) ) max=t,min=s; // max punta lla + lunga, min alla + corta for (; *min; min++,max++) dep=*min,*min=*max,*max=dep; // scambio fino alla lunghezza della + corta dep=*max; *max++='\0'; // chiudo la stringa + lunga (che ora e' la + corta) for(*min++=dep; *max; max++,min++) // copio il rimanente nella + corta (ora la + lunga) *min=*max; *min='\0'; // chiudo la + corta (ora la + lunga) } void ordina(int linee) { int i,j; for (i=0; i < linee-1; i++) for(j= i+1; j < linee; j++) if (strcmp(vs[i],vs[j]) > 0) //if (vs[i] > vs[j]) scambio4(vs[i],vs[j]); } int main() { int i=0,j; sporca(); stampa(); do { printf("Stringa->"); gets(vs[i]); i++; } while (i < LINEE && strlen(vs[i-1]) > 0); i--; ordina(i); for(j=0; j < i; j++) printf("[%s]\n",vs[j]); } </TEXTAREA> <tr><tr> <tr> <td> <FONT FACE="Arial"> <h3><i> mybyte4-raspberry.h </i> </h3> <table border=0> <TEXTAREA NAME="EsempiC" ROWS=20 COLS=80> /*** Header mybyte4-raspberry.h - Dovrebbe far funzionare su raspberry i programmi scritti con mybyte4.h ***/ #ifndef WIN32 /// se non siamo in Windows /// ... includo la libreria raspberry per controllo GPIO #include <wiringPi.h> /// Commenta in Windows #endif #include <stdio.h> #include <stdlib.h> // per atoi() #include <string.h> // per strlen() #include <time.h> unsigned char pin[8] = {0,3,4,5,6,26,27,25}; /// Pin della GPIO mappati nei bit della PARALLELA #define BYTE unsigned char // un carattere senza segno equivale ad un BYTE #define LEN 80 // lunghezza stringhe #define CICLO(X,N) for(X=0; X < N; X++) // ciclo semplificato #define GIVEIO() giveio() // accesso porte #ifdef WIN32 /// se siamo in Windows #define OUTPUT 1 /// non serve in raspberry #define INPUT 0 /// idem int wiringPiSetup() { printf("\nChiamato wiringPiSetup() - In Windows non faccio nulla!!!\n"); return 1; } int pinMode(int pin, int mode) { /// non faccio nulla in Windows } #endif void giveio() /// Versione Raspberry di giveio() { int i; if(wiringPiSetup() == -1) /// inizializza wiringPi { printf("WiringPi non installato!"); return; } for(i=0;i<8;i++){ //imposta gli 8 pin in output pinMode(pin[i], OUTPUT); } } #define PARALLDEB(valore) scrivibyte(valore) // debug parallela --> il valore va su schermo #ifdef WIN32 ///Se siamo in Windows /// ... simulo la DigitalWrite delle wiringPi... e la delay in windows... void digitalWrite(int pin, int valore) /// crea file html di debug { /// non serve in raspberry #define LOW 0 #define HIGH 1 int i; static FILE *fd=0; /// e' statico, lo apre solo la prima volta static int cont = 0; /// a 8 conta un Byte if (!fd) { fd = fopen("digitalWrite.html","w"); if (fd == 0) printf("Errore apertura file digitalWrite.txt"), exit(0); fprintf(fd,"<html><table border=1>\n"); for (i=0; i <8; i++) fprintf(fd,"<th>bit %d</th>",i); fprintf(fd,"<tr>\n"); } fprintf(fd,"<td>DigWrt(%d,%d)</td>",pin,valore); cont++; if (cont == 8) fprintf(fd,"<tr>\n"), cont=0; /// separo un Byte (8 bit) dal prossimo } void delay(unsigned int mseconds) /// non serve in raspberry, solo X Windows { clock_t goal = mseconds + clock(); while (goal > clock()); } #endif // WIN32 /***FINE PARTE PER WINDOWS ***/ void scrivibyte(BYTE b) // scrive un byte in binario / ricorsiva { int i; printf("\n "); for (i=0; i < 8; i++) { printf("%d",b % 2); b/=2; printf("\b\b"); // torno indietro di 2 caratteri } } /// ritardo di sistema in linux funziona bene e non salta delay() /// micro overclock 1GHz = 1 000 000 000 operazioni al secondo #define led_on(pin) digitalWrite(pin, HIGH) #define led_off(pin) digitalWrite(pin, LOW) void PARALL(unsigned char n) /// simula il PARALLEL() in windows { int i; if (n == 0) /// In windows PARALL(0) toglie tesnsione for(i = 0; i < 8; i++) led_off(pin[i]); else // accetto valori in binario { /// E' possibile fare il codice qui sotto con un ciclo, ma cosi' e' piu' leggibile... n & 1 ? led_on(pin[0]): led_off(pin[0]); n & 2 ? led_on(pin[1]): led_off(pin[1]); n & 4 ? led_on(pin[2]): led_off(pin[2]); n & 8 ? led_on(pin[3]): led_off(pin[3]); n & 16 ? led_on(pin[4]): led_off(pin[4]); n & 32 ? led_on(pin[5]): led_off(pin[5]); n & 64 ? led_on(pin[6]): led_off(pin[6]); n & 128 ? led_on(pin[7]): led_off(pin[7]); } #ifdef WIN32 return PARALLDEB(n); /// Se compilo da windows ... vado a schermo #endif // WIN32 } void pausa(int n) /// per compatibilita' con mybyte4.h { delay(n); } void leggistr(char str[]) // legge una stringa { fgets(str,LEN,stdin); str[strlen(str)-1] = '\0'; // metto il \0 anzichè il \n } BYTE binario(char str[]) // trasforma un stringa contenente un numero in binario in decimale { int somma = 0; int pot=1; int i; char c; for(i=strlen(str)-1; i>=0; i--) { c = str[i]; if (c == '0' || c == '1') { somma+= pot*(str[i]-'0'); pot*=2; } else { printf("\nfunzione binario() - il valore [%s] NON e' in binario\n",str); exit(0); } } return somma; } BYTE leggibyte(char modo) // legge un byte in 'D' -> decimale, 'B' -> binario { char stringa[LEN+2]; printf("digita un valore in "); if (modo == 'D') printf(" decimale ->"); else if (modo == 'B') printf(" binario ->"); else { printf("Errore chiamata funzione leggibyte()"); exit(0); }; leggistr(stringa); if (modo == 'D') return atoi(stringa); else return binario(stringa); } /*---------------------FINE--------------------------*/ </TEXTAREA> </td> <h5><i>(Vers. 23 Gen 2016)</i></h5> </body> </html> </body> </html>
///(Fine file: programmi-utili-C.html)

///File: programmi-utili-JavaScript.html
<html> <head> <body> <h1><hr>Programmi utili in JavaScript - (Aggiornato. 10 Feb. 2017)</h1> <br><br> <h3>Segui il <a href=http://tohtml.com/>link</A> se vuoi copiare in Office con colori evidenziati!!! </h3><hr> <FONT FACE="Arial"> <h3><i> Calcolatrice in JavaScript - Versione 1</i> </h3> <table border=0> <TEXTAREA NAME="EsempiJavascript" ROWS=20 COLS=100> <HTML> <HEAD> <TITLE>Linguaggio Java Script</TITLE> <SCRIPT LANGUAGE="JavaScript"> function div() { var a, b, c; a = parseInt(Calc.a.value); b = parseInt(Calc.b.value); c = a / b; Calc.c.value = String(c); } function diff() { var a, b, c; a = parseInt(Calc.a.value); b = parseInt(Calc.b.value); c = a - b; Calc.c.value = String(c); } function molt() { var a, b, c; a = parseInt(Calc.a.value); b = parseInt(Calc.b.value); c = a * b; Calc.c.value = String(c); } </SCRIPT> </HEAD> <BODY> <HR> <H1><CENTER>CALCOLATRICE 1</CENTER></H1> <HR> <FORM NAME="Calc"> <INPUT TYPE="TEXT" NAME="a" SIZE=10 MAXLENGTH=12 VALUE=0> <INPUT TYPE="TEXT" NAME="b" SIZE=10 MAXLENGTH=12 VALUE=0> <br><br> <INPUT TYPE="BUTTON" NAME="Sum" VALUE=" + " ONCLICK=somma()> <INPUT TYPE="BUTTON" NAME="Sub" VALUE=" - " ONCLICK=diff()> <INPUT TYPE="BUTTON" NAME="Per" VALUE=" * " ONCLICK=molt()> <INPUT TYPE="BUTTON" NAME="Div" VALUE=" / " ONCLICK=div()> <INPUT TYPE="TEXT" NAME="c" SIZE=10 MAXLENGTH=12 VALUE=0> <br><br> <INPUT TYPE="RESET" NAME="Sum" VALUE="Clear"> </FORM> </BODY> </HTML> </TEXTAREA> <tr> <td> <FONT FACE="Arial"> <h3><i> Calcolatrice in JavaScript - Versione 2 </i> </h3> <table border=0> <TEXTAREA NAME="EsempiJavascript" ROWS=20 COLS=100> <html> <head> <script language="javascript"> function moltiplica(opz) { if(opz == 1){ Calc.c.value=(Calc.a.value * 1) * (Calc.b.value * 1) }else if(opz == 2){ Calc.c.value=(Calc.a.value * 1) + (Calc.b.value * 1) }else if(opz == 3){ Calc.c.value=(Calc.a.value * 1) / (Calc.b.value * 1) }else if(opz == 4){ Calc.c.value=(Calc.a.value * 1) - (Calc.b.value * 1) } if(Calc.c.value == "Infinity"){ Calc.c.value = "Non si può dividere per 0"; } } </script> </head> <body> <form name="Calc"> <table border=3> <tr><td> <input type="text" name="a" size=30 maxlenght=12 value=0> </td><td> <input type="text" name="b" size=30 maxlenght=12 value=0> </td> <td><input type="text" name="c" size=30 maxlenght=12 value=0></td> </tr><tr><td> <input type="button" name="moltiplicazione" value=" x " OnClick=moltiplica(1)> <input type="button" name="moltiplicazione" value=" + " OnClick=moltiplica(2)> </td><td> <input type="button" name="moltiplicazione" value=" / " OnClick=moltiplica(3)> <input type="button" name="moltiplicazione" value=" - " OnClick=moltiplica(4)> </td></tr> <table> </form> </body> </html> </TEXTAREA> <tr> <td> <FONT FACE="Arial"> <h3><i> Calcolatrice 3 (con select) </i> </h3> <table border=0> <TEXTAREA NAME="EsempiJavascript" ROWS=20 COLS=100> <HTML> <HEAD> <TITLE>Linguaggio Java Script</TITLE> <SCRIPT LANGUAGE="JavaScript"> function oper() { var scelta; scelta=document.Calc.operazione.value; if(scelta == 1){ Calc.c.value=(Calc.a.value * 1) + (Calc.b.value *1); }else if(scelta == 2){ Calc.c.value=(Calc.a.value * 1) - (Calc.b.value); }else if(scelta == 3){ Calc.c.value=(Calc.a.value * 1) * (Calc.b.value); }else if(scelta == 4){ Calc.c.value=(Calc.a.value * 1) / (Calc.b.value); } } </SCRIPT> </HEAD> <BODY> <HR> <H1><CENTER>Calcolatrice</CENTER></H1> <HR> <FORM NAME="Calc" align=center> 1^ Numero: <INPUT TYPE="TEXT" NAME="a" value=0> <br> 2^ Numero: <INPUT TYPE="TEXT" NAME="b" value=0> <br> <br> Opzioni: <select name=operazione> <option value=1>Somma</option> <option value=2>Sottrazione</option> <option value=3>Moltiplicazione</option> <option value=4>Divisione</option> </select> <input type=button value="calcola" onclick="oper()"> <br> <br> Risultato: <INPUT TYPE="TEXT" NAME="c" value=0> <br> <INPUT TYPE="RESET" NAME="Sum" VALUE="Clear"> </FORM> </BODY> </HTML> </TEXTAREA> <tr> <td> <FONT FACE="Arial"> <h3><i> Calcolatrice 4 - con click / mousover su immagini <br>(occorrono 4 immagini di nome +.jpg, -.jpg, div.jpg e x.jpg)</i> </h3><br> <table border=0> <TEXTAREA NAME="EsempiJavascript" ROWS=20 COLS=100> <HTML> <HEAD> <TITLE>Linguaggio Java Script</TITLE> <SCRIPT LANGUAGE="JavaScript"> function somma() { var a, b, c; a = parseInt(Calc.a.value); b = parseInt(Calc.b.value); c = a + b; Calc.c.value = String(c); } function sottrazione() { var a, b, c; a = parseInt(Calc.a.value); b = parseInt(Calc.b.value); c = a - b; Calc.c.value = String(c); } function moltiplicazione() { var a, b, c; a = parseInt(Calc.a.value); b = parseInt(Calc.b.value); c = a * b; Calc.c.value = String(c); } function divisione() { var a, b, c; a = parseInt(Calc.a.value); b = parseInt(Calc.b.value); c = a / b; Calc.c.value = String(c); } </SCRIPT> </HEAD> <BODY> <HR> <H1><CENTER>Calcolatrice</CENTER></H1> <HR> <FORM NAME="Calc"> <INPUT TYPE="TEXT" NAME="a" SIZE=30 MAXLENGTH=12 VALUE=0> <INPUT TYPE="TEXT" NAME="b" SIZE=30 MAXLENGTH=12 VALUE=0> <IMG SRC="+.jpg" NAME="Sum" onClick="somma()"/> <IMG SRC="-.jpg" NAME="Sum" onClick="sottrazione()"/> <IMG SRC="x.jpg" NAME="Sum" onmouseover="moltiplicazione()"/> <IMG SRC="div.jpg" NAME="Sum" onmouseover="divisione()"/> <INPUT TYPE="TEXT" NAME="c" SIZE=30 MAXLENGTH=12 VALUE=0> <INPUT TYPE="RESET" NAME="Sum" VALUE="Clear"> </FORM> </BODY> </HTML> </TEXTAREA> <tr> <td> <FONT FACE="Arial"> <h3><i> Calcolatrice 5 - Simile a calcolatrice reale / Interessante e semplice!!! </i> </h3> <table border=0> <TEXTAREA NAME="EsempiJavascript" ROWS=20 COLS=100> <html> <head> <script language="javascript"> function cifra(n) { frmcalc.txt.value=frmcalc.txt.value+n; } function calcola() { frmcalc.txt.value=eval(frmcalc.txt.value); } function cancella() { frmcalc.txt.value=""; } </script> </head> <body> <form name=frmcalc> <input type=text name=txt> <br> <input type=button value=" 1 " onClick="cifra(1)"> <input type=button value=" 2 " onClick="cifra(2)"> <input type=button value=" 3 " onClick="cifra(3)"> <input type=button value=" + " onClick="cifra('+')"> <br> <input type=button value=" 4 " onClick="cifra(4)"> <input type=button value=" 5 " onClick="cifra(5)"> <input type=button value=" 6 " onClick="cifra(6)"> <input type=button value=" - " onClick="cifra('-')"> <br> <input type=button value=" 7 " onClick="cifra(7)"> <input type=button value=" 8 " onClick="cifra(8)"> <input type=button value=" 9 " onClick="cifra(9)"> <input type=button value=" / " onClick="cifra('/')"> <br> <input type=button value=" 0 " onClick="cifra(0)"> <input type=button value=" * " onClick="cifra('*')"> <input type=button value=" ( " onClick="cifra('(')"> <br> <input type=button value=" ) " onClick="cifra(')')"> <input type=button value=" = " onClick=calcola()> <input type=button value=" C " onClick=cancella()> <input type=button value=" . " onClick=cifra('.')> </form> </body> </html> </TEXTAREA> <tr> <td> <FONT FACE="Arial"> <h3><i> Calcolatrice 6 - Complessa (con mumeri primi/fattoriale e ...) </i> </h3> <table border=0> <TEXTAREA NAME="EsempiJavascript" ROWS=20 COLS=100> <HTML> <HEAD> <TITLE&gtA Simple calculator</TITLE> <script language = javascript> var oper="" var num ="" function displaynum(n) { document.form1.t1.value = document.form1.t1.value + n } function operator(op) { oper = op num= document.form1.t1.value document.form1.t1.value = "" } //code for equals starts here function equals() { doesthejob( eval(num) , eval(document.form1.t1.value ), oper) } //a sub-function of equals function doesthejob(n1,n2, op) { if (op == "+" ) document.form1.t1.value = n1 + n2 else if ( op == "-" ) document.form1.t1.value = n1- n2 else if (op == "*") document.form1.t1.value = n1 * n2 else if (op =="/") document.form1.t1.value = n1/n2 else if (op=="nCr" ) document.form1.t1.value = fact2(n1)/ fact2(n1 - n2) / fact2(n2) else if (op =="nPr") document.form1.t1.value = fact2(n1) / fact2(n1-n2) } //code for equals ends here function fact2(n) { // fact2() for nCr & nPr if (errorchecking(n) ==false) return var answer = 1 for (i = n; i >=2; i--){ answer = answer*i } return answer } function fact() { n = Number(document.form1.t1.value) if (errorchecking(n) ==false) return var answer = 1 for (i = n; i >=2; i--){ answer = answer*i } document.form1.t1.value = answer } function errorchecking(n) { if ( n < 0) { alert("Number shouldn't be negative" ) return false } var mod = n%1 if (!mod ==0) { alert("The number should be an integer" ) return false } } function prime(n) { if (errorchecking(n) == false) return var b = true for ( i = 2; i<= n/2; i ++ ) { if (n % i == 0 ) { document.form1.t1.value = "Not prime; its first divided by " + i b = false break } } if (b) document.form1.t1.value = "Is prime" } function negation() { document.form1.t1.value = document.form1.t1.value * -1 } function reset() { document.form1.t1.value = "" num = "" } </script> </HEAD> <BODY> <form name = form1> <CENTER><input type = text name = t1 value = "" size = 50><p> <input type = button value = " 1 " name = b1 onclick = displaynum(1)> <input type = button value = " 2 " name = b2 onclick = displaynum(2)> <input type = button value = " 3 " name = b3 onclick = displaynum(3)> <input type = button value = " + " name = bplus onclick = operator("+") ><br> <input type = button value = " 4 " name = b4 onclick = displaynum(4)> <input type = button value = " 5 " name = b5 onclick = displaynum(5)> <input type = button value = " 6 " name = b6 onclick = displaynum(6)> <input type = button value = " - " name = bminus onclick = operator("-") > <br> <input type = button value = " 7 " name = b7 onclick = displaynum(7)> <input type = button value = " 8 " name = b8 onclick = displaynum(8)> <input type = button value = " 9 " name = b9 onclick = displaynum(9)> <input type = button value = " * " name = bmultiply onclick = operator("*")> <br> <input type = button value = " . " name = bdot onclick = displaynum(".")> <input type = button value = " 0 " name = b0 onclick = displaynum(0)> <input type = button value = " = " name= bequal onclick = equals()> <input type = button value = " / " name = bdivide onclick = operator("/") > <br> <input type = button value = " -+ " name = bnegate onclick = negation()> <input type = button value = "clear" name = bclear onclick = reset()> <input type = button value = " ! " name = bfact onclick =fact() > <input type = button value = " nCr " name = bcombination onclick = operator("nCr")> <input type = button value = " nPr " name = bpermutation onclick = operator("nPr")><BR> <input type = button value = "Prime" name = bprime onclick = prime(t1.value) > </CENTER> </form> </BODY> </HTML> </TEXTAREA> <tr> <td> <FONT FACE="Arial"> <h3><i> Calcolatrice 7 - Molto complessa (+ di 500 linee di codice) </i> </h3> <table border=0> <TEXTAREA NAME="EsempiJavascript" ROWS=20 COLS=100> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>Scientific Calculator</title> <meta name="description" content="Javascript calculator with calculation history, math functions, hexadecimal, octal, and scientific notation."> <meta name="keywords" content="calculator, octal calculator, binary calculator, hexidecimal calculator, hexadecimal calculator, calc, calculate, calculater, scientific calculator, hex calculator, scientific notation calculator, javascript calculator, java script calculator, freeware calculator, free calculator, online calculator, calculater"> <link rel="shortcut icon" href="http://ostermiller.org/favicon.ico" type="image/x-icon"> <link rel="shortcut icon" href="http://ostermiller.org/calc/calculator.ico" type="image/x-icon"> <script language=javascript type="text/javascript"><!-- var last_result=''; var saved_result=''; var last_input=''; var last_printed='' var modifying_history=false; var history_index=1; var regex_HexDigit='(?:[0-9a-fA-F])'; var regex_Digit='(?:[0-9])'; var regex_OctalDigit='(?:[0-7])'; var regex_NonZeroDigit='(?:[1-9])'; var regex_Sign='(?:[\+]|[\-])'; var regex_DecimalNum='(?:(?:[0]|'+regex_NonZeroDigit+regex_Digit+'*))'; var regex_OctalNum='(?:[0]'+regex_OctalDigit+'*)'; var regex_HexNum='(?:[0](?:[x]|[X])'+regex_HexDigit+'+)'; var regex_SignedInt='(?:'+regex_Sign+'?'+regex_Digit+'+)'; var regex_Expo='(?:[e]|[E])'; var regex_ExponentPart='(?:'+regex_Expo+regex_SignedInt+')'; var regex_Float1='(?:'+regex_Digit+'+[\.]'+regex_Digit+'*'+regex_ExponentPart+'?)'; var regex_Float2='(?:[\.]'+regex_Digit+'+'+regex_ExponentPart+'?)'; var regex_Float3='(?:'+regex_Digit+'+'+regex_ExponentPart+')'; var regex_Float4='(?:'+regex_Digit+'+)'; var regex_Float='(?:'+regex_Float1+'|'+regex_Float2+'|'+regex_Float3+'|'+regex_Float4+')'; var regex_ZeroFloat1='(?:[0]+[\.][0]*'+regex_ExponentPart+'?)'; var regex_ZeroFloat2='(?:[\.][0]+'+regex_ExponentPart+'?)'; var regex_ZeroFloat3='(?:[0]+'+regex_ExponentPart+')'; var regex_ZeroFloat4='(?:[0]+)'; var regex_ZeroFloat='(?:'+regex_ZeroFloat1+'|'+regex_ZeroFloat2+'|'+regex_ZeroFloat3+'|'+regex_ZeroFloat4+')'; var regex_Space='(?:[\n\ \t])'; var regex_Operands='(?:[\(\)\+\-\/\*\|\&\,\~\^]|\<\<|\>\>|\>\>\>|\%)' var regex_MathStuff='(?:E|LN10|LN2|LOG10E|LOG2E|PI|SQRT1_2|SQRT2|abs|acos|asin|atan2|atan|ceil|cos|exp|floor|log|max|min|pow|random|round|sin|sqrt|tan)' var regex_Functions='(?:(?:Math[\.]'+regex_MathStuff+')|'+regex_MathStuff+')'; var regex_allowable=new RegExp( regex_HexNum+'|'+regex_OctalNum+'|'+regex_Float+'|'+regex_DecimalNum+'|'+ regex_ZeroFloat+'|'+regex_Space+'|'+regex_Operands+'|'+regex_Functions+'|ans','g' ); var E=Math.E; var LN10=Math.LN10; var LN2=Math.LN2; var LOG10E=Math.LOG10E; var LOG2E=Math.LOG2E; var PI=Math.PI; var SQRT1_2=Math.SQRT1_2; var SQRT2=Math.SQRT2; function abs(x){return Math.abs(x);} function acos(x){return Math.acos(x);} function asin(x){return Math.asin(x);} function atan(x){return Math.atan(x);} function atan2(x,y){return Math.atan2(x,y);} function ceil(x){return Math.ceil(x);} function cos(x){return Math.cos(x);} function exp(x){return Math.exp(x);} function floor(x){return Math.floor(x);} function log(x){return Math.log(x);} function max(x,y){return Math.max(x,y);} function min(x,y){return Math.min(x,y);} function pow(x,y){return Math.pow(x,y);} function random(){return Math.random();} function round(x){return Math.round(x);} function sin(x){return Math.sin(x);} function sqrt(x){return Math.sqrt(x);} function tan(x){return Math.tan(x);} function replace_binary(s){ var r=new RegExp("^((?:[a]|[^a])*)0[bB]([01]{1,32})((?:[a]|[^a])*)$"); while(r.exec(s)){ s=RegExp.$1+" "+from_bin(RegExp.$2)+" "+RegExp.$3; } return s; } function replace_ans(s){ var r=new RegExp("^((?:[a]|[^a])*)ans((?:[a]|[^a])*)$"); while(r.exec(s)){ s=RegExp.$1+" "+saved_result+" "+RegExp.$2; } return s; } function do_calculation(){ var current_calc=document.calculator.line.value; var mod_calc=replace_ans(current_calc); mod_calc=replace_binary(mod_calc); if(mod_calc!=last_printed&&mod_calc!=last_input&&!modifying_history){ var not_allowed=mod_calc.split(regex_allowable); var num_badTokens=0; for(var k=0;k<not_allowed.length;k++){ if(not_allowed[k].length!=0){ num_badTokens++; } } if(num_badTokens==0){ try{ var calc_result=''+eval(mod_calc); if(calc_result!=undefined){ last_result=calc_result; saved_result=calc_result; last_input=''; display_result(); add_toHistory(current_calc); save_calc(); } }catch(ex){ alert('Error type: '+ex.name+'\n'+'Error message: '+ex.message); last_input=document.calculator.line.value; } }else{ alert(num_badTokens+' unknown tokens:\n'+not_allowed); last_input=document.calculator.line.value; } document.calculator.line.focus(); } } function line_change(){ if(last_printed!=document.calculator.line.value){ last_result=''; } } function display_result(){ if(last_result!=''){ var should_display=document.calculator.display.selectedIndex; var int_val=parseInt(last_result); var float_val=parseFloat(last_result); var to_print=''; if(''+float_val!='NaN'&&should_display==1){ to_print=to_sci(last_result,false); }else if(''+float_val!='NaN'&&should_display==2){ to_print=to_sci(last_result,true); }else if(''+int_val!='NaN'&&should_display==3){ to_print=to_hex(int_val); }else if(''+int_val!='NaN'&&should_display==4){ to_print=to_octal(int_val); }else if(''+int_val!='NaN'&&should_display==5){ to_print=to_bin(int_val); }else{ to_print=round_extra_sf(float_val); } last_printed=to_print; document.calculator.line.value=to_print; history_index=1; document.calculator.line.style.backgroundColor='#aacc99'; }else{ document.calculator.line.style.backgroundColor='#cccc99'; } } function round_extra_sf(f){ var s=f.toPrecision(14); s=s.replace(/^([\+\-0-9\\.]*[1-9\.])0+((?:e[0-9\+\-]+)?)$/g,'$1$2'); s=s.replace(/\.((?:e[0-9\+\-]+)?)$/g,'$1'); return s; } function to_sci(s,eng){ var the_exp=0; var is_negative=false; if(s.length>0&&s.charAt(0)=='-'){ is_negative=true; s=s.substring(1,s.length); } var regex_splitter=s.split(new RegExp('[eE]')); if(regex_splitter.length>1){ the_exp=parseInt(regex_splitter[1]); s=regex_splitter[0]; } regex_splitter=s.split(/[\.]/); if(regex_splitter.length>1){ s=regex_splitter[0]+regex_splitter[1]; the_exp+=regex_splitter[0].length-1; }else{ the_exp+=s.length-1; } var leading_zeros=0; for(leading_zeros=0;leading_zeros<s.length&&s.charAt(leading_zeros)=='0';leading_zeros++){ the_exp=the_exp-1; } s=s.substring(leading_zeros,s.length); var move_dec; if(eng){ if(the_exp>=0){ move_dec=(the_exp%3)+1; }else{ move_dec=4-((-the_exp)%3); if(move_dec==4){ move_dec=1; } } the_exp-=(move_dec-1); }else{ move_dec=1; } var trailing_zeros=''; for(var i=s.length;i<move_dec;i++){ trailing_zeros+='0'; } return( (is_negative?'-':'')+ ((s.length==0)?'0':s.substring(0,move_dec))+ ((s.length<=move_dec)?trailing_zeros:('.'+s.substring(move_dec,s.length)))+ ((s.length==0||the_exp==0)?'':('e'+the_exp)) ); } var digit_array=new Array('0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'); function to_hex(n){ var hex_result='' var the_start=true; for(var i=32;i>0;){ i-=4; var one_digit=(n>>i)&0xf; if(!the_start||one_digit!=0){ the_start=false; hex_result+=digit_array[one_digit]; } } return '0x'+(hex_result==''?'0':hex_result); } function to_octal(n){ var oct_result='' var the_start=true; for(var i=33;i>0;){ i-=3; var one_digit=(n>>i)&0x7; if(!the_start||one_digit!=0){ the_start=false; oct_result+=digit_array[one_digit]; } } return '0'+(oct_result==''?'0':oct_result); } function to_bin(n){ var bin_result='' var the_start=true; for(var i=32;i>0;){ i-=1; var one_digit=(n>>i)&0x1; if(!the_start||one_digit!=0){ the_start=false; bin_result+=digit_array[one_digit]; } } return '0b'+(bin_result==''?'0':bin_result); } function from_bin(s){ var bin_result=0; var the_place=0; var i=s.length-1; while(i>=0&&the_place<32){ if(s.charAt(i)=='1'){ bin_result|=1<<the_place; } the_place++; i-=1; } return bin_result; } function set_calc(s){ if(!modifying_history&&s!=''){ last_result=''; last_input=s; document.calculator.line.value=s; document.calculator.line.focus(); last_input=''; last_printed=''; history_index=1; document.calculator.line.style.backgroundColor='#cccc99'; document.calculator.line.focus(); } } function append_calc(s,replaceLast){ if(!modifying_history&&s!=''){ last_result=''; var new_contents if(replaceLast==0&&document.calculator.line.value==last_printed){ new_contents=s; }else if(replaceLast==1&&document.calculator.line.value==last_printed){ new_contents='ans '+s; }else{ new_contents=document.calculator.line.value+s; } last_input=new_contents; document.calculator.line.value=new_contents; document.calculator.line.focus(); last_input=''; last_printed=''; history_index=1; document.calculator.line.style.backgroundColor='#cccc99'; document.calculator.line.focus(); } } function clear_calc(){ document.calculator.line.value=''; history_index=1; document.calculator.line.style.backgroundColor='#cccc99'; document.calculator.line.focus(); } function add_toHistory(s){ modifying_history=true; var is_found=false; var the_last=s; var next_history; var history_elements=document.calculator.history.options; for(var i=1;i<history_elements.length&&!is_found;i++){ next_history=history_elements[i].text; history_elements[i].text=the_last; if(next_history==s){ is_found=true; } the_last=next_history; } document.calculator.history.selectedIndex=0; modifying_history=false; } function load_calc(){ modifying_history=true; var history_elements=document.calculator.history.options; var calc_cookie=get_cookie('calculatorState'); if(calc_cookie!=null&&calc_cookie.length>1){ var history_part=calc_cookie.substring(1,calc_cookie.length); if(history_part!=null){ var history_split=history_part.split('\n'); for(var i=1;i<history_elements.length&&i<history_split.length+1;i++){ history_elements[i].text=history_split[i-1]; } } document.calculator.display.selectedIndex=parseInt(calc_cookie.charAt(0)); } modifying_history=false; } function save_calc(){ var history_elements=document.calculator.history.options; var calc_cookie=document.calculator.display.selectedIndex; for(var i=1;i<history_elements.length;i++){ calc_cookie+=history_elements[i].text+'\n'; } var expires_date=new Date(); // cookie expires in one year expires_date.setTime(expires_date.getTime()+365*24*60*60*1000); document.calc_cookie=( 'calculatorState'+'='+ escape(calc_cookie)+ ';expires='+expires_date.toGMTString() ); } function get_cookie(name){ var cookie_prefix=name+"="; var cookie_begin=document.cookie.indexOf(";"+cookie_prefix); if(cookie_begin==-1){ cookie_begin=document.cookie.indexOf(cookie_prefix); if(cookie_begin!=0)return null; }else{ cookie_begin+=2; } var cookie_end=document.cookie.indexOf(";",cookie_begin); if(cookie_end==-1)cookie_end=document.cookie.length; return unescape(document.cookie.substring(cookie_begin+cookie_prefix.length,cookie_end)); } function display_nextHistory(){ var history_elements=document.calculator.history.options; var next_history=""; if(history_index>=history_elements.length||history_elements[history_index].text==""){ history_index=1; } if(history_elements[history_index].text!=""){ var temp_history=history_index; set_calc(history_elements[history_index].text); history_index=temp_history; document.calculator.history.selectedIndex=history_index; history_index++; } document.calculator.line.focus(); } function next_display_method(){ var d=document.calculator.display; var s=d.selectedIndex; s++; if(s>=d.options.length)s=0; display_method(s) } function display_method(index){ document.calculator.display.selectedIndex=index; display_result(); save_calc(); document.calculator.line.focus(); } --></script> <style type="text/css"> body { background-color:beige; font-size:10pt; } input.advanced { font-size:9pt; width:.75cm; padding:0; margin:0; } input.clear, input.number, input.operand, input.equal, input.other { font-size:15pt; } input.clear, input.number, input.operand, input.equal, input.other { width:1cm; font-weight:bold; padding:2px; } input.keyshortcut { background-color:beige; color:beige; text-decoration:none; border:none; } input.clear { background-color:#aa2222; border-color:#aa2222; color:white; } input.number { background-color:#CCaa99; border-color:#CCaa99; color:black; } input.operand { background-color:#aaaacc; border-color:#aaaacc; color:black; } input.equal { background-color:#444444; border-color:#444444; color:white; } input.other { background-color:#9ac693; border-color:#9ac693; color:black; } input.advanced { background-color:lightgray; border-color:lightgray; color:black; } input.line { background-color:#cccc99; border-color:#cccc99; font-size:15pt; font-weight:bold; width:100%; } select { background-color:#cccccc; border-color:#cccccc; color:black; } </style> </head> <body onload="load_calc();document.calculator.line.focus();"> <noscript><p>This scientific calculator requires Javascript. Please enable Javascript in your browser's preferences and then reload this page if you wish to use this scientific calculator.</p></noscript> <form name=calculator onSubmit="do_calculation();return false;"> <input class=line type=text name="line" onChange="line_change();"> <br> <table summary="Calculator"><tr><td valign=top> <table class=keypad summary="Button Keypad"><tr> <td><input type="button" value="C" class="clear" accesskey=c onClick="clear_calc();" title="Clear (Alt-c)"></td> <td><input type="button" value="(" class="other" onClick="append_calc('(',0);" title="Grouping Parenthesis"></td> <td><input type="button" value=")" class="other" onClick="append_calc(')',0);" title="Grouping Parenthesis"></td> <td><input type="button" value="+" class="operand" onClick="append_calc(' + ',1);" title="Addition"></td> <td rowspan=5> <input type="button" value="&amp;" class="advanced" onClick="append_calc(' &amp; ',2);" title="Bitwise And"><br> <input type="button" value="|" class="advanced" onClick="append_calc(' | ',2);" title="Bitwise Or"><br> <input type="button" value="^" class="advanced" onClick="append_calc(' ^ ',2);" title="Bitwise xOr"><br> <input type="button" value="~" class="advanced" onClick="append_calc(' ~ ',2);" title="Bitwise Negation"><br> <input type="button" value="&lt;&lt;" class="advanced" onClick="append_calc(' &lt;&lt; ',2);" title="Bitwise Left Shift"><br> <input type="button" value="&gt;&gt;" class="advanced" onClick="append_calc(' &gt;&gt; ',2);" title="Bitwise Right Shift"><br> <input type="button" value="%" class="advanced" onClick="append_calc(' % ',2);" title="Modular Division"><br> <input type="button" value="," class="advanced" onClick="append_calc(', ',2);" title="Comma for functions"><br> </td></tr><tr> <td><input type="button" value="7" class="number" onClick="append_calc('7',0);" title="Seven"></td> <td><input type="button" value="8" class="number" onClick="append_calc('8',0);" title="Eight"></td> <td><input type="button" value="9" class="number" onClick="append_calc('9',0);" title="Nine"></td> <td><input type="button" value="-" class="operand" onClick="append_calc(' - ',1);" title="Subtraction"></td> </tr><tr> <td><input type="button" value="4" class="number" onClick="append_calc('4',0);" title="Four"></td> <td><input type="button" value="5" class="number" onClick="append_calc('5',0);" title="Five"></td> <td><input type="button" value="6" class="number" onClick="append_calc('6',0);" title="Six"></td> <td><input type="button" value="*" class="operand" onClick="append_calc(' * ',1);" title="Multiplication"></td> </tr><tr> <td><input type="button" value="1" class="number" onClick="append_calc('1',0);" title="One"></td> <td><input type="button" value="2" class="number" onClick="append_calc('2',0);" title="Two"></td> <td><input type="button" value="3" class="number" onClick="append_calc('3',0);" title="Three"></td> <td><input type="button" value="&#247;" class="operand" onClick="append_calc(' / ',1);" title="Division"></td> </tr><tr> <td><input type="button" value="EE" class="other" onClick="append_calc('e',2);" title="Scientific Notation Exponent"></td> <td><input type="button" value="0" class="number" onClick="append_calc('0',0);" title="Zero"></td> <td><input type="button" value="." class="other" onClick="append_calc('.',2);" title="Decimal Point"></td> <td><input type="button" value="=" class="equal" accesskey=e onClick="do_calculation();" title="Enter (Alt-e)"></td> </tr></table> </td><td valign=top> <p><small>Display:</small><br> <select name=display class=display onChange="display_result();save_calc();" title="(Alt-d)"> <option selected>Decimal (Mixed Notation) <option>Decimal (Scientific Notation) <option>Decimal (Engineering Notation) <option>Hexadecimal <option>Octal <option>Binary </select></p> <p><select name=history class=history onChange="if(this.selectedIndex>0)set_calc(this.options[this.selectedIndex].text);" title="View previous entries (Alt-h)"> <option>History: <option><option><option><option><option><option><option><option><option> <option><option><option><option><option><option><option><option><option><option> </select></p> <p><select name=mathConstants class=mathConstants onChange="append_calc(this.options[this.selectedIndex].value,0);this.selectedIndex=0;"> <option>Math Constants: <option value="ans ">last result <option value="E ">e <option value="LN10 ">ln(10) <option value="LN2 ">ln(2) <option value="LOG10E ">log10(e) <option value="LOG2E ">log2(e) <option value="PI ">&pi; <option value="SQRT1_2 ">sqrt(1/2) <option value="SQRT2 ">sqrt(2) </select>&nbsp;<small>(<a target="_blank" href="http://ostermiller.org/calc/calcdoc.html#constants">docs</a>)</small></p> <p><select name=mathFunctions class=mathFunctions onChange="append_calc(this.options[this.selectedIndex].value,0);this.selectedIndex=0;"> <option>Math Functions: <option value="abs(">abs <option value="acos(">acos <option value="asin(">asin <option value="atan(">atan <option value="atan2(">atan2 <option value="ceil(">ceil <option value="cos(">cos <option value="exp(">exp <option value="floor(">floor <option value="log(">log <option value="max(">max <option value="min(">min <option value="pow(">pow <option value="random()">random <option value="round(">round <option value="sin(">sin <option value="sqrt(">sqrt <option value="tan(">tan </select>&nbsp;<small>(<a target="_blank" href="http://ostermiller.org/calc/calcdoc.html#functions">docs</a>)</small></p> <p><input type="button" value="H" accesskey=h class="keyshortcut" onClick="display_nextHistory();"> <input type="button" value="D" accesskey=d class="keyshortcut" onClick="next_display_method();"> <input type="button" value="M" accesskey=m class="keyshortcut" onClick="display_method(0);"> <input type="button" value="S" accesskey=s class="keyshortcut" onClick="display_method(1);"> <input type="button" value="G" accesskey=g class="keyshortcut" onClick="display_method(2);"> <input type="button" value="B" accesskey=b class="keyshortcut" onClick="display_method(5);"> <input type="button" value="O" accesskey=o class="keyshortcut" onClick="display_method(4);"> <input type="button" value="X" accesskey=x class="keyshortcut" onClick="display_method(3);"> <input type="button" value="A" accesskey=a class="keyshortcut" onClick="append_calc('ans ',0);"></p> </td></tr></table> </form> <div style="height:1in;"></div> </body> </html> </TEXTAREA> <tr> <td> <FONT FACE="Arial"> <h3><i> Random: generazione numeri pseudocasuali </i> </h3> <table border=0> <TEXTAREA NAME="EsempiJavascript" ROWS=20 COLS=100> <html> <head> <script language=javascript> function random(N) { return Math.round(Math.random()*(N-1)); // a caso fra 0 ed N } function vai() { var s; s=prompt("Valore a caso fra 0 e ..."); alert(random(s)); } function cento() { var s=""; var i; for(i=1; i <= 100; i++) s+="Numero a caso "+i+" = "+random(10)+"<br>\n"; document.write(s); } </script> </head> <body> <input type=button value="clicca x un numero a caso..." onclick="vai()"> <input type=button value="clicca x 100 numeri a caso fra 0 e 9" onclick="cento()"> </body> </html> </TEXTAREA> <tr> <td> <FONT FACE="Arial"> <h3><i> Tabelline con radio button e output in textarea (decommenta /textarea) </i> </h3> <table border=0> <TEXTAREA NAME="EsempiJavascript" ROWS=20 COLS=100> <html> <head> <script language="javascript"> function radio_valore() // ritorna il valore di un campo radio { var i=0; while(!document.frmtab.tab[i].checked) // finche non trovo un tasto checked i=i+1; return document.frmtab.tab[i].value; // il campo radio viene visto come vettore!!! } function tabe() { var i,t; t=radio_valore(); // richiama la funzione radio_valore() i=0; frmtab.rslt.value=""; while(i<=10) { frmtab.rslt.value=frmtab.rslt.value+"\n"+t+" X "+i+" = "+t*i; i=i+1; } } </script> </head> <body> <form name=frmtab> <INPUT TYPE=RADIO name="tab" VALUE =0 CHECKED> tabellina dello 0<br> <INPUT TYPE=RADIO name="tab" VALUE =1 > tabellina dell' 1<br> <INPUT TYPE=RADIO name="tab" VALUE ="2" > tabellina del 2<br> <INPUT TYPE=RADIO name="tab" VALUE ="3" > tabellina del 3<br> <INPUT TYPE=RADIO name="tab" VALUE ="4" > tabellina del 4<br> <INPUT TYPE=RADIO name="tab" VALUE ="5" > tabellina del 5<br> <INPUT TYPE=RADIO name="tab" VALUE ="6" > tabellina del 6<br> <INPUT TYPE=RADIO name="tab" VALUE ="7" > tabellina del 7<br> <INPUT TYPE=RADIO name="tab" VALUE ="8" > tabellina del 8<br> <INPUT TYPE=RADIO name="tab" VALUE ="9" > tabellina del 9<br> <INPUT TYPE=RADIO name="tab" VALUE ="10" > tabellina del 10<br> <input type=button value="Clicca per la tua tabellina" onClick="tabe()"> <br> <textarea name=rslt cols=20 rows=15> <!NB: DECOMMENTA LA LINEA SOTTO!!!> <!/textarea> </form> </body> </html> </TEXTAREA> <tr> <td> <FONT FACE="Arial"> <h3><i> Tabelline con SELECT e output in textarea (decommenta /textarea) </i> </h3> <table border=0> <TEXTAREA NAME="EsempiJavascript" ROWS=20 COLS=100> <html> <head> <script language="javascript"> function tabe() { var i,t; t=frmtab.tab.value; i=0; frmtab.rslt.value=""; while(i<=10) { frmtab.rslt.value=frmtab.rslt.value+"\n"+t+" X "+i+" = "+t*i; i=i+1; } } </script> </head> <body> <form name=frmtab> <select name=tab> <option value=0>tabellina dello 0</option> <option value=1>tabellina dell'1</option> <option value=2>tabellina del 2</option> <option value=3>tabellina del 3</option> <option value=4>tabellina del 4</option> <option value=5>tabellina del 5</option> <option value=6>tabellina del 6</option> <option value=7>tabellina del 7</option> <option value=8>tabellina del 8</option> <option value=9>tabellina del 9</option> <option value=10>tabellina del 10</option> </select> <input type=button value="Clicca per la tua tabellina" onClick="tabe()"> <br> <textarea name=rslt cols=20 rows=15> <!/textarea> </form> </body> </html> </TEXTAREA> <tr> <td> <FONT FACE="Arial"> <h3><i> Min, max e media di un vettore - esempio di split() e di Math <br> (Decommenta /textarea 2 volte)</i> </h3> <table border=0> <TEXTAREA NAME="EsempiJavascript" ROWS=20 COLS=100> <html> <head> <title> Min, max e media di un vettore - esempio di split() e di Math </title> <script language="javascript"> function somma(v) { var s=0; for(i=0;i<v.length;i++) s+=(v[i])*1; return s; } function calcoli() { var i,max,min,media,s=0; var vet = new Array(); // pulisco la textarea di output frm.output.value=""; vet = frm.input.value.split("\n"); max=Math.max.apply(Math, vet); min=Math.min.apply(Math, vet); s=somma(vet); media=s/vet.length; frm.output.value+= "Il massimo e' "+max+"\nIl minimo e' "+min+"\nLa media e' "+media; frm.output.value+="\nLa somma e'"+s; // Esercizi: stampa in orizzontale, minimo, massimo, media, ordinamento } </script> </head> <body> <form name="frm"> <textarea name="input"> -2 3 4 12 -5 0 2 11 <!/textarea> <textarea name="output"> <!/textarea> <input type="button" value="Calcola" onclick="calcoli()"> </form> </body> </html> </TEXTAREA> <tr> <td> <FONT FACE="Arial"> <h3><i> Apertura finestra (window) e redirect ... </i> </h3> <table border=0> <TEXTAREA NAME="EsempiJavascript" ROWS=20 COLS=100> <script language=javascript> function funz() { // esempio di apertura finestra e redirect var finestra; var str="<table border=1>"; finestra = window.open('', 'nuovafin', 'toolbar=no, status=no, width=300, height=400'); for (i=1; i <= 10; i++) { str += "<td>" + i +"</td>\n"; } str += "</TABLE>"; finestra.document.write(str); finestra.alert("Premi per redirect pagina sotto a Google..."); location.href = "http://www.google.it"; // con finestra.location.href = "http://www.google.it"; // facevo redirect dentro la finestra a Goggle!!! finestra.alert("Premi per chiudere finestra"); finestra.close(); } </script> <input type=button value="Esempio di window.open()" onclick="funz()"> </TEXTAREA> <tr> <td> <FONT FACE="Arial"> <h3><i> 8 Programmi sui dadi - Interessantissimi - <br>(occorrono 6 immagini di dadi: 1.gif, 2.gif, ..., 6.gif <br>NB: Decommenta tutte le /textarea</i> </h3> <table border=0> <TEXTAREA NAME="EsempiJavascript" ROWS=20 COLS=100> <!------------DADO versione 1----------------------> <html> <head> <script language="javascript"> function funz1() { document.img1.src="3.gif"; document.frm.area.value += "\n...ed ecco apparso il dado 3!!!"; } </script> </head> <body> <img src="1.gif" name=img1 OnClick="funz1()"> <img src="2.gif" name=img2 > <form name=frm> <textarea name="area">Clicca sul dado 1<!/textarea> </form> </body> </html> <!------------FINE DADO versione 1----------------------> <!------------DADO versione 2----------------------> <html> <head> <script language="javascript"> function showProperties(obj, name) { var s=""; for (i in obj) s+= i + "\n"; document.frm.area2.value=s; } function funz1() { document.images[0].src="3.gif"; document.images[1].src="4.gif"; document.images[2].src="5.gif"; document.frm.area.value = "Ecco altri dadi..."; showProperties(document, 'document'); } </script> </head> <body> <img src="1.gif" OnClick="funz1()"> <img src="2.gif" > <img src="3.gif" > <form name=frm> <textarea name="area">Clicca sul dado 1<!/textarea> <textarea name="area2"> <!/textarea> </form> </body> </html> <!------------FINE DADO versione 2----------------------> <!------------DADO versione 3----------------------> <html> <head> <script language="javascript"> function funz1() { document.images[0].src="3.gif"; document.images[1].src="4.gif"; document.images[2].src="5.gif"; document.frm.area2.value = "Ecco altri dadi..."; } </script> </head> <body> <table border=1> <td><img src="1.gif" OnClick="funz1()"></td> <td><img src="2.gif" ></td><tr> <td><img src="3.gif" ></td> </table> <form name=frm> <textarea name="area">Clicca sul dado 1<!/textarea> <textarea name="area2"> <!/textarea> </form> </body> </html> <!------------FINE DADO versione 3----------------------> <!------------DADO versione 4----------------------> <html> <head> <script language="javascript"> function funz1() { var i; for (i=0; i < 6; i++) document.images[i].src=(i*1+1)+".gif"; document.frm.area.value = "Ecco 6 dadi scoperti"; } </script> </head> <body> <table border=1> <td><img src="0.gif" OnClick="funz1()"></td> <td><img src="0.gif" ></td> <td><img src="0.gif" ></td> <td><img src="0.gif" ></td> <td><img src="0.gif" ></td> <td><img src="0.gif" ></td> </table> <form name=frm> <textarea name="area">Clicca sul dado 1 per scoprire i dadi...<!/textarea> </body> </html> <!------------FINE DADO versione 4----------------------> <!------------DADO versione 5----------------------> <html> <head> <script language="javascript"> function funz1() { var i; for (i=0; i < 6; i++) document.images[i].src=(i*1+1)+".gif"; document.frm.area.value = "Ecco 6 dadi scoperti"; } var s,i; s="<table border=2>"; for (i=0; i < 6; i++) s+="<td><img src=0.gif OnClick=funz1()></td>\n"; s+="</table>"; document.write(s); </script> </head> <body> <form name=frm> <textarea name="area">Clicca su un dado qualsiasi per scoprire i dadi...<!/textarea> </body> </html> <!------------FINE DADO versione 5----------------------> <!------------DADO versione 6----------------------> <html> <head> <script language="javascript"> var j=1; function random(N) { return Math.round(Math.random()*(N-1)); // a caso fra 0 ed N } function funz1() { var i; for (i=0; i < 6; i++) document.images[i].src=random(6)+".gif"; document.frm.area.value = "Estrazione N."+j++; } var s,i; s="<table border=2>"; for (i=0; i < 6; i++) s+="<td><img src=0.gif OnClick=funz1()></td>\n"; s+="</table>"; document.write(s); </script> </head> <body> <form name=frm> <textarea name="area" cols=50>Estrazione dadi pseudocasuale con possibile ripetizione (clicca su un dado)<!/textarea> </body> </html> <!------------FINE DADO versione 6----------------------> <!------------DADO versione 7----------------------> <html> <head> <script language="javascript"> var j=1; function random(N) { return parseInt(Math.random()*N)+1; // a caso fra 1 ed N } function scopri(i) { document.images[i].src=random(6)+".gif"; } function disegna25dadi() { var s; s="<table border=2>"; var i,j,k; k=0; for (i=0; i < 5; i++) for (j=0; j < 5; j++) { s+="<td><img src=0.gif OnClick=scopri("+ k++ + ")></td>\n"; if (j == 4) s+="<tr>\n"; // 5 per linea } s+="</table>"; alert(s); // Per debug, metti pure in commento document.write(s); } disegna25dadi(); </script> </head> <body> <h2>Clicca sui dadi...</h1> </body> </html> <!------------FINE DADO versione 7----------------------> <!------------DADO versione 8----------------------> <html> <head> <script language="javascript"> var precedente=0; // non esiste al primo giro il dado precedente function random(N) { return parseInt(Math.random()*N)+1; // a caso fra 1 ed N } function coppia(i,dado) // segna 1 punto se il dado attuale estratto e' uguale al precedente... { if (precedente==dado) { // alert("Un punto in piu'..."); // debug document.frm.punteggio.value=(document.frm.punteggio.value*1) +1; } precedente=dado; } function scopri(i) { var dado=random(6); document.images[i].src=dado+".gif"; coppia(i,dado); } function disegna25dadi() { var s; s="<table border=2>"; var i,j,k; k=0; for (i=0; i < 5; i++) for (j=0; j < 5; j++) { s+="<td><img src=0.gif OnClick=scopri("+ k++ + ")></td>\n"; if (j == 4) s+="<tr>\n"; // 5 per linea } s+="</table>"; // alert(s); Per debug document.write(s); } disegna25dadi(); </script> </head> <body> <h2>Gioco: TROVA IL DADO 2 VOLTE....</h1> <form name=frm> <input type=text name=punteggio readonly value=0><br> </form> </body> </html> <!------------FINE DADO versione 8----------------------> </TEXTAREA> <tr> <td> <FONT FACE="Arial"> <h3><i>Programma per simulare con le carte gli algoritmo di ordinamento (Feb 2017) <br> (Occorrono 10 Carte da 0.bmp==Re a 9.bmp==donna)... </i> </h3> <table border=0> <TEXTAREA NAME="EsempiJavascript" ROWS=20 COLS=100> <html> <head> <script language="javascript"> /// By F. Sacco ult. modifica 7/2/2017 var j=1; var carta1=-1; var carta2=-1; var carte = [0,1,2,3,4,5,6,7,8,9]; var scambi=0; function random(N) { return parseInt(Math.random()*N)+1; // a caso fra 1 ed N } function shuffle(a) { /// Mischio il mazzo... var j, x, i; for (i = a.length; i; i--) { j = Math.floor(Math.random() * i); x = a[i - 1]; a[i - 1] = a[j]; a[j] = x; } } function scambiacarte() { var dep=""; var app=carte[carta1]; carte[carta1]=carte[carta2]; carte[carta2]=app; //alert("carta1->"+carta1+", carta2->"+carta2); dep=document.images[carta1].src document.images[carta1].src=document.images[carta2].src; document.images[carta2].src=dep; } function insertcarta() /// inserisce carta1 nella pos carta2 e sposta a sinistra alcuni elementi (x insertsort) { var app; if (carta2 > carta1) // carta2 DEVE stare a sx di carta1 { app=carta1; carta1=carta2; carta2=app; } app=carte[carta1]; var dep=document.images[carta1].src; for (i=carta1-1; i >= carta2; i--) { carte[i+1]=carte[i]; document.images[i+1].src=document.images[i].src; } carte[carta2]=app; document.images[carta2].src=dep; } function ordinato() { var i,j=0; if (carte[9]==0) /// il re vale 0 j++; /// re == 0 for (i=1; i < 9; i++) if (carte[i] == (i+1)) j++; if (j==9) alert("Vettore di carte ordinato in " + scambi + " scambi/inserimenti!!!"); } function evidenzia(i) /// fa vedere in giallo la parte ordinata delle carte al click... /// Occorre un vettore di 10 Carte, riempito e disordinato o con shuffle { var x = document.getElementById("tabella").rows[0].cells; x[i].innerHTML = " OK "; } function scambia(i) /// Occorre un vettore di 10 Carte, riempito e disordinato o con shuffle { var dep=""; var app=0; if (carta1==-1) carta1=i; else if (carta2==-1) { carta2=i; scambiacarte(); carta1=-1; carta2=-1; scambi++; document.sc.scambi.value=scambi; } ordinato(); } function insert(i) /// Occorre un vettore di 10 Carte, riempito e disordinato o con shuffle { var dep=""; var app=0; ///alert("Entrato in insert(i="+i+")"); if (carta1==-1) carta1=i; else if (carta2==-1) { carta2=i; insertcarta(); carta1=-1; carta2=-1; scambi++; document.sc.scambi.value=scambi; } ordinato(); } function scopri(i) { document.images[i].src=random(10)+".bmp"; } function disegna10carte() { var s; s="<table border=2 id=tabella>"; var i,j,k; k=0; shuffle(carte); for (i=0; i < 10; i++) s+="<td OnClick=evidenzia("+ i + ")> " + "Fuori Posto" + " </td>"; s+="<tr>\n"; //s+="<table border=2>"; for (i=0; i < 10; i++) { //j=random(6); s+="<td><img src=" + carte[i] +".bmp OnClick=scambia("+ i + ") ></td>\n"; //k++; } s+="<tr>\n"; for (i=0; i < 10; i++) s+="<td OnClick=insert("+ i + ")> "+ i +" </td>"; s+="<tr>\n"; s+="</table>\n"; s+="<form name=sc>Numero scambi/inserimenti=<input type=button name=scambi value=0></form>"; ///alert(s); // Per debug, metti pure in commento document.write(s); } disegna10carte(); </script> </head> <body> <h2>Programma Javascript per evidenziare algoritmi di ordinamento: <br> 1) clicca su due carte per scambiarle (Bubble/Select Sort)<br> 2) clicca su due numeri (sotto le carte) per inserire carta in tabella e <br> shift a destra delle carte a sinistra della scelta (Insert Sort)<br> 3) clicca su "FUORI POSTO" per metterci "OK" (carta in ordine)<br> 4) premi tasto funzione F5 per ripartire con mazzo disordinato..</h2> </body> </html> </TEXTAREA> <tr> <td> <FONT FACE="Arial"> <h3><i> Controllo che venga immesso un campo di input (classico) </i> </h3> <table border=0> <TEXTAREA NAME="EsempiJavascript" ROWS=20 COLS=100> <html> <head> <script type="text/javascript"> function controlla() { if (document.myform.myname.value == '') window.alert('Per favore, immetti il nome ...'); } </script> </head> <body> <form name="myform" method="post" action="form-processor.php"> Name: <input type="text" name="myname"> <br/> <input type=button value=controlla onclick="controlla()"> </form> </body> </html> </TEXTAREA> <tr> <td> <FONT FACE="Arial"> <h3><i> Controllo campo DA HTML con required (non compatibile con browser vecchi) </i> </h3> <table border=0> <TEXTAREA NAME="EsempiJavascript" ROWS=20 COLS=100> <html> <head> <script type="text/javascript"> // Si puo' usare required al posto della funzione qui sotto... // ma NON con tutti i browser funziona!!!! (sett 2015) //function controlla() //{ //if (document.myform.myname.value == '') // window.alert('Per favore, immetti il nome ...'); //} </script> </head> <body> <form name="myform" method="post" action="form-processor.php"> Name: <input type="text" name="myname" required> <br/> <input type=submit> </form> </body> </html> </TEXTAREA> <tr> <td> <FONT FACE="Arial"> <h3><i> Vuoto (per copia/incolla) </i> </h3> <table border=0> <TEXTAREA NAME="EsempiJavascript" ROWS=20 COLS=100> // Incolla qui il codice </TEXTAREA> </td> <h5><i>(Vers. 22 Ott 2015)</i></h5> </body> </html> </body> </html>
///(Fine file: programmi-utili-JavaScript.html)

///File: programmi-utili-PHP.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" > <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>EditArea - the code editor in a textarea</title> <script language="Javascript" type="text/javascript" src="../_edit_area/edit_area_full.js"></script> <script language="Javascript" type="text/javascript"> // initialisation editAreaLoader.init({ id: "vuoto" // id of the textarea to transform ,start_highlight: true // if start with highlight ,allow_resize: "both" ,allow_toggle: true ,word_wrap: true ,language: "en" ,syntax: "c" ,toolbar: "search, fullscreen, go_to_line, |, undo, redo, |, select_font, |, syntax_selection, |, change_smooth_selection, highlight, reset_highlight, |, help" ,syntax_selection_allow: "css,html,js,php,python,vb,xml,c,cpp,sql,basic,pas" }); editAreaLoader.init({ id: "exjs" // id of the textarea to transform ,start_highlight: true // if start with highlight ,allow_resize: "both" ,allow_toggle: true ,word_wrap: true ,language: "it" ,syntax: "js" ,toolbar: "search, fullscreen, go_to_line, |, undo, redo, |, select_font, |, syntax_selection, |, change_smooth_selection, highlight, reset_highlight, |, help" ,syntax_selection_allow: "css,html,js,php,python,vb,xml,c,cpp,sql,basic,pas" }); editAreaLoader.init({ id: "ex1" // id of the textarea to transform ,start_highlight: true // if start with highlight ,allow_resize: "both" ,allow_toggle: true ,word_wrap: true ,language: "en" ,syntax: "php" }); editAreaLoader.init({ id: "ex2" // id of the textarea to transform ,start_highlight: true // if start with highlight ,allow_resize: "both" ,allow_toggle: true ,word_wrap: true ,language: "en" ,syntax: "php" }); editAreaLoader.init({ id: "ex3" // id of the textarea to transform ,start_highlight: true // if start with highlight ,allow_resize: "both" ,allow_toggle: true ,word_wrap: true ,language: "en" ,syntax: "php" }); editAreaLoader.init({ id: "ex4" // id of the textarea to transform ,start_highlight: true // if start with highlight ,allow_resize: "both" ,allow_toggle: true ,word_wrap: true ,language: "en" ,syntax: "php" }); editAreaLoader.init({ id: "ex5" // id of the textarea to transform ,start_highlight: true // if start with highlight ,allow_resize: "both" ,allow_toggle: true ,word_wrap: true ,language: "en" ,syntax: "php" }); editAreaLoader.init({ id: "ex6" // id of the textarea to transform ,start_highlight: true // if start with highlight ,allow_resize: "both" ,allow_toggle: true ,word_wrap: true ,language: "en" ,syntax: "php" }); editAreaLoader.init({ id: "ex7" // id of the textarea to transform ,start_highlight: true // if start with highlight ,allow_resize: "both" ,allow_toggle: true ,word_wrap: true ,language: "en" ,syntax: "php" }); editAreaLoader.init({ id: "ex8" // id of the textarea to transform ,start_highlight: true // if start with highlight ,allow_resize: "both" ,allow_toggle: true ,word_wrap: true ,language: "en" ,syntax: "php" }); editAreaLoader.init({ id: "ex9" // id of the textarea to transform ,start_highlight: true // if start with highlight ,allow_resize: "both" ,allow_toggle: true ,word_wrap: true ,language: "en" ,syntax: "php" }); editAreaLoader.init({ id: "ex10" // id of the textarea to transform ,start_highlight: true // if start with highlight ,allow_resize: "both" ,allow_toggle: true ,word_wrap: true ,language: "en" ,syntax: "php" }); // callback functions function my_save(id, content){ alert("Here is the content of the EditArea '"+ id +"' as received by the save callback function:\n"+content); } function my_load(id){ editAreaLoader.setValue(id, "The content is loaded from the load_callback function into EditArea"); } function test_setSelectionRange(id){ editAreaLoader.setSelectionRange(id, 100, 150); } function test_getSelectionRange(id){ var sel =editAreaLoader.getSelectionRange(id); alert("start: "+sel["start"]+"\nend: "+sel["end"]); } function test_setSelectedText(id){ text= "[REPLACED SELECTION]"; editAreaLoader.setSelectedText(id, text); } function test_getSelectedText(id){ alert(editAreaLoader.getSelectedText(id)); } function editAreaLoaded(id){ if(id=="example_2") { open_file1(); open_file2(); } } function open_file1() { var new_file= {id: "to\\ é # € to", text: "$authors= array();\n$news= array();", syntax: 'php', title: 'beautiful title'}; editAreaLoader.openFile('example_2', new_file); } function open_file2() { var new_file= {id: "Filename", text: "<a href=\"toto\">\n\tbouh\n</a>\n<!-- it's a comment -->", syntax: 'html'}; editAreaLoader.openFile('example_2', new_file); } function close_file1() { editAreaLoader.closeFile('example_2', "to\\ é # € to"); } function toogle_editable(id) { editAreaLoader.execCommand(id, 'set_editable', !editAreaLoader.execCommand(id, 'is_editable')); } </script> </head> <body> <h1><hr>Programmi utili in PHP - (vers. 17 Nov 2016)</h1> <br><br> <h3>Segui il <a href=http://tohtml.com/>link</A> se vuoi copiare in Office con colori evidenziati!!! </h3><hr> <fieldset> <legend>VUOTO/Editor con sintassi evidenziata - per editare/incollare il tuo codice ...</legend> <p>Digita o incolla qui sotto il tuo codice, scegliendo il linguaggio desiderato ...</p> <textarea id="vuoto" style="height: 350px; width: 100%;" name="test_0"> ... incolla qui il codice ... </textarea> </fieldset> <fieldset> <legend>Uso di funzione echo in PHP</legend> <p>Esempio di echo con concatenamento stringa e tabella</p> <textarea id="ex1" style="height: 350px; width: 100%;" name="test_1"> <table border = 1> <?php for ($i=1; $i <= 20; $i++) echo "<td>" . $i . " </td><tr> "
///(Fine file: programmi-utili-PHP.html)
</table> </TEXTAREA> </fieldset> <fieldset> <legend>Ora di sistema</legend> <p>Esempio di programma che fornisce l'ora univoca del server</p> <textarea id="ex2" style="height: 350px; width: 100%;" name="test_2"> <html> <body> <table border=3>
///File: programmi-utili-PHP.html
printf
("<th> Data e ora aggiornata %s </th>", date("d/m/y H:i:s" ));
///(Fine file: programmi-utili-PHP.html)
</table> </body> </html> </TEXTAREA> </fieldset> <fieldset> <legend>Classe in PHP</legend> <p>Una semplicissima classe con allocamento dinamico</p> <textarea id="ex3" style="height: 350px; width: 100%;" name="test_3">
///File: programmi-utili-PHP.html
# prova vettore di strutture X costruire tabella di quiz... class aa { var $a=723; function pr() { printf($this->a); } }; $a = new aa; $a->pr();
///(Fine file: programmi-utili-PHP.html)
</TEXTAREA> </fieldset> <fieldset> <legend>Contatore in PHP</legend> <p>Contatore accessi al sito... </p> <textarea id="ex4" style="height: 350px; width: 100%;" name="test_2">
///File: programmi-utili-PHP.html
// contatore accessi alla rete - ESEMPIO apertura file di testo in R e W $fd = fopen("contatore.txt","r"); $buffer = fgets($fd,128); // max 128 caratteri fclose($fd); $n=0; // variabile numerica $n=$buffer; // conversione di tipo $n=$n+1; // incremento contatore accessi $ip=$_SERVER['REMOTE_ADDR']; // BECCO l'IP DEL CLIENT !!! vedi phpinfo() printf("<h2><hr>Benvenuto %s, sei il visitatore N.%d <hr></h2>\n", $ip,$n); $buffer = $n; // conversione di tipo $fd = fopen("contatore.txt","w"); fputs($fd,$buffer); // max 128 caratteri fclose($fd);
///(Fine file: programmi-utili-PHP.html)
</TEXTAREA> </fieldset> <fieldset> <legend>Contatti in PHP</legend> <p>Scrivo in un file di testo chi si connette a questo sito...</p> <textarea id="ex5" style="height: 350px; width: 100%;" name="test_1">
///File: programmi-utili-PHP.html
// scrivo in file CONTATTI.TXT chi si connette a questo sito! $fd = fopen("contatti.txt","a"); $ip=$_SERVER['REMOTE_ADDR']; // BECCO l'IP DEL CLIENT !!! vedi phpinfo() $browser=$_SERVER['HTTP_USER_AGENT']; // IL browser del CLIENT printf("<h2><hr>Benvenuto %s, ti ho registrato!<hr></h2>\n",$ip); fputs($fd,sprintf("$ip - %s - %s\n",date("g/m/y H:m:s"), $browser)); fclose($fd);
///(Fine file: programmi-utili-PHP.html)
</TEXTAREA> </fieldset> </body> </html> </body> </html>
///(Fine file: programmi-utili-PHP.html)

///File: QRcodeOnLineItis.html
<h2><hr><a href="http://dsacco.alwaysdata.net/ItisQrcode/">Genera Qr code Itis...</a><hr><h2> <h5> Nb: puoi visualizzare un qrcode nele tue pagine web o php con un comando HTML tipo:<br> img src=http://dsacco.alwaysdata.net/qrcode/ItisQrcode.php?qrcodestring=http://www.itis.pr.it&livello=L&dimensione=4
///(Fine file: QRcodeOnLineItis.html)

///File: RedirectHtmlEsempio.html
<!DOCTYPE html> <html> <head> <title>PDF to DOC online (I LOVE PDF)</title> <meta http-equiv = "refresh" content = "1; url = https://www.ilovepdf.com/it/pdf_in_word" /> </head> <body> <p>Attendi...(PDF to DOC online, anche QR code per download da cellulare)</p> </body> </html>
///(Fine file: RedirectHtmlEsempio.html)

///File: VUOTO-C-CPP-HTML-PHP-JAVAS-SQL.html
<html> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" > <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>Vuoto: Editor/Base Vuota linguaggi...</title> <script language="Javascript" type="text/javascript" src="../_edit_area/edit_area_full.js"></script> <script language="Javascript" type="text/javascript"> // initialisation editAreaLoader.init({ id: "vuoto" // id of the textarea to transform ,start_highlight: true // if start with highlight ,allow_resize: "both" ,allow_toggle: true ,word_wrap: true ,language: "it" ,syntax: "c" ,toolbar: "search, fullscreen, go_to_line, |, undo, redo, |, select_font, |, syntax_selection, |, change_smooth_selection, highlight, reset_highlight, |, help" ,syntax_selection_allow: "css,html,js,php,python,vb,xml,c,cpp,sql,basic,pas" }); editAreaLoader.init({ id: "ex1" // id of the textarea to transform ,start_highlight: true // if start with highlight ,allow_resize: "both" ,allow_toggle: true ,word_wrap: true ,language: "it" ,syntax: "c" ,toolbar: "search, fullscreen, go_to_line, |, undo, redo, |, select_font, |, syntax_selection, |, change_smooth_selection, highlight, reset_highlight, |, help" ,syntax_selection_allow: "css,html,js,php,python,vb,xml,c,cpp,sql,basic,pas" }); editAreaLoader.init({ id: "ex2" // id of the textarea to transform ,start_highlight: true // if start with highlight ,allow_resize: "both" ,allow_toggle: true ,word_wrap: true ,language: "it" ,syntax: "cpp" ,toolbar: "search, fullscreen, go_to_line, |, undo, redo, |, select_font, |, syntax_selection, |, change_smooth_selection, highlight, reset_highlight, |, help" ,syntax_selection_allow: "css,html,js,php,python,vb,xml,c,cpp,sql,basic,pas" }); editAreaLoader.init({ id: "ex3" // id of the textarea to transform ,start_highlight: true // if start with highlight ,allow_resize: "both" ,allow_toggle: true ,word_wrap: true ,language: "it" ,syntax: "html" ,toolbar: "search, fullscreen, go_to_line, |, undo, redo, |, select_font, |, syntax_selection, |, change_smooth_selection, highlight, reset_highlight, |, help" ,syntax_selection_allow: "css,html,js,php,python,vb,xml,c,cpp,sql,basic,pas" }); editAreaLoader.init({ id: "ex4" // id of the textarea to transform ,start_highlight: true // if start with highlight ,allow_resize: "both" ,allow_toggle: true ,word_wrap: true ,language: "it" ,syntax: "js" ,toolbar: "search, fullscreen, go_to_line, |, undo, redo, |, select_font, |, syntax_selection, |, change_smooth_selection, highlight, reset_highlight, |, help" ,syntax_selection_allow: "css,html,js,php,python,vb,xml,c,cpp,sql,basic,pas" }); editAreaLoader.init({ id: "ex5" // id of the textarea to transform ,start_highlight: true // if start with highlight ,allow_resize: "both" ,allow_toggle: true ,word_wrap: true ,language: "it" ,syntax: "php" ,toolbar: "search, fullscreen, go_to_line, |, undo, redo, |, select_font, |, syntax_selection, |, change_smooth_selection, highlight, reset_highlight, |, help" ,syntax_selection_allow: "css,html,js,php,python,vb,xml,c,cpp,sql,basic,pas" }); editAreaLoader.init({ id: "ex6" // id of the textarea to transform ,start_highlight: true // if start with highlight ,allow_resize: "both" ,allow_toggle: true ,word_wrap: true ,language: "it" ,syntax: "sql" ,toolbar: "search, fullscreen, go_to_line, |, undo, redo, |, select_font, |, syntax_selection, |, change_smooth_selection, highlight, reset_highlight, |, help" ,syntax_selection_allow: "css,html,js,php,python,vb,xml,c,cpp,sql,basic,pas" }); editAreaLoader.init({ id: "ex7" // id of the textarea to transform ,start_highlight: true // if start with highlight ,allow_resize: "both" ,allow_toggle: true ,word_wrap: true ,language: "it" ,syntax: "cpp" ,toolbar: "search, fullscreen, go_to_line, |, undo, redo, |, select_font, |, syntax_selection, |, change_smooth_selection, highlight, reset_highlight, |, help" ,syntax_selection_allow: "css,html,js,php,python,vb,xml,c,cpp,sql,basic,pas" }); // callback functions function my_save(id, content){ alert("Here is the content of the EditArea '"+ id +"' as received by the save callback function:\n"+content); } function my_load(id){ editAreaLoader.setValue(id, "The content is loaded from the load_callback function into EditArea"); } function test_setSelectionRange(id){ editAreaLoader.setSelectionRange(id, 100, 150); } function test_getSelectionRange(id){ var sel =editAreaLoader.getSelectionRange(id); alert("start: "+sel["start"]+"\nend: "+sel["end"]); } function test_setSelectedText(id){ text= "[REPLACED SELECTION]"; editAreaLoader.setSelectedText(id, text); } function test_getSelectedText(id){ alert(editAreaLoader.getSelectedText(id)); } function editAreaLoaded(id){ if(id=="example_2") { open_file1(); open_file2(); } } function open_file1() { var new_file= {id: "to\\ é # € to", text: "$authors= array();\n$news= array();", syntax: 'php', title: 'beautiful title'}; editAreaLoader.openFile('example_2', new_file); } function open_file2() { var new_file= {id: "Filename", text: "<a href=\"toto\">\n\tbouh\n</a>\n<!-- it's a comment -->", syntax: 'html'}; editAreaLoader.openFile('example_2', new_file); } function close_file1() { editAreaLoader.closeFile('example_2', "to\\ é # € to"); } function toogle_editable(id) { editAreaLoader.execCommand(id, 'set_editable', !editAreaLoader.execCommand(id, 'is_editable')); } </script> </head> <body> <FONT FACE="Arial"> <h2><i> File Vuoti C/C++/HTML/JavaScript/PHP (Seleziona, Copia/Incolla)</i> </h2> <h3>Segui il <a href=http://tohtml.com/>link</A> se vuoi copiare in Office con colori evidenziati!!! </h3><hr> <fieldset> <legend>VUOTO/Editor con sintassi evidenziata - per editare/incollare il tuo codice ...</legend> <p>Digita o incolla qui sotto il tuo codice, scegliendo il linguaggio desiderato ...</p> <textarea id="vuoto" style="height: 350px; width: 100%;" name="test_0"> ... incolla qui il codice ... </textarea> </fieldset> <fieldset> <legend>Linguaggio C</legend> <p>Programma C vuoto</p> <textarea id="ex1" style="height: 350px; width: 100%;" name="test_1"> /* Programma C: .................... Scritto da: ................... Data: gg/mm/aaaa Descrizione: .................. */ #include <stdio.h> int main() { printf("Ciao mondo\n"); return 0; } </TEXTAREA> </fieldset> <fieldset> <legend>Linguaggio C++</legend> <p>Programma C++ vuoto</p> <textarea id="ex2" style="height: 350px; width: 100%;" name="test_1"> // Programma C++: .................... // Scritto da: ................... // Data: gg/mm/aaaa // Descrizione: .................. #include <iostream> using namespace std; int main() { cout << "Ciao mondo" << endl; return 0; } </TEXTAREA> </fieldset> <fieldset> <legend>Documento HTML</legend> <p>Documento HTML vuoto ...</p> <textarea id="ex3" style="height: 350px; width: 100%;" name="test_1"> <HTML> <!-- Commento HTML --> <HEAD> <TITLE> Titolo </TITLE> </HEAD> <BODY> Corpo del documento </BODY> </HTML> </TEXTAREA> </fieldset> <fieldset> <legend>Linguaggio Javascript</legend> <p>Programma Javascript vuoto</p> <textarea id="ex4" style="height: 350px; width: 100%;" name="test_1"> <script language=Javascript> // Commento Javascript var s="Javascript"; document.write(s); </script> </TEXTAREA> </fieldset> <fieldset> <legend>Linguaggio PHP</legend> <p>Programma PHP vuoto</p> <textarea id="ex5" style="height: 350px; width: 100%;" name="test_1"> <?php // Commento PHP for ($i=1; $i <=6; $i++) printf("<H%d>H%d</H%d>\n",$i,$i,$i);
///(Fine file: VUOTO-C-CPP-HTML-PHP-JAVAS-SQL.html)
</TEXTAREA> </fieldset> <fieldset> <legend>Linguaggio SQL</legend> <p>Programma SQL vuoto</p> <textarea id="ex6" style="height: 350px; width: 100%;" name="test_1"> -- Commento SQL DROP TABLE articoli; CREATE TABLE articoli ( codice CHAR ( 4) PRIMARY KEY, descrizione VARCHAR (30), prezzo DECIMAL (10,2) ); INSERT INTO articoli VALUES ('A100', 'Caramella ', 0.10); INSERT INTO articoli VALUES ('A110', 'Liquirizia ', 0.33); INSERT INTO articoli VALUES ('A120', 'Big Bubble ', 0.70); INSERT INTO articoli VALUES ('B100', 'Torta gelato ', 4.10); SELECT codice,descrizione,prezzo FROM articoli ORDER BY descrizione; </TEXTAREA> </fieldset> <fieldset> <legend>Linguaggio Di Progetto LP (estensione .c) </legend> <p>Programma LP vuoto</p> <textarea id="ex7" style="height: 350px; width: 100%;" name="test_1"> /* Programma LP: vuoto.c - esempio di schema vuoto Scritto da: Fabrizio Sacco Data ultima modifica: 16/09/2017 Descrizione: Programma vuoto per scrivere programmi nuovi... Note: ciclo while: MENTRE(condizione) / for: RIPETI(variabile,partenza,arrivo) */ #include "lp.h" START INTERO n; MESSAGGIO("Dammi un numero->"); LEGGI(n); SE (n > 0) INIZIO SCRIVI(n); MESSAGGIO("E' Positivo"); FINE ALTRIMENTI MESSAGGIO("Negativo"); STOP </TEXTAREA> </fieldset> <h5><i>(Vers. 16 Sett 2017)</i></h5> </body> </html>
///(Fine file: VUOTO-C-CPP-HTML-PHP-JAVAS-SQL.html)