Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo
Lenovo Legion Go 2 è la nuova handheld PC gaming con processore AMD Ryzen Z2 Extreme (8 core Zen 5/5c, GPU RDNA 3.5 16 CU) e schermo OLED 8,8" 1920x1200 144Hz. È dotata anche di controller rimovibili TrueStrike con joystick Hall effect e una batteria da 74Wh. Rispetto al dispositivo che l'ha preceduta, migliora ergonomia e prestazioni a basse risoluzioni, ma pesa 920g e costa 1.299€ nella configurazione con 32GB RAM/1TB SSD e Z2 Extreme
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti
A re:Invent 2025, AWS mostra un’evoluzione profonda della propria strategia: l’IA diventa una piattaforma di servizi sempre più pronta all’uso, con agenti e modelli preconfigurati che accelerano lo sviluppo, mentre il cloud resta la base imprescindibile per governare dati, complessità e lock-in in uno scenario sempre più orientato all’hybrid cloud
Cos'è la bolla dell'IA e perché se ne parla
Cos'è la bolla dell'IA e perché se ne parla
Si parla molto ultimamente di "bolla dell'intelligenza artificiale", ma non è sempre chiaro perché: l'IA è una tecnologia molto promettente e che ha già cambiato molte cose dentro e fuori le aziende, ma ci sono enormi aspettative che stanno gonfiando a dismisura i valori delle azioni e distorcendo il mercato. Il che, com'è facile intuire, può portare a una ripetizione della "bolla dotcom", e forse anche di quella dei mutui subprime. Vediamo perché
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 18-12-2002, 20:37   #1
misterx
Senior Member
 
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3739
C++ ed HTML

ho scritto un programma in C/C++ nel quale sono presenti una miriade di stringhe, redirette su disco di questo tipo:

fprintf(fp,"<body bgcolor=\"#000000\">\n");
fprintf(fp,"<center>\n");
fprintf(fp,"<table border="1">\n");
fprintf(fp,"<tr>\n");
.....................................

queste, sono ancora delle più semplici, molte sono di gran lunga molto più complesse; il risultato è che tra:
codice C/C++/HTML/javascript il tutto diviene alquanto illeggibile e poco manutentabile

non volevo pensare ad un file esterno sul quale salvare il codice HTML o javascipt e poi richiamarlo all'occorrenza, ma ad un qualcosa che rimanga all'interno dell'eseguibile

se avete suggerimenti o esperienze analoghe

grazie 1000
misterx è offline   Rispondi citando il messaggio o parte di esso
Old 19-12-2002, 02:38   #2
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Un #define ?

#define HTMLHEADER "<body bgcolor=\"#000000\">\n<center>\n<table border=\"1\">\n<tr>\n"

Altrimenti puoi sempre definire una variabile che contiene quel codice...
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 19-12-2002, 07:32   #3
misterx
Senior Member
 
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3739
la domanda è nata in quanto mi sono chiesto come fanno ad esempio word o excel quando si esporta una tabella o un documento in formato HTML

sicuramente per non perdersi hanno adottato qualche tecnica particolare che rende il codice ancora leggibile
misterx è offline   Rispondi citando il messaggio o parte di esso
Old 19-12-2002, 08:43   #4
lombardp
Senior Member
 
L'Avatar di lombardp
 
Iscritto dal: Jun 2002
Città: Firenze
Messaggi: 630
Quote:
Originally posted by "cionci"

Un #define ?

#define HTMLHEADER "<body bgcolor=\"#000000\">\n<center>\n<table border=\"1\">\n<tr>\n"
In più potresti inserire la lunga lista di #define all'interno di un file H, che poi vai a includere dove gli utilizzi. COsì il tuop codice risulta compatto e leggibile, ed il file H facilmente manutenibile.
__________________
---> Lombardp
CSS Certified Expert (Master Level) at Experts-Exchange
Proud user of LITHIUM forum : CPU technology
Webmaster of SEVEN-SEGMENTS : Elettronica per modellismo
lombardp è offline   Rispondi citando il messaggio o parte di esso
Old 19-12-2002, 11:42   #5
/\/\@®¢Ø
Bannato
 
L'Avatar di /\/\@®¢Ø
 
Iscritto dal: Jul 2000
Città: Malo (VI)
Messaggi: 1000
Non e' piu' semplice un normale

