Indice del forum Olimpo Informatico
I Forum di Zeus News
Leggi la newsletter gratuita - Attiva il Menu compatto
 
 FAQFAQ   CercaCerca   Lista utentiLista utenti   GruppiGruppi   RegistratiRegistrati 
 ProfiloProfilo   Messaggi privatiMessaggi privati   Log inLog in 

    Newsletter RSS Facebook Twitter Contatti Ricerca
Lettura da file
Nuovo argomento   Rispondi    Indice del forum -> Programmazione
Precedente :: Successivo  
Autore Messaggio
Mitch
Comune mortale
Comune mortale


Registrato: 31/01/09 14:06
Messaggi: 4

MessaggioInviato: 31 Gen 2009 14:17    Oggetto: Lettura da file Rispondi citando

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
Profilo Invia messaggio privato
chemicalbit
Dio maturo
Dio maturo


Registrato: 01/04/05 18:59
Messaggi: 18597
Residenza: Milano

MessaggioInviato: 31 Gen 2009 22:02    Oggetto: Re: Lettura da file Rispondi citando

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
Profilo Invia messaggio privato
Mitch
Comune mortale
Comune mortale


Registrato: 31/01/09 14:06
Messaggi: 4

MessaggioInviato: 01 Feb 2009 02:06    Oggetto: Rispondi citando

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
Profilo Invia messaggio privato
freemind
Supervisor sezione Programmazione
Supervisor sezione Programmazione


Registrato: 04/04/07 21:28
Messaggi: 4643
Residenza: Internet

MessaggioInviato: 01 Feb 2009 23:38    Oggetto: Rispondi citando

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
Profilo Invia messaggio privato
chemicalbit
Dio maturo
Dio maturo


Registrato: 01/04/05 18:59
Messaggi: 18597
Residenza: Milano

MessaggioInviato: 01 Feb 2009 23:54    Oggetto: Rispondi citando

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
Profilo Invia messaggio privato
Mitch
Comune mortale
Comune mortale


Registrato: 31/01/09 14:06
Messaggi: 4

MessaggioInviato: 02 Feb 2009 00:21    Oggetto: Rispondi citando

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
Profilo Invia messaggio privato
freemind
Supervisor sezione Programmazione
Supervisor sezione Programmazione


Registrato: 04/04/07 21:28
Messaggi: 4643
Residenza: Internet

MessaggioInviato: 02 Feb 2009 00:35    Oggetto: Rispondi citando

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
Profilo Invia messaggio privato
chemicalbit
Dio maturo
Dio maturo


Registrato: 01/04/05 18:59
Messaggi: 18597
Residenza: Milano

MessaggioInviato: 02 Feb 2009 01:02    Oggetto: Rispondi citando

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..
Think Interprete o compilatore?
Top
Profilo Invia messaggio privato
Mitch
Comune mortale
Comune mortale


Registrato: 31/01/09 14:06
Messaggi: 4

MessaggioInviato: 02 Feb 2009 01:19    Oggetto: Rispondi

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
Profilo Invia messaggio privato
Mostra prima i messaggi di:   
Nuovo argomento   Rispondi    Indice del forum -> Programmazione Tutti i fusi orari sono GMT + 2 ore
Pagina 1 di 1

 
Vai a:  
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