Precedente :: Successivo |
Autore |
Messaggio |
Mitch Comune mortale

Registrato: 31/01/09 14:06 Messaggi: 4
|
Inviato: 31 Gen 2009 14:17 Oggetto: Lettura da file |
|
|
Ciao a tutti!!
Sto lavorando a un piccolo progetto universitario e ho un problema:
devo movimentare un robot, cosa che ho fatto, e creare un mio macrolinguaggio. Adesso se scrivo nel codice
Codice: | diretta (90,25,23,24,1)
inversa(40,30,36,54,2)
apri()
chiudi()
casa() |
il mio robot compie delle operazioni. Quello che dovrei fare ora è indicare un file (es a:/file.txt) e riuscire a leggere le informazini in questo file, in modo che il robot possa leggere le informazioni. Come posso fare?
volevo usare la funzione strcmp(), che ne penasate?
vorrei far in modo che in output apparisse "inserire il nome file" e che parta poi il "confronto" col macrolinguaggio..
Codice: | cout<<"Inserire il percorso del file";
cin>>file; |
da qui dovrebbe aprire il file indicato, leggere e riconoscere il macrolinguaggio e mandare dati inseriti alle rispettive funzioni.
es. pratico del file di testo
Codice: | apri()
inversa(x,y,z,pitch,roll,pinza) | dove tra parentesi ho dei valori
il codice dovrebbè allora aprire il percorso spercificato, riconoscere la funzione e inviare i valori tra parentesi alle funzioni del macrolinguaggio.
Idee? Aiuti? Perplessità?
Grazie
Mitch |
|
Top |
|
 |
chemicalbit Dio maturo


Registrato: 01/04/05 18:59 Messaggi: 18597 Residenza: Milano
|
Inviato: 31 Gen 2009 22:02 Oggetto: Re: Lettura da file |
|
|
Mitch ha scritto: | riuscire a leggere le informazini in questo file, in modo che il robot possa leggere le informazioni. Come posso fare?
volevo usare la funzione strcmp(), che ne penasate? | Ma tutto ilrobot inche linguaggio è programmato?
C++ ?
Nel file che apri e leggi ci sono le istruzioni in macrocodice,
e poi il tuo programma (programma di gestione del robot) dovrà eseguire le operazioni indicate (usando il linguaggio di programmazione macrocodice) in tale file (che è quindi un ulteriore programma, che verrà eseguito dal programma)
ho capito bene? |
|
Top |
|
 |
Mitch Comune mortale