const string s = "blablabla"
oppure un
const char* s = "..."



usando il const char* tra l'altro il compilatore e' in grado di ottimizzare il codice come se avessi usato un #define (e senza i rischi del caso)

poi, non sarebbe piu' leggibile usare gli stream ?
/\/\@®¢Ø è offline   Rispondi citando il messaggio o parte di esso
Old 19-12-2002, 17:03   #6
misterx
Senior Member
 
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3739
Quote:
Originally posted by "/\/\@®¢Ø"

Non e' piu' semplice un normale

const string s = "blablabla"
oppure un
const char* s = "..."



usando il const char* tra l'altro il compilatore e' in grado di ottimizzare il codice come se avessi usato un #define (e senza i rischi del caso)

poi, non sarebbe piu' leggibile usare gli stream ?

e i doppi apici che ti servono all'interno delle linee HTML?

const string s = "blablabla=\"%s\" pincopallino"
misterx è offline   Rispondi citando il messaggio o parte di esso
Old 19-12-2002, 17:50   #7
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Quote:
Originally posted by "misterx"

e i doppi apici che ti servono all'interno delle linee HTML?
Quelli servono anche con il define...
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 19-12-2002, 20:32   #8
misterx
Senior Member
 
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3739
Quote:
Originally posted by "cionci"

Quote:
Originariamente inviato da misterx
e i doppi apici che ti servono all'interno delle linee HTML?
Quelli servono anche con il define...
questo lo so anch'io, ma l'amico marco se n'era scordato
misterx è offline   Rispondi citando il messaggio o parte di esso
Old 19-12-2002, 22:33   #9
/\/\@®¢Ø
Bannato
 
L'Avatar di /\/\@®¢Ø
 
Iscritto dal: Jul 2000
Città: Malo (VI)
Messaggi: 1000
Per gli apici non e' cosi' facile, visto che e' una cosa intrinseca del c++
due cose semplici che mi vengono in mente:

1- Usare un altro carattere al posto degli apici (ad esempio un apice singolo), che dovra' essere successivamente cambiato. Si potrebbe fare ad esempio buttando l'output su uno stream su stringa e poi mandare la stringa (modificata) allo stream vero e proprio

"<body bgcolor=\"#000000\">\n<center>\n<table border=\"1\">\n<tr>\n"

diventerebbe quindi

"<body bgcolor='#000000'>\n<center>\n<table border='1'>\n<tr>\n"

In alternativa scrivi i caratteri scomodi come costanti e usi quelle:
fp << "<body bgcolor=" << quote << "#0000" << ..
dove
const char quote = '"';

Pero' forse la cosa migliore e' lavorare ad un livello piu' alto, crearsi degli oggettini per le parti piu' ripetitive;
Un qualcosa del tipo

HtmlBody hb;
hb.color = green; ( opportuni typedefs qui )
hb.align = center;
...

out << hb<< text << table << ...


una cosa del genere...
dipende cosa devi fare ovviamente !
/\/\@®¢Ø è offline   Rispondi citando il messaggio o parte di esso
Old 20-12-2002, 20:08   #10
misterx
Senior Member
 
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3739
marco, tanto per entrare nel vivo dell'argomento: guarda questa porzione di codice che salva uno scipt; ho idea che nessuna regola sia valida; in pratica è un caos immane

