n° 185
Maggio/Giugno 2013
Maggio 19, 2013, 03:43:29 pm *
Benvenuto! Accedi o registrati.
Hai dimenticato l'e-mail di attivazione?

Accesso con nome utente, password e durata della sessione
Notizia:
 
  Indice Linux Windows Techassistance Gameassistance videogame hardware Aiuto Ricerca Agenda Downloads Accedi Registrati  

* Messaggi recenti
Messaggi recenti
  Visualizza messaggi
Pagine: 1 [2] 3 4 ... 131
16  Varie ed Eventuali / Concetti, idee, algoritmi / Re: Formula per matrice riempita secondo diagonali inserita:: Aprile 13, 2013, 06:56:14 pm
Pensandoci meglio, sono sicuro che una formula del genere debba esistere. Analizzando un minimo la situazione, partendo da questa matrice:

Codice:
01 03 06 10 15 21
02 05 09 14 20 26
04 08 13 19 25 30
07 12 18 24 29 33
11 17 23 28 32 35
16 22 27 31 34 36

la matrice delle differenze fra il valore di un elemento e quello alla sua sinistra è:

01   2   3   4   5   6
02   3   4   5   6   6
04   4   5   6   6   5
07   5   6   6   5   4
11   6   6   5   4   3
16   6   5   4   3   2

[Qui ho fatto un refresh della pagina e ho trovato la risposta di M.A.W., che avrà un buon karma per le prossime 15 esistenze (sessagesimali)]. Ora me lo studio con calma! Felice

Letto! Finisco il discorso che ho iniziato, per completezza, e perché si mostra come arrivare dalle coordinate al valore (disclaimer: il percorso che usato per arrivare alla Verità(tm) potrebbe non essere il più breve possibile. Anzi, probabilmente non lo è  Ghigno).

Nella matrice appena ottenuta ogni valore della prima colonna è sempre pari a 1 + sommatoria(0, riga). Per trovare il valore corrispondente alle coordinate (r,0), quindi, basta ricorrere a Gauss:

valore(r,0) = 1+r*(r+1)/2
.

Il resto della matrice è composto da due sottomatrici triangolari speculari, che seguono le diagonali 2/../n (e il secondo n/n-1/../2).  Usando la prima colonna come base, queste matrici ci possono permettere di trovare facilmente l'elemento, eseguendo una semplice sommatoria.

Ad esempio, volendo individuare il valore dell'elemento (2,3), basta individuare il numero in rosso:

01   2   3   4   5   6
02   3   4   5   6   6
04   4   5   6   6   5
07   5   6   6   5   4
11   6   6   5   4   3
16   6   5   4   3   2

e sommarlo con tutti quelli a sinistra (in blu), e al primo (in verde).

Il numero della prima colonna ce l'abbiamo già, ne abbiamo già discusso poco fa, ed è pari a 4. Gli altri si ricavano, dato che saranno sempre (r+2), r+3, ..., r+c+1. Quindi, avendo un numero alle coordinate (r,c), per ottenere il valore corrispondente è sufficiente fare: 1+sommatoria(0,r) + sommatoria(r+2,r+c+1), che sempre applicando gauss ci porta a: 1+r(r+1)/2 + c(2r+c+3)/2. A questo punto possiamo semplificare l'espressione svolgendo i calcoli, e il risultato è interessante. Infatti abbiamo: 1+(r2 + r + 2cr + c2 + 3c)/2, che contiene evidentemente il quadrato di un binomio sull'antidiagonale! Semplificando:

valore(r,c) = 1+((r+c)2+3c+r)/2 (per r e c tali che r+c<N)

Il che, una volta digerite le risposte di M.A.W, si può riscrivere in modo ancora più succinto osservando che la formula contiene la generazione di un numero triangolare sull'antidiagonale (infatti può essere riscritta come 1 + ((r+c)2+c+r)/2 + c, dove la parte in neretto corrisponde proprio alla formula per ottenere un numero triangolare:

valore(r,c) = 1+T(r+c)+c (per r e c tali che r+c<N)

