Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Dark Perk Ergo e Sym provati tra wireless, software via browser e peso ridotto
Dark Perk Ergo e Sym provati tra wireless, software via browser e peso ridotto
be quiet! debutta nel settore mouse da gaming con Dark Perk Ergo e Dark Perk Sym: due modelli gemelli per specifiche, con polling rate di 8.000 Hz anche in wireless, sensore PixArt PAW3950 da 32.000 DPI e autonomia dichiarata fino a 110 ore. Nel test, a 8.000 Hz si arriva a circa 30 ore reali, con ricarica completa in un'ora e mezza
DJI RS 5: stabilizzazione e tracking intelligente per ogni videomaker
DJI RS 5: stabilizzazione e tracking intelligente per ogni videomaker
Analizziamo nel dettaglio DJI RS 5, l'ultimo arrivato della famiglia Ronin progettato per videomaker solisti e piccoli studi. Tra tracciamento intelligente migliorato e ricarica ultra rapida, scopriamo come questo gimbal eleva la qualità delle produzioni.
AMD Ryzen 7 9850X3D: Zen 5, 3D V-Cache e frequenze al top per il gaming
AMD Ryzen 7 9850X3D: Zen 5, 3D V-Cache e frequenze al top per il gaming
AMD Ryzen 7 9850X3D è la nuova CPU gaming di riferimento grazie alla 3D V-Cache di seconda generazione e frequenze fino a 5,6 GHz. Nei test offre prestazioni superiori a 9800X3D e 7800X3D, confermando la leadership AMD nel gaming su PC.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 24-03-2010, 16:52   #1
pspmaniaco
Junior Member
 
Iscritto dal: Mar 2010
Messaggi: 5
[C]Problema di conversione da stringa a double

Buongiorno a tutti,in questo periodo mi sono dedicato all'apprendimento del C e vorrei riuscire a fare un programma completo che racchiuda tutto cio che bene o male ho letto.
Ho quindi deciso di impormi come obbiettivo la realizzazione di una calcolatrice scientifica e di costruirla e aggiungergli funzioni passo passo.
Ora come ora sono passato dai semplici calcoli con 2 operandi a calcoli con un numero variabile di essi;ma nella funzione(di estrapolazione degli operandi degli operatori) che ho fatto non ho una regolare trasformazione tra caratteri e valore double,visto che,nonostante abbia messo dei controlli prende anche i caratteri(come + che vale 48)e li aggiunge ai valori numerici.
Io lavoro col dev C++ su windows e qui c'è il mio file sorgente.

ringrazio in anticipo per i chiarimenti
pspmaniaco è offline   Rispondi citando il messaggio o parte di esso
Old 25-03-2010, 06:51   #2
m0rix93
Member
 
Iscritto dal: Nov 2009
Messaggi: 57
non ho capito...xD
m0rix93 è offline   Rispondi citando il messaggio o parte di esso
Old 25-03-2010, 14:11   #3
pspmaniaco
Junior Member
 
Iscritto dal: Mar 2010
Messaggi: 5
allora mi spiego,il puntatore alla stringa che usavo nel ciclo non puntava a un solo valore della stringa ma puntava stranamente alla somma di 2 valori della stringa stessa,cioè:
stringa[0]=9;
stringa[1]=8;
p=stringa;
dopo questo
*p sarebbe dovuto essere uguale a 9 invece io avevo *p era uguale a 17 perchè mi contava i valori a 2 a 2 e non sapevo perchè.
insomma era *p=stringa[0]+stringa[1].

Alla fine ho risolto ricopiando in un altro sorgente e ricompilando,era un errore del dev c++.
pspmaniaco è offline   Rispondi citando il messaggio o parte di esso
Old 25-03-2010, 15:02   #4
fero86
Senior Member
 
Iscritto dal: Oct 2006
Città: Roma
Messaggi: 1383
Quote:
Originariamente inviato da pspmaniaco Guarda i messaggi
Buongiorno a tutti,in questo periodo mi sono dedicato all'apprendimento del C e vorrei riuscire a fare un programma completo che racchiuda tutto cio che bene o male ho letto.
Ho quindi deciso di impormi come obbiettivo la realizzazione di una calcolatrice scientifica e di costruirla e aggiungergli funzioni passo passo.
dedicati all'apprendimento del C++ anziché del C, cosi poi diventa tutto piu semplice. ecco una semplicissima calcolatrice CUI non scientifica fatta in C++:
Codice:
#include <iostream>
using namespace std;

