lento Pubblicato: 15 Luglio 2009 Segnalazione Share Pubblicato: 15 Luglio 2009 (modificato) Salve a tutti....nonostante la crisi economica del settore in cui opero oggi sono riuscito a rosicchiarmi una mezzoretta di spensieratezza... Come molti sanno in mShell gli array possono diventare bidimensionali sfruttando la capacità del semplice array di incorporare altri array. (E' la stessa cosa che fà Java per gestire gli array a più dimensioni.) Ovvero: Se dichiaro un array: primo=[0,1,2] e successivamente lo inglobo in un altro secondo=["ciao",primo] il secondo è diventato un array quasi bidimensionale infatti posso scrivere: print secondo[1][1] e stamperà 1 che è il valore contenuto in primo[1] . Bene! ora date un occhiata a questo: m=null p=null m=["ciao",p] p=[0,1,m] m[1]=p print p[2][1][2][1][2][1][2][1][2][1][2][1][2][1][2][1][2][1][2][1][2][1][2][1] <-- potete allungarlo quanto volete! Stamperà -> [0,1,[...<2>]] Ma cosè una matrice a dimensione infinita? chi sa rispondere?..... Si accettano anche cavolate, banalità ecc..L'importante è partecipare.... Modificato 16 Luglio 2009 da lento Link to comment Condividi su altri siti More sharing options...
madhacker Pubblicato: 16 Luglio 2009 Segnalazione Share Pubblicato: 16 Luglio 2009 (modificato) lo vuoi sapere perchè non lo sai o per metterci alla prova?? se non lo sai ti spiego che hai messo su una specie di matrice intrecciata andando a richiamare dall'inizio il 3o elemento, ovvero p[2] che corrisponde ad un'altra matrice. andando poi a richiamare [1] di p[2] che è uguale a m andrai a richiamare l'elemento 2, ovvero m[1], che è uguale nuovamente a p e così via fino all'infinito ... se il tutto lo inserissi in un while infinito incepperesti in un ciclo di ridondanza che molto probabilmente verrebbe stoppato dal sistema stesso. ps: che bel buon giorno che dai Modificato 16 Luglio 2009 da madhacker Link to comment Condividi su altri siti More sharing options...
xMetallicax Pubblicato: 16 Luglio 2009 Segnalazione Share Pubblicato: 16 Luglio 2009 su una qualunque macchina (che sia un pc o un cellulare non cambia niente ) ricorda che la parola 'infinito' non esiste come ha detto madhacker puoi fare una cosa del genere mettendo tutto in un ciclo ma dopo qualche secondo riceverai sicuramente l'errore OutOfMemory Link to comment Condividi su altri siti More sharing options...
madhacker Pubblicato: 16 Luglio 2009 Segnalazione Share Pubblicato: 16 Luglio 2009 abbiamo superato il test? Link to comment Condividi su altri siti More sharing options...
memoryn70 Pubblicato: 16 Luglio 2009 Segnalazione Share Pubblicato: 16 Luglio 2009 (modificato) su una qualunque macchina (che sia un pc o un cellulare non cambia niente ) ricorda che la parola 'infinito' non esiste come ha detto madhacker puoi fare una cosa del genere mettendo tutto in un ciclo ma dopo qualche secondo riceverai sicuramente l'errore OutOfMemory Infatti in una macchina non esiste l'infinito...è ovvio che con la ram di un telefono hai voglia quante matrici crei...ma non saranno mai infinite Però aspetta..magari trattandosi di un linguaggio flessibile, magari ...cioè aspetta mi collego ad una cosa. In python esiste range e xrange. range crea proprio una lista di numeri da, a, per. Mentre xrange è una cosa virtuale, usata nei cicli for per ottimizzarli. Se si fa xrange(28328382283) non crea tutta una lista ma rimane una cosa virtuale...Forse quel array p è anch'esso gestito cosi. FAKE: Va bene ho detto una cavolata e me ne rendo conto!! Modificato 16 Luglio 2009 da memoryn70 Link to comment Condividi su altri siti More sharing options...
xMetallicax Pubblicato: 16 Luglio 2009 Segnalazione Share Pubblicato: 16 Luglio 2009 abbiamo superato il test? se si allora lento ci offre un caffè fatto dal suo cell (tanto è infinito, sicuramente saprà fare il caffè ) Link to comment Condividi su altri siti More sharing options...
madhacker Pubblicato: 16 Luglio 2009 Segnalazione Share Pubblicato: 16 Luglio 2009 @memory: credo che l'esempio al primo post di lento sia più un richiamo ad un array che in quella posizione richiamata va a richiamare un altro array che a sua volta, nella posizione richiamata, va a richiamare il precedente array e così via; quindi credo che sia qualcosa di diverso rispetto a range e xrange. Link to comment Condividi su altri siti More sharing options...
lento Pubblicato: 16 Luglio 2009 Autore Segnalazione Share Pubblicato: 16 Luglio 2009 se si allora lento ci offre un caffè fatto dal suo cell (tanto è infinito, sicuramente saprà fare il caffè ) Con molto piacere eccovi il caffè: caffeallinfinito=true; while caffeallinfinito do print "Ecco una tazza fumante di caffe' per xMetallicax."; print "Ecco una tazza fumante di caffe' per madhacker."; print "Altro caffe? Ok ora vi servo:"; end; Bè non proprio all'infinito....Finchè vi regge la batteria del cell.!. Link to comment Condividi su altri siti More sharing options...
lento Pubblicato: 16 Luglio 2009 Autore Segnalazione Share Pubblicato: 16 Luglio 2009 ps: che bel buon giorno che dai Prima di tutto grazie di aver risposto, Scusa! non era mia intenzione diffonndere pessimismo. lo vuoi sapere perchè non lo sai o per metterci alla prova?? Non è mia intenzione Mettere alla prova nessuno, Per concepire una cosa del genere dovrei avere la presunzione di saperne di più!. In verità Alter come al solito, se trova un modo per incasinarsi, o ingarbugliare le cose ci si butta a capo fitto!. poi spetta a mè capirci qualcosa! . Personalmente mi sono fatto un idea su come funziona ste cosa, ma volevo sentire il parere di altri, senza annoiarli rendendo il tutto più stimolante e magari ci nasce qualche spunto utile a tutti . se non lo sai ti spiego che hai messo su una specie di matrice intrecciata andando a richiamare dall'inizio il 3o elemento, ovvero p[2] che corrisponde ad un'altra matrice. andando poi a richiamare [1] di p[2] che è uguale a m andrai a richiamare l'elemento 2, ovvero m[1], che è uguale nuovamente a p e così via fino all'infinito ... Concordo con tè su questa logica, ma quello che chiedevo è: Perchè permette di scrivere la matrice (in realtà a due dimensioni) come se fosse una matrice a dimensioni (quasi!! xMetallicax) infinite?. se il tutto lo inserissi in un while infinito incepperesti in un ciclo di ridondanza che molto probabilmente verrebbe stoppato dal sistema stesso. Questa non lò capita dove lo piazzi il ciclo while per incrementare la lunghezza delle parentesi quadre? A presto... Link to comment Condividi su altri siti More sharing options...
lento Pubblicato: 16 Luglio 2009 Autore Segnalazione Share Pubblicato: 16 Luglio 2009 (modificato) su una qualunque macchina (che sia un pc o un cellulare non cambia niente ) ricorda che la parola 'infinito' non esiste come ha detto madhacker puoi fare una cosa del genere mettendo tutto in un ciclo ma dopo qualche secondo riceverai sicuramente l'errore OutOfMemory Ciao xMetallicax' Grazie di aver risposto. Come hò appena risposto a 'madhacker' Questa non lò capita dove lo piazzi il ciclo while per incrementare la lunghezza delle parentesi quadre? Per via dell'infinito non ne sò molto....Diciamo che essendo legato al ragionamento, e non al mondo fisico...secondo mè ci può stare....o almeno rende bene l'idea di una cosa che sia estensibile e non si vede la fine. Già che ci sono ti bombardo! così impari... p=null m=["a",p] m[0]=m print m [[...<2>],null] ->m[0]=0 print m ->[0,null] Come mai nell'assegnare a m lo 0 la matrice m non è stata distrutta? Risposta : La matrice non è stata distrutta perchè in m[0] si è copiata una matrice nuova? perciò lo 0 ha distrutto solo la copia? Allora perchè in questo esempio non vale la stessa regola? m=null p=null m=["ciao",p] p=[0,1,m] m[1]=p print p[2][1] ->0,1,[...<2>]] p[2][0]="a" print p ->[0,1,[...<2>]] print m ->[a,[...<3>]] <----Perchè ha modificato la matrice m di origine? Domande inquietanti!!!! Modificato 16 Luglio 2009 da lento Link to comment Condividi su altri siti More sharing options...
lento Pubblicato: 16 Luglio 2009 Autore Segnalazione Share Pubblicato: 16 Luglio 2009 Però aspetta..magari trattandosi di un linguaggio flessibile, magari ...cioè aspetta mi collego ad una cosa. Se si fa xrange(28328382283) non crea tutta una lista ma rimane una cosa virtuale...Forse quel array p è anch'esso gestito cosi. FAKE: Va bene ho detto una cavolata e me ne rendo conto!! 'memoryn70' Ben vengano cavolate come queste!, E' l'idea che mi son fatto anchio! credo che mShell print p[2][1][2][1][2][1][2][1][2][1][2][1][2][1][2][1][2][1][2][1][2][1][2][1] legga il tutto ed elimini le parentesi quadre ridondanti trasformando il tutto nella sua logica trascrizione print p[2][1] O se sbaglio..... potremo spartirci la medaglia di cartone! . Link to comment Condividi su altri siti More sharing options...
madhacker Pubblicato: 17 Luglio 2009 Segnalazione Share Pubblicato: 17 Luglio 2009 (modificato) 'memoryn70' Ben vengano cavolate come queste!, E' l'idea che mi son fatto anchio!credo che mShell print p[2][1][2][1][2][1][2][1][2][1][2][1][2][1][2][1][2][1][2][1][2][1][2][1] legga il tutto ed elimini le parentesi quadre ridondanti trasformando il tutto nella sua logica trascrizione print p[2][1] O se sbaglio..... potremo spartirci la medaglia di cartone! . esattamente... credo che mshell non stampi volta per volta tutti i valori nelle parentesi quadre, ma va a stampare solo l'ultimo, in quanto quelli di prima sono tutti "richiami" ad altre matrici. trovandosi di fronte all'ultima parentesi, lui si aspetterebbe di dover stampare un valore tipo numero o testo, ma invece si trova a dover stampare un oggetto che in realtà richiama ad un altro array. Già che ci sono ti bombardo! così impari... laugh.gifCODICE p=null m=["a",p] m[0]=m print m [[...<2>],null] ->m[0]=0 print m ->[0,null] Come mai nell'assegnare a m lo 0 la matrice m non è stata distrutta? Risposta : La matrice non è stata distrutta perchè in m[0] si è copiata una matrice nuova? perciò lo 0 ha distrutto solo la copia? perchè credo che vada distrutta così m=0 e non m[0]=0 che invece assegna il valore 0 al primo elemento dell'array Modificato 17 Luglio 2009 da madhacker Link to comment Condividi su altri siti More sharing options...
lento Pubblicato: 18 Luglio 2009 Autore Segnalazione Share Pubblicato: 18 Luglio 2009 (modificato) perchè credo che vada distrutta così m=0 e non m[0]=0 che invece assegna il valore 0 al primo elemento dell'array Non mi sembra completa la tua spiegazione: Dato che non stiamo parlando di problemi spirituali dove Fede, e l'inspiegabile padroneggiano. Si tratta di capire come l'interprete considera e risolve le istruzioni che gli passiamo, Solo riuscendo a comprendere la logica matematica del'algoritmo potremo dire: Io con gli Array e le matrici di mShell ci faccio quello che voglio!. Altrimenti siamo dei maghetti che buttano lì delle parole magiche, perché l'abbiamo visto fare ad altri e a volte fanno quello che ci si aspetta. Allora ripartendo da questo esempio fatto a suo tempo, facciamo queste variazioni: m=["a","b"] m[0]=m m[0]=0 print m ->[0,"b"] Ripartiamo con modifiche.... m=["a","b"] m[0]=1 questa istruzione sembra che la veda così: La presenza delle parentesi quadre dopo il nome del'array e la seguente presenza del'Uguale Indica a mShell la volontà di assegnare un valore ad un elemento del'array. O meglio indica che le operazioni seguenti sono assegnazioni applicate agli elementi del'array m[0]=1 Distruggi l'attuale valore e tipizzazione contenuto nella locazione m[0] e sostituiscilo con il valore e la tipizzazione presenti dopo il segno uguale Distrugge "a" elimina tipizzazione carattere e pone 1 e lo tipizza a numerico m[0]=m In questo caso: distrugge 1 e la tipizzazione numerica nel voler assegnare il nuovo valore e tipo si accorge che è un puntatore alla matrice m perciò assegna il valore numerico che punta a m e pone la tipizzazione a puntatore. m[0]=0 In questo caso come detto sopra cé il nome del'array seguito dalle parentesi quadre e dal segno uguale quindi lo interpreta come un azione di assegnazione da svolgere sul singolo elemento del'array. Perciò: distrugge il puntatore e la tipizzazione esistente alla cella 0 e vi assegna il nuovo valore 0 (Senza andare a vedere a cosa puntava detto puntatore! il che avrebbe portato a distruggere la matrice m). print m ->[0,"b"] In questa altra situazione: p=null m=["ciao",p] p=[0,1,m] m[1]=p print p[2][1] ->0,1,[...<2>]] p[2][0]="a" print p ->[0,1,[...<2>]] print m ->[a,[...<3>]] <----Perchè ha modificato la matrice m di origine? p[2][0]="a" Nome array seguito da parentesi quadra non indica a mshell di eseguire un assegnazione in un suo elemento perché dopo la parentesi quadra di chiusura non cè il segno = ma un ulteriore parentesi quadra aperta! che indica solo una cosa...alla locazione p[2] cè un puntatore ad un altro array!! Perciò: preleva il puntatore va a vedere che matrice è (m) a la sostituisce nel'espressione diventando così: p[2][0]="a" -> diventa m[0]="a" e qui esegue quanto esposto sopra assegnando la lettera "a". Vi sembra logico il tutto? sono riuscito a capire l'algoritmo che mShell applica agli array? che dite? Ovviamente: m=0 penso che non sia indispensabile spiegare cosa fà in mshell. Se vi ho annoiato chiedo Venia. Anche se ritengo fondamentale padroneggiare gli array in mShell essendo una delle parti più potenti di questo linguaggio. Se non capisco i meccanismi sopra riportati, mi ci vedete a gestire una matrice multidimensionale che al suo interno contiene dati,funzioni,altri array che richiamano altre funzioni e dati????. In caso non foste d'accordo e mi chiamaste in giudizio come direbbe Perry Mezzon (Un Perry Mason poco sveglio!) Signor Giudice.....MI OPPONGO!..... Modificato 18 Luglio 2009 da lento Link to comment Condividi su altri siti More sharing options...
Nick_7 Pubblicato: 9 Maggio 2010 Segnalazione Share Pubblicato: 9 Maggio 2010 ragazzi, avrei bisogno di una mano con queste matrici che fanno impazzire me... Vorrei creare una matrice quadrata di ordine n ed inserire i valori all'interno di essa per farle trovare il valore del determinante... use array as a, ui n=ui.query("di ordine:","matrice",0); a=a.create(n,n,0); for i=0 to n*n do e=ui.query("a"+i,"ins",0); a=a.insert(a,i,e); print a; end; Link to comment Condividi su altri siti More sharing options...
Nick_7 Pubblicato: 26 Maggio 2010 Segnalazione Share Pubblicato: 26 Maggio 2010 Ho finalmente risolto il mio problema facendogli considerare le matrici quadrate come lineari ed inserendo le formule per trovare il determinante fino all'ordine 4...non è il massimo della compattezza ma per ora per me è già un gran bel risultato Vi allego lo script: Array.txt Link to comment Condividi su altri siti More sharing options...
Recommended Posts
Please sign in to comment
You will be able to leave a comment after signing in
Accedi Ora