Torna indietro   Hardware Upgrade Forum > Software > Programmazione

ASUS NUC 15 Pro e NUC 15 Pro+, mini PC che fondono completezza e duttilità
ASUS NUC 15 Pro e NUC 15 Pro+, mini PC che fondono completezza e duttilità
NUC 15 Pro e NUC 15 Pro+ sono i due nuovi mini-PC di casa ASUS pensati per uffici e piccole medie imprese. Compatti, potenti e pieni di porte per la massima flessibilità, le due proposte rispondono in pieno alle esigenze attuali e future grazie a una CPU con grafica integrata, accompagnata da una NPU per la gestione di alcuni compiti AI in locale.
Cybersecurity: email, utenti e agenti IA, la nuova visione di Proofpoint
Cybersecurity: email, utenti e agenti IA, la nuova visione di Proofpoint
Dal palco di Proofpoint Protect 2025 emerge la strategia per estendere la protezione dagli utenti agli agenti IA con il lancio di Satori Agents, nuove soluzioni di governance dei dati e partnership rafforzate che ridisegnano il panorama della cybersecurity
Hisense A85N: il ritorno all’OLED è convincente e alla portata di tutti
Hisense A85N: il ritorno all’OLED è convincente e alla portata di tutti
Dopo alcuni anni di assenza dai cataloghi dei suoi televisori, Hisense riporta sul mercato una proposta OLED che punta tutto sul rapporto qualità prezzo. Hisense 55A85N è un televisore completo e versatile che riesce a convincere anche senza raggiungere le vette di televisori di altra fascia (e altro prezzo)
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 09-10-2004, 14:03   #1
Steve85
Member
 
Iscritto dal: Oct 2001
Messaggi: 56
Conversione Dec-Bin

Ciao raga! Ho un problema con un programmino che converte i numeri interi decimali in codice binario:


#include <stdio.h>

#define DIM 16

main()
{
int i;
int vet[DIM];
int dec=0;
printf("------BENVENUTO NEL PROGRAMMA DI CONVERSIONE DEC-BIN------\n\n");
printf("Inserisci il valore decimale: ");
scanf("%d",&dec);
printf("\n");
for (i=0;i<DIM;i++)
{
vet[DIM-16+i]=dec%2;
dec=dec/2;
printf("%d ",vet[DIM-16+i]);
}
printf("\n");
scanf(" ");
}


Questo codice mi stampa le cifre da sinistra verso destra.
Pero risulta poco comprensibile, perche i numeri binari si leggono da destra verso sinistra.


#include <stdio.h>

#define DIM 16

main()
{
int i;
int vet[DIM];
int dec=0;
printf("------BENVENUTO NEL PROGRAMMA DI CONVERSIONE DEC-BIN------\n\n");
printf("Inserisci il valore decimale: ");
scanf("%d",&dec);
printf("\n");
for (i=0;i<DIM;i++)
{
vet[DIM-1-i]=dec%2;
dec=dec/2;
printf("%d ",vet[DIM-1-i]);
}
printf("\n");
scanf(" ");
}


Quest'altro invece "dovrebbe" stamparmi i numeri da destra verso sinistra come voglio io...pero me li stampa esattamente uguali come il codice di prima.

Questo è strano perche nel primo ciclo For la prima posizione dell'array è:
vet[16-16+0]---> posizione 0

Nel secondo ciclo For la prima posizione è:
vet[16-1-0] ----> posizione 15

Aiuto pls
Steve85 è offline   Rispondi citando il messaggio o parte di esso
Old 09-10-2004, 18:38   #2
Steve85
Member
 
Iscritto dal: Oct 2001
Messaggi: 56
Nessuno sa dirmi nulla?
Steve85 è offline   Rispondi citando il messaggio o parte di esso
Old 09-10-2004, 18:58   #3
DanieleC88
Senior Member
 