Registrato: 31/01/09 14:06 Messaggi: 4
|
Inviato: 01 Feb 2009 02:06 Oggetto: |
|
|
il codice è scritto parte in c e parte in c++.... cmq per farmi capire meglio ti posto parte del codice e ti faccio un esempio..
Questa è una delle funzioni del macrolinguaggio
Codice: | void inversa (int,int,int,int,int,int); //x,y,z,pitch,roll,pinza
macrolinguaggio
void inversa (int x,int y,int z,int pitch,int roll,int pinza)
{
float rtT = 50.0;
float encoder_dir[5]={0.0,0.0,0.0,0.0,0.0};
float theta_dir[5] = {0.0,0.0,0.0,0.0,0.0};
float encoder_pass=0 ;
float theta_pass1[5] = {0.0,0.0,0.0,0.0,0.0};
float cost[5] = { 21.3 ,16.47 , 16.75 , 4.12 , 4.18 };
float coord_inv[5]={0,0,0,0,0};
coord_inv[0]=x;
coord_inv[1]=y;
coord_inv[2]=z;
coord_inv[3]=pitch;
coord_inv[4]=roll;
if (uscitaDIM==0)
{
int sentinella=0;
sentinella=checkINV(coord_inv[0],coord_inv[1],coord_inv[2],coord_inv[3],0,0,0,0)
;
uscitaDIM=sentinella;
if (sentinella==0||uscitaDIM==0)
{
float theta_dirRAD[4]={0.0,0.0,0.0,0.0};
theta_dirRAD[0]=atan2(coord_inv[1],coord_inv[0]);
float re=0;
float polsorw=0;
float polsoz=0;
float cos_2=0;
float sin_2=0;
float sin_1=0;
float cos_1=0;
pinza=pinzaGLOB;
re=sqrt(coord_inv[0]*coord_inv[0]+coord_inv[1]*coord_inv[1]);
polsorw=re-14.6*cos(coord_inv[3]*(M_PI/180.0));
polsoz=coord_inv[2]+14.6*sin(coord_inv[3]*(M_PI/180.0));
cos_2=((polsorw-2.2)*(polsorw-2.2)+(polsoz-35.1)*(polsoz-35.1)-22.4*22.4-22.2*22.2)/(2*22.2*22.4);
sin_2=sqrt(1.0-cos_2*cos_2);
theta_dirRAD[2]=atan2(sin_2,cos_2);
sin_1=((-(polsoz-35.1)*(22.4+22.2*cos_2)+(22.2*sin_2)*(2.2-polsorw))/((22.4+22.2*cos_2)*(22.4+22.2*cos_2)+22.2*22.2*sin_2*sin_2));
cos_1=sqrt(1-sin_1*sin_1);
theta_dirRAD[1]=atan2(sin_1,cos_1);
theta_dir[0]=theta_dirRAD[0]*(180.0/M_PI);
theta_dir[1]=theta_dirRAD[1]*(180.0/M_PI);
theta_dir[2]=theta_dirRAD[2]*(180.0/M_PI);
theta_dir[3]=coord_inv[3]-90.0-theta_dir[2]-theta_dir[1];
theta_dir[4]=coord_inv[4];
sentinella=checkINV(coord_inv[0],coord_inv[1],coord_inv[2],coord_inv[3],sin_1,co
s_2,theta_dir[1],theta_dir[3]);
uscitaDIM=sentinella;
if (sentinella==0||uscitaDIM==0){
theta_pass1[0]=-theta_dir[0]+92;
encoder_dir[0]=theta_pass1[0]*cost[0];
ROBOTDefCtrlPosReq[0]=encoder_dir[0];
theta_pass1[1]=-theta_dir[1]-120;
encoder_dir[1]=theta_pass1[1]*cost[1];
ROBOTDefCtrlPosReq[1]=encoder_dir[1];
theta_pass1[2]=28+theta_dir[2]+theta_dir[1];
encoder_dir[2]=theta_pass1[2]*cost[2];
ROBOTDefCtrlPosReq[2]=encoder_dir[2];
theta_pass1[3]=-theta_dir[3]-theta_dir[2]-theta_dir[1]-22-28;
encoder_dir[3]=theta_pass1[3]*cost[4];
ROBOTDefCtrlPosReq[3]=encoder_dir[3];
theta_pass1[4]=theta_dir[4]-7;
encoder_dir[4]=theta_pass1[4]*cost[4];
ROBOTDefCtrlPosReq[4]=encoder_dir[4];
delay(5000);
}
if (pinza==1||uscitaDIM==0) apri();
else if (pinza==2||uscitaDIM==0) chiudi();}
}} |
ho poi una parte chiamata di linguaggio strutturata in questo modo
Codice: | int dimostrazione()
{GraficaDIM();
ROBOTPowerON();
ROBOTControlStart(50.0);
uscitaDIM=0;
while (uscitaDIM==0)
{
gotoxy(10,20);
cout<<"Loading";
casa(); //pinza==1 apri ==2 chiudi
inversa (35,35,25,0,0,1);
chiudi();
inversa (30,45,20,0,0,0);
apri();
diretta (90,0,0,0,0,0);
diretta (90,-45,45,0,0,0);
chiudi();
fine();}
} |
quindi, quando lancio dimostrazione() dal menù del programma, che qui non ho riportato per semplicità, vengono passati i valori alle rispettive funzioni e il robot esegue una serie di operazioni.
Ora,se io volessi scrivere un file di testo di questo tipo
Codice: | apri
diretta(90,0,0,0,0,1)
mettiamo caso salvato in c:/documenti/testo.txt
vorrei poter immetere da tastiera il file richiesto
cout<<"Specificare percorso";
cin>>percorso; e l'utente dovrebbe scivere c:/documenti/testo.txt |
il codice dovrebbe allora aprire il percorso selezionato e confrontare le righe scritte nel file con il mio macrolinguaggio, passare quindi i valori tra parentesi alle varie funzioni in modo da permettere la movimentazione.
Sfortunatamente sul mio manuale di c++ non si parla mai di lettura da file in questi termini e non so davvero come fare.. Grazie ancora |
|
Top |
|
 |
freemind Supervisor sezione Programmazione


Registrato: 04/04/07 21:28 Messaggi: 4643 Residenza: Internet
|
Inviato: 01 Feb 2009 23:38 Oggetto: |
|
|
Scusa, ma devi mica creare un compilatore/interprete?
Perchè se è così la cosa non è proprio facile facile altrimenti se ti basta con qualche barbatrucco riuscire a interpretare in qualche modo le tue istruzioni allora è un altro discorso... |
|
Top |
|
 |
chemicalbit Dio maturo