Quindi, pur partendo da tutt'altra parte, siamo arrivati a ricalcare perfettamente il discorso fatto da M.A.W sul fatto che il numero è composto dal precedente numero triangolare sull'antidiagonale a cui va aggiunto l'offset della colonna.

Tutto questo è valido, ovviamente, se si è nel triangolo superiore, ovverosia se (r+c)<n. Se si è nel secondo triangolo, bisogna tenere conto del fatto che la progressione diminuisce. Il modo più furbo di farlo è sottrarre una quantità crescente, che ad una semplice osservazione risulta pari a (antidiagonale-N+1)2.

Quindi, in definitiva, la formula per ottenere il valore dell'elemento in (r,c) di una matrice quadrata NxN è:

valore(r,c) = 1+((r+c)2+3c+r)/2 (per r e c tali che r+c<N)
e
valore(r,c) = 1+((r+c)2+3c+r)/2 - (r+c-N+1)2 (per r e c tali che r+c>=N)

Tutto questo mi ha insegnato che scoprire qualcosa matematicamente e raccontare il come ci si arriva sono due cose lontanissime, e ringrazio M.A.W. che riesce a farlo sempre in maniera semplice, comprensibile, ma formalmente ineccepibile. La differenza coi risultati di un dilettante si vede parecchio.

Tutto ciò per trovare il valore, partendo dalle coordinate. Il caso inverso, trattato da M.A.W. e oggetto della mia richiesta è più complesso. Perfino ora che mi sembra "banale", non credo che ci sarei mai arrivato da solo ("Qualunque conclusione logica sembra banale quando si spiega come arrivarci", diceva Holmes)... ma a questo punto devo chiedere un'altra cosa: esageriamo! Anche se siamo già nell'ordine di O(N), c'è un modo per stabilire il numero triangolare precedente, senza usare una lookup o un ciclo? Felice
17  Varie ed Eventuali / Concetti, idee, algoritmi / Re: Formula per matrice riempita secondo diagonali inserita:: Aprile 13, 2013, 05:46:29 pm
Sapevo che avrei dovuto evidenziare meglio una parte della domanda. Lo faccio adesso: Ovviamente, ottenerla tramite cicli è banale, altrimenti nonostante la mia ignoranza enciclopedica ci arrivo anche da solo. Ti ringrazio comunque molto per l'intervento. Il tempo che hai impiegato a scriverlo non è sprecato: servirà a chiarire la soluzione semplice per altri lettori che eventualmente ne abbiano bisogno.

Quel che chiedo io è più complesso, però, e riguarda l'esistenza di una possibile formula che eviti proprio la generazione della matrice/vettore(/lookup table, che è una soluzione ancora più ovvia e performante della ricerca scorrendo il vettore). Per chiarire ancora meglio il problema, immagina che la matrice non sia di 4x4, ma di 100000x100000. Le soluzioni che prevedano una lookup table sono tagliate fuori per insufficienza di memoria, e quelle che prevedono cicli hanno complessità O(N2).

Non sono sicuro che una formula del genere esista. Comunque rigiri la cosa, mi ritrovo a definirla in termini ricorsivi (che già è qualcosa, ma è un ciclo in maschera).
18  Varie ed Eventuali / Concetti, idee, algoritmi / Formula per matrice riempita secondo diagonali inserita:: Aprile 13, 2013, 04:04:30 pm
Ho una matrice di NxN (il mio caso è effettivamente solo di 4x4, ma la mia curiosità a questo punto si estende al caso generale), riempita secondo le (anti)diagonali. Immagino che abbia un nome più decente e sia anche stratrattata in letteratura, ma la mia ignoranza è notoriamente enciclopedica...

Codice:
01 03 06 10
02 05 09 13
04 08 12 15
07 11 14 16

Ovviamente, ottenerla tramite cicli è banale. La domanda è un'altra: esiste una formula, data una matrice del genere di NxN, per ottenere il valore di un elemento a partire da riga e colonna, e soprattutto per ottenere la riga e colonna a partire dal valore?
19  Varie ed Eventuali / Presentazioni e saluti / Re: Sono un nuovo appassionato e cerco aiuto! Salve inserita:: Aprile 06, 2013, 04:47:12 pm
Citazione
Con "vita" intende sentimentale?
Dal modo imbarazzato con cui lo diceva Van Rossum, credo che intendesse sia sentimentale che sociale...