int main() {
	cin.exceptions(ios::failbit | ios::badbit);
	try {
		while (true) {
			double fFirstOperand, fSecondOperand;
			char chOperator;
			cin >> fFirstOperand >> ws >> chOperator >> fSecondOperand;
			switch (chOperator) {
				case '+':
					cout << " = " << (fFirstOperand + fSecondOperand) << endl;
					break;
				case '-':
					cout << " = " << (fFirstOperand - fSecondOperand) << endl;
					break;
				case '*':
					cout << " = " << (fFirstOperand * fSecondOperand) << endl;
					break;
				case '/':
					cout << " = " << (fFirstOperand / fSecondOperand) << endl;
					break;
				default:
					cout << "operatore non valido" << endl;
					break;
			}
		}
	} catch (ios::failure&) {
		cerr << "input non valido" << endl;
	}
	return 0;
}
fero86 è offline   Rispondi citando il messaggio o parte di esso
Old 25-03-2010, 15:09   #5
pspmaniaco
Junior Member
 
Iscritto dal: Mar 2010
Messaggi: 5
dici che mi conviene studiare il c++ umh...ci posso provare se non sbaglio vi è un tutorial su wikivideo,casomai puoi consigliarmi un testo completo(in italiano)?
dopo aver studiato il c++(domanda niubba)posso creare un progetto usando entrambi i linguaggi?

P.S:
Quote:
Originariamente inviato da fero86 Guarda i messaggi
dedicati all'apprendimento del C++ anziché del C, cosi poi diventa tutto piu semplice. ecco una semplicissima calcolatrice CUI non scientifica fatta in C++:
Codice:
#include <iostream>
using namespace std;

int main() {
	cin.exceptions(ios::failbit | ios::badbit);
	try {
		while (true) {
			double fFirstOperand, fSecondOperand;
			char chOperator;
			cin >> fFirstOperand >> ws >> chOperator >> fSecondOperand;
			switch (chOperator) {
				case '+':
					cout << " = " << (fFirstOperand + fSecondOperand) << endl;
					break;
				case '-':
					cout << " = " << (fFirstOperand - fSecondOperand) << endl;
					break;
				case '*':
					cout << " = " << (fFirstOperand * fSecondOperand) << endl;
					break;
				case '/':
					cout << " = " << (fFirstOperand / fSecondOperand) << endl;
					break;
				default:
					cout << "operatore non valido" << endl;
					break;
			}
		}
	} catch (ios::failure&) {
		cerr << "input non valido" << endl;
	}
	return 0;
}

questa calcolatrice anche in C è banalissima perchè riceve in imput solo 2 operandi,l'ho gia realizzata con successo implementando oltre alle semplici 4 operazioni anche potenza,radice,seno e altre funzioni matematiche,ora come ora stavo ricominciando da capo proponendomi obbiettivi più ampi,per iniziare:ricevere in imput un numero di operandi variabile,poi riconoscere le priorità delle parentesi e cosi via.

Ultima modifica di pspmaniaco : 25-03-2010 alle 15:14.
pspmaniaco è offline   Rispondi citando il messaggio o parte di esso
Old 25-03-2010, 15:21   #6
fero86
Senior Member
 
Iscritto dal: Oct 2006
Città: Roma
Messaggi: 1383
ah be', se puoi scegliere il linguaggio da studiare a quel punto ti direi direttamente C#

se ti ho detto C++ é perché tutte le volte che vedo un programma in C penso "ma perché la gente sviluppa ancora in C? ma non vedono quanto viene piu semplice in C++?"

peró se hai totale libertá di scelta il C# costituisce un compromesso di semplicitá, potenza e applicabilitá ineccepibile, e tra l'altro ha un'evoluzione molto piu rapida del C++.

qui c'é la guida in italiano del linguaggio:
http://msdn.microsoft.com/it-it/library/67ef8sbd.aspx
ma ti consiglio di abituarti all'inglese.
qui invece puoi scaricare Visual C# 2008 Express (gratis e legale):
http://www.microsoft.com/express/Dow...2008-Visual-CS
fero86 è offline   Rispondi citando il messaggio o parte di esso
Old 25-03-2010, 15:41   #7
pspmaniaco
Junior Member
 
