Per includere le librerie durante la compilazione in Dev-C++, oltre ad avere gia' incluso il DevPack per esempio di Sqlite, si deve indicare anche in Progetto/Opzioni Progetto/Parametri lo switch appropriato
Nell'esempio della figura e' incluso lo switch -lsqlite3 per Sqlite
martedì 18 settembre 2012
lunedì 17 settembre 2012
Esempio Mandelbrot con PngWriter/C
In questo esempio l'insieme di Mandelbrot e' stato generato con la libreria PngWriter che permette di creare dei file png.
La libreria e' gia' pacchettizzata in Debian ed e' di facile utilizzo perche' si deve solo indicare le dimensioni del file png da creare e le coordinate del punto da disegnare con il colore in formato RGB
Per compilare il file di esempio deve essere utilizzata la seguente stringa
g++ mand_png.c -o mand_png `freetype-config --cflags` -I/usr/local/include -L/usr/local/lib -lpng -lpngwriter -lz -lfreetype
I file del progetto sono reperibili a questo Link
Per visualizzare il file png da linea di comando puo' essere utile installare il pacchetto ImageMagick e digitare
display mandelbrot.png
-------------------------------------------------
#include <pngwriter.h>
#define SCREEN_WIDTH 1024
#define SCREEN_HEIGHT 768
float re_min = -2.0;
float im_min = -1.2;
float re_max = 1.0;
float im_max = 1.2;
double iterazioni = 255;
double r;
float a,b;
float x,y,x_new,y_new;
int test;
int k,j,i;
int keypress = 0;
int main() {
pngwriter png(SCREEN_WIDTH, SCREEN_HEIGHT,0,"mandelbrot.png");
float re_factor = (re_max-re_min);
float im_factor = (im_max-im_min);
for (i=0;i<SCREEN_HEIGHT;i++)
{
for (j=0;j<SCREEN_WIDTH;j++)
{
a = re_min+(j*re_factor/SCREEN_WIDTH);
b = im_min+(i*im_factor/SCREEN_HEIGHT);
x = 0;
y = 0;
test = 0;
for (k=0;k<iterazioni;k++)
{
x_new = (x*x)-(y*y)+a;
y_new = (2*x*y)+b;
if (((x_new*x_new)+(y_new*y_new))>4)
{
r = k%2;
png.plot(j,i, r, r, r);
break;
}
x = x_new;
y = y_new;
}
}
}
png.close();
return(0);
}
La libreria e' gia' pacchettizzata in Debian ed e' di facile utilizzo perche' si deve solo indicare le dimensioni del file png da creare e le coordinate del punto da disegnare con il colore in formato RGB
Per compilare il file di esempio deve essere utilizzata la seguente stringa
g++ mand_png.c -o mand_png `freetype-config --cflags` -I/usr/local/include -L/usr/local/lib -lpng -lpngwriter -lz -lfreetype
I file del progetto sono reperibili a questo Link
Per visualizzare il file png da linea di comando puo' essere utile installare il pacchetto ImageMagick e digitare
display mandelbrot.png
-------------------------------------------------
#include <pngwriter.h>
#define SCREEN_WIDTH 1024
#define SCREEN_HEIGHT 768
float re_min = -2.0;
float im_min = -1.2;
float re_max = 1.0;
float im_max = 1.2;
double iterazioni = 255;
double r;
float a,b;
float x,y,x_new,y_new;
int test;
int k,j,i;
int keypress = 0;
int main() {
pngwriter png(SCREEN_WIDTH, SCREEN_HEIGHT,0,"mandelbrot.png");
float re_factor = (re_max-re_min);
float im_factor = (im_max-im_min);
for (i=0;i<SCREEN_HEIGHT;i++)
{
for (j=0;j<SCREEN_WIDTH;j++)
{
a = re_min+(j*re_factor/SCREEN_WIDTH);
b = im_min+(i*im_factor/SCREEN_HEIGHT);
x = 0;
y = 0;
test = 0;
for (k=0;k<iterazioni;k++)
{
x_new = (x*x)-(y*y)+a;
y_new = (2*x*y)+b;
if (((x_new*x_new)+(y_new*y_new))>4)
{
r = k%2;
png.plot(j,i, r, r, r);
break;
}
x = x_new;
y = y_new;
}
}
}
png.close();
return(0);
}
venerdì 14 settembre 2012
Esempio GUI con RAD C++ in Windows
Un ulteriore esempio di Gui utilizzando stavolta delle librerie Rad-C++ che sono disponibili solo per Windows
Il programma e' stato compilato usando Dev-C++ (in versione portable per altro)
Dev-C++ Schermata principale |
Finestra di Package Manager |
-----------------------------------------------------------
#include <radc++.h>
Form form1("Progress Bar",100,100,215,150);
ProgressBar pgb1(-1,10,10,190, 20,form1,RCP_HORIZONTAL);
Label label1("0",-1,90,40 ,30,20,form1);
Track track(AUTO_ID,10,70,190,30,form1);
FormProcedure proc(FormProcArgs) {
ON_CLOSE() Application.close();
ON_TRACK_CHANGE(track) {
int pos = track.position;
label1.caption = str(pos);
pgb1.percent=pos;
}
return 0;
}
rad_main()
form1.procedure = proc;
track.minRange = 0;
track.maxRange = 100;
rad_end()
FreeDos in Qemu
Per installare FreeDos in QEmu la procedura e' abbastanza semplice
prima si crea un file della dimensione voluta del futuro C:\ (in questo caso 400 Mb) e si scarica il file fdfullcd.iso dal sito di FreeDos
dd if=/dev/zero of=freedosfile.img bs=1024 count=400000
successivamente si lancia l'emulatore indicando il supporto di installazione nel cdrom e specificando di fare il boot da D
qemu -cdrom fdfullcd.iso -hda freedosfile.img -boot d
si seguono quindi le istruzioni a schermo
Per avviare la macchina una volta terminato il processo e' sufficiente
qemu -hda freedosfile.img -boot c
Uno dei problemi con QEmu/FreeDos e' quello di non poter indicare in modo semplice una cartella condivisa tra il sistema Guest e quello Host in modo da inserire i file di installazione dei futuri programmi
Leggendo su Internet molti settano QEmu per gestire una rete virtuale ed effettuano un collegamento di rete tra Host e Guest
per me e' stata piu' semplice inserire i file dei programmi su una chiavetta USB e poi creare una immagine img della chiavetta mediante il seguente comando
dd if=/dev/sdb of=/home/luca/qemu/usb.img bs=1024
a questo punto si puo' lanciare QEmu indicando nel disco D: l'immagine della chiavetta
qemu -hda freedos.img -hdb usb.img -boot c
Nell'immagine di FreeDos completa sono inclusi molti software compreso OpenGem. Prima di poterlo utilizzare deve essere pero' installato. Per farlo si deve andare nella cartella FDos/OpenGem e far partire l'installazione
Ovviamente poter usare nell'emulatore un programma che e' stato tuo compagno per almeno 5 anni non ha prezzo e quindi via con l'installazione di Turbo Pascal 5
Per il funzionamento del Turbo Pascal 5 e' importante selezionare l'opzione 1 al boot di FreeDos
Dopo l'installazione dei dischetti il rassicurante schermo blu e bianco della IDE di Turbo Pascal
Fa abbastanza impressione vedere funzionare dopo tanto tempo l'esempio BGIDemo
Quasi quasi provo ad installare Fractint.........................
prima si crea un file della dimensione voluta del futuro C:\ (in questo caso 400 Mb) e si scarica il file fdfullcd.iso dal sito di FreeDos
dd if=/dev/zero of=freedosfile.img bs=1024 count=400000
successivamente si lancia l'emulatore indicando il supporto di installazione nel cdrom e specificando di fare il boot da D
qemu -cdrom fdfullcd.iso -hda freedosfile.img -boot d
si seguono quindi le istruzioni a schermo
Per avviare la macchina una volta terminato il processo e' sufficiente
qemu -hda freedosfile.img -boot c
Uno dei problemi con QEmu/FreeDos e' quello di non poter indicare in modo semplice una cartella condivisa tra il sistema Guest e quello Host in modo da inserire i file di installazione dei futuri programmi
Leggendo su Internet molti settano QEmu per gestire una rete virtuale ed effettuano un collegamento di rete tra Host e Guest
per me e' stata piu' semplice inserire i file dei programmi su una chiavetta USB e poi creare una immagine img della chiavetta mediante il seguente comando
dd if=/dev/sdb of=/home/luca/qemu/usb.img bs=1024
a questo punto si puo' lanciare QEmu indicando nel disco D: l'immagine della chiavetta
qemu -hda freedos.img -hdb usb.img -boot c
Prompt di FreeDos |
Open Gem |
Ovviamente poter usare nell'emulatore un programma che e' stato tuo compagno per almeno 5 anni non ha prezzo e quindi via con l'installazione di Turbo Pascal 5
Per il funzionamento del Turbo Pascal 5 e' importante selezionare l'opzione 1 al boot di FreeDos
Dopo l'installazione dei dischetti il rassicurante schermo blu e bianco della IDE di Turbo Pascal
Fa abbastanza impressione vedere funzionare dopo tanto tempo l'esempio BGIDemo
BGIDemo Turbo Pascal |
Quasi quasi provo ad installare Fractint.........................
Debian Testing in Fujitsu Siemens Amilo M6500
Questa macchina e' stato il mio computer di produzione per almeno un anno intorno all'anno 2002 e montava una Debian 3.0.
Dopo un po' di tempo, circa un anno fa, ho provato a farlo ripartire per reinstallare una nuova Debian ma non sono riuscito a fare partire il boot da CD (il Bios non ammette la partenza da USB); in vena al masochismo avevo provato a creare il boot da floppy ma senza successo.
Un paio di giorni fa ho ritirato fuori la macchina dal deposito e presentava lo stesso problema...un po' per scherzo ho aperto il cassetto del CD ed ho spostato a mano la slitta che pilota il laser in quanto era parcheggiata in una posizione anomale tutta sull'esterno...da quel momento il computer e' ripartito ed ho potuto effettuare l'installazione di una Debian Testing Wheezy
Le caratteristiche del computer (derivate anche da cat /proc/cpuinfo) sono
Pentium III Coppermine 995.6 MHz
Hd 10GigaByte
Risoluzione monitor1024x768
il computer adesso ha 192 Mb di Ram anche se di fatto sono montate una SoDimm da 256 Mb ed una da 64 Mb in quanto vengono lette solo schedine Ram single side...comunque in totale la scheda madre regge al massimo 256 Mb
Il Modem interno, recuperato tramite lo script,
Model Intel 82440MX Ac'97 modprobe snd_intel8x0m
Per la connettivita' wireless ho ritirato fuori una scheda Belkin che. leggendo /var/log/messages, possiede un chip Broadcom 4318 che avendo un driver proprietario non e' installato di default in Linux
per rendere funzionante la scheda e' sufficiente usare il comando
apt-get install firmware-b43-installer
La connettivita' via cavo e' stata assicurata da una IBM Etherjet 10/100 con monta un chip Xircom che viene riconosciuto senza problemi durante l'installazione
PS: mi ero scordato di quanto scaldavano i portatili di qualche anno fa
Dopo un po' di tempo, circa un anno fa, ho provato a farlo ripartire per reinstallare una nuova Debian ma non sono riuscito a fare partire il boot da CD (il Bios non ammette la partenza da USB); in vena al masochismo avevo provato a creare il boot da floppy ma senza successo.
Un paio di giorni fa ho ritirato fuori la macchina dal deposito e presentava lo stesso problema...un po' per scherzo ho aperto il cassetto del CD ed ho spostato a mano la slitta che pilota il laser in quanto era parcheggiata in una posizione anomale tutta sull'esterno...da quel momento il computer e' ripartito ed ho potuto effettuare l'installazione di una Debian Testing Wheezy
Le caratteristiche del computer (derivate anche da cat /proc/cpuinfo) sono
Pentium III Coppermine 995.6 MHz
Hd 10GigaByte
Risoluzione monitor1024x768
il computer adesso ha 192 Mb di Ram anche se di fatto sono montate una SoDimm da 256 Mb ed una da 64 Mb in quanto vengono lette solo schedine Ram single side...comunque in totale la scheda madre regge al massimo 256 Mb
Il Modem interno, recuperato tramite lo script,
Model Intel 82440MX Ac'97 modprobe snd_intel8x0m
Amilo M6500 con Wheezy in funzione |
Scheda identificativa |
Per la connettivita' wireless ho ritirato fuori una scheda Belkin che. leggendo /var/log/messages, possiede un chip Broadcom 4318 che avendo un driver proprietario non e' installato di default in Linux
Belkin Wireless PCMCIA |
apt-get install firmware-b43-installer
e' importante avere la connessione di rete perche' lo script scarica da Internet in automatico i driver necessari
La connettivita' via cavo e' stata assicurata da una IBM Etherjet 10/100 con monta un chip Xircom che viene riconosciuto senza problemi durante l'installazione
IBM EtherJet 10/100 |
mercoledì 12 settembre 2012
Esempio Mandelbrot in C/Ncurses
In questo caso l'insieme di Mandelbrot e' stato restituito su un display a caratteri 80x25 usando la libreria ncurses
Il progetto puo' essere scaricato a questo link
----------------------------------------------
#include <ncurses.h>
#define SCREEN_WIDTH 80
#define SCREEN_HEIGHT 25
float re_min = -2.0;
float im_min = -1.2;
float re_max = 1.0;
float im_max = 1.2;
int iterazioni = 255;
float a,b;
float x,y,x_new,y_new;
int k,j,i;
int keypress = 0;
int main() {
initscr();
start_color();
init_pair(0,COLOR_RED,COLOR_BLACK);
init_pair(1,COLOR_RED,COLOR_RED);
init_pair(2,COLOR_RED,COLOR_GREEN);
init_pair(3,COLOR_RED,COLOR_YELLOW);
init_pair(4,COLOR_RED,COLOR_BLUE);
init_pair(5,COLOR_RED,COLOR_MAGENTA);
init_pair(6,COLOR_RED,COLOR_CYAN);
init_pair(7,COLOR_RED,COLOR_WHITE);
float re_factor = (re_max-re_min);
float im_factor = (im_max-im_min);
for (i=0;i<SCREEN_HEIGHT;i++)
{
for (j=0;j<SCREEN_WIDTH;j++)
{
a = re_min+(j*re_factor/SCREEN_WIDTH);
b = im_min+(i*im_factor/SCREEN_HEIGHT);
x = 0;
y = 0;
for (k=0;k<iterazioni;k++)
{
x_new = (x*x)-(y*y)+a;
y_new = (2*x*y)+b;
if (((x_new*x_new)+(y_new*y_new))>4)
{
switch (k%8)
{
case 0:
attron(COLOR_PAIR(0));
break;
case 1:
attron(COLOR_PAIR(1));
break;
case 2:
attron(COLOR_PAIR(2));
break;
case 3:
attron(COLOR_PAIR(3));
break;
case 4:
attron(COLOR_PAIR(4));
break;
case 5:
attron(COLOR_PAIR(5));
break;
case 6:
attron(COLOR_PAIR(6));
break;
case 7:
attron(COLOR_PAIR(7));
break;
}
mvprintw(i,j," ");
break;
}
x = x_new;
y = y_new;
}
}
}
refresh();
getch();
endwin();
return(0);
}
----------------------------------------------
Era un po' di tempo che non vedevo Mandelbrot in modalita' testo...piu' o meno dal 1991 quando un virus per DOS visualizzava l'immagine sottostante (nel dettaglio era Tequila Virus)
Il progetto puo' essere scaricato a questo link
----------------------------------------------
#include <ncurses.h>
#define SCREEN_WIDTH 80
#define SCREEN_HEIGHT 25
float re_min = -2.0;
float im_min = -1.2;
float re_max = 1.0;
float im_max = 1.2;
int iterazioni = 255;
float a,b;
float x,y,x_new,y_new;
int k,j,i;
int keypress = 0;
int main() {
initscr();
start_color();
init_pair(0,COLOR_RED,COLOR_BLACK);
init_pair(1,COLOR_RED,COLOR_RED);
init_pair(2,COLOR_RED,COLOR_GREEN);
init_pair(3,COLOR_RED,COLOR_YELLOW);
init_pair(4,COLOR_RED,COLOR_BLUE);
init_pair(5,COLOR_RED,COLOR_MAGENTA);
init_pair(6,COLOR_RED,COLOR_CYAN);
init_pair(7,COLOR_RED,COLOR_WHITE);
float re_factor = (re_max-re_min);
float im_factor = (im_max-im_min);
for (i=0;i<SCREEN_HEIGHT;i++)
{
for (j=0;j<SCREEN_WIDTH;j++)
{
a = re_min+(j*re_factor/SCREEN_WIDTH);
b = im_min+(i*im_factor/SCREEN_HEIGHT);
x = 0;
y = 0;
for (k=0;k<iterazioni;k++)
{
x_new = (x*x)-(y*y)+a;
y_new = (2*x*y)+b;
if (((x_new*x_new)+(y_new*y_new))>4)
{
switch (k%8)
{
case 0:
attron(COLOR_PAIR(0));
break;
case 1:
attron(COLOR_PAIR(1));
break;
case 2:
attron(COLOR_PAIR(2));
break;
case 3:
attron(COLOR_PAIR(3));
break;
case 4:
attron(COLOR_PAIR(4));
break;
case 5:
attron(COLOR_PAIR(5));
break;
case 6:
attron(COLOR_PAIR(6));
break;
case 7:
attron(COLOR_PAIR(7));
break;
}
mvprintw(i,j," ");
break;
}
x = x_new;
y = y_new;
}
}
}
refresh();
getch();
endwin();
return(0);
}
----------------------------------------------
Era un po' di tempo che non vedevo Mandelbrot in modalita' testo...piu' o meno dal 1991 quando un virus per DOS visualizzava l'immagine sottostante (nel dettaglio era Tequila Virus)
Il virus era scritto in Assembler e ricordo che lo debuggai per estrarre la parte di codice relativa a Mandelbrot
Esempio insieme di Mandelbrot in C/SDL
Un esempio di creazione dell'insieme di Mandelbrot impiegando la libreria SDL per la parte grafica
--------------------------------------------
#include "SDL/SDL.h"
#include <stdio.h>
#define SCREEN_WIDTH 640
#define SCREEN_HEIGHT 480
#define SCREEN_DEPTH 8
float re_min = -2.0;
float im_min = -1.2;
float re_max = 1.0;
float im_max = 1.2;
int iterazioni = 255;
float a,b;
float x,y,x_new,y_new;
int test;
int k,j,i;
int keypress = 0;
int main() {
SDL_Surface *screen;
Uint8 *p;
SDL_Event event;
float re_factor = (re_max-re_min);
float im_factor = (im_max-im_min);
SDL_Init(SDL_INIT_VIDEO);
screen = SDL_SetVideoMode(SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_DEPTH, SDL_SWSURFACE);
for (i=0;i<SCREEN_HEIGHT;i++)
{
for (j=0;j<SCREEN_WIDTH;j++)
{
a = re_min+(j*re_factor/SCREEN_WIDTH);
b = im_min+(i*im_factor/SCREEN_HEIGHT);
x = 0;
y = 0;
test = 0;
for (k=0;k<iterazioni;k++)
{
x_new = (x*x)-(y*y)+a;
y_new = (2*x*y)+b;
if (((x_new*x_new)+(y_new*y_new))>4)
{
test = k;
p = (Uint8 *)screen->pixels + i * screen->pitch + j * screen->format->BytesPerPixel;
*p=(k%255);
break;
}
x = x_new;
y = y_new;
}
}
}
SDL_Flip(screen);
printf("Finito\n\r");
while (!keypress)
{
while (SDL_PollEvent(&event))
{
switch (event.type)
{
case SDL_KEYDOWN:
keypress = 1;
}
}
}
SDL_Quit();
return(0);
}
--------------------------------------------
il progetto puo' essere scaricato a questo indirizzo link
--------------------------------------------
#include "SDL/SDL.h"
#include <stdio.h>
#define SCREEN_WIDTH 640
#define SCREEN_HEIGHT 480
#define SCREEN_DEPTH 8
float re_min = -2.0;
float im_min = -1.2;
float re_max = 1.0;
float im_max = 1.2;
int iterazioni = 255;
float a,b;
float x,y,x_new,y_new;
int test;
int k,j,i;
int keypress = 0;
int main() {
SDL_Surface *screen;
Uint8 *p;
SDL_Event event;
float re_factor = (re_max-re_min);
float im_factor = (im_max-im_min);
SDL_Init(SDL_INIT_VIDEO);
screen = SDL_SetVideoMode(SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_DEPTH, SDL_SWSURFACE);
for (i=0;i<SCREEN_HEIGHT;i++)
{
for (j=0;j<SCREEN_WIDTH;j++)
{
a = re_min+(j*re_factor/SCREEN_WIDTH);
b = im_min+(i*im_factor/SCREEN_HEIGHT);
x = 0;
y = 0;
test = 0;
for (k=0;k<iterazioni;k++)
{
x_new = (x*x)-(y*y)+a;
y_new = (2*x*y)+b;
if (((x_new*x_new)+(y_new*y_new))>4)
{
test = k;
p = (Uint8 *)screen->pixels + i * screen->pitch + j * screen->format->BytesPerPixel;
*p=(k%255);
break;
}
x = x_new;
y = y_new;
}
}
}
SDL_Flip(screen);
printf("Finito\n\r");
while (!keypress)
{
while (SDL_PollEvent(&event))
{
switch (event.type)
{
case SDL_KEYDOWN:
keypress = 1;
}
}
}
SDL_Quit();
return(0);
}
--------------------------------------------
Iscriviti a:
Post (Atom)
Debugger integrato ESP32S3
Aggiornamento In realta' il Jtag USB funziona anche sui moduli cinesi Il problema risiede nell'ID USB della porta Jtag. Nel modulo...
-
In questo post viene indicato come creare uno scatterplot dinamico basato da dati ripresi da un file csv (nel dettaglio il file csv e' c...
-
Questo post e' a seguito di quanto gia' visto nella precedente prova Lo scopo e' sempre il solito: creare un sistema che permet...
-
La scheda ESP32-2432S028R monta un Esp Dev Module con uno schermo TFT a driver ILI9341 di 320x240 pixels 16 bit colore.Il sito di riferiment...