Citazione
PitHon
Se lo cerchi con la i invece che come PYtHon, sarà una ricerca lunga Felice Per semplificartela, ecco i due libri:

* How to Think like a Computer Scientist (completo, è gratuito)

* Learning Python, 4th Edition (anteprima Google Books)

Dato che ti interessano i videogiochi, c'è anche questo simpatico libro on line:

* Invent Your Own Computer Games with Python

Molti altri libri e riferimenti sono contenuti nel nostro thread Informazioni Utili

Citazione
Comunque come faccio a scaricare quello per l'interfaccia grafica?
Python viene fornito "a batterie incluse", questo comprende anche un modulo per l'interfaccia grafica (Tkinter). Dato che non sai programmare, però, eviterei di rovinarti la vita con la complessità della programmazione grafica.

Concentrati sui mille programmi che puoi fare per console (se vuoi imparare giocando con l'Euler Project, gestire finestre e pulsanti non ti serve).
20  Varie ed Eventuali / Presentazioni e saluti / Re: Sono un nuovo appassionato e cerco aiuto! Salve inserita:: Aprile 06, 2013, 03:45:12 pm
Citazione
sbaglio o ho letto "girlfriend"? Mamma mia l'unica cosa per cui sono negato è fare colpo , parlo seriamente!

Non preoccuparti: anche in caso di insuccesso sentimentale c'è un esercito di nerd che può rassicurarti che sono tutte energie risparmiate per la programmazione. Come ho sentito dire proprio a Guido Van Rossum, il creatore di Python (che si scrive con l'h! English Lesson Number One Occhiolino): "Ho portato avanti la prima versione di notte, tornato dal lavoro. Ci sono riuscito perché... beh, certe cose puoi farle solo se non hai una vita" Sorriso
21  Varie ed Eventuali / Presentazioni e saluti / Re: Sono un nuovo appassionato e cerco aiuto! Salve inserita:: Aprile 05, 2013, 10:40:02 pm
Citazione
Comunque sia sapevo già che il game desining è generalmente sottopagato.

No, il game designing è pagato anche molto bene, ma è una chimera raggiungibile dai pochi eletti (gente tipo Molyneux, Wright e compagnia guadagna molto bene. Alcuni diventano publisher a loro volta). La restante maggioranza è considerata un insignificante, sostituibile, ingranaggio del sistema.

Citazione
Non a caso ho fatto l'esempio di Valve, che se cercate su internet è una azienda molto importante che sviluppa videogiochi, ma li pubblica pure e non solo i suoi
Ti riferisci a Steam? Allora è una strada percorribile anche da Indie: fai un gioco fatto molto bene e li contatti per rivenderlo su Greenlight.