Registrato: 01/04/05 18:59 Messaggi: 18597 Residenza: Milano
|
Inviato: 01 Feb 2009 23:54 Oggetto: |
|
|
Se ho ben capito una sorta d'interprete,
però abbastanza elementare, con 5 o 6 istruzioni (e -presumo, non ne ha mai parlato- senza controllo di flusso, le istruzioni sono eseguite nell'ordine e basta).
L'ultima modifica di chemicalbit il 02 Feb 2009 00:58, modificato 1 volta |
|
Top |
|
 |
Mitch Comune mortale

Registrato: 31/01/09 14:06 Messaggi: 4
|
Inviato: 02 Feb 2009 00:21 Oggetto: |
|
|
mmmm cercherò di essere più chiaro... allora... io ho creato un codice che, attraverso un lettore di encoder incrementali, mi permette di movimentare un robot,oltre ovviamente a controllare i dati immessi in modo che siano compatibili coi vincoli geometrici del robot stesso: compare una schermata in cui vengono date diverse possibilità (inserire le coordinate che la punta dell'effettore del robot dove assumere oppure gli angoli di giunto). non ho riportato l'intero codice per un semplice motivo, sono oltre tremila righe e quindi sarebbe abbastanza inutile... ora a che punto sono: ho creato anche delle funzioni di macrolinguaggio, che altro non sono che delle chiamate a funzione a cui passo dei valori es diretta (int,int,int). Questo mi ha permesso di implementare una demo che dimostra la capacità del mio software di controllo (lo scrobot risolve un cubo di rubik). Ma ora vorrei fare in modo che l'utente possa indicare una particolare directory , che dovrebbe essere scritta in questo modo
Codice: | diretta(int,int)
inversa(int,int)
apri
casa |
che sono tutte funzioni che ho creato nel mio software... vorrei che il computer fosse in grado di leggere il contenuto di questo file di testo, riconoscere che si tratta delle mie funzioni e passi i relativi valori...
spero di essere stato chiaro.. e grazie ancora in ogni caso.. |
|
Top |
|
 |
freemind Supervisor sezione Programmazione


Registrato: 04/04/07 21:28 Messaggi: 4643 Residenza: Internet
|
Inviato: 02 Feb 2009 00:35 Oggetto: |
|
|
e qui si ritorna alla mia domanda.
Un conto è se tu vuoi leggere il file di testo che contiene ad esempio su ogni riga un'istruzione che tu andrai ad analizzare con qualche cosa del tipo:
Codice: |
...
if (pezzoDiRigaLetta=='diretta')
{
...
}
else if (pezzoDiRigaLetta=='apri')
{
...
}
...
|
altra cosa è invece il voler creare un interprete vero che legge il file ed esegua le istruzioni esattamente come fa ad esempio l'interprete php.
Al di la di leggere il file di testo che è banale il problema è come vuoi interpretare il file.
Nel primo caso non è difficilissimo (bisogna trovare un modo furbo per splittare le righe); nel secondo occorre scrivere un vero è proprio compilatore in miniatura.
Comunque domani posto un esempio di lettura di un file ascii (ora non ho più voglia di programmare), poi vediamo dove arriviamo... |
|
Top |
|
 |
chemicalbit Dio maturo


Registrato: 01/04/05 18:59 Messaggi: 18597 Residenza: Milano
|
Inviato: 02 Feb 2009 01:02 Oggetto: |
|
|
freemind ha scritto: | altra cosa è invece il voler creare un interprete vero che legge il file ed esegua le istruzioni esattamente come fa ad esempio l'interprete php. | Cioè ad es. considerando anche il controllo di flusso (if, while, for ....) ?
freemind ha scritto: | Al di la di leggere il file di testo che è banale il problema è come vuoi interpretare il file.
(...) nel secondo occorre scrivere un vero è proprio compilatore in miniatura.. |
Interprete o compilatore? |
|
Top |
|
 |
Mitch Comune mortale

Registrato: 31/01/09 14:06 Messaggi: 4
|
Inviato: 02 Feb 2009 01:19 Oggetto: |
|
|
freemind ha scritto: | e qui si ritorna alla mia domanda.
Un conto è se tu vuoi leggere il file di testo che contiene ad esempio su ogni riga un'istruzione che tu andrai ad analizzare con qualche cosa del tipo:
Codice: |
...
if (pezzoDiRigaLetta=='diretta')
{
...
}
else if (pezzoDiRigaLetta=='apri')
{
...
}
...
|
altra cosa è invece il voler creare un interprete vero che legge il file ed esegua le istruzioni esattamente come fa ad esempio l'interprete php.
Al di la di leggere il file di testo che è banale il problema è come vuoi interpretare il file.
Nel primo caso non è difficilissimo (bisogna trovare un modo furbo per splittare le righe); nel secondo occorre scrivere un vero è proprio compilatore in miniatura.
Comunque domani posto un esempio di lettura di un file ascii (ora non ho più voglia di programmare), poi vediamo dove arriviamo... |
ok.... hai centrato il problema... è esattamente il primo da te proposto!! |
|
Top |
|
 |
|
|
Non puoi inserire nuovi argomenti Non puoi rispondere a nessun argomento Non puoi modificare i tuoi messaggi Non puoi cancellare i tuoi messaggi Non puoi votare nei sondaggi
|
|