Questa sezione ti permette di visualizzare tutti i post inviati da questo utente. N.B: puoi vedere solo i post relativi alle aree dove hai l'accesso.
Post - Z80Fan
Pagine: 1 ... 81 82 [83] 84
1231
« il: 19 Giugno 2011, 00:11:16 »
EDIT: avevo scritto una boiata perchè non avevo capito subito il tuo esempio... comunque, ecco la mia risposta corretta: Tranquillo, anche io scrivendo questa risposta stavo per sparare una cazzata assoluta :lol: Nel tuo caso il picking è fatto all'interno del World Space, e il gioco segue una geometria semplice basata su una matrice bidimensionale. Nel tuo caso quindi si rimane a livello di Model. Qui si parla invece di prendere una scena 3D assolutamente generica e trovare quell'oggetto che sta sotto il pixel desiderato. In questo caso bisogna risalire al model partendo dalla view. Sono problemi del tutto differenti. Si, ora che ho riflettuto bene la differenza è sostanziale... Non mi viene in mente altro, mi sa che le uniche soluzioni sono quelle.
1232
« il: 18 Giugno 2011, 15:31:00 »
Aspetta, forse c'è una soluzione più semplice, in base al tipo di lavoro che deve fare: ad esempio, sto scrivendo una specie di clone di Minecraft, e dato che il mondo è formato da cubi regolari, partendo dalla posizione del giocatore e dalla direzione in cui guarda, posso (con qualche algoritmo di rasterizzazione) trovare facilmente tutti i cubi presenti sulla linea dello sguardo.
Bisognerebbe conoscere più in dettaglio lo scopo del programma, per trovare eventuali semplificazioni.
1233
« il: 15 Giugno 2011, 15:00:19 »
Sembra proprio un linguaggio interessante, mi sottoscrivo!
1234
« il: 15 Giugno 2011, 14:58:19 »
come macchina di sviluppo consiglio un modello di fascia media, perchè così ti allinei alle specifiche di una buona parte degli utenti :-) No no, non ho la necessità di sviluppare applicazioni da pubblicare sul market o roba del genere; volevo solo usarlo come giocattolone per nerd :lol: Anche il Desire HD è un bel terminale, ma, non so, forse il display da 4.3'' lo rende troppo grosso; dovrei vederlo dal vivo. Cmq grazie per le risposte, leggendo su internet ho trovato molti pareri positivi, quindi penso di andare verso l'LG, ora devo solo fare una prova un po' più seria dal vivo; poi non si sa, magari mi innamoro di un Htc!
1235
« il: 15 Giugno 2011, 14:51:31 »
Ciao!
1236
« il: 15 Giugno 2011, 14:14:49 »
Posso segnalare GeSHi che è un buon evidenziatore anche fatto apposta per phpBB. Io lo uso attraverso wp-syntax per il mio blog; è veramente comodo e personalizzabile e supporta moltissimi linguaggi (tra cui anche vari assembly).
1237
« il: 15 Giugno 2011, 14:06:28 »
Io ho una enorme collezione di emulatori di computer '70-'80 ... a momenti ne ho uno per ogni computer prodotto :lol:
Non posso però dire che li uso "quotidianamente"...
1238
« il: 14 Giugno 2011, 21:54:48 »
se per hardware intendi CPU & Co. è un mostro... ma se intendi schermo, batteria, scocca, ecc... è uno smartphone di media qualità.
Io, conoscendo le mie specifiche esigenze, sacrificherei volentieri uno dei due Core per avere una scocca in metallo e una batteria più decente. Ad esempio un bel HTC :-) Lo scenario d'uso non è troppo estremo: già il telefono lo uso poco. Cmq anche se si rivelasse non proprio all'altezza, vuol dire che lo userò come costoso supporto di sviluppo; il mio fido Motorola L7 funziona ancora egregiamente Un HTC era la mia seconda scelta: che modello consiglieresti/hai esperienza?
1239
« il: 14 Giugno 2011, 21:42:04 »
finchè non metti le variabili, non puoi fare nemmeno un algoritmo, ne sei consapevole giusto? :-D Ho detto che non ci sono, non che non ci saranno mai. Ho già pensato una piccola modifica che mi permette di usare le funzioni... per la memoria dinamica, implementati una banale "malloc"... ci sono decine di algoritmi già pronti che richiedono solo un buffer di memoria, quindi un puntatore e un size, da utilizzare come arena per le allocazioni. Se proprio non vuoi sbatterti a fartelo da zero ci sono già centinaia di implementazioni precotte in giro :-) L'algoritmo non è un problema: lo ho già implementato nell'OS
1240
« il: 14 Giugno 2011, 21:10:14 »
Si possono utilizzare anche sullo z80 definendo un'area di memoria allo scopo. Esattamente come sul mio valutatore di espressioni per il 68000, dove avevo allocato uno stack di una precisa dimensione.
Semplicemente metti un tetto al massimo numero di nodi utilizzabili. Bene, ho capito cosa intendi. Cmq ho già questo algoritmo che funziona bene, non mi serve manco la ricorsione... Implemento questo intanto, giusto per mostrare qualcosa all'esame, al massimo non lo presenterò come "Interprete Basic" ma come "calcolatrice" :lol: Oppure posso montare il mio famoso mergesort
1241
« il: 14 Giugno 2011, 20:22:40 »
Bene allora! :mrgreen:
1242
« il: 14 Giugno 2011, 20:21:33 »
Si ma sullo Z80 non ho la memoria dinamica per fare gli alberi! :lol: Soltanto un suggerimento: quello non + C++, ma C. Se vuoi usare il C++, cerca di sfruttare le caratteristiche del linguaggio, e non fermarti al classico cout. Già usare cout lo rende C++; cmq, se avessi dovuto scriverlo per usarlo in C++, sarebbe stato diverso, ma lo ho fatto solo per testare l'idea prima di tradurlo in asm.
1243
« il: 14 Giugno 2011, 19:34:22 »
Si le variabili ancora non ci sono, ne sono consapevole. Informazioni sul parsing ad albero e ricorsivo ne ho trovate parecchie in rete, ma questa mia versione ha il vantaggio di essere lineare, passa la stringa di input una volta sola, e non ha bisogno della ricorsione. Mi è utile visto anche che la devo mettere sullo Z80, e che devo fare un interprete. Cmq grazie per l'aiuto
1244
« il: 14 Giugno 2011, 17:46:25 »
Per il mio computer Z80 stavo cominciando a scrivere un interprete BASIC; sono sulla buona strada, ma ho capito che non potevo andare molto avanti senza avere un valutatore di espressioni, mi spiego meglio: io gli do 2+2 e lui mi ritorna 4 Son venuto fuori con questo algoritmo, che fa uso di due stack (uno per i valori e uno per gli operatori), e ho pure una versione funzionante in C++: 1 pusha 0 in stackNum 10 legge numero n 11 se non è stato letto un numero ma un operatore (incluse le parentesi), assegna x=n e vai a 40 15 push n su stack num 20 legge operatore x (se è finita la stringa, goto 60) 30 se la precedenza di x è minore o uguale a quella dell'operatore precedente (top dello stack) (nessun operatore precedente = precedenza minima) allora esegui operazioni precedenti finchè la priorità dell'operatore sullo stack è maggiore di x o finchè non si incontra una parentesi aperta, in tal caso la si toglie 40 push x su stack op (tranne nel caso in cui fosse stata una parentesi chiusa) 50 se non è finita la stringa, goto 10 60 esegui le operazioni mancanti nello stack op 70 il top dello stack num è il risultato
parentesi = precedenza minima (NOTA: il codice C++ lo ho scritto con l'idea di doverlo tradurre in Assembly successivamente) #include <iostream> #include <cstring> #include <cstdlib> using namespace std;
#define PushNum(x) stackNum[++spNum]=(x) #define PopNum (stackNum[spNum--]) #define PushOp(x) stackOp[++spOp]=(x) #define PopOp (stackOp[spOp--]) #define TopOp (stackOp[spOp]) #define PrintStack(stack, sp) cout << #stack << ": "; for(int c=1; c<=sp; c++) cout << stack[c] << " "; cout << endl
// 2 + 3*5 - 1*4 +5 -7. = 11
int stackNum[100] = {0}, spNum = 0, spOp = 0; char stackOp[100] = {0};
char input[50]; int ptrIn=0; // puntatore input
int getOpPriority(char op) { switch(op) { case '(': case ')': return 10; case '+': case '-': return 20; case '*': case '/': return 30; default: return 0; } }
// esegue l'operazione più in alto nello stack op con i 2 numeri più in alto nello stack Op void doOp() { cout << " - doOp" << endl; int a, b, r; char o = PopOp; a = PopNum; b = PopNum; switch(o) { case '+': r = b+a; break; case '-': r = b-a; break; case '*': r = b*a; break; case '/': if(a==0) { cout << "Divisione per zero" << endl; exit(0); } r = b/a; break; case '.': cout << "tentata elaborazione di "."" << endl; exit(0); break; } cout << " a=" << a << ", b=" << b << ", r=" << r << ", op=" << o << endl; PushNum(r); }
// true se op è un operatore valido bool isOp(char op) { switch(op) { case '(': case ')': case '+': case '-': case '*': case '/': case '.': // operatore fittizio con priorità minima return true; default: return false; } }
// true se x è una cifra numerica bool isNum(char x) { if(x>='0' && x<='9') return true; else return false; }
void skipSpaces() { while(ptrIn<50 && input[ptrIn] == ' ') ++ptrIn; }
int main() { int n; char x = 0, opPrec; // opPrec = operatore precedente int numPar=0; // numero parentesi (incrementato quando aperta, decrementato quando chiusa)
cout << "Inserisci espressione:" << endl;
cin.getline(input, 50);
PushOp('.'); //PushNum(0);
do { cout << "nCiclo" << endl;
skipSpaces();
opPrec = x;
//x = cin.peek(); x = input[ptrIn];
if(ptrIn>=50 || x==' ') // fine stringa goto fuori;
if( isNum(x) ) { //cin >> n; char *invPtr; n = strtol(&input[ptrIn], &invPtr, 10); ptrIn = invPtr-input; PushNum(n); cout << "Letto Num: " << n << endl; } else { ++ptrIn; if(x=='+' || x=='-') // se al posto di un numero ci sono + o - { cout << "Letto Op "" << x << "" invece di num" << endl; // se dopo non c'è un numero o una parentesi aperta, allora sono simboli errati
skipSpaces(); char y = input[ptrIn]; cout << " y = ""<<y<<""" << endl;
if( !isNum(y) && (y!='(') ) { cout << " ma dopo non c'è un numero o una parentesi aperta! Errore!" << endl; cout << "nErrore: trovato simbolo quando ci si aspettava numero" << endl; goto uscitaErrore; } // se dopo c'è un numero o una parentesi aperta, allora sono simboli di segno. PushNum(0); // inserisco uno 0 così l'operatore ha un secondo numero su cui lavorare // ( 0-x = -x; 0+x = +x; ) input[--ptrIn] = x; // ritorno a mettere x al suo posto (circa) } else if( x == ')' ) { // se trovo una parentesi chiusa, la tolgo dallo stream e vado a elaborare lo stack goto elabora; } else if( (opPrec==')' && isOp(x)) || x=='(' ) // se al posto di un numero c'è un operatore, e prima avevamo una parentesi chiusa, oppure al posto del numero c'è una parentesi aperta { cout << "Letto Op "" << x << "" invece di num" << endl; goto L45; } else { cout << "Carattere non valido ""<< x <<"" al posto di un numero" << endl; goto uscitaErrore; } }
//cin >> x; skipSpaces(); x = input[ptrIn++];
if( x!=' ' && !isOp(x) ) { cout << """ << x << "" non è un operatore" << endl; goto uscitaErrore; }
cout << "Letto Op: " << x << endl; //cout << " (Peek: "" << (char)cin.peek() << "")" << endl;
if(x==' ') { cout << " - vado fuori" << endl; goto fuori; }
PrintStack(stackNum, spNum); PrintStack(stackOp, spOp);
cout << "Testo " << x << "(" << getOpPriority(x) << ") e " << TopOp << "(" << getOpPriority(TopOp) << ")" << endl;
elabora:
while( (TopOp != '(') && (getOpPriority(x) <= getOpPriority(TopOp)) ) doOp();
if((x==')') && (TopOp == '(')) PopOp;
L45: if(x != ')') PushOp(x);
} while(x!=' ');
PopOp;
fuori:
cout << "son fuori" << endl;
PrintStack(stackNum, spNum); PrintStack(stackOp, spOp);
while(TopOp != '.'/*spOp > 1*/) doOp();
cout << "Ris: " << PopNum << endl; uscitaErrore: return 0; } In futuro gli darò una pulitina, magari diventa utile per qualcuno Qualche commento?
1245
« il: 14 Giugno 2011, 16:57:12 »
Bene, quindi come rom siamo a posto...
Pareri sull'hardware?
Pagine: 1 ... 81 82 [83] 84
|