View Full Version : Un algoritmo in C/C++
Ho il seguente "file iniziale" che contiene nomi di città.
[file iniziale]
ANCONA
PALERMO
MILANO
BOLOGNA
PISA
LECCE
Si deve scrivere un programma (C/c++) che date in "input da tastiera" (vedi sotto) alcune informazioni,le scriva nel "file iniziale" nel modo illustrato negli esempi sotto.
Se vi cimentate nello scrivere l'algoritmo funzionate, vi sarei grato se indicate anche il tempo da voi impiegato per risolvere il problema.
*********** esempio 1 *************
[input da tastiera]
ANCONA MARIA 100-200-250-100-300
-----------------------------------
[file di output]
ANCONA MARIA 100-200-250-100-300
PALERMO
MILANO
BOLOGNA
PISA
LECCE
*********** esempio 2 *************
[input da tastiera]
ANCONA MARIA 200-125-050-118-288
-----------------------------------
[file di output]
ANCONA MARIA 100-200-250-100-300
MARIA 200-125-050-118-288
PALERMO
MILANO
BOLOGNA
PISA
LECCE
*********** esempio 3 *************
[input da tastiera]
MILANO MARIO 200-125-050-118-288
-----------------------------------
[file di output]
ANCONA MARIA 100-200-250-100-300
MARIA 200-125-050-118-288
PALERMO
MILANO MARIO 200-125-050-118-288
BOLOGNA
PISA
LECCE
*********** esempio 4 *************
[input da tastiera]
MILANO MARIO 210-225-450-108-980
-----------------------------------
[file di output]
ANCONA MARIA 100-200-250-100-300
MARIA 200-125-050-118-288
PALERMO
MILANO MARIO 200-125-050-118-288
MARIO 210-225-450-108-980
BOLOGNA
PISA
LECCE
:( purtroppo è andata a farsi benedire la formattazione:mad:
uff... i file non sono mai stati il mio forte :mc:
direi che la cosa più semplice è fare una copia del file, leggerlo, fermarsi dove c'è la città indicata e poi inserire le info e andare avanti con la copiatura fino a fine file.
non so se è molto efficiente ma almeno funziona
6 furbo!!!! peccato ke nessuno ti risp.
Da oggi ci provo io!
by
The best
Originariamente inviato da frankk
6 furbo!!!! peccato ke nessuno ti risp.
Da oggi ci provo io!
by
The best
:confused: :confused:
Originariamente inviato da misterx
...
Se vi cimentate nello scrivere l'algoritmo funzionate, vi sarei grato se indicate anche il tempo da voi impiegato per risolvere il problema.
10 secondi per l'algoritmo.
invece è circa una settimana che penso a quale patologia possa affliggerti. :confused: :D
Una classettina che contenga i membri:
Nome città
Nome proprio
5 numeri interi
ridefinire gli operatori < e > in funzione dell'ordinamento per città per nome o per uno dei campi numerici.
ridefinire l'operatore << per sparare i dati del record sul file
mettere tutto in una stl::list
(consentira di ordinare usando l'algoritmo sort)
Nell'interfaccia grafica:
edit.box separati per ogni campo in una finestra di dialogo che all'OK controlli la correttezza dei dati immessi (Ciccio al posto di un numero per esempio)
Ho ricevuto il PVT ;) grazie
Originariamente inviato da a2000
10 secondi per l'algoritmo.
invece è circa una settimana che penso a quale patologia possa affliggerti. :confused: :D
fuori l'algoritmo, va bene anche in VBA così lo testo con Excel :)
di quale patologia soffro ?
:O non mi tenga sulle spine dottore :D
cazzonaggine acuta.
ue' ma du chel che abiti ? a piazzale Corveetto ?
allora che mestiere fai ?
tel chi, per esempio ... ma non chiamatelo algoritmo.
Sub OltreTomba()
a$ = InputBox("Cantami o Diva del Pelide Achille"): If a$ = "" Then Exit Sub
ipos = InStr(a$, " "): If ipos = 0 Then Exit Sub
a1$ = Left$(a$, ipos - 1)
a2$ = Mid$(a$, ipos + 1)
Open "c:\temp\misterxInp.dat" For Input As #1
Open "c:\temp\misterxOut.dat" For Output As #2
Do Until EOF(1)
Line Input #1, b$
If InStr(b$, a1$) = 1 Then
If b$ = a1$ Then
Print #2, a$
Else
Print #2, b$
Print #2, a2$
End If
Else
Print #2, b$
End If
Loop
Close
End Sub
devo ancora provarlo ma visto così di primo acchito, sembra non rispondere alle mi esigenze
forse mi sono espresso :ciapet: all'inizio del mio 3D
esegue gli esempi che hai fatto e simili.
Secondo me è formulato male il problema... Non sono discriminabili i campi...
Ad esempio se ho già nel file
CAMPI BISENZIO MARIA ASSUNTA ADDOLORATA 100-222-333-333-222
E da tastiera si inserisce :
CAMPI BISENZIO MARIA MADDALENA 100-222-333-222-333
Come faccio a capire se devo scrivere
CAMPI BISENZIO MARIA ASSUNTA ADDOLORATA 100-222-333-333-222
MARIA MADDALENA 100-222-333-222-333
o
CAMPI BISENZIO MARIA ASSUNTA ADDOLORATA 100-222-333-333-222
MADDALENA 100-222-333-222-333
o
CAMPI BISENZIO MARIA ASSUNTA ADDOLORATA 100-222-333-333-222
BISENZIO MARIA MADDALENA 100-222-333-222-333
?
Ci deve essere un carattere di separazione fra i campi...lo spazio non può essere un carattere discriminante...
perciò,
secondo me era la classica roba da fare con la prog a oggetti.
Sotto sotto ci vuole un controllo di errore non proprio da mezz'oretta.
ma sì che va bene.
i dettagli agli informatici. :P
come dice giustamente Cionci ed ho già asserito io, ho descritto il problema veramente con i piedi
dev'essere sto cavolo di caldo :mad:
p.s.
anche la perdita di formattazione ha contribuito a creare caos
riformulerò in modo più corretto la mia domanda:cry:
cmq, a me è sembrato un problema meno banale di quanto sembri
Originariamente inviato da cionci
Secondo me è formulato male il problema... Non sono discriminabili i campi...
vediamo se riesco ad esprimere meglio il problema
[file iniziale]
ANCONA
PALERMO
MILANO
BOLOGNA
PISA
LECCE
ora digito:
ANCONA MARIA 100-200-300-400-500
e mi ritrovo:
ANCONA MARIA 100-200-300-400-500
PALERMO
MILANO
BOLOGNA
PISA
LECCE
se ora digito un valore che sta in mezzo al precedente:
ANCONA MARIA 150-250-350-450
mi ritrovo:
ANCONA MARIA 100-150-200-250-300-350-400-450-500
PALERMO
MILANO
BOLOGNA
PISA
LECCE
(notate che qui l'algoritmo, avendo trovato già MARIA presente,
i nuovi valori inseriti sono sati intercalati a quelli già esistenti)
forse così è un pò più chiaro
p.s
tenete presente che i vari campi sono separati da una tabulazione
Bene: è un piccolo database
L'oggetto record deve avere :
- il campo Città (std::string)
- il campo Nome(std::string)
- una std::lista (o std::vector) di interi
Il caricamento lo fai per linee :
carichi ogni linea in una string,inizializzi uno stringstream dalla linea quindi da questo inizializzi l'oggetto facendo il primo livello di controllo.
il database sarà a sua volta un oggetto che avrà come membro
lista o vector di records.
Non so se va bene, ho scritto in fretta,vediamo che dice Cionci :)
NB al posto della lista, nel record conviene mettere il container sempre ordinato (mi pare la deque,non mi ricordo)
Se conosci un pò di STL ,overloading degli operatori,f.o per odinare secondo criteri diversi allora te la cavi,e fai una cosa che funziona bene,compatta,che non ha bisogno di un programma proprietario;altrimenti alla C so' dolori(da masochista) :mc: .
Ultima chance : Access
Vediamo che tira fuori dal cilindro o' Mast' di Excelle :D
( a quest'ora si starà preparando per andare a mare)
ps se quello dove va, può ancora definirsi mare :rolleyes:
ah com vi farria' fa' quatt'ann di Basicco pu' Commodore128 !
(ah come vi farei fare quattro anni di Basic col Commodore128 !)
non voglio fare il saputo (saccente) ma veramente burdel (ragazzi) queste sono cose che si facevano, per esempio, alla 4a lezione di un corso di Cobol for dummies nel 1979.
In VBA è un attimo. e in Fortran, Pascal, C (?).
in C++ invece è un'oretta di declare più un due di programmazione più una di debugging: potenza della programmazione ad oggetti applicata a problemi puliti. :D :D
ma non vi demoralizzate: non si va con una Ferrari su uno sterrato ! :O
... ehhh vi piacerebbe ... :P
l'analogia giusta è: non si va con un fuoristrada (C++) su una pista di F1 :D
a2000: fai un eseguibile in Fortan e ci dici quanto ci metti...
Devi ordinare anche in numeri del vettore...
Originariamente inviato da cionci
a2000: fai un eseguibile in Fortan e ci dici quanto ci metti...
Devi ordinare anche in numeri del vettore...
Pruvucatio magistris!
;) :D
Quann' o fortran nun zerv a nu Katz
ragazzi, è meno semplice di quanto si pensi
un'oretta a mio avviso non basta :cool:
Io ci ho messo circa un'ora e 20...se vuoi ti faccio vedere il codice...
Originariamente inviato da cionci
a2000: fai un eseguibile in Fortan e ci dici quanto ci metti...
Devi ordinare anche in numeri del vettore...
ecco questo è un esempio di programmazione ridondante a priori alias programmazione ad oggetti (già fatti ... da altri).
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 ! :D :D
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 :D) e via di run ! :cool:
cose del genere:
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
Originariamente inviato da cionci
Io ci ho messo circa un'ora e 20...se vuoi ti faccio vedere il codice...
Posta posta...
che sta roba serve sempre ;)
e capirai ... !
verlocc ta'ia fa' u mazz altro che serve sempre !
Originariamente inviato da a2000
e capirai ... !
verlocc ta'ia fa' u mazz altro che serve sempre !
Non osare...
lo sai... che me lo sto già facendo :)
Originariamente inviato da a2000
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.
Allora non hai capito cosa vuole misterx...
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...
#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;
}
oh mi signor ... 150 righe di codice per una cosa così !
la metà della metà delle righe di codice bastano e avanzano ! :cool:
saludi. :P
Ok...fai pure te il programma funzionante e guardiamo quanto tempo e righe ci metti...
Originariamente inviato da cionci
Ok...fai pure te il programma funzionante e guardiamo quanto tempo e righe ci metti...
hai la mailbox full ;)
Originariamente inviato da cionci
Allora non hai capito cosa vuole misterx...
clap clap clap :) (fatti: non parole)
grazie Cionci
Dai una occhiata a questo ( testalo e dimmi che ne pensi )
// 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
//
// verloc2000@yahoo.it
//
// 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
idea: perchè non uno stringstream per i dati ? ;)
Originariamente inviato da verloc
clap clap clap :) (fatti: non parole)
grazie Cionci
...
lecchino.
Originariamente inviato da ilsensine
Potresti mantenere il numero di post inutili al di sotto di un ragionevole 5%?
tranquillo, vada per il 5% e non di più.
Originariamente inviato da verloc
Dai una occhiata a questo ( testalo e dimmi che ne pensi )
Dovrebbe andare bene... Comunque non sono un'aquila su queste cose... Ad esempio stringstream è la prima volta che la vedo !!!
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 ?
Originariamente inviato da a2000
lecchino.
:P
si però lui ce l'ha fatto vedere...tu no perchè ce l'hai PICCOLO :D
Potresti mantenere il numero di post inutili al di sotto di un ragionevole 5%?
non so perchè,ma anch'io... mi sento coinvolto.
"Chi va con lo zoppo..."
mi darò una regolata.
cazzone !
la prima soluzione è stata la mia.
vi lascio le banali modifiche come esercizio.
Nono...la tua soluzione non rispetta le richieste...e le modifiche non sono afftto banali...
lombardp
21-07-2003, 15:19
Una versione un po' particolare, nel senso che mi sono concentrato sulle strutture dati e non interagisce con l'esterno. Manca gestione dell'I/O sia da tastiera che con i file.
Se poi ho qualche altro minuto, aggiungo quello che manca.
#include "stdafx.h"
#include "stdio.h"
#include "string.h"
#include "conio.h"
class listitem {
public:
char citta[10];
char nome[30];
bool iscitta;
listitem* pnext;
};
int appo;
listitem* proot = NULL;
void listadd(char* pcitta,char* pnome) {
listitem* plist = NULL;
listitem* pcurr = NULL;
pcurr = new listitem;
bool esci;
strcpy(pcurr->citta,pcitta);
strcpy(pcurr->nome,"");
pcurr->iscitta = false;
pcurr->pnext = NULL;
if (pnome==NULL) pcurr->iscitta = true;
else strcpy(pcurr->nome,pnome);
if (proot==NULL) proot = pcurr;
else {
plist = proot;
esci = false;
while ((plist->pnext!=NULL) & !esci)
if (strcmp(pcurr->citta,plist->pnext->citta)>=0) plist = plist->pnext;
else esci = true;
if (plist->pnext==NULL) plist->pnext = pcurr;
else {
pcurr->pnext = plist->pnext;
plist->pnext = pcurr;
}
}
}
int main(int argc, char* argv[])
{
listadd("ANCONA",NULL);
listadd("PALERMO",NULL);
listadd("MILANO",NULL);
listadd("BOLOGNA",NULL);
listadd("PISA",NULL);
listadd("LECCE",NULL);
listadd("ANCONA","MARIA 100-200-250-100-300");
listadd("ANCONA","MARIA 200-125-050-118-288");
listadd("MILANO","MARIO 200-125-050-118-288");
listadd("MILANO","MARIO 210-225-450-108-980");
char ch = getch();
return 0;
}
Originariamente inviato da cionci
Nono...la tua soluzione non rispetta le richieste...e le modifiche non sono afftto banali...
ahh, che fatica la vita ! :(
cionci prova a ripetere velocemente: "la vita è fatica, la vita è fatica ..."
bravo lombardp sei già calato a 45 righe (senza I/O) !
ma dopo centinaia di temp.zip, ancora non mi credete sulla parola ?
volete proprio la rozza prova materiale ?
Però non metti insieme le liste di numeri di persone che hanno stesa città e stesso nome...
a2000: Non manca solo l'I/O, manca anche il parsing del vettore dei numeri (che va ordinato)...
Non per fare a gara con lombardp, ma la parte più estesa del codice che ho scritto è l'I/O...
Originariamente inviato da a2000
cazzone !
la prima soluzione è stata la mia.
vi lascio le banali modifiche come esercizio.
:confused:
tu e il controllo di errore non andate molto d'accordo,
eppure qualcosa mi dice che della materia dovresti essere un maestro.
E se l'utente per esempio invece di scrivere 250 scrive Ingrassia Ciccio? (pace all'anima sua)
Serio
Non te la puoi sempre cavare con qualche righetta di VBA:
(dico in generale,non tu personalmente)
questo distingue codice scritto da una segretaria smanettona di Excell da codice INGEGNERISTICO.
guarda che questo genere di problemi, anche se semplici, non dovrebbero proprio porsi.
Ragazzi sto parlando sul serio:
in quella righetta di record si potrebbero annidare decine e decine
di errori (dell'utente)e bachi.
se l'utente scrive il nome e non i numeri?
se l'utente scrive 250.3 e non un numero intero?
se l'utente scrive prima i dati e poi il nome?
c'è un numero min-max di numeri?
se l'utente scrive Abelardo Francisco Miguel de Santillana Marques de Castiglia y Navarra?
se l'utente scrive Maria350 ?
...posso continuare...
secondo me questo distingue codice che rimane in una cantina di smanettone da codice che deve essere pagato 10000 € oppure codice da cui dipende la sicurezza delle persone o di un esercito.
Insomma a2000 ce lo vuoi far vedere o no questo programma in Fortran ? O vuoi fare la preziosa ;)
Originariamente inviato da verloc
Ragazzi sto parlando sul serio:
in quella righetta di record si potrebbero annidare decine e decine
di errori (dell'utente)e bachi.
Infatti... Come detto da misterx la separazione fra i campi deve essere un TAB...
I controlli sulla validità della riga inserità li ho fatti... Credo di avere già gestito un buon numero di errori possibili...
perchè nessuno ha usato una bella matrice bidimensionale dinamica per caricare manipolare e scrivere i dati ?????
Originariamente inviato da verloc
Ragazzi sto parlando sul serio:
in quella righetta di record si potrebbero annidare decine e decine
di errori (dell'utente)e bachi.
se l'utente scrive il nome e non i numeri?
se l'utente scrive 250.3 e non un numero intero?
se l'utente scrive prima i dati e poi il nome?
c'è un numero min-max di numeri?
se l'utente scrive Abelardo Francisco Miguel de Santillana Marques de Castiglia y Navarra?
se l'utente scrive Maria350 ?
...posso continuare...
secondo me questo distingue codice che rimane in una cantina di smanettone da codice che deve essere pagato 10000 € oppure codice da cui dipende la sicurezza delle persone o di un esercito.
certo che se l'utente si chiama verloc ... :D
verloc, datti pace, questi aspetti nei codici seri sono tutte cose secondarie, che si fanno fare dopo a qualche informatico di passaggio (e che poi ti tocca rifare).
Originariamente inviato da misterx
perchè nessuno ha usato una bella matrice bidimensionale dinamica per caricare manipolare e scrivere i dati ?????
e bravo a misterx: non mi sembra il caso, ma dallo e dallo ...
Originariamente inviato da misterx
perchè nessuno ha usato una bella matrice bidimensionale dinamica per caricare manipolare e scrivere i dati ?????
Io l'ho usata, ma non si vede ;) Anzi la mia è tridimensionale (gli elementi della matrice sono vettori di interi)...
Quella struttra che nel typedef ho chiamato vcitta è un vettore associativo di vettori associativi di vettori di interi ;)
scusa cionci ma adesso non ho tempo: sono troppo impegnato su ampland :oink:
Originariamente inviato da cionci
deve essere un TAB...
infatti è proprio quello il punto di partenza per scrivere codice da cantina...
(mi ricorda tanto quel software all'Istituto di Pavimentazioni stradali che se non gli davi i dati tabulati alla Hitler non capiva un Katzo)
MisterX,
non fraintendere,siamo amici,non ho mai criticato codice altrui e non lo farò mai(a torto o a ragione).
Originariamente inviato da verloc
infatti è proprio quello il punto di partenza per scrivere codice da cantina...
E' chiaro che partire da un file di dati testuale è sempre un problema...ma se quelle erano le specifiche...
PS: quasi tutti i casi che hai rammentato sono gestiti dal mio codice, chiaramente se non si separano i campi con un tab viene preso tutto con un campo unico... Allora tanto vale fare un inserimento a campi separati...
Originariamente inviato da a2000
scusa cionci ma adesso non ho tempo: sono troppo impegnato su ampland :oink:
Non hai nemmeno 10 minuti per scrivere un codice di 20 righe ? :P
o verloc, verloc frat' mii' :(
Originariamente inviato da cionci
Non hai nemmeno 10 minuti per scrivere un codice di 20 righe ? :P
no.
perché non ho la penna in mano.
lombardp
21-07-2003, 16:38
Versione con I/O da file e inserimento da tastiera:
#include "stdafx.h"
#include "stdio.h"
#include "string.h"
#include "conio.h"
class listitem {
public:
char citta[10];
char nome[30];
bool iscitta;
listitem* pnext;
};
FILE* myfile;
char linea[81],keycitta[16],keynome[32],keynumeri[32];
char *keyc,*keyn;
listitem* proot = NULL;
listitem* plist = NULL;
listitem* pcurr = NULL;
void listadd(char* pcitta,char* pnome) {
pcurr = new listitem;
bool esci;
strcpy(pcurr->citta,pcitta);
strcpy(pcurr->nome,"");
pcurr->iscitta = false;
pcurr->pnext = NULL;
if (pnome==NULL) pcurr->iscitta = true;
else strcpy(pcurr->nome,pnome);
if (proot==NULL) proot = pcurr;
else {
plist = proot;
esci = false;
while ((plist->pnext!=NULL) & !esci)
if (strcmp(pcurr->citta,plist->pnext->citta)>=0) plist = plist->pnext;
else esci = true;
if (plist->pnext==NULL) plist->pnext = pcurr;
else {
pcurr->pnext = plist->pnext;
plist->pnext = pcurr;
}
}
}
int main(int argc, char* argv[])
{
myfile = fopen("kassad.dat","r+");
if (myfile!=NULL) while (fgets(linea,80,myfile)) {
keyc = strtok(linea," \n");
keyn = strtok(NULL,"\n");
if (keyn!=NULL) listadd(keyc,keyn);
else if (keyc!=NULL) listadd(keyc,NULL);
}
fclose(myfile);
scanf("%s %s %s",keycitta,keynome,keynumeri);
strcat(keynome," ");
strcat(keynome,keynumeri);
listadd(keycitta,keynome);
myfile = fopen("kassad.dat","w+");
plist = proot;
while (plist!=NULL) {
strcpy(linea,plist->citta);
if (!plist->iscitta) {
strcat(linea," ");
strcat(linea,plist->nome);
}
strcat(linea,"\n");
fputs(linea,myfile);
plist = plist->pnext;
}
fclose(myfile);
char ch = getch();
return 0;
}
lombardp 60 righe, mumble ... mumble ....
la indovino con 20 !
Originariamente inviato da verloc
infatti è proprio quello il punto di partenza per scrivere codice da cantina...
(mi ricorda tanto quel software all'Istituto di Pavimentazioni stradali che se non gli davi i dati tabulati alla Hitler non capiva un Katzo)
MisterX,
non fraintendere,siamo amici,non ho mai criticato codice altrui e non lo farò mai(a torto o a ragione).
non c'è problema :)
per me puoi separare i campi dei record con quello che vuoi; a te la scelta se ti crea probemi ;)
però, già che hai sollevato la questione, ti sarei grato se mi illumini sul tuo metodo di salvataggio dei record :P
Originariamente inviato da misterx
non c'è problema :)
per me puoi separare i campi dei record con quello che vuoi; a te la scelta se ti crea probemi ;)
hai visto, puoi separare i campi come vuoi ...
e allora ragazzi se usate più di 30 righe di codice buttate nel cesso il linguaggio che state usando.
http://www.pulpweb.com/wbboard/images/smilies/smiles_013.gif C++
confermo le 20 righe. http://www.pulpweb.com/wbboard/images/smilies/smiles_003.gif
Originariamente inviato da misterx
non c'è problema :)
per me puoi separare i campi dei record con quello che vuoi; a te la scelta se ti crea probemi ;)
però, già che hai sollevato la questione, ti sarei grato se mi illumini sul tuo metodo di salvataggio dei record :P
Non l'hai letto il codice di Cionci eh? :)
Il problema è un classico: overlodare l'operatore << per l'oggetto record e/o per l'intero database.
queste cose si fanno alla C++ ;)
Originariamente inviato da verloc
Non l'hai letto il codice di Cionci eh? :)
Il problema è un classico: overlodare l'operatore << per l'oggetto record e/o per l'intero database.
queste cose si fanno alla C++ ;)
spiegati meglio :)
lombardp: a me il tuo mi da un errore di accesso alla memoria...
Ah...ora va... Andava creato il file...
Comunque se immetto questi tre dati:
FIRENZE MARIA 123-1
FIRENZE MARIA 1-2
FIRENZE MARIA 1-2-1-2
Il file mi viene scritto così:
FIRENZE MARIA 123-1
FIRENZE MARIA 1-2
FIRENZE MARIA 1-2-1-2
Invece di così:
FIRENZE MARIA 1-1-1-1-1-2-2-2-123
Senza contare che l'input con la scanf non permette di inserire città o nomi con uno spazio nel mezzo...
Insomma...a2000...creane uno equivalente al mio e guarda quanto ci metti... Se vuoi vedere come funziona ti allego l'eseguibile...
http://utenti.lycos.it/ci0nci/main.gif (rinominalo come .zip)
http://utenti.lycos.it/ci0nci/Headbanging1.gif
lombardp
22-07-2003, 08:55
Originariamente inviato da cionci
Ah...ora va... Andava creato il file...
Comunque se immetto questi tre dati:
FIRENZE MARIA 123-1
FIRENZE MARIA 1-2
FIRENZE MARIA 1-2-1-2
Il file mi viene scritto così:
FIRENZE MARIA 123-1
FIRENZE MARIA 1-2
FIRENZE MARIA 1-2-1-2
Invece di così:
FIRENZE MARIA 1-1-1-1-1-2-2-2-123
Una cosa:
Si è vero. Per ora ho realizzato il programma secondo la formattazione dell'output del primo esempio riportato (poi affronterò anche la seconda versione) :
...
[input da tastiera]
ANCONA MARIA 200-125-050-118-288
-----------------------------------
[file di output]
ANCONA MARIA 100-200-250-100-300
MARIA 200-125-050-118-288
PALERMO
MILANO
BOLOGNA
PISA
LECCE
...
Senza contare che l'input con la scanf non permette di inserire città o nomi con uno spazio nel mezzo...
Non essendo stato specificato di dover gestire nomi e città con spazi, ne essendocene negli esempi, ho ritenuto di poter interpretare liberamente la situazione.
Originariamente inviato da cionci
Insomma...a2000...creane uno equivalente al mio e guarda quanto ci metti... Se vuoi vedere come funziona ti allego l'eseguibile...
meraviglioso lo smile headbangher!!!! :D
Non riesco a trovarne uno che sputazza in faccia a un'altro...se l'avete... :)
Originariamente inviato da misterx
spiegati meglio :)
Abla español ? :D
Originariamente inviato da verloc
Abla español ? :D
ho capito che sei pigro :)
aaaaaaarrrrrggggggggghhhhhhhh!!!!
overloading degli operatori.
te lo ha fatto vedere Cionci meglio di quanto avrei fatto io:quando fai così
fout<<Il_mio_fottuto_oggetto_classe_record
lui ti scrive sullo stream che vuoi i dati del record.
Tu pensi che sto cazzeggiando?In questo momento sto sbattendo la testa per far disegnare a comando un fottutissimo disegno.
vabbuò? :D
Uagliò, te lo deve dire un ingegnere civile che devi studiare
Bruce Eckel ? :D
Hai una filosofia diametralmente opposta alla mia:impari le cose solo se e quando ti servono;ciò comporta una curva di apprendimento infinitamente lineare (fatica terribile e masochista) :)
Originariamente inviato da verloc
........ impari le cose solo se e quando ti servono; ciò comporta una curva di apprendimento infinitamente lineare (fatica terribile e masochista)
hai colto nel segno............
perchè riempirsi la testa di inutili teorie se poi non le usi ?
il mio cervello dimentica abbastanza in fretta :D
vedrai che finita l'uni fai anche tu così; non si sta tutta la vita sotto esame ;)
che comporti una curva di apprentimento bla bla bla, è dimostrato ? :confused:
Fenomeno85
22-07-2003, 13:10
secondo me se a2000 dice che in 20 righe il prob si risolve è così! Mi aveva risolto un problema in excel mi stava facendo diventare matto.
Siccome mi voglio cimentare anchio in questo bel problemino, vorrei sapere:
- il numero dei file è quanti sono le città
- i file utilizzati possono essere di tipo binario
Io l'ho fatto con un solo file di testo ed i campi che sono separati da TAB...e i nomi delle città sono variabili e si possono inserire anche dal programma...
se vuoi vedere quello che fa il mio eseguibile scaricalo da sopra...
Originariamente inviato da misterx
vedrai che finita l'uni fai anche tu così; non si sta tutta la vita sotto esame ;)
non è detto che tu abbia torto ;)
che comporti una curva di apprentimento bla bla bla, è dimostrato ? :confused:
in realtà la cosa è più complicata:un misto di intuito ed esperienza
nell'applicare lo "imparara l'arte e mettila da parte":
cioè capire al volo quando una cosa ti potrebbe servire in futuro.
Esempi sparsi :
mi scaricai un articolo che trattava di una tecnica raffinata per risolvere numericamente una equazione secondo metodi a scelta,
usando template e f.o.Quando l'ho scaricato a malapena sapevo "Hello world".Oggi è il punto di forza del mio programma.
Da un piccolissimo Cad scaricato un anno fa in mezz'ora ho ricavato il logo 3d con le ombre ( :eek: ) del mio programma.
Da un programma free scaricato al volo posso ridurre una bitmap per farne un gliph per pulsanti.
Con la stessa mentalità (per ora)salto a piè pari tutto ciò che riguarda la manipolazione by code delle immagini.
Overloading:
sapevo che mi sarebbe servito per ridefinire l'operatore == per ricercare oggetti duplicati e ne ho studiato le basi prima.
Perchè ho statisticamente verificato che quando arrivi al punto che devi imparare una cosa importante al momento per chè non puoi fare altrimenti;allora stai davvero nei guai.
Solo agendo così ho trovato il coraggio e l'incoscienza di fare una tesi per cui all'università mi hanno dato del PAZZO!
Ho reso l'idea amico mio? :)
ciao,fammi andare.
ps fra un pò ti chiederò lo scheduler: pare che tu abbia fatto un gran lavoro e voglio vederlo ;)
Originariamente inviato da Fenomeno85
secondo me se a2000 dice che in 20 righe il prob si risolve è così!
e poi la gente si chiede come può nascere una dittatura in quei paesi di pezzenti nel terzo mondo... :rolleyes:
ragazzo io sono AMICO di a2000 ma se in 4 pagine di discussione non hai capito che questa volta lui ha torto,devi mangiare ancora
pane.
Lui si contraddice quando dice che prima bisogna guardare allo stato dell'arte...
LO STATO DELL' ARTE PER QUESTE COSE E' LA PROGRAMMAZIONE A OGGETTI
ps scusa la ramanzina paternalistica,non te la prendere :)
intanto io so cosa farà stasera: il femminielli tour :D
Fenomeno85
22-07-2003, 16:16
la cosa della dittatura nn l'ho mica capita ... per il resto avrai forse ragione ... non me la prendo mica nn ti preoccupare ::ubriachi::cincin:
http://gethelp.devx.com/techtips/cpp_pro/10min/10min0400.asp
Originariamente inviato da verloc
non è detto che tu abbia torto ;)
fidati...
Originariamente inviato da verloc
in realtà la cosa è più complicata: un misto di intuito ed esperienza nell'applicare lo "imparara l'arte e mettila da parte":
cioè capire al volo quando una cosa ti potrebbe servire in futuro.
ps fra un pò ti chiederò lo scheduler: pare che tu abbia fatto un gran lavoro e voglio vederlo ;)
E' solo una questione di metodi, ognuno ha i suoi; "fortunatamente" quando ho la necessità di imparare qualcosa di nuovo mi riesce abbastanza semplice, ribadisco, "fortunatamente".
In ogni caso ho capito cosa intendi, anch'io ho il mio cassetto dei miracoli dove conservo tutto quello che imparo e che all'occorrenza.......
Lo scheduler l'ho scritto in VBA pur non conoscendo nulla o quasi su tale linguaggio: così a me lo hanno richiesto ed io li ho accontentati.
Solo fortuna, pura e semplice fortuna :)
in ogni caso: non ne so mai abbastanza quindi, sotto a studiare che la strada è ancora lunga ;)
Originariamente inviato da Fenomeno85
secondo me se a2000 dice che in 20 righe il prob si risolve è così! Mi aveva risolto un problema in excel mi stava facendo diventare matto.
Siccome mi voglio cimentare anchio in questo bel problemino, vorrei sapere:
- il numero dei file è quanti sono le città
- i file utilizzati possono essere di tipo binario
ti ringrazio e mostreremo a questi miscredenti in quale orrido nebbioso stanno vagando senza pace e senza luce. :mc:
verlocc, all'istituto motori iè chin' d' cazzun' :sofico:
Fenomeno85
23-07-2003, 12:57
di niente a2000 ... la mia fiducia è tutta in te :O
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.