|
|
|
![]() |
|
Strumenti |
![]() |
#81 | |
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Quote:
Se poi ti mancano i concetti E le esperienze di base, la difficoltà aumenta. In questo caso è più facile fare confusione. Secondo me, preoccuparsi specificamente di "portabilità" all'inizio del proprio percorso nella programmazione è prematuro, per tante ragioni. Di questo non ti preoccupare: se entrerai a fare parte di questo mondo scoprirai che le "discussioni accese" spesso sono parte del divertimento ![]()
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
|
![]() |
![]() |
![]() |
#82 |
Senior Member
Iscritto dal: Jul 2010
Città: Teramo
Messaggi: 1298
|
Bella banryn79
![]() Si infatti è proprio questo che mi manca. Il titolo del mio thread si riferiva principalmente al problema di un programma con interfaccia grafica che essendo fatto in C# non era possibile esportarlo su Linux perchè come mi hanno fatto notare io ho usato librerie Windows Form, in Linux non ci sono, per cui dovrei trovare librerie che possono essere utilizzate da entrambi ma non credo ci siano. Questa era la mia preoccupazione iniziale, poi mi preoccuperò delle altre librerie e del codice da modificare, mi sono accorto che è si un bel problema ma con le conocienze che ho non posso farci nulla al momento se non aprire discussioni dove qualcuno cercherà di darmi una mano. Per questo volevo passare a Java così da poter compilare lo stesso codice sorgente anche su Linux senza particolari problemi. Per il momento mi limiterò a compilare su entrambe le piattaforme con programmi a riga di comando e vediamo cosa ne esce fuori, poi vedrò di buttarmi con interfacce grafiche quando ne saprò qualcosa di più ![]() |
![]() |
![]() |
![]() |
#83 | |
Senior Member
Iscritto dal: Jan 2008
Messaggi: 8406
|
Quote:
qt ad esempio è una di queste, wxd ne è un'altra, wxnet ne è un'altra ancora...tutte utilizzabili con c#...se poi vai sul c++, ce ne sono a vagonate potresti usare mono e sviluppare sotto linux, così sei sicuro che poi girerà pure su windows |
|
![]() |
![]() |
![]() |
#84 |
Senior Member
Iscritto dal: Apr 2010
Città: Leuven
Messaggi: 667
|
Io credo che porsi il problema della portabilita' prima di saper scrivere Hello world sia come porsi il problema dei settaggi del motore di un'auto da corsa prima ancora di prendere la patente A.
Impara a programmare con un linguaggio qualunque! Poi alla portabilita' e alle seghe mentali ci penserai quando si presentera' il problema! ![]()
__________________
L'elettronica digitale non esiste, è solo elettrotecnica con interruttori piccoli! ![]() |
![]() |
![]() |
![]() |
#85 | |
Senior Member
Iscritto dal: Jul 2010
Città: Teramo
Messaggi: 1298
|
Quote:
Certo ancora non incontro problemi complessi in programmazione però uno fondamentale è questo, potrei poi rimanere un pochino deluso ![]() |
|
![]() |
![]() |
![]() |
#86 | |
Senior Member
Iscritto dal: Jan 2008
Messaggi: 8406
|
Quote:
Ognuno di noi potrebbe dirti teoricamente quali sono i problemi, come vengono risolti, perchè questo approccio è meglio di quello, ecc... ma ti creeremmo solo confusione. E' importante fare esperienza, per capire quali elementi compongono un framework, che nesso c'è con i linguaggi, perchè il C++ di win32 sembra diverso da quello di linux, ecc... Chiaramente potrei consigliarti qt ( perchè piace a me e lo trovo conveniente in moltissime situazioni ed è usabile sia da c++ che da python, che sono i due linguaggi che uso di più ) e non farei male. In fondo con qt impareresti a programmare in c++ ( perchè sembri molto intressato a questo linguaggio in particolare ), creeresti applicazioni grafiche, molto belle, sofisticate e complessivamente "fatte bene". Poi potresti cominciare a guardare ad altro e quindi capire le differenze, i perchè, le problematiche. In sostanza bisogna trovare un punto da cui iniziare e poi perderci intere giornate. Non esiste una strada facile o teorica o da "leggi il libro e hai imparato". Poi si può discutere sui vari linguaggi, su quale sia più indicato per iniziare, quale dà maggiori skill sul fronte tecnologico e quale invece ti aiuta e facilita nello sviluppo della mentalità teorica utile a progettare il software. Ma l'importante resta cominciare e buttarcisi a capofitto. |
|
![]() |
![]() |
![]() |
#87 | |
Senior Member
Iscritto dal: Apr 2010
Città: Leuven
Messaggi: 667
|
Quote:
Prendi un linguaggio qualunque che ti consente la OOP senza sbattimenti. Fai una rubrica telefonica: 1) Per ogni contatto tieni nome, cognome, indirizzo e numero di telefono 2) Salva e rileggi da file i dati salvati 3) Prova a farla usando liste concatenate, array, e alberi SENZA USARE QUELLI CHE TI FORNISCE LA LIBRERIA STANDARD 3.1) Implementa l'inserimento dati nelle liste concatenate sia in modo iterativo che ricorsivo 4) Implementa la funzione di ordinamento dei contatti per nome e per citta' (nel senso ordinali in ordine alfabetico dopo averli raggruppati per citta' col gruppo delle citta' sempre ordinato in ordine alfabetico) 4.1) Cambia l'algoritmo di ricerca o ordinamento in base alla struttura dati che usi, ovviamente NON USARE LA LIBRERIA STANDARD Fatti questo esercizio in Java o in C++ o in C# o in Python o in LUA o in Pascal... in quello che vuoi. Quando sei in grado di fare questo puoi cominciare ad andare avanti. Finche' non sei in grado di completare questo scegli un linguaggio e risolvi questo. Sbattersi ora con il multiplatform, la gui, la portabilita', l'ottimizzazione, ecc... e' controproducente, ti fa perdere di vista i concetti di base e non ti fa apprezzare i pregi e i difetti dei vari linguaggi. E' come voler progettare un processore al primo anno di ing. elettronica... prima impara cosa e' un transistor! ![]()
__________________
L'elettronica digitale non esiste, è solo elettrotecnica con interruttori piccoli! ![]() |
|
![]() |
![]() |
![]() |
#88 |
Senior Member
Iscritto dal: Apr 2010
Città: Leuven
Messaggi: 667
|
Aggiungo un'altra cosa...
Questa storia della produttivita'a tempo 0 non funziona. Se uno non si sbatte per apprendere le basi non potra' mai fare il salto di qualita'. La differenza si vede poi sul posto di lavoro, ve lo posso assicurare. La teoria e' importante almeno quanto la pratica e sono due cose che devono andare di pari passo. Mettersi a smanacciare coi framework senza avere un minimo di basi e' completamente inutile, porta ad apprendere vizi e cattive pratiche che poi e' difficile perdere col tempo e soprattutto porta a non avere la percezione di quello che si fa. Ti faccio un esempio sulla mia pelle, fresco fresco di giornata... Sto scrivendo un programma per analizzare dei dati che acquisisco da una scheda. Siccome va molto piano scritto in python oggi mi sono messo con tanta pazienza e l'ho riscritto in C e su 2 ore di esecuzione sai quanto ho guadagnato? Praticamente nulla perche' il problema sta nel fatto che non posso allocare un array di 34 milioni di double e quindi anche in C devo sempre giocare a saltelli coi puntatori e quindi l'algoritmo che ho "inventato" ha una complessita' altissima == il problema sta tra la sedia e la tastiera, non nel linguaggio, nel framework o nel pc. Prima di metterti a fare cose avanzate impara bene le basi. Capisci come funziona un calcolatore, come e' fatta la memoria, cosa succede quando scrivi "int c = 0;" su una JVM piuttosto che una CLI o un processore hardware. Altrimenti sarai bravissimo a seguire i tutorial ma quando si trattera' di uscire dai binari sarai fregato!
__________________
L'elettronica digitale non esiste, è solo elettrotecnica con interruttori piccoli! ![]() |
![]() |
![]() |
![]() |
#89 |
Senior Member
Iscritto dal: Jul 2010
Città: Teramo
Messaggi: 1298
|
Ottima infagrim, va bene farò la rubrica.
Voglio dire però che non sono messo così male come stai pensando. La maggiorparte del programma lo saprei fare in C++ e C# senza troppi problemi, semmai mi rivedo un attimo qualcosa perchè non ho tutto in testa. In Java adesso ho iniziato a vedere la sintassi ma lo farò dopo perchè di sicuro incontrerò qualche divergenza se non molte, quindi per non averle adesso vediamo di pensarci dopo. In Phyton non ho fatto mai nulla, quindi lo lascerei per ultimo, dici che poi imparando un po anche questo, almeno finalizzato per questo programma, riuscirò a fare una scelta in questi linguaggi ? È questo che vuoi dire oppure lo devo fare solo in un linguaggio come hai detto ? Faccio questo appena posso e posto i risultati, adesso le domande ![]() 1) Io sono abituato ai file di testo, intendi un altro tipo di file ? 2) Per liste concatenate cosa intendi ? Io probabilmente userò una classe, se poi mi dici di farla strutturale quindi con una struttura va bene lo stesso però dovrò riprendere alcuni esempi ![]() 3) Ricorsivo e iterativo non credo sia necessario, ma pensandoci è meglio, così mi vedo la differenza in questi linguaggi in entrambi i modi, al massimo lo commenterò e lo lascio nello stesso file così lo vedo veramente bene in parallelo. 4) Per quanto riguarda la ricerca e l'ordinamento, la ricerca ok, ma l'ordinamento l'ho sempre fatto a mano quindi non mi rimarrà difficile. Non ho mai usato funzioni di librerie per la ricerca e l'ordinamento. Poi ovviamente lo adatto a ogni elemento della classe se usero le classi.
__________________
Acquisti conclusi egregiamente con : TH4N4TOS --- Ramius83ITA Venduto a : Baio77 --- tonymax --- kris89 --- steee Ultima modifica di Squall 94 : 20-06-2012 alle 18:31. |
![]() |
![]() |
![]() |
#90 | |
Senior Member
Iscritto dal: Apr 2010
Città: Leuven
Messaggi: 667
|
Quote:
basta che lo porti a termine almeno in uno. 1) Puoi usare sia i binari che i file di testo, non è importante, basta che impari che sbattimenti ci sono per l'I/O. 2) Quando dico di studiare la teoria... - http://it.wikipedia.org/wiki/LinkedList - http://it.wikipedia.org/wiki/Albero_%28grafo%29 - http://it.wikipedia.org/wiki/Hash_table - e così via... La lista sarà la classe di un contenitore che conterrà una raccolta di istanze di altri oggetti, così come le altre strutture dati che ti ho suggerito di guardare. Cerca di capire i pro e i contro di ognuna. 3) Implementarlo in entrambi i modi ti fa apprezzare cosa accade nella memoria in base all'approccio che usi. Alcuni problemi sono più facili ricorsivamente, altri lo sono iterativamente. Hai mai provato a chiederti cosa accade sullo stack quando usi un metodo ricorsivo? Sai che differenza c'è tra uno stack e una coda? 4) Prova diversi tipi di ordinamento e ricerca. Magari parti da cose facili come la ricerca binaria e l'ordinamento a bolla (o bubble sort) e poi prova altri algoritmi sia di ricerca che di ordinamento. Che differenza c'è tra provare la ricerca binaria su un array o su una lista concatenata? E l'ordinamento? Si può guadagnare qualcosa in velocità mettendo gli oggetti da ricercare in un albero invece che in una lista? E che algoritmi si usano per cercare un nodo in un albero? Visto che non sei proprio a terra rilancio anche un poco la difficoltà dell'esercizio: E se ti chiedessi di salvare i dati su file codificandoli secondo l'algoritmo di Huffman? Studia, fai tanto esercizio e ti accorgerai che anche la semplice rubrica telefonica può essere un esercizio non banale da affrontare.
__________________
L'elettronica digitale non esiste, è solo elettrotecnica con interruttori piccoli! ![]() Ultima modifica di ingframin : 20-06-2012 alle 19:49. |
|
![]() |
![]() |
![]() |
#91 | |
Senior Member
Iscritto dal: Jul 2005
Città: Vicenza
Messaggi: 1570
|
Quote:
La lista concatenata, se ho compreso bene il concetto di ingframin, è la classica linked list presente in molti linguaggi. Il concetto è sempre quello, è una lista che conosce sempre il primo e l'ultimo dei nodi. Ogni nodo poi, di suo, conosce il precedente e il successivo (nel senso che la classe nodo ha sempre i parametri "precedente" e "successivo" che sono puntatori, o riferimenti per il c#/java che conosci, all'istanza del nodo precedente e del nodo successivo. Ne deriva che non può esistere un riferimento all'elemento i-esimo tramite indice, ma devi scorrere ogni nodo fino all'iesimo. |
|
![]() |
![]() |
![]() |
#92 | |
Senior Member
Iscritto dal: Apr 2010
Città: Leuven
Messaggi: 667
|
Quote:
Al corso di POO dell'universita' il professore ce la fece implementare in Java (me la chiese anche all'esame: implementa l'interfaccia List). E' un bell'esercizio che ti fa giocare con le classi, i puntatori o riferimenti, ecc... Imparare a gestire la memoria e' importantissimo! Anche per questo suggerivo di fare un confronto tra liste, alberi e array. Inoltre il linguaggio come ho detto piu' volte non e' importante. L'importante e' sceglierne uno e portare a termine questo esercizio (e molti altri che si trovano facilmente in giro). Partire dal difficile non va bene, e' come voler fare atletica e partire preparando la maratona... magari prima meglio fare gli 800m che poi a 42km c'e' tempo di arrivare!
__________________
L'elettronica digitale non esiste, è solo elettrotecnica con interruttori piccoli! ![]() |
|
![]() |
![]() |
![]() |
#93 |
Senior Member
Iscritto dal: Jul 2010
Città: Teramo
Messaggi: 1298
|
infagrim fai atletica ? Io la facevo e ora corro giusto così
![]() Comunque credo che avrò difficoltà per il momento a fare " le liste " , perchè non le ho mai fatte e sto vedendo ora cosa sono. Per il resto credo che farò in Java ( C# non lo voglio sentire per il discorso iniziale, se poi mi danno problemi allora sarò costretto ), in C++ ad esempio con Codeblocks mi dice che String non è dichiarato, la libreria l'ho inclusa ma non saprei. Forse non ha la libreria " string ", si chiamerà in un altro modo ma se non sbaglio quella dovrebbe essere la standard, ho visto che appaiono altre cose qundo scrivo string, sono un po' arrugginito in C++ ma se già cominciamo con ste cavolate ![]() Spero che non stiamo andando in OT . |
![]() |
![]() |
![]() |
#94 |
Senior Member
Iscritto dal: Jan 2008
Messaggi: 8406
|
Per C++ tieni sotto mano questo http://www.cplusplus.com/reference/clibrary/cstdlib/
La libreria è cstring oppure metti string.h. Vanno bene entrambe. |
![]() |
![]() |
![]() |
#95 | ||
Senior Member
Iscritto dal: Feb 2006
Messaggi: 1304
|
Quote:
Codice:
#include <string> std::string str; Codice:
#include <string> using namespace std; string str; Quote:
![]() Sono entrambi lo stesso header di C, quello che contiene strcpy, strcat, memcpy e compagnia. Per includere std::string di C++ serve di includere <string> e basta. |
||
![]() |
![]() |
![]() |
#96 |
Senior Member
Iscritto dal: Jul 2010
Città: Teramo
Messaggi: 1298
|
In effetti ho fatto " #include <string> " ma non va.
Usando DEV non mi è mai successo, ho provato maiuscolo la prima lettera, non si sa mai, ma niente. Provo cstring, penso che farò tutto nel fine settimana, per il momento sto leggendo le cose che mi hai inviato, interessante ma è completamente nuovo per me ...
__________________
Acquisti conclusi egregiamente con : TH4N4TOS --- Ramius83ITA Venduto a : Baio77 --- tonymax --- kris89 --- steee Ultima modifica di Squall 94 : 21-06-2012 alle 19:25. |
![]() |
![]() |
![]() |
#97 |
Senior Member
Iscritto dal: Jan 2008
Messaggi: 8406
|
|
![]() |
![]() |
![]() |
#98 |
Senior Member
Iscritto dal: Jan 2008
Messaggi: 8406
|
Come ho detto, dipende dal compilatore. Ad esempio nel mio caso vado in /usr/include/c++/4.6 e trovo i file string e cstring. E sono quelli che vengono inclusi.
In alcuni compilatori possono mancare o ne manca solo uno. Varie combinazioni insomma. Altro esempio banale. La libreria math.h ( cmath ). Nel mio caso c'è cmath ma non math, per cui posso includere solo cmath o math.h ma non math. |
![]() |
![]() |
![]() |
#99 |
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
|
![]() |
![]() |
![]() |
#100 |
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 06:17.