Iscritto dal: Mar 2010
Messaggi: 5
grz dell'aiuto,in verità io ero propenso allo studio del C perchè con opportune modifiche era possibile applicarlo anche alla psp(mi sarebbe piaciuto lavorarci un o su),quindi il C lo continuerò a usare ma seguirò il tuo consiglio e studierò il C#(e anche il c++ se ho tempo).
P.S:mi resta cmq una domanda è possibile lavorare con più linguaggi in un solo progetto?
pspmaniaco è offline   Rispondi citando il messaggio o parte di esso
Old 25-03-2010, 16:37   #8
fero86
Senior Member
 
Iscritto dal: Oct 2006
Città: Roma
Messaggi: 1383
ok, effettivamente con operandi multipli e con le parentesi viene un tantino piu complessa
Codice:
#include <iostream>
#include <string>
using namespace std;


class skip {
private:
	const string m_str;

public:
	skip(string a_str)
		:
	m_str(a_str) {
	}

	skip(char ch)
		:
	m_str(1, ch) {
	}

	istream &operator () (istream &ris) {
		for (string::const_iterator i = m_str.begin(); i != m_str.end(); i++) {
			char ch;
			ris >> ch;
			if (ch != *i) {
				ris.setstate(ios::failbit);
				return ris;
			}
		}
		return ris;
	}
};


char Peek();
istream &operator >> (istream&, skip);

double EvaluateSubExpression();
double EvaluateFirstOperand();
double EvaluateExpression(char);


char Peek() {
	return (cin >> ws).peek();
}

istream &operator >> (istream &ris, skip s) {
	return s(ris);
}


double EvaluateSubExpression() {
	cin >> ws >> skip("(");
	return EvaluateExpression(')');
}

double EvaluateFirstOperand() {
	if (Peek() != '(') {
		double f;
		cin >> f;
		return f;
	} else {
		return EvaluateSubExpression();
	}
}

double EvaluateExpression(char chTerminator) {
	double fFirstOperand = EvaluateFirstOperand();

	char ch;
	cin >> ws >> ch;
	switch (ch) {
		case '+':
			return fFirstOperand + EvaluateExpression(chTerminator);
		case '-':
			return fFirstOperand - EvaluateExpression(chTerminator);
		case '*':
			return fFirstOperand * EvaluateExpression(chTerminator);
		case '/':
			return fFirstOperand / EvaluateExpression(chTerminator);
		default:
			cin.putback(ch);
			cin >> skip(chTerminator);
			return fFirstOperand;
	}
}


int main() {
	cin.exceptions(ios::failbit | ios::badbit);
	try {
		while (true) {
			cout << "\t" << EvaluateExpression('=') << endl;
		}
	} catch (ios::failure &e) {
		cerr << "input non valido" << endl;
	}
	return 0;
}
questa versione non tiene conto della precedenza degli operatori, esegue le operazioni sempre da destra verso sinistra; l'unico modo per farle capire la giusta precedenza é esplicitare le parentesi.

l'ho sviluppata seguendo questa sintassi:
Codice:
expression	::=	first-operand [OPERATOR	expression]

first-operand	::=	NUMBER |
			sub-expression

sub-expression	::=	'(' expression ')'
la semantica é ovvia. sicuramente é possibile definire una sintassi che permetta di eseguire le operazioni nell'ordine giusto ma ora non mi va.

Ultima modifica di fero86 : 25-03-2010 alle 16:40.
fero86 è offline   Rispondi citando il messaggio o parte di esso
Old 25-03-2010, 16:46   #9
fero86
Senior Member
 
Iscritto dal: Oct 2006
Città: Roma
Messaggi: 1383
Quote:
Originariamente inviato da pspmaniaco Guarda i messaggi
P.S:mi resta cmq una domanda è possibile lavorare con più linguaggi in un solo progetto?
questa domanda posta cosi in generale non ha senso; spesso é possibile, ma dipende dalle tecnologie che usi. per esempio se lavori in .NET é possibile creare un programma scritto in piu d'uno dei linguaggi della piattaforma (C#, Basic, F#, Managed C++), ed inoltre é possibile che quel programma usi una DLL scritta in qualunque altro linguaggio.
fero86 è offline   Rispondi citando il messaggio o parte di esso
Old 26-03-2010, 21:50   #10
pspmaniaco
Junior Member
 