L'Avatar di DanieleC88
 
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
La soluzione e' semplice: il salvataggio della sequenza binaria viene fatto al contrario, e tu stampi il numero mentre converti, quindi lo stampi al contrario. Fai cosi': prendi il secondo esempio, dichiara "vet" come char[], e non come int[], lascia tutto com'e', ma sposta "printf("%d ",vet[DIM-16+i]); " fuori dal ciclo for, cambiandolo in "printf(vet); ".

bye!
__________________

C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai!
DanieleC88 è offline   Rispondi citando il messaggio o parte di esso
Old 09-10-2004, 19:15   #4
Steve85
Member
 
Iscritto dal: Oct 2001
Messaggi: 56
Quindi la variabile vet la devo dichiarare cosi?

char vet[DIM];
....
....
....
printf(vet);



EDIT: Ho provato a fare quello che ho scritto qui sopra....non mi fa nulla. Inserisco il numero decimale...premo enter ma non mi visualizza nessun risultato.

Ultima modifica di Steve85 : 09-10-2004 alle 19:20.
Steve85 è offline   Rispondi citando il messaggio o parte di esso
Old 10-10-2004, 00:45   #5
LimiT-MaTz
Senior Member
 
Iscritto dal: Apr 2003
Città: Genova
Messaggi: 673
se vuoi ho qui il programma che stiamo commentando al corso di fondamenti.
http://www.laser.dist.unige.it/Repos...Esercitazioni/
scarica binlib.

fammi sapere
__________________
MaTz!
LimiT-MaTz è offline   Rispondi citando il messaggio o parte di esso
Old 10-10-2004, 11:31   #6
Steve85
Member
 
Iscritto dal: Oct 2001
Messaggi: 56
Ho scaricato il programmino...pero non me lo compila.
Ho messo nella directory assieme a bin.cpp e bin.h anche il file stdlib.h (preso dalla directory del programma che uso per compilare).