Codice:
fprintf(fp,"<script language=\"JavaScript\"><!--\n");
fprintf(fp,"function apri(nomefile)\n");
fprintf(fp,"{\n");
fprintf(fp,"nw=window.open('','nwin','top=0 , left=0 , width=' + (screen.width-100) + ',height=' + (screen.height-100));\n");
fprintf(fp,"nw.document.writeln(\"<script>\");\n");
fprintf(fp,"nw.document.writeln(\"function zp(){\");\n");
fprintf(fp,"nw.document.writeln(\"immagine.height = immagine.height + 50;\");\n");
fprintf(fp,"nw.document.writeln(\"}\");\n");
fprintf(fp,"nw.document.writeln(\"function zm(){\");\n");
fprintf(fp,"nw.document.writeln(\"immagine.height = immagine.height - 50;\");\n");
fprintf(fp,"nw.document.writeln(\"}\");\n");
fprintf(fp,"nw.document.writeln(\"function full(){\");\n");
fprintf(fp,"nw.document.writeln(\"immagine.height = document.body.clientHeight-50\");\n");
fprintf(fp,"nw.document.writeln(\"}\");\n");
fprintf(fp,"nw.document.writeln(\"</script>\");\n");
fprintf(fp,"nw.document.writeln(\"<body topmargin='0' leftmargin='0'>\")\n");
fprintf(fp,"nw.document.writeln(\"<table border='1'>\");\n");
fprintf(fp,"nw.document.writeln(\"<td><h3><a href='javascript:zp()'>Z+</a></td><td><h3><a href='javascript:zm()'>Z-</a></td><td><h3><a href='javascript:full();'>Full</a></td><td><h3><a href='javascript:window.close()'>chiudi</a></td>\");\n");
fprintf(fp,"nw.document.writeln(\"</table>\");\n");
fprintf(fp,"nw.document.writeln(\"<img src='\" + nomefile + \"' name='immagine'>\");\n");
fprintf(fp,"nw.document.writeln(\"<script>\");\n");
fprintf(fp,"nw.document.writeln(\"immagine.height = document.body.clientHeight-50\");\n");
fprintf(fp,"nw.document.writeln(\"</script>\");\n");
fprintf(fp,"nw.document.writeln(\"</body>\")\n");
fprintf(fp,"}\n");
fprintf(fp,"// --></script>\n");


fprintf(fp,"<style>");\n");
fprintf(fp,".mio\t{\n");\n");
fprintf(fp,"font-family:Arial;\n");
fprintf(fp,"font-size:12px;\n");
fprintf(fp,"height:21px;\n");
fprintf(fp,"border-width:4px;\n");
fprintf(fp,"border-style:solid;\n");
fprintf(fp,"border-color:#C0C0C0;}\n");
fprintf(fp,"</style>\n");

fprintf(fp,"<body bgcolor=\"#000000\">\n");
fprintf(fp,"<center>\n");
fprintf(fp,"<table border=\"1\" cellpadding=\"5\" cellspacing=\"5\" bordercolor=\"#C0C0C0\" bordercolorlight=\"#C0C0C0\">\n");
[/siz]
misterx è offline   Rispondi citando il messaggio o parte di esso
Old 21-12-2002, 14:39   #11
/\/\@®¢Ø
Bannato
 
L'Avatar di /\/\@®¢Ø
 
Iscritto dal: Jul 2000
Città: Malo (VI)
Messaggi: 1000
Una prima cosa che si puo' fare secondo me e' quella di usare gli stream.
Il tuo codice diverrebbe qualcosa del tipo:

Codice:
fp << "<script language=\"JavaScript\"><!--" << endl 
   << "function apri(nomefile)" << endl
   << "{\n" << "nw=window.open('','nwin','top=0 , left=0 , width=' + (screen.width-100) + ',height=' + (screen.height-100));\n" << ...
