|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#21 | |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quote:
|
|
|
|
|
|
|
#22 |
|
Bannato
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
|
E per la richiesta che ho fatto nel post di risposta a Banryu? Posso ripostarle le e-mail?
Ciao |
|
|
|
|
|
#23 |
|
Bannato
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
|
|
|
|
|
|
|
#24 |
|
Bannato
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
|
Cionci,
non riesco a compilare il tuo codice: error C2061: syntax error : identifier 'matrix' Il codice è questo: Codice:
#include <iostream>
#include <fstream>
#include <sstream>
#include <vector>
#include <time.h>
using namespace std;
class DataMatrix
{
vector<float *> matrix;
int currentColumn;
int columns;
int rows;
public:
DataMatrix(int columns)
{
this->columns = columns;
rows = 0;
newLine();
}
void insert(float f)
{
matrix.back()[currentColumn++] = f;
}
void newLine()
{
matrix.push_back(new matrix[columns]);
rows++;
}
int getRows() { return rows; };
int getColumns() { return columns; };
float getElement(int row, int column)
{
return matrix[row][column];
}
~DataMatrix()
{
while(matrix.size() > 0)
{
delete[] matrix.back();
matrix.pop_back();
}
}
};
class MalformedLineException
{
int row;
int column;
string message;
public:
MalformedLineException(int row, int column)
{
this->row = row;
this->column = column;
ostringstream oss;
oss << "Malformed line at row " << row << " and column " << column;
message = oss.str();
}
string getMessage() { return message; };
int getRow() { return row; };
int getColumn() { return column; };
};
int countColumns(string line)
{
istringstream iss(line);
int lineCounter = 0;
while(1)
{
float tmp;
iss >> tmp;
if(iss.fail() && !iss.eof())
throw MalformedLineException(1, lineCounter + 1);
if(iss.eof())
break;
lineCounter++;
}
return lineCounter;
}
void parseLine(string line, DataMatrix &data)
{
istringstream iss(line);
for(int i = 0; i < data.getColumns(); ++i)
{
float f;
iss >> f;
if(iss.fail())
throw MalformedLineException(data.getRows(), data.getColumns());
data.insert(f);
}
}
int main()
{
int rows;
clock_t c_start, c_end;
c_start = clock();
ifstream inputFile("C:\\Temp\\test3.txt");
try
{
string line;
getline(inputFile, line);
int columns = countColumns(line);
DataMatrix data(columns);
rows = 1;
while(1)
{
if(inputFile.fail())
break;
data.newLine();
parseLine(line, data);
getline(inputFile, line);
rows++;
}
cout << endl;
cout << "v[0][0] -> " << data.getElement(0, 0) << endl;
cout << "v[" << data.getRows() - 1 << "][" << data.getColumns() - 1 << "] -> " << data.getElement(rows - 1, columns - 1) << endl;
}
catch(MalformedLineException ex)
{
cout << ex.getMessage();
}
c_end = clock();
printf("\nTempo impiegato -> %5.5f secondi\n", (double)(c_end - c_start) / CLOCKS_PER_SEC);
return 0;
}
Codice:
matrix.push_back(new matrix[columns]); |
|
|
|
|
|
#25 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
matrix.push_back(new float[columns]);
Sorry, ma l'ho scritto di getto senza compilarlo |
|
|
|
|
|
#26 |
|
Bannato
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
|
Adesso compila ma, eseguendolo, va in crash
Forse è qualche cavolata che ho combinato io modificando il codice. |
|
|
|
|
|
#27 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Mi alleghi il file con i dati ?
|
|
|
|
|
|
#28 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Corretto:
Codice:
#include <iostream>
#include <fstream>
#include <sstream>
#include <vector>
#include <ctime>
using namespace std;
class DataMatrix
{
vector<float *> matrix;
int currentColumn;
int columns;
int rows;
public:
DataMatrix(int columns)
{
this->columns = columns;
rows = 0;
}
void insert(float f)
{
matrix.back()[currentColumn++] = f;
}
void newLine()
{
currentColumn = 0;
matrix.push_back(new float[columns]);
rows++;
}
int getRows()
{
return rows;
}
int getColumns()
{
return columns;
}
float getElement(int row, int column)
{
return matrix[row][column];
}
~DataMatrix()
{
while (matrix.size() > 0)
{
delete[] matrix.back();
matrix.pop_back();
}
}
};
class MalformedLineException
{
int row;
int column;
string message;
public:
MalformedLineException(int row, int column)
{
this->row = row;
this->column = column;
ostringstream oss;
oss << "Malformed line at row " << row << " and column " << column;
message = oss.str();
}
string getMessage()
{
return message;
}
int getRow()
{
return row;
}
int getColumn()
{
return column;
}
};
int countColumns(string line)
{
istringstream iss(line);
int columnCounter = 0;
while (1)
{
float tmp;
iss >> tmp;
if (iss.fail() && !iss.eof())
throw MalformedLineException(1, columnCounter + 1);
columnCounter++;
if (iss.eof())
break;
}
return lineCounter;
}
void parseLine(string line, DataMatrix &data)
{
istringstream iss(line);
for (int i = 0; i < data.getColumns(); ++i)
{
float f;
iss >> f;
if (iss.fail())
throw MalformedLineException(data.getRows(), i + 1);
data.insert(f);
}
}
int main()
{
clock_t c_start, c_end;
c_start = clock();
ifstream inputFile("data.txt");
if (inputFile.fail())
{
cout << "Error opening file" << endl;
return 1;
}
try
{
string line;
getline(inputFile, line);
int columns = countColumns(line);
DataMatrix data(columns);
while (!inputFile.fail())
{
data.newLine();
parseLine(line, data);
getline(inputFile, line);
}
cout << endl;
cout << "v[0][0] -> " << data.getElement(0, 0) << endl;
cout << "v[" << data.getRows() - 1 << "][" << data.getColumns() - 1 << "] -> " << data.getElement(data.getRows() - 1, data.getColumns() - 1) << endl;
}
catch (MalformedLineException ex)
{
cout << ex.getMessage();
}
c_end = clock();
printf("\nTempo impiegato -> %5.5f secondi\n", (double)(c_end - c_start) / CLOCKS_PER_SEC);
return 0;
}
Ultima modifica di cionci : 16-09-2008 alle 12:24. |
|
|
|
|
|
#29 | |
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Quote:
Il link non riesco a raggiungerlo ma avendo letto il testo delle mail la situazione mi appare chiara. A proposito complimenti, dev'essere una bella soddisfazione
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
|
|
|
|
|
|
#30 |
|
Bannato
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
|
|
|
|
|
|
|
#31 |
|
Bannato
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
|
|
|
|
|
|
|
#32 | |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quote:
|
|
|
|
|
|
|
#33 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
|
|
|
|
|
|
#34 | |
|
Bannato
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
|
Quote:
Cionci scusami, ho postato il file sbagliato(è un file di testo che contiene il mio intervento sul forum). Purtroppo il file dei dati, anche zippato, è troppo grosso(più di 100 MB). Puoi ricostruirlo al volo con la funzione che ho postato qualche post fa. Ciao |
|
|
|
|
|
|
#35 |
|
Bannato
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
|
Questo è il tempo sulla mia macchina:
|
|
|
|
|
|
#36 | |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quote:
Tempo impiegato -> 17.29000 secondi array[0][0] -> 9707.6 array[99999][365] -> 0 Quindi in definitiva la differenza non è poi così immensa (soprattutto contando che il file è veramente grande). Vlae davvero la pena perdere leggibilità e manutenibilità in favore di una così risicata differenza ? Imho no. Poi casomai il file fosse dieci volte più grande se ne potrebbe anche parlare. E quello in C++ è anche migliorabile. Basta fare un po' di profiling. |
|
|
|
|
|
|
#37 | |
|
Bannato
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
|
Quote:
Provo a compilare col watcom e ti faccio sapere. |
|
|
|
|
|
|
#38 |
|
Member
Iscritto dal: Jul 2008
Messaggi: 255
|
complimenti vincenzo ottime prestazioni
penso che in un linguaggio come il c++ le prestazioni contano eccome altrimenti che senso ha usare il c++ per complicarsi la vita. uso python e via |
|
|
|
|
|
#39 | |
|
Bannato
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
|
Quote:
grazie x Cionci: ho qualche problema a compilare il tuo codice col watcom. Il mio sono riuscito a compilarlo ma ho dovuto includere gli header del c: Codice:
#include <iostream> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <malloc.h> #include <time.h> using namespace std; sintax error; probable cause: missing ';' Sai se c'è modo di risolvere la cosa? P.S. I tempi del mio codice, col watcom, scendono a 29.32800 secondi |
|
|
|
|
|
|
#40 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Prova con
#include <sstream> |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 10:00.




