Citazione
Comunque dato il rischio vedrò la programmazione di videogiochi come un "sogno secondario" dato che posso cadere nell'oblio facendo cose di cui potrei pentirmi!
No, coltivalo pure! Pensare che farai i tuoi giochi (e cominciare a implementarne qualcuno semplice) è un ottimo incentivo per imparare. E non è neanche impossibile che tu faccia soldi facendo questa carriera. Ma come ti ho già detto più volte oggi ci sono molte altre strade per riuscire ad avere ottime soddisfazioni e guadagni da sviluppatore indipendente (i vari store per Mac, iOs, Google e Windows, ad esempio, ti permetteranno di far conoscere a tutto il mondo i tuoi giochi non appena saprai programmare decentemente, se vorrai. E' un vantaggio che anni fa era inimmaginabile).

Citazione
iguardo l'emigrazione per l'università mi sorge un dubbio: se faccio un bachelor qui in Italia in computer engineering e magari una seconda in matematiche applicate non potrei avere poi difficoltà nell'imparare ed adeguarmi meglio alla lingua parlata del luogo (inglese, per esempio negli USA)?

Comincia a laurearti, poi vedrai. L'inglese puoi cominciare ad impararlo bene già da subito: fai corsi, guarda film e serie in lingua originale, trova amici anglofoni e possibilmente una girlfriend con cui litigare in inglese. Aiuta. E, ovviamente, abituati da ora a studiare libri, siti e documentazione tecnica in inglese.

Citazione
Poi dopo aver imparato bene ad utilizzare il Pyton mi consigliate il C++ immediatamente o altri linguaggi più morbidi gradualmente rispetto al Pyton?

Stessa risposta dell'Università. Comincia a imparare Python: i linguaggi sono ininfluenti. Impara a programmare, prima.
22  Linguaggi di programmazione / C/C++ / Re: Steiner Tree in C inserita:: Aprile 05, 2013, 10:57:23 am
Se guardi bene il link che ti ha dato M.A.W c'è un'intera sezione intitolata: "Implementations"...
23  Varie ed Eventuali / Presentazioni e saluti / Re: Sono un nuovo appassionato e cerco aiuto! Salve inserita:: Aprile 04, 2013, 11:58:11 pm
Citazione
la matematica... non è che "serve anche quella", ma _soprattutto_ quella...

E non solo! La programmazione è matematica, quindi non è immaginabile fare l'una senza l'altra: da un punto di vista pratico ad un programmatore di videogiochi serviranno anche altri campi del sapere oltre geometria e fisica: trigonometria, analisi, algebra lineare, combinatoria, statistica, game design...

Citazione
Che aspetti? In internet trovi di tutto, guide, tutorial, rigurardo a qualsiasi linguaggio e a qualsiasi cosa.

Ecco. Questa è un'arma a doppio taglio i cui i difetti sono molto maggiori dei pur rilevanti pregi: Internet è un enorme calderone pieno di schifezze (ogni tanto c'è qualcosa di molto valido, ma di solito sta in posti di cui i neofiti non sanno neanche l'esistenza). L'unica via sicura e seria sono i cari e vecchi libri (di carta, o ebook). Libri che, possibilmente, siano consigliati dagli esperti per la semplicità di esposizione, la correttezza e la completezza.
E, ovviamente, esercizi a go-go. Quando c'è la passione, non c'è mancanza di stimoli per inventarseli.
Internet, ovviamente, è comunque utilissima come quick-reference per integrare lo studio, e per la presenza di forum, blog e per contatti con esperti e altri appassionati.

Citazione
ma di iscrivermi ho letto che ci sono ragazzi che sanno già scrivere in Java e in Visual Basic e dato che al primo anno di altre scuole superiori (vi ricordo che abito a Taranto e non esiterò ad andarmene all'estero e con l'inglese non avrei problemi nell'impararlo) si fa già il Visual Basic e addirittura il C++ vorrei capire come faccio a fare i piccoli passi da formica, dato che di programmazione non so proprio niente

Non sapere niente è molto meglio che sapere il Visual Basic, o il C++ che insegnano mediamente a scuola (questo comprende, purtroppo, i corsi universitari medi di Informatica 1/2/n, da cui non ho mai visto gente uscire avendo imparato qualcosa di vagamente simile al C++). Almeno non hai nozioni sbagliate: come diceva il compianto Dervis Fontecedro: "Una tabula rasa! Mi piace! Si può costruire".

Citazione
ato che è una passione forte, soprattutto nel campo videoludico e dei videogames vi chiedo un disperato aiuto! Sempre parlando di lavoro la Valve Software un programmatore richiede il Bachelor in Scienze dell' Informatica, che lo posso ottenere nella Svizzera Italiana e nello Stato di Washington: tralasciando le spese che pagherò con tanti sacrifici me lo consigliate? Comunque mi consigliate proseguire gli studi tranquillamente o fare l'autodidatta come vorrei fare?

Per quanto riguarda l'utilità di bachelor specifici nel lavoro per grandi aziende, lascio la parola a chi sul forum ha più esperienza di me con le multinazionali. Il mio consiglio è: se vuoi emigrare solo per questo, stai dove sei. Una laurea lì va benissimo. (Se vuoi emigrare per la situazione socio-politico-economica, del resto, hai tutta la mia comprensione. Consiglio il Regno Unito, a Nord. La Svizzera è carissima - vivere lì senza lavorarci è un suicidio finanziario.).

Capisco la passione, ma con lo studio potresti scoprire che i videogiochi magari non ti piacciono così tanto, e preferisci altre cose (conosco gente che è partita così e oggi fa felicemente altro). Inoltre i videogames sono uno dei campi lavorativi più sottopagati e meno protetti (si guadagna molto meglio, e con molta meno fatica, facendo gestionali. Proprio perché tanta gente è appassionata all'idea di fare videogiochi e quindi è disposta a farsi massacrare di lavoro al minimo della paga). E potresti anche scoprire che il mondo dei videogiochi è simile ad una catena di montaggio in cui sei ridotto ad una formica che fa la sua parte, invece che a divertirti creando qualcosa. Tutto questo è spiegato in maniera tanto comica quanto vera qui.

D'altra parte, fare parte di un team indie serio è una delle soddisfazioni più grandi e delle attività più divertenti che un appassionato possa concepire. Quindi magari vorrai fare qualcosa del genere, e lì non ti serviranno riconoscimenti ma solo effettive capacità.

Per quanto riguarda il "come iniziare", chiedi a dieci persone e avrai dieci pareri differenti. Puoi fare delle ricerche su questo forum: l'argomento è stato trattato tante volte, e ci sono intere bibliografie e percorsi di studio, dai più semplici al vagamente più duro e completo corso di Accolito dell'Ordine Monastico (aggiornamento: ancora non abbiamo notizie di sopravvissuti, ma ci stiamo lavorando).

Un consiglio rapido, che ho già dato spesso su questo forum in casi simili, è quello di iniziare con un linguaggio morbido, ben pensato, e potente, in modo da poterti concentrare su ciò che serve realmente. Python è un ottimo esempio, assieme a qualche buon libro (come Learning Python di Lutz assieme a How to Think Like a Computer Scientist). Come esercizi puoi iscriverti gratis al divertentissimo Project Euler, avendo cura di seguire i thread sul forum che si attiveranno via via che risolverai i problemi.

Un'altra raccomandazione è di non dare troppa importanza ai linguaggi: è in genere l'unica preoccupazione dei neofiti, e non conta quasi nulla. Nel corso degli anni ne imparerai una ventina, e l'unica cosa importante sarà come usarli, ovvero sapere risolvere problemi scegliendo i metodi più adatti. Ci sono mille argomenti da studiare per imparare a farlo come si deve: algoritmi e strutture dati, design pattern, pianificazione... imparerai tutto col tempo e con un piano di studi serio.

PS: Quando ho scritto non c'era ancora il messaggio di M.A.W, che ha fatto anche un gran lavoro di ricerca e sintesi!
24  Linguaggi di programmazione / C/C++ / Re: Esercizio quotidiano inserita:: Aprile 04, 2013, 09:39:20 pm
Nota da moderatore: se vuoi postare due esercizi, apri due thread: in generale vale la regola "un problema, un thread". Soprattutto se i due argomenti riguardano linguaggi diversi (C++ e C). In questo modo, oltretutto è più facile che qualcuno ti aiuti senza spaventarsi a leggere un chilometro di post.

Ti consiglio di modificare il messaggio qui cancellando l'esercizio in C, e di riproporlo in un nuovo thread.


---

Nel primo esercizio usi una sintassi molto datata, che ormai è fuori standard e non dovrebbe essere più accettata da alcun compilatore (che libro stai usando per C++? Buttalo via e prendine uno nuovo, ti risparmierà un mucchio di sofferenze). Ormai le librerie standard non si includono più così da più di 10 anni:

Codice:
#include <iostream.h>

bensì così:

Codice:
#include <iostream>

e si fa riferimento al namespace std:: per evitare collisioni di nomi.

A parte il fatto che non includi <iostream> nel modo corretto, che non usi i namespace, che richiami più volte inutilmente getchar() senza peraltro aver incluso <cstdio>, il programma è corretto e dovrebbe funzionare senza problemi. Che risultati sballati ti dà?
25  Linguaggi di programmazione / C/C++ / Re: Prime armi (pensavo d'aver na fionda, ma non trovo nemmeno il sasso) inserita:: Aprile 04, 2013, 09:01:45 pm
Citazione
Oggettivamente quell'accrocco è considerato all'unanimità da tutti i professionisti la peggiore schifezza comparsa in circolazione negli ultimi decenni.

E oltre a tutto questo c'è una sacrosanta ragione sociale per cui c'è anche un thread sticky per sconsigliarlo: una buona parte dei problemi postati sul forum di C++, alla fine, si scopre essere invariabilmente colpa di Dev-Cpp e della strana psicosi collettiva che spinge a ostinarsi a usare un compilatore non nato per Windows, su Windows. Quindi se lo sconsigliamo non è tanto questione di occhio, ma di nausea da ripetizione.

PS: Personalmente su Windows consiglio Visual C++ Express, che ha un editor splendido, ed è fatto apposta per girare lì.
26  Linguaggi di programmazione / C/C++ / Re: aiutoo inserita:: Aprile 04, 2013, 07:27:28 pm
Che compilatore usi? Che IDE usi?

PS: Leggi il regolamento del forum: "aiutooo" non è un titolo esplicativo per il tuo problema. Per stavolta te l'ho cambiato io.
27  Linguaggi di programmazione / C/C++ / Re: Segno meno Unario inserita:: Aprile 04, 2013, 07:22:48 pm
Citazione
Purtroppo, quando si tenti di estenderne l'uso a valori negativi (interi relativi), resto e modulo divergono. Pur senza rinunciare alla libertà espressiva, occorre tener presente questa differenza.

Precisazione più che doverosa, ancora di più perché quasi mai viene fatta, e viene data per scontata l'identità modulo=resto. Personalmente tremavo all'idea di introdurre complessità nella spiegazione e pronunciare parole come "comportamento indefinito". Sorriso
28  Programmazione Web / PHP / SPOSTATO: domande e risposte script gratuito inserita:: Aprile 03, 2013, 01:45:46 pm
Questa discussione è stata spostata in I progetti degli sviluppatori.

http://www.ioprogrammo.it/index.php?topic=22671.0
29  Linguaggi di programmazione / C/C++ / Re: Segno meno Unario inserita:: Marzo 30, 2013, 11:36:10 pm
Non c'è niente che non vada nel tuo codice (a parte il fatto che stai usando printf ma includi iostream, mescolando C e C++ nel modo sbagliato).

L'operatore % restituisce il modulo fra i due argomenti, ovverosia il resto della divisione. 100/20 fa 5 col resto di 0. Quindi: 100%20 == 0.

Per tutti questi problemi, e per soddisfare le tue curiosità di prima riguardo il cosa succede da quando scrivi il codice a quando viene eseguito (che non ha nulla a che fare coi codici ASCII, e molto a che fare con processi di compilazione e linking), e per tutti i diecimila problemi niente affatto banali che incontrerai imparando C/C++, è fondamentale che ti procuri un buon manuale. Ne hai già uno?

PS:
Codice:
printf (grazie per l'aiuto);

Syntax error. Mancano le virgolette che racchiudano il testo della stringa. Occhiolino

Codice:
return "prego";
30  Linguaggi di programmazione / C/C++ / Re: Segno meno Unario inserita:: Marzo 30, 2013, 10:51:08 pm
In entrambi i casi è un operatore. Se lo usi come sottrazione è un operatore binario (che vuol dire che ha due argomenti) infisso (che vuol dire che sta in mezzo ai due argomenti). Se lo usi per cambiare il segno, è un operatore unario (che vuol dire che ha un argomento solo) prefisso (che vuol dire che sta prima dell'argomento).



Pagine: 1 [2] 3 4 ... 131
Copyright © 2011 Edizioni Master SpA. p.iva : 02105820787

Tutti i diritti di proprietà letteraria e artistica riservati. - Privacy



Links to Page