Mi da questo errore:
[Linker error] undefined reference to `WinMain@16'


Cmq nessuno sa come posso modificare il mio programmino?
Steve85 è offline   Rispondi citando il messaggio o parte di esso
Old 10-10-2004, 12:15   #7
Fenomeno85
Senior Member
 
L'Avatar di Fenomeno85
 
Iscritto dal: Jun 2002
Città: Provincia De VaRéSe ~ § ~ Lat.: 45° 51' 7" N Long.: 8° 50' 21" E ~§~ Magica Inter ~ § ~ Detto: A Chi Più Amiamo Meno Dire Sappiamo ~ § ~ ~ § ~ Hobby: Divertimento allo Stato Puro ~ § ~ ~ § ~ You Must Go Out ~ § ~
Messaggi: 8895
Codice PHP:
/*
Conversione da un decimeale in binario
*/

#include <stdio.h>
#include <conio.h>

#define MAX 10

int main (){
    
int valore_bin [MAX], i=1;
    
int valore_da_convertire;
    
int restoval ;
    
printf ("\nInserisci il numero da convertire in binario:\t");
    
scanf ("%d", &valore_da_convertire);
    
val valore_da_convertire;
    
    
//annullamento del vettore 
    
    
for (int y=0y<MAXy++) 
        
valore_bin [y] = 0;
    
    do{
        
resto val 2;
        
val val 2;
        
valore_bin [MAX-i] = resto;
        
++;
    } while (
val != 0);    
    for (
i=0;i<MAX;i++)
        
printf ("%d",valore_bin[i]);
    
printf ("\n\n\nIl programma e' stato realizzato da Fenomeno85");
    
getch ();

bye

avrei voluto mettere gli elementi in una singola variabile ma non ne ho la + pallida idea di come fare :P ... forse con lo shift si può fare

~§~ Sempre E Solo Lei ~§~
__________________
Meglio essere protagonisti della propria tragedia che spettatori della propria vita
Si dovrebbe pensare più a far bene che a stare bene: e così si finirebbe anche a star meglio.
Non preoccuparti solo di essere migliore dei tuoi contemporanei o dei tuoi predecessori.Cerca solo di essere migliore di te stesso
Fenomeno85 è offline   Rispondi citando il messaggio o parte di esso
Old 10-10-2004, 13:12   #8
Steve85
Member
 
Iscritto dal: Oct 2001
Messaggi: 56
Cosi mi funzia...invece! Pero non capisco perche devo stampare vet[i] e non vet[DIM-1-i]. Mah



#include <stdio.h>

#define DIM 16

main()
{
int i;
int vet[DIM];
int dec=0;
printf("------BENVENUTO NEL PROGRAMMA DI CONVERSIONE DEC-BIN------\n\n");
printf("Inserisci il valore decimale: ");
scanf("%d",&dec);
printf("\n");
for (i=0;i<DIM;i++)
{
vet[DIM-1-i]=dec%2;
dec=dec/2;
}

for (i=0;i<DIM;i++)
printf("%d ",vet[i]);

printf("\n");
scanf(" ");
}
Steve85 è offline   Rispondi citando il messaggio o parte di esso
Old 10-10-2004, 13:32   #9
repne scasb
Bannato
 
Iscritto dal: Feb 2003
Messaggi: 947

Ultima modifica di repne scasb : 03-02-2005 alle 14:50.
repne scasb è offline   Rispondi citando il messaggio o parte di esso
Old 11-10-2004, 12:17   #10
DanieleC88
Senior Member
 
L'Avatar di DanieleC88
 
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
Bene, visto che tutti hanno postato il proprio codice, un'altro giorno vi posto il mio elegantissimo codice Ora non ho il mio PC sotto mano, rimando.
__________________

C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai!
DanieleC88 è offline   Rispondi citando il messaggio o parte di esso
Old 11-10-2004, 19:02   #11
DanieleC88
Senior Member
 
L'Avatar di DanieleC88
 
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
Ecco il mio codice:
Codice:
#include	<stdio.h>

#define		MAX				16
#define		bt(v,b)		(((unsigned long) v & (1 << ((unsigned char) b - 1))) > 0)

int main()
{
	char *	buffer;
	char		num		=	123;
	char		j			=	0;

	for (j = 0; j < MAX; j++)
	{
		buffer[MAX - j - 1] = ('0' + bt(num, j));
	}

	buffer[MAX - 1] = 0;
	printf("%s\n", buffer);
	return 0;
}
Tabsize: 2. GVIM theme: darkblue. Language: C. bt = bit test.
__________________

C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai!
DanieleC88 è offline   Rispondi citando il messaggio o parte di esso
Old 11-10-2004, 19:13   #12
Fenomeno85
Senior Member
 
L'Avatar di Fenomeno85
 
Iscritto dal: Jun 2002
Città: Provincia De VaRéSe ~ § ~ Lat.: 45° 51' 7" N Long.: 8° 50' 21" E ~§~ Magica Inter ~ § ~ Detto: A Chi Più Amiamo Meno Dire Sappiamo ~ § ~ ~ § ~ Hobby: Divertimento allo Stato Puro ~ § ~ ~ § ~ You Must Go Out ~ § ~
Messaggi: 8895
Quote:
Originariamente inviato da repne scasb
Non sono un'eperta di C. Prova un po cosi':

Codice:
#define SIZE_BIN (sizeof(dec)<<3)

    do
    {
	printf("%d ",(dec&(1<<i))>>i);
    } while (~--i&(1<<(SIZE_BIN-1)));
}
che sintassi trana spiega un pò che fa

~§~ Sempre E Solo Lei ~§~
__________________
Meglio essere protagonisti della propria tragedia che spettatori della propria vita
Si dovrebbe pensare più a far bene che a stare bene: e così si finirebbe anche a star meglio.
Non preoccuparti solo di essere migliore dei tuoi contemporanei o dei tuoi predecessori.Cerca solo di essere migliore di te stesso
Fenomeno85 è offline   Rispondi citando il messaggio o parte di esso
Old 11-10-2004, 19:56   #13
repne scasb
Bannato
 
Iscritto dal: Feb 2003
Messaggi: 947

Ultima modifica di repne scasb : 03-02-2005 alle 14:49.
repne scasb è offline   Rispondi citando il messaggio o parte di esso
Old 11-10-2004, 20:17   #14
repne scasb
Bannato
 
Iscritto dal: Feb 2003
Messaggi: 947

Ultima modifica di repne scasb : 03-02-2005 alle 14:48.
repne scasb è offline   Rispondi citando il messaggio o parte di esso
Old 11-10-2004, 20:26   #15
fek
Senior Member
 
L'Avatar di fek
 
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
Quote:
Originariamente inviato da repne scasb
Codice:
    } while (~--i&(1<<(SIZE_BIN-1)));
}
Sembra tutto molto strano, ma serve solo per aiutare il compilatore. 1<<(SIZE_BIN-1) e' una costante ed e' il bit di segno di i (i e' dichiarato int come dec, quindi hanno la stessa lunghezza in byte). L'istruzione semplicemente: decrementa i e test il bit di segno, se il bit di segno e' settato esce dal loop (il not (~) serve proprio per la permanenza all'interno del loop). Tutto cio' serve per permettere al compilatore di utilizzare JNS invece di JNL e risparmiare una istruzione assembly, in sostanza il tutto (se il compilatore compila per bene) viene tradotto come:

Codice:
	dec	[_i]
	jns	loop_dec
Rendendo pero' il codice piu' oscuro da leggere e quindi di minore qualita'

Non e' codice migliore e piu' leggibile scritto cosi'?

Codice:
  --i;
}
while (i >= 0);
Ancora piu' leggibile con un semplice ciclo for.

Ultima modifica di fek : 11-10-2004 alle 20:29.
fek è offline   Rispondi citando il messaggio o parte di esso
Old 11-10-2004, 21:48   #16
repne scasb
Bannato
 
Iscritto dal: Feb 2003
Messaggi: 947

Ultima modifica di repne scasb : 03-02-2005 alle 14:48.
repne scasb è offline   Rispondi citando il messaggio o parte di esso
Old 11-10-2004, 22:53   #17
fek
Senior Member
 
L'Avatar di fek
 
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
Quote:
Originariamente inviato da repne scasb
E' necessario mettersi d'accordo sul concetto di migliore. Per migliore si puo intendere:
La definizione piu' semplice che si puo' dare di "migliore" e' un programma che risolve il problema che e' stato posto e nulla di piu'.

Fermo restando che le definizioni che hai dato dopo sono ottime.

Quote:
In generale io svluppo in qualsiasi linguaggio utilizzando il modello del migliore tipo 4), indipendentemente dal mio interlocutore. Ne caso specifico non ho utilizzato (i>=0), in quanto il compilatore avrebbe tradotto la sequanza con:
So come avrebbe tradotto il compilatore la sequenza che ho scritto.
Il problema qui era la conversione da decimale a binario di un numero solo (non di un milione ad esempio, cosa che sarebbe stata decisamente diversa). Ho anche letto il manuale da te riportato.

La tua sequenza risparmia (a seconda del processore) dai 4 ai 10 colpi di clock in totale su tutta l'esecuzione del programma. Considerando che alla fine del programma riportato c'e' una printf che da sola usa almeno qualche decina di migliaia di colpi di clock, i 10 colpi di clock risparmiati rappresentano meno di una parta su mille. Ovvero un risparmio del tutto trascurabile su una sola esecuzione del programma. Anche immaginando un milione di esecuzioni, sarebbe stato enormemente piu' vantaggioso andare ad ottimizzare l'output con una funzione diversa dalla printf piuttosto che quei 10 colpi di clock sulla fine del ciclo.

Infine, quei 10 colpi di clock non arrivano gratuitamente, ma impongono una minore leggibilita' del codice, ed un maggior lavoro da parte di chi quel codice dovra' leggerlo e magari mantenerlo in futuro. Qual e' la risorsa piu' scarsa? Il tempo cpu o il tempo del programmatore? La seconda e per la seconda si deve ottimizzare, quindi, se devo scegliere se aiutare il compilatore o aiutare chi legge il mio codice, scelgo senza ombra di dubbio la seconda, a meno che dal profiling scopro che il codice che sto scrivendo e' un collo di bottiglia della mia applicazione. In questo caso, e solo in questo, e solo dopo che non sono riuscito ad ottimizzare algoritmicamente alloracerchero' di aiutare il compilatore salvo commentando in maniera diffusa le linee di codice che non sono chiare, magari aggiungendo una versione in codice o pseudo codice piu' leggibile.

Quote:
Purtroppo i compillatori perfetti sono da venire, e quando scrivo codice in C, tento di aiutare in qualche modo il compilatore (e per fortuna che i e' signed, se fosse stato unsigned poiche' la dec [_i] non aggiorna il carry sarebbe stato necessario o la sub o la cmp (con il mio codice no)).
Ma il tuo codice ha imposto a me una decina di secondi per essere compreso, invece del secondo scarso che la mia versione avrebbe richiesto a chiunque, anche alle prime armi.
In sintesi, una versione del codice piu' leggibile e' preferibile nel 99% dei casi, salvo i casi dove e' richiesta un'ottimizzazione spinta del codice.
Quello riportato in questo topic non mi sembra uno di questi casi.
fek è offline   Rispondi citando il messaggio o parte di esso
Old 11-10-2004, 23:14   #18
LimiT-MaTz
Senior Member
 
Iscritto dal: Apr 2003
Città: Genova
Messaggi: 673
Codice PHP:
#include <iostream.h>
#include <stdlib.h>
// DEFINIZIONI UTENTE
#define EOS '\0'
#define MAX '10'

// FUNZIONE PROTOTIPO //
int bin2dec(char[]);
char *dec2bin(int);
// FUNZIONE PROTOTIPO //

int main(){ 

char str[MAX];
int result,select,dec;
int cicle 0;
// INTRO
cout << "  ***************\n  " << "  Conversion   \n" <<"  ***************\n  " << endl;
cout << "\n\n";
cout << "  # 1 #  *** Bin2Dec ***  " << "\n" << endl;
cout << "  # 2 #  *** Dec2Bin ***  " << "\n" << endl;

while (
cicle == 0){
cout << "  Select:  "cin >> select;
// STRUMENTO DI SELEZIONE
switch( select ){

       case 
1:
           
cout << "\n\n\n  ***************\n  " << "    Bin2dec    \n" <<"  ***************\n  "<< endl;
           
cout << "   Inserisci un numero Binario   \n" << "   " << endl;
           
cin >> str;
           
result bin2dec(str) ;
           
cout << "il numero binario  " << str << "  corrisponde a  " << result << "  in base 10" << endl;
           
cicle 1;
           break;
       case 
2:
           
cout << "\n\n\n  ***************\n  " << "    Dec2Bin    \n" <<"  ***************\n  "<< endl;
           
cout << "   Inserisci un numero Decimale   \n"<< "   " << endl;
           
cin >> dec;
           
cout << "il numero decimale  " << dec << "  corrisponde a  " << dec2bin(dec) << endl;
           
cicle 1;
           break;
       default:
           
cicle 0;}
}
           


return 
0;
}

//                                        //
// FUNZIONE DECODER BINARIO TO DECIMALE //
//                                        //
int bin2dec(char btr[]){
    
int d 0;
    
int i;
    if ( 
btr[0] == '1' ){
        
1;}
    for(
1btr[i] != EOS i++){
        
2;
        if ( 
btr[i] == '1' )
            
1;
    }
    return 
d;}

//                                        //
// FUNZIONE DECODER DECIMALE TO BINARIO //
//                                        //
char *dec2bin(int input){
    
char *bin;
    
int input2,i,value;
    
input2 input;

    for(
int lenght=1input2 != 0lenght++){
        
input2 input2 2; }
    
    
bin = (char *) malloc(lenght+1);

    for(
i=lenght;>= 0i--){
        
value input 2;
        if (
value == 0)
            
bin[i] = '0';
        else 
bin[i] = '1';
        
input input 2;
    }
    
    
bin[lenght] = EOS;
    return 
bin;

iil programma nella decifrazione dec to bin mi da qualche problema mi visualizza valori del tipo: 0001010 invece che 1010 non riesco a capire dove sia il problema.
vi ringrazio in anticippo
__________________
MaTz!
LimiT-MaTz è offline   Rispondi citando il messaggio o parte di esso
Old 11-10-2004, 23:29   #19
fek
Senior Member
 
L'Avatar di fek
 
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
Quote:
Originariamente inviato da LimiT-MaTz
iil programma nella decifrazione dec to bin mi da qualche problema mi visualizza valori del tipo: 0001010 invece che 1010 non riesco a capire dove sia il problema.
vi ringrazio in anticippo
Prova cosi':

Codice:
    char* str = bin;

    bool firstOneFound = false;

    for ( i = lenght; i >= 0; --i)
   {
        value = input % 2;
       
        if (0 == value)
        {
            if (firstOneFound)
            {
               *str++= '0';
            }
        }
        else 
        {
            firstOneFound = true;
            *str++ = '1';
        }

        input = input / 2;
    } 

      length = str - bin;

     *str++ = EOS;
Occhio che hai un memory leak nella funzione bin2dec, perche' allochi un blocco di memoria e non lo disallochi mai.
Non e' banale da risolvere, ma puoi seguire un paio di strade:

1) Usi la classe std::string e la restituisci per valore e non per reference; e' comodo da usare, risolve elegantemente il problema ma abusare della classe std::string puo' peggiorare notevolmente le prestazioni se non stai attento (non e' il tuo caso in questo esempio)

2) Passi esplicitamente alla funzione un blocco di memoria da riempire e la sua lunghezza, se ti servono piu' caratteri di quelli disponibili restituisci un errore; in genere e' il metodo preferibile.

Come regola generale non allocare mai memoria dentro una funzione per poi restituire il blocco allocato all'esterno: chi alloca una risorsa (metodo o classe) deve sempre occuparsi di liberare la risorsa. La seconda tecnica che ti ho suggerito segue questo principio.

Ultima modifica di fek : 11-10-2004 alle 23:32.
fek è offline   Rispondi citando il messaggio o parte di esso
Old 12-10-2004, 12:06   #20
repne scasb
Bannato
 
Iscritto dal: Feb 2003
Messaggi: 947

Ultima modifica di repne scasb : 03-02-2005 alle 14:47.
repne scasb è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


ASUS NUC 15 Pro e NUC 15 Pro+, mini PC che fondono completezza e duttilità ASUS NUC 15 Pro e NUC 15 Pro+, mini PC che fondo...
Cybersecurity: email, utenti e agenti IA, la nuova visione di Proofpoint Cybersecurity: email, utenti e agenti IA, la nuo...
Hisense A85N: il ritorno all’OLED è convincente e alla portata di tutti Hisense A85N: il ritorno all’OLED è convi...
Acer TravelMate P6 14 AI: il Copilot+ PC sotto il chilo per il professionista in movimento Acer TravelMate P6 14 AI: il Copilot+ PC sotto i...
Recensione Borderlands 4, tra divertimento e problemi tecnici Recensione Borderlands 4, tra divertimento e pro...
Xbox Game Pass cambia: nuovi piani e pre...
Intel produrrà chip per AMD? L'in...
Ecco il nuovo Amazon Luna: videogiochi p...
ISRO: prosegue lo sviluppo della navicel...
CoD Black Ops 7 offrirà la beta p...
Il telescopio spaziale James Webb sta ai...
Crucial spinge sui moduli LPCAMM2: fino ...
Imgur blocca gli utenti del Regno Unito:...
ROG Xbox Ally già in consegna: qu...
Ubisoft annuncia Vantage Studios: Assass...
Il solare diventa la prima fonte di elet...
Google Home si rinnova completamente: ar...
Dense Geometry Format (DGF): novit&agrav...
Gemini for Home arriva a ottobre sui dis...
Amazon Smart Air Quality Monitor: a soli...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 03:32.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v