|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#21 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
a2000: fai un eseguibile in Fortan e ci dici quanto ci metti...
Devi ordinare anche in numeri del vettore... |
|
|
|
|
|
#22 | |
|
Senior Member
Iscritto dal: Jan 2000
Messaggi: 551
|
Quote:
Quann' o fortran nun zerv a nu Katz Ultima modifica di verloc : 20-07-2003 alle 12:42. |
|
|
|
|
|
|
#23 |
|
Senior Member
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3741
|
ragazzi, è meno semplice di quanto si pensi
un'oretta a mio avviso non basta |
|
|
|
|
|
#24 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Io ci ho messo circa un'ora e 20...se vuoi ti faccio vedere il codice...
|
|
|
|
|
|
#25 | |
|
Bannato
Iscritto dal: Jan 2001
Messaggi: 1976
|
Quote:
se devi inserire ordinatamente numeri in un vettore ordinato (che poi col ca++o che uso un vettore) che bisogno c'è di riordinare il vettore. e anche se dovessi riordinare tutto il vettore ? cioè, dico, il secondo esercizio dopo "ciao mondo". ma dioveth ragazzi ! e poi lo ripeto ancora: fortran == basic e ancora di più VFortran === VBasic non ci metto molto: inserisco il codice nel traduttore automatico Basic <-> Fortran (fatto in VBA cose del genere: Codice:
Exit Sub RETURN Exit Function RETURN Exit For EXIT End Sub End Subroutine __Sub __Subroutine End Function End Function For_ Do_ Next_ End Do_! _To_ : _To_ ,_ _Step_ ,_ If_ If_( _Then Stop )_Stop _Then Call )_Call _Then Return )_Return _Then Exit )_Exit _Then )_Then notte ! :P Ultima modifica di a2000 : 20-07-2003 alle 14:41. |
|
|
|
|
|
|
#26 | |
|
Senior Member
Iscritto dal: Jan 2000
Messaggi: 551
|
Quote:
che sta roba serve sempre |
|
|
|
|
|
|
#27 |
|
Bannato
Iscritto dal: Jan 2001
Messaggi: 1976
|
e capirai ... !
verlocc ta'ia fa' u mazz altro che serve sempre ! |
|
|
|
|
|
#28 | |
|
Senior Member
Iscritto dal: Jan 2000
Messaggi: 551
|
Quote:
lo sai... che me lo sto già facendo |
|
|
|
|
|
|
#29 | |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quote:
Il problema sta proprio nell'analizzare l'input in modo da inserire una nuova persona al posto giusto o aggiungere i numeri alla lista se la persona è già esistente...e bisogna anche ordinarli (come richiesto dall'esempio postato da misterx)... L'ordinamento in se non è un problema (tant'è che in C++ si fa con una istruzione)...ma il problema è il parsing della stringa e il conseguente inserimento della stringa nel file in maniera opportuna... Codice:
#include <iostream>
#include <strstream>
#include <algorithm>
#include <vector>
#include <map>
#include <string>
#include <fstream>
#include <cstdlib>
using namespace std;
struct ltstr
{
bool operator()(const string s1, const string s2) const
{
return s1 < s2;
}
};
typedef vector<int> vdati;
typedef vector<int>::iterator ivdati;
typedef map<string, vdati, ltstr> vpersone;
typedef map<string, vdati, ltstr>::iterator ivpersone;
typedef map<string, vpersone, ltstr> vcitta;
typedef map<string, vpersone, ltstr>::iterator ivcitta;
class database {
vcitta v;
public:
database() { };
bool aggiungi(const string &cit, const string &persona, const string &dati);
bool aggiungi_citta(const string &citta);
friend ostream &operator<<(ostream &os, database &db);
};
bool database::aggiungi_citta(const string &citta)
{
v[citta].size();
return true;
}
bool database::aggiungi(const string &cit, const string &persona, const string &dati)
{
vdati tmp;
int start = 0;
for(int i=0; i<dati.size(); ++i)
{
if(!isdigit(dati[i]))
{
if(start == i)
return false;
else
{
tmp.push_back(atoi(dati.substr(start,i-start).c_str()));
start = i + 1;
}
}
else
{
if((i+1) == dati.size() && (i-start+1) > 0)
tmp.push_back(atoi(dati.substr(start,i-start+1).c_str()));
}
}
if(v[cit][persona].size() > 0)
for(ivdati ivd = tmp.begin(); ivd < tmp.end(); ivd++)
v[cit][persona].push_back(*ivd);
else
v[cit][persona] = tmp;
sort(v[cit][persona].begin(), v[cit][persona].end());
return true;
}
ostream &operator<<(ostream &os, database &db)
{
for(ivcitta itc = db.v.begin(); itc != db.v.end(); itc++)
{
os << (*itc).first;
for(ivpersone itp = (*itc).second.begin(); itp != (*itc).second.end(); itp++)
{
if(itp == (*itc).second.begin())
os << "\t";
else os << endl;
os << (*itp).first;
vdati &tmp = (*itp).second;
os << "\t";
for(int i = 0; i < tmp.size(); i++)
{
os << tmp[i];
if(i != (tmp.size()-1))
os << "-";
}
}
os << endl;
}
return os;
}
istream &operator>>(istream &is, database &db)
{
string citta;
while(!is.fail())
{
char buf[4097];
is.getline(buf, 4096, '\n');
if(is.fail())
{
is.setstate(ios::goodbit);
continue;
}
int i = 0;
int tab[4096];
int count = 0;
while(buf[i])
{
if(buf[i] == '\t')
{
tab[count++] = i;
buf[i] = '\0';
}
++i;
}
string persona;
string dati;
switch(count)
{
case 0:
db.aggiungi_citta(buf);
break;
case 2:
citta = buf;
persona = buf + tab[0] + 1;
dati = buf + tab[1] + 1;
if(!db.aggiungi(citta, persona, dati))
throw string(buf);
break;
case 1:
persona = buf;
dati = buf + tab[0] + 1;
if(!db.aggiungi(citta, persona, dati))
throw string(buf);
break;
default:
throw string(buf);
}
}
return is;
}
int main()
{
database db;
ifstream f1("dati.txt");
f1 >> db;
f1.close();
cout << "Stato iniziale del file :" << endl;
cout << db;
cout << endl << "Inserisci i campi separati dal TAB (una riga vuota per terminare) :" << endl;
char buf[4097];
do
{
cin.getline(buf,4096,'\n');
strstream st;
st << buf;
if(strlen(buf) > 1)
{
try {
st >> db;
}
catch(string e)
{
cout << endl << "Errore nella riga '" << e << "'" << endl;
}
}
}while(strlen(buf) > 1);
cout << endl << "Stato finale del file :" << endl;
cout << db;
ofstream f2("dati.txt");
f2 << db;
f2.close();
system("PAUSE");
return 0;
}
|
|
|
|
|
|
|
#30 |
|
Bannato
Iscritto dal: Jan 2001
Messaggi: 1976
|
oh mi signor ... 150 righe di codice per una cosa così !
la metà della metà delle righe di codice bastano e avanzano ! saludi. :P |
|
|
|
|
|
#31 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Ok...fai pure te il programma funzionante e guardiamo quanto tempo e righe ci metti...
Ultima modifica di cionci : 21-07-2003 alle 09:38. |
|
|
|
|
|
#32 | |
|
Senior Member
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3741
|
Quote:
hai la mailbox full |
|
|
|
|
|
|
#33 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Visto...era è libera...
|
|
|
|
|
|
#34 | |
|
Senior Member
Iscritto dal: Jan 2000
Messaggi: 551
|
Quote:
grazie Cionci Dai una occhiata a questo ( testalo e dimmi che ne pensi ) Codice:
// file conversions.h // this is a personal modification of wonderful Kevlin Henney's lexical_cast, // please refer to http://www.boost.org for info // // purpose: simple runtime conversions from-to types // i.e string-char* etc to double-int etc without exceptions // // feel free to do what you want with this file // // [email protected] // // SAMPLE /* #include <stdio.h> //for getchar #include <string> #include "conversions.h" int main(int argc, char** argv) { double number; cout.precision(15); string strNumber("1234.56666666666666"); char* szNumber="534,768"; //Conversion string to double if(convert<string,double>(strNumber,number)) { cout.imbue(std::locale("")); cout<<number<<endl; } else cout<<"Bad conversion of \"1234.56666666666666\" :"<<'\n'<<"my locale needs comma"<<'\n'; if(convert<char *,double>(szNumber,number)) { cout.imbue(std::locale("")); cout<<number<<endl; } else cout<<"Bad conversion of char * 534,768"<<'\n'; //Conversion double to string double num2 =999.99; char *sznum2; if(convert<double,char *>(num2,sznum2)) cout<<sznum2<<endl ; else cout<<"Bad conversion"<<'\n'; getchar(); } */ #ifndef CONVERSIONS_H #define CONVERSIONS_H #include <iostream> #include <sstream> //stringstream header #include <locale> //#include <vector> using namespace std; template<typename Source,typename Target > bool convert(Source &arg,Target &result) { stringstream interpreter; //for locale decimal separator reading interpreter.imbue(std::locale("")); if( !(interpreter << arg) || !(interpreter>>result ) || !(interpreter >> std::ws).eof() ) return false; else return true; } #endif |
|
|
|
|
|
|
#35 | |
|
Bannato
Iscritto dal: Jan 2001
Messaggi: 1976
|
Quote:
lecchino. |
|
|
|
|
|
|
#36 |
|
Bannato
Iscritto dal: Jan 2001
Messaggi: 1976
|
e pur' fauz'
|
|
|
|
|
|
#37 | |
|
Bannato
Iscritto dal: Jan 2001
Messaggi: 1976
|
Quote:
|
|
|
|
|
|
|
#38 | |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quote:
Comunque il modo che hai usato per fare la conversione è molto simile a quello che ho usato io per dare una riga inserita dallo stdin in pasto all'operatore >> della classe database... Insomma a2000, ma questo programma ? |
|
|
|
|
|
|
#39 | |
|
Senior Member
Iscritto dal: Jan 2000
Messaggi: 551
|
Quote:
si però lui ce l'ha fatto vedere...tu no perchè ce l'hai PICCOLO |
|
|
|
|
|
|
#40 | |
|
Senior Member
Iscritto dal: Jan 2000
Messaggi: 551
|
Quote:
"Chi va con lo zoppo..." mi darò una regolata. |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 08:40.



