Iscritto dal: Mar 2010
Messaggi: 5
Quote:
Originariamente inviato da fero86 Guarda i messaggi
questa domanda posta cosi in generale non ha senso; spesso é possibile, ma dipende dalle tecnologie che usi. per esempio se lavori in .NET é possibile creare un programma scritto in piu d'uno dei linguaggi della piattaforma (C#, Basic, F#, Managed C++), ed inoltre é possibile che quel programma usi una DLL scritta in qualunque altro linguaggio.
Perfetto volevo sapere questo ora mi studio c++ e c# e poi vedo l'ambiente + utile ai miei scopi,grz di tutto
pspmaniaco è offline   Rispondi citando il messaggio o parte di esso
Old 29-03-2010, 22:59   #11
fero86
Senior Member
 
Iscritto dal: Oct 2006
Città: Roma
Messaggi: 1383
riesumo il topic per di che oggi ho avuto tempo di scrivere in C++ una calcolatrice per le quattro operazioni che rispetta l'ordine di precedenza degli operatori e ammette anche le parentesi tonde:
Codice:
#include <iostream>
using namespace std;


char Peek();
void Skip(char ch);

double EvaluateOperand();
double EvaluateProduct();
double EvaluateExpression();


int main() {
	cin.exceptions(ios::failbit | ios::eofbit | ios::badbit);
	try {
		while (true) {
			cout << '\t' << EvaluateExpression() << endl;
			Skip('=');
		}
	} catch (const ios::failure&) {
		cerr << "invalid input." << endl;
	}
	return 0;
}


char Peek() {
	return (cin >> ws).peek();
}

void Skip(char ch) {
	if (Peek() != ch) {
		cin.setstate(ios::failbit);
	}
	cin.get();
}


double EvaluateOperand() {
	if (Peek() != '(') {
		double f;
		cin >> f;
		return f;
	} else {
		cin.get();
		double f = EvaluateExpression();
		Skip(')');
		return f;
	}
}

double EvaluateProduct() {
	double f = EvaluateOperand();
	char ch = Peek();
	if (ch == '*') {
		cin.get();
		return f * EvaluateProduct();
	} else if (ch == '/') {
		cin.get();
		return f / EvaluateProduct();
	} else {
		return f;
	}
}

double EvaluateExpression() {
	double f = EvaluateProduct();
	char ch = Peek();
	if (ch == '+') {
		cin.get();
		return f + EvaluateExpression();
	} else if (ch == '-') {
		cin.get();
		return f - EvaluateExpression();
	} else {
		return f;
	}
}


é basata su questa sintassi:
Codice:
expression	::=	product [ ( '+' | '-' ) expression ]
product		::=	operand [ ( '*' | '/' ) product ]
operand		::=	VALUE |
			sub-expression
sub-expression	::=	'(' expression ')'

spero sia utile.
fero86 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Dark Perk Ergo e Sym provati tra wireless, software via browser e peso ridotto Dark Perk Ergo e Sym provati tra wireless, softw...
DJI RS 5: stabilizzazione e tracking intelligente per ogni videomaker DJI RS 5: stabilizzazione e tracking intelligent...
AMD Ryzen 7 9850X3D: Zen 5, 3D V-Cache e frequenze al top per il gaming AMD Ryzen 7 9850X3D: Zen 5, 3D V-Cache e frequen...
Le soluzioni FSP per il 2026: potenza e IA al centro Le soluzioni FSP per il 2026: potenza e IA al ce...
AWS annuncia European Sovereign Cloud, il cloud sovrano per convincere l'Europa AWS annuncia European Sovereign Cloud, il cloud ...
Buone notizie per l'Osservatorio Paranal...
Nintendo Switch è diventata la co...
SplitHYPE: come funziona il nuovo strume...
Questo robot aspirapolvere top di gamma ...
Non solo fisica delle particelle: il Lar...
Samsung Galaxy S26 Ultra si mostra in un...
DJI Neo a soli 149€ su Amazon: il mini d...
I futuri chip di Apple, Qualcomm e Media...
Problema per il secondo stadio di un raz...
OnlyFans cambia proprietà? Avviat...
OnePlus estende il supporto alla ricaric...
Non solo Fold: Apple sta valutando la re...
TSMC deve raddoppiare la sua capacit&agr...
Raspberry Pi ritocca ancora i prezzi: la...
Missione Artemis II: lancio rinviato a m...
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: 10:15.


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