che alleggerisce gia' un po' ( spariscono tutti i fprintf e relative parentesi
tonde.
Altra cosa: ricordati che puoi concatenare piu' stringhe in modo semplice:

Codice:
"nw.document.writeln(\"<script>\");\n"
"nw.document.writeln(\"function zp(){\");\n"
e' equivalente a
Codice:
"nw.document.writeln(\"<script>\");\nnw.document.writeln(\"function zp(){\");\n"


se quindi il codice html e' statico potresti quindi prima scrivere la stringa a
parte e poi stamparla con una unica chiamata
ad esempio
Codice:
const char* c = "<script language=\"JavaScript\"><!--\n"
"function apri(nomefile)\n"
"{\n"
"nw=window.open('','nwin','top=0 , left=0 , width=' + (screen.width-100) + ',height=' + (screen.height-100));\n"
"nw.document.writeln(\"<script>\");\n"
"nw.document.writeln(\"function zp(){\");\n"
"nw.document.writeln(\"immagine.height = immagine.height + 50;\");\n";

...

fp << c << endl;
Anche in questo caso ottieni perlomeno di alleggerire l'output.

Un'altra soluzione potrebbe essere quella di leggere il codice html da file, dove puoi scrivertelo in modo "tradizionale"

Se invece il codice e' dinamico (e numeroso) secondo me come dicevo
piu' sopra ti conviene aggiungere un po' di astrazione: ad esempio crearti
una struttura dati gerarchica che rappresenti la pagina e i suoi elementi. In questo modo il codice 'sporco' va a finire solo in piccoli oggetti che provvedono alla stampa. Ad esempio una HtmlList a cui puoi aggiungere a runtime gli elementi della lista che ti servono; al momento di stamparla scrivera' da se il codice per la lista e in piu' provvedera' a far stampare gli oggetti che contiene (in modo simile a quanto accade con le Awt o le Swing di Java , se hai presente ).Perderai la visione del codice html ma ti restera' quello della struttura della pagina ( che e' quello che conta penso ). Tra l'altro dovrebbero esserci gia' delle librerie C o C++ che fanno qualcosa di simile ( scommetto si chiameranno libwww o libhtml ).
/\/\@®¢Ø è offline   Rispondi citando il messaggio o parte di esso
Old 21-12-2002, 17:43   #12
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Basterebbe richiamare il costruttore con i parametri da inaserire al posto dei %s

Ad esempio basterebbe sovrascrivere l'operatore << per dare in output il codice modificato con i parametri passati al costruttore...
Una cosa del genere :

file << HTMLHeader(titolo, commento) << OpenWindowJScript(nomeFinestra, link) << HTMLLink(link, HTMLImg(pathImmagine));

Per fare l'ultima cosa questo bisogna ad esempio sovrascrivere l'operatore di conversine a string...
Una cosa del genere :
Codice:
#include <iostream>
#include <string>

using namespace std;

class HTMLInterface {
protected:
	string txt;
	HTMLInterface() { };
public:
	virtual operator string() { return txt; };
	friend ostream &operator << (ostream &out, const HTMLInterface &html);
};

inline ostream &operator << (ostream &os, const HTMLInterface &html) { os << html.txt; return os;};


class HTMLImg : public HTMLInterface
{
public:
	HTMLImg(const string path, const string l, const string h);
};

HTMLImg::HTMLImg(const string path, const string l, const string h)
{
	txt = "<img src=\"" + path + "\" width=\"" + l + "\" height=\"" + h + "\" border=\"0\">"; 
}

class HTMLLink : public HTMLInterface
{
public:
	HTMLLink(const string link, const string target, const string onclick, const string body);
};

HTMLLink::HTMLLink(const string link, const string target, const string onclick, const string body)
{
	txt = "<a href=\"" + link + "\"";
	if(target.length() > 0)
		txt += " target=\"" + target + "\"";
	if(onclick.length() > 0)
		txt += "onclick=\"" + onclick + "\"";
	txt += ">"+ body + "</a>";
}
Per provarlo basta una cosa del genere:
Codice:
cout << HTMLLink("pippo.html", "", "", HTMLImg("ciao.jpg", "100", "200"));
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 21-12-2002, 20:05   #13
misterx
Senior Member
 
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3739
Quote:
Originally posted by "/\/\@®¢Ø"



Tra l'altro dovrebbero esserci gia' delle librerie C o C++ che fanno qualcosa di simile ( scommetto si chiameranno libwww o libhtml ).

non lo metto in dubbio ma, se per usarle devi leggerti chilometri di documentazione

lasciamole a che le ha scritte
misterx è offline   Rispondi citando il messaggio o parte di esso
Old 22-12-2002, 12:35   #14
/\/\@®¢Ø
Bannato
 
L'Avatar di /\/\@®¢Ø
 
Iscritto dal: Jul 2000
Città: Malo (VI)
Messaggi: 1000
cionci ha colto nel segno quel che volevo dire, magari ridefinendo gli operatori di output invece che creando la stringa, rendendo piu' semplice la modifica on-the-fly della struttura.
/\/\@®¢Ø è offline   Rispondi citando il messaggio o parte di esso
Old 24-12-2002, 20:40   #15
misterx
Senior Member
 
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3739
sicuramente esiste un metoo ancora + semplice; le classi non mi sono molto simpatiche
misterx è offline   Rispondi citando il messaggio o parte di esso
Old 25-12-2002, 11:56   #16
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Quote:
Originally posted by "misterx"

le classi non mi sono molto simpatiche
Male...molto male E nonostante tutto le usi tutti i giorni
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 26-12-2002, 10:01   #17
misterx
Senior Member
 
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3739
Quote:
Originally posted by "cionci"

Quote:
Originariamente inviato da misterx
le classi non mi sono molto simpatiche
Male...molto male E nonostante tutto le usi tutti i giorni

e lo so cionci; ma mi riferivo solo a questo caso in specifico
misterx è offline   Rispondi citando il messaggio o parte di esso
Old 12-01-2003, 14:01   #18
misterx
Senior Member
 
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3739
un esempio banale; non vi sembra un pò macchinoso questo codice per effettuare una semplice conversione?

daccordo che il codice, prelevato su html.it ha la sola funzione di far capire i concetti che stanno alla base della programmazione ad oggetti: ma sembrerebbe che non in tutti i casi rappresenti una comodità

Codice:
/*
* Un semplice programma che converte le lire in Euro
* File Conversione.h
*/

class Conversione
{
	public:
	Conversione();
	~Conversione();

	long valore_lira;
	float valore_euro;

	void ottieni_valore();
	float converti_lira_in_euro( );
};



/*
* File Conversione.cpp
*/

#include <iostream.h>
#inclde "Conversione.h"

Conversione( )
{
	cout << "Inizio della conversione\n";
	valore_lira = 0;
	// Inizializzazione della variabile valore_lira
	valore_euro = 0.0;
	// Inizializzazione della variabile valore_euro
}

~Conversione( )
{
cout << "Fine della conversione\n";
}


void Conversione::ottieni_valore( )
{
cout << "Inserire il valore in lire: " ;
cin >> valore_lira;
cout << endl;
}


float Conversione:: converti_lira_in_euro( )
{
	float risultato;
	risultato = ((float) valore_lira) / (float) 1936.27;
	return risultato;
}


main( )
{
	Conversione conv;
	conv.ottieni_valore( );
	conv.valore_euro = conv.converti_lira_in_euro( );
cout << conv.valore_lira <<
" in lire, vale " << conv.valore_euro << " Euro."
cout << endl;

	return(0);
}
misterx è offline   Rispondi citando il messaggio o parte di esso
Old 12-01-2003, 14:33   #19
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Certo, ma è chiaramente un esempio didattico...
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 13-01-2003, 14:26   #20
/\/\@®¢Ø
Bannato
 
L'Avatar di /\/\@®¢Ø
 
Iscritto dal: Jul 2000
Città: Malo (VI)
Messaggi: 1000
Quote:
Originally posted by "misterx"

un esempio banale; non vi sembra un pò macchinoso questo codice per effettuare una semplice conversione?

daccordo che il codice, prelevato su html.it ha la sola funzione di far capire i concetti che stanno alla base della programmazione ad oggetti: ma sembrerebbe che non in tutti i casi rappresenti una comodità
Questo e' un esempio che mostra perche' un linguaggio che supporti solo la programmazione OO (come Java) nonj e' il massimo. Ci sono cose che risultano migliori fatte in modo procedurale, altre se fatte ad oggetti. Non ha senso costruire un oggetto per fare il lavoro di una funzione (a meno che non ti serva un oggetto-funzione ovviamente ).
/\/\@®¢Ø è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'...
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti AWS re:Invent 2025: inizia l'era dell'AI-as-a-Se...
Cos'è la bolla dell'IA e perché se ne parla Cos'è la bolla dell'IA e perché se...
BOOX Palma 2 Pro in prova: l'e-reader diventa a colori, e davvero tascabile BOOX Palma 2 Pro in prova: l'e-reader diventa a ...
FRITZ!Repeater 1700 estende la rete super-veloce Wi-Fi 7 FRITZ!Repeater 1700 estende la rete super-veloce...
SpaceX: un satellite ha fotografato il s...
36 idee regalo con offerte Amazon sotto ...
Sony assume il controllo dei Peanuts: Sn...
DJI Neo scende a 149€ su Amazon, in vers...
Scoperto un nuovo esopianeta che orbita ...
Blue Origin NS-37: successo per la missi...
Potrebbe essere stata rilevata una super...
La cometa interstellare 3I/ATLAS è...
Xiaomi 17 Ultra: l'autonomia non sarà un...
Il processo produttivo a 2 nm di TSMC è ...
L'atteso aggiornamento dei driver della ...
The Elder Scrolls VI nel 2029 e Fallout ...
Il Ryzen 7 9850X3D appare nel catalogo d...
Weekend pre natalizio Amazon, ecco tutte...
Prezzi giù su Oral-B iO: spazzolini elet...
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: 21:20.


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