n° 219
Novembre 2017
Dicembre 12, 2017, 11:30:44 *
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 ... 137
1  Linguaggi di programmazione / Linux C/C++ / Re: Dichiarazione: int (*i)[3] inserita:: Maggio 08, 2017, 10:53:42
E' corretta. Puoi verificarlo con un semplice programma di prova:

Codice:
int main() {
        int (*i)[3];

int a[3] = {1,2,3};

i = &a;

std::cout << *i[0];
}

Nota che le parentesi sono necessarie: int *i[3] dichiarerebbe i come un puntatore ad un array di 3 elementi di tipo (int*).
2  Linguaggi di programmazione / C/C++ / Re: Si può costruire un Direct Mode in C/C++ che eseguano singole righe ? inserita:: Marzo 08, 2017, 11:35:44
Citazione
La mia domanda è , si può ottenere un eseguibile che esegua una linea qualsiasi del listato in fase di editazione ?

Quello che vuoi fare, così come stai cercando di farlo, è completamente insensato.

Se vuoi creare un interprete, crea un interprete, nel modo in cui si scrivono gli interpreti. Suggerimenti:

1) Compra un buon libro di testo, che è la cosa che più ti serve. Il Dragon Book è Il Testo sulla creazione di compilatori e interpreti, per antonomasia, ma anche un equivalente ben scritto va bene.

2) Studia il libro al punto 1. Imparerai un sacco di cose: come scrivere un lexer, un parser, etc... soprattutto guarda bene come indentano il codice, che è una cosa con cui ancora hai dei problemi, nonostante i numerosi richiami.

3) Segui SOLO il libro. Non fare altro, se non quello che dice il libro, finché non l'hai finito.

4) Quando hai finito, sarai perfettamente in grado di scrivere un interprete che abbia un senso. Ma anche allora non sarà facile, e richiederà un mucchio di lavoro.


E' una via lunga e divertente, e non ci sono scorciatoie.
3  Linguaggi di programmazione / Python / Re: soggetto in analisi logica inserita:: Febbraio 11, 2017, 11:09:35
Citazione
ma la grammatica ci insegna che i verbi non cominciano con un articolo

Non è un articolo, è un pronome personale complemento. La. "La vecchia porta sbarra essa", riferendosi a qualcosa menzionato in precedenza. Come in:

Ecco la nostra unica via di fuga. Ma la vecchia porta la sbarra.

In questo caso, "la" diventa complemento oggetto e "la porta" diventa soggetto.

Citazione
ma in questo caso il problema è ben visibile dall'assenza della virgola tra vecchi e porta [...] L'unico errore sintattico è la mancanza della virgola

Nessuno scriverebbe mai una virgola fra vecchia e porta, se non per enfatizzare il soggetto. L'unico caso che mi viene in mente è il dialogo con un sordo:

   - Chi hai detto che porta la sbarra?
   - La vecchia, porta la sbarra. La vecchia!


Il punto è che in questo caso, come molti altri, è impossibile fare un'analisi logica univoca senza capire effettivamente il senso intimo della frase. In mancanza di IA in grado di comprendere un testo, dobbiamo accontentarci di sistemi che "tirano a indovinare" basandosi sull'applicazione di regole precise. Che è il motivo per cui ancora oggi le traduzioni automatiche sono una fonte inesauribile di umorismo involontario ("lo spirito è forte, ma la carne è debole" può bellamente essere interpretato come: "la vodka è buona, ma la bistecca è marcia").

Implementare qualcosa di decente richiede un bel po' di studio di linguistica computazionale (almeno sapere bene cos'è un tokenizer, un parser, cos'è il bnf, una grammatica context-free, un constituency/dependency tree, una treebank...). Insomma, non è roba facile che può fare "mio cuggino", andando per tentativi: è un campo di studio complesso, affascinante e ancora molto aperto, nonostante abbia ormai almeno 50 anni di storia. (E di cui, per inciso, ho solo una conoscenza scolastica: che è il motivo per cui finora sono riuscito a non nominare neanche Chomsky e le grammatiche trasformazionali).

Citazione
Comunque a parte tutto vorrei capire come funziona e a che serve la libreria nltk, e se mi può aiutare a trovare il soggetto in una frase

Hai letto i riferimenti che ti ho dato? C'è un capitolo apposito sul parsing di un testo in linguaggio naturale, e l'elaborazione di un albero di struttura sintagmatica, come quello che trovi alla fine di questa pagina sulle dependency grammar.

Un altro riferimento pratico è il parser probabilistico della Stanford NLP Library (che ha anche un'interfaccia per python). Il problema, come al solito, sarà trovare dei modelli/corpora per la lingua italiana, vedi ad esempio l'ottimo lavoro fatto da Alessio Palmero Aprosio e Giovanni Moretti con Tint, che è una delle più valide risorse per il dependency parsing in Italiano (e a volte prende comunque delle gran cantonate).
4  Linguaggi di programmazione / Python / Re: soggetto in analisi logica inserita:: Febbraio 10, 2017, 02:51:30
Bella domanda.

La prima cosa da dire è che tutto ciò che riguarda il ramo dell'Intelligenza Artificiale noto come Natural Language Processing è estremamente complicato, e ad oggi siamo ancora molto lontani non solo dalla perfezione, ma anche dall'avere strumenti decentemente affidabili. Quindi: non c'è una soluzione facile al problema di effettuare l'analisi logica di una frase.

La ragione è semplice: gli umani parlano in modo confuso, complicato, spesso incompleto e ambiguo. E lo fanno perché sanno che tante cose sono desumibili dal contesto. Per rispolverare un vecchio classico sempre efficace, pensa a questa frase:

La vecchia porta la sbarra

Qual è il soggetto qui? La porta? La vecchia? Un umano può saperlo solo ragionando in base al contesto. Nel paragrafo precedente si accenna ad un'anziana? O a una via che viene sbarrata?

Non arriveremo MAI ad avere strumenti affidabili finché non disporremo di Intelligenze Artificiali in grado di capire il senso di una frase, o di leggere un libro e capire effettivamente di cosa stia parlando. Inutile dire che siamo ancora ad anni luce di distanza.

Premesso questo, gli strumenti che abbiamo tentano di fare il possibile per rielaborare l'albero sintattico più probabile a partire dalla frase data. La parola chiave è: "più probabile", che fa intuire che molti metodi per arrivarci usino un modello statistico della lingua, e un bel po' di teoria della probabilità.

Se sei a digiuno di statistica potresti trovarti molto a disagio a studiare i dettagli. Ma in ogni caso puoi sperimentare con python usando il Natural Language Toolkit, in congiunzione con lo studio di risorse come l'ottimo libro di Bird, Klein e Looper "Analyzing Text with the Natural Language Toolkit", liberamente disponibile in rete.
5  Varie ed Eventuali / 4 chiacchiere in libertà... / Re: Scegliamo noi di diventare programmatori, o la programmazione sceglie noi? inserita:: Febbraio 09, 2017, 10:48:00
Quando ho letto la tua proposta per un'articolo, Simone, ho pensato più o meno a tutte le cose che hai scritto in questo thread.

Da vecchio collaboratore del forum e della rivista, a volte mi rendo conto di aver contribuito, per quanto marginalmente, a far appassionare qualcuno alla programmazione. E mi ricordo bene dei dubbi e dell'entusiasmo che manifestavi sul forum anni fa.

Spero che, in aggiunta a quello che hai già conseguito, tu abbia anche la soddisfazione di vedere uno dei tuoi articoli sulla stessa rivista che ha contribuito a spingerti ad iniziare e che ti ha fatto scoprire di essere un programmatore (*). Sarebbe un'ottima maniera di "chiudere il cerchio" e magari, senza neanche saperlo, potresti a tua volta spingere qualcun altro a cambiare radicalmente la propria vita.

---

(*) Per rispondere alla tua domanda: credo che ci si nasca. Non mi riferisco tanto all'abilità o alla mentalità da programmatore, perché quelle si acquisiscono. Ci sono persone che provano un piacere quasi fisico nel risolvere problemi, o nel costruire qualcosa che a sua volta possa essere riutilizzato per costruire cose più grandi. Alcune di queste persone scoprono la programmazione (o la matematica) e capiscono istintivamente di trovarsi "a casa", anche quando la casa è ancora tutta da scoprire.
6  Microsoft Office / Word / Re: Stampa Unione di dati e picture da excel inserita:: Novembre 03, 2016, 03:04:25
Ciao MrVortex,

è bello vedere ogni tanto qualche utente dei tempi d'oro del forum (ce ne ricordiamo in pochi).

Puoi postare un link a un file Excel di esempio?
7  Linguaggi di programmazione / C/C++ / Re: Migliori testi per la didattica C e C++ inserita:: Luglio 28, 2016, 02:42:20
Mi sembra di capire che sei al momento non sai programmare.

Tieni presente che il C non è un linguaggio facile con cui iniziare, e impareresti molto meglio e più in fretta scegliendo un primo linguaggio più morbido (Python, o simili) e qualche guida che ti insegni a "pensare da programmatore".

Imparare il C in genere è un punto d'arrivo che presuppone già delle basi solide.
8  Linguaggi di programmazione / C/C++ / Re: Risalire al nome di una variabile da un indirizzo di memoria ? inserita:: Luglio 28, 2016, 02:30:27
Oltretutto, al di là del fatto che il codice in questione è completamente insensato, vedo un accesso ad un array di char CON INDICI NEGATIVI Scioccato!

Ma cosa speravi di ottenere?

Io ti suggerivo di usare un dizionario per associare da te l'indirizzo della variabile al suo nome, dato che quest'informazione è completamente rimossa dal compilatore. Per dare UN MINIMO di senso a questo thread, ecco un codice funzionante che sfrutta quest'idea:

Codice:
#include <iostream>
#include <string>
#include <map>

//Tabella dei simboli de' noantri
std::map<long, std::string> variabili;

void addName(const std::string& nome, void* variabile) {
 variabili[reinterpret_cast<long>(variabile)] = nome;
}

std::string nameOf(void* variabile) {
 return variabili[reinterpret_cast<long>(variabile)];
}

int main()
{
 char variabile1;
 bool variabile2;
 
 //associazione MANUALE delle variabili nella tabella simboli
 addName("variabile1", &variabile1);
 addName("variabile2", &variabile2);
 
 std::cout << "Il nome di questa variabile è " + nameOf(&variabile1);
}

Fare una cosa simile potrebbe avere senso in particolarissime situazioni (nel debugging di un allocatore di memoria custom, ad esempio, in genere assieme all'(ab)uso del preprocessore per automatizzare la registrazione delle variabili). Situazioni che, comunque, sono evidentemente comunque ben al di sopra delle tue possibilità attuali. INDICI NEGATIVI, perdiana!

Rinnovo l'invito a seguire un manuale di C passo passo, fare esercizi piccoli e mirati, e smettere di pasticciare senza capire quello che fai. Hai evidentemente molta voglia di fare, ma è, spiace dirlo, tempo completamente buttato se continui così, per te ma soprattutto per chi ti risponde.

----

NOTA: Vedo ora il post di M.A.W. Sono pienamente d'accordo con l'intervento di moderazione.

PS: Un grazie ad Oregon per aver segnalato un typo nel codice qui sopra
9  Linguaggi di programmazione / C/C++ / Re: Risalire al nome di una variabile da un indirizzo di memoria ? inserita:: Luglio 26, 2016, 05:35:13
Come giustamente detto da Oregon, in C e C++ non c'è alcun modo di risalire ai nomi delle variabili, dato che vengono scartati dopo le fasi di compilazione e linking (se ti interessa la procedura, fa' una ricerca su "symbol table" e "stripping" su wikipedia).

In altri linguaggi è possibile farlo (vedi il nameof recentemente introdotto in C#), ma è di solito poco utile, e si fa più che altro per ragioni di debugging. Puoi fare qualcosa di simile anche in C usando il preprocessore, ma si tratta di zucchero sintattico e nulla più. Niente che abbia a che vedere con un meccanismo di ricerca o di persistenza a runtime.

E nessun linguaggio fra le poche decine che conosco è in grado di dirti il nome di una variabile partendo da un semplice indirizzo di memoria. Se vuoi una feature del genere, dovrai creartela da solo usando un dizionario (qualcosa tipo std::map<long, std::string> in C++, o l'equivalente con una libreria C).

Prima di imbarcarti in una simile impresa, comunque, mi unisco a Oregon nello spingerti a farti la domanda: "quello che sto cercando di fare ha un senso?".
10  Linguaggi di programmazione / Java / Re: [Newbie] Bloccare la finestra ESEGUI inserita:: Luglio 21, 2016, 11:30:37
Un modo banale ma efficace è richiedere un input all'utente, aggiungendo alla fine del programma qualcosa tipo:

Codice:
System.out.print("Premi invio per continuare...);
System.in.read();
11  Linguaggi di programmazione / C/C++ / Re: E' possibile controllare le singole parole in fase di inserimento gets()? inserita:: Luglio 16, 2016, 12:34:15
Come ti è già stato detto più volte da più e più persone, Beppo, devi imparare ad indentare correttamente il codice.

Non è difficile, è una delle prime cose che si impara in un buon corso di programmazione, ed è richiesto dal regolamento per poter postare su questo forum. Se non sai come si indenta correttamente, per imparare bastano cinque minuti di lettura su qualunque fonte decente, perfino Wikipedia. Se ancora non ti senti sicuro puoi usare la funzionalità di indent automatico del tuo IDE (CodeBlocks ha un plugin apposito), oppure usare uno dei molti C Beautifier presenti online: incolli il tuo codice orrendo, premi "Pretty Print", e ottieni il codice scritto come si deve.

Peraltro, indentare il sorgente ti permetterebbe di vedere immediatamente che il programma che hai postato ha dei gravissimi problemi strutturali, probabilmente derivanti da un copia-incolla sbagliato, che lo rendono completamente insensato e ne impediscono la compilazione (SetPosition finisce, e cosa succede dopo? Manca un pezzo? Idem per printfgotoxy, che termina dopo sole due righe, senza chiusa graffa).

Dati i numerosi avvertimenti inascoltati, da ora in poi ogni volta che posterai un codice non indentato correttamente, chiuderò il thread.
12  Linguaggi di programmazione / C# / Re: Test se percorso di rete attivo inserita:: Luglio 06, 2016, 05:38:09
Il metodo che usi è corretto, il problema è che la chiamata è bloccante e il timeout di default può essere eccessivo.

L'unica soluzione che mi viene in mente è richiamare il metodo in modo asincrono e interrompere la chiamata dopo un tot di millisecondi. Puoi incapsulare la chiamata in un metodo, tipo questo:

Codice:
public static bool DirectoryExistsWithTimeout(string path, int timeoutInMilliseconds = 1000) {
    var task = new Task<bool>(
        delegate {
            return Directory.Exists(path);
        }
    );
    
    task.Start();
    
    return task.Wait(timeoutInMilliseconds) && task.Result;
}
13  Linguaggi di programmazione / C/C++ / Re: Scrivere nomi in (vettore di stringhe) fino ha completarla. inserita:: Luglio 01, 2016, 09:21:40
oregon ha ragione, beppo.

Capisco la frustrazione degli inizi, ma stai facendo un pasticcio e pretendi di uscirne alla leggera. Il codice che posti è una dimostrazione del fatto che NON stai seguendo un approccio corretto. Questo vuol dire che, purtroppo, se continui in questo modo NON imparerai niente sul C.

C e C++ non si imparano copincollando codice senza comprenderne il funzionamento. E' un approccio che può funzionare, forse e parzialmente, per linguaggi di scripting più amichevoli per i neofiti, ma in C è assolutamente necessario capire tutto ciò che si scrive.

E per ora non capisci affatto quello che hai scritto: è evidente, anche dal fatto che pensi di aver [RISOLTO] il tuo problema, quando il tuo programma non può neanche passare la fase di compilazione: ci sono troppi errori di sintassi, semantica e logica. Dello stile neanche parliamo, perché presume un programma compilabile.

Devi assolutamente studiare su un libro, iniziare dalle basi, capire quello che fai. Il C è un linguaggio impietoso: il programmino che vuoi scrivere, per quanto semplice, è troppo al di là delle tue capacità attuali. Prevede una buona comprensione del funzionamento della memoria dinamica, degli array, del controintuitivo sistema di I/O del C. Tutte cose che si imparano con calma - non sono difficili, ma vanno affrontate con metodo e una alla volta.

Nonostante i mille pazienti richiami di M.A.W, non sei ancora in grado di indentare il tuo codice in maniera corretta. E' importante, perché un programma formattato bene è più facile da leggere, e aiuta chi vuole aiutarti a capire il tuo programma senza sforzarsi troppo. Non conosci la terminologia, per cui nella maggior parte dei casi è difficile interpretare le tue richieste. Devi risolvere questi problemi, prima di ogni altro.

Se non lo fai, i tuoi tentativi di barcamenarti col C, per quanto siano pieni di buona volontà, falliranno sempre. Il programma che hai postato, ad esempio, andrebbe ri-scritto interamente, partendo dalla prima riga, dagli #include che non hai messo (dov'è <string.h>?), e arrivando all'ultima. E si potrebbe anche fare, ma ti assicuro che NON impareresti niente: ti illuderesti di aver "[RISOLTO]" il tuo problema, e saresti daccapo con il prossimo programmino abbozzato, non indentato, senza né capo né coda.

Per il tuo bene e per la sanità mentale di chi ti risponde, ti scongiuro: se hai voglia di imparare prendi un libro, leggilo con calma, studialo capitolo dopo capitolo, e qui saremo felici di aiutarti con gli inevitabili dubbi che avrai durante il percorso. E' l'unica via possibile da percorrere per imparare e divertirti col C.

Altrimenti, ci sono molti modi più interessanti di impiegare il tuo tempo (magari con linguaggi in cui è più facile pasticciare, come Python). Continuando così finirai con lo scoraggiare qualsiasi persona voglia sinceramente aiutarti.
14  Linguaggi di programmazione / Java / Re: Convertire String in Boolean inserita:: Aprile 07, 2016, 04:36:02
A rigor di logica, la tua soluzione si può ridurre a:

Codice:
x[i][3] = content[3].contains("true");

PS: Nota che il tuo problema sono gli spazi iniziali che si ritrovano nelle stringhe divise con split (la stringa "true" è diversa da " true"!). Per questo la versione con "contains" funziona, e il valueOf no. Modificare split(",") in split(", ") (o ancor meglio split(",\\s*")), dovrebbe ugualmente risolvere il tuo problema anche nel codice iniziale.
15  Varie ed Eventuali / 4 chiacchiere in libertà... / Re: Da dove iniziare?!? inserita:: Marzo 17, 2016, 07:21:03
Direi che dipende dal tuo grado di preparazione:

1) Sai già programmare? Progetti veri, fatti in qualche altro linguaggio, intendo. Se sì, l'idea di partecipare a un progetto open è molto valida.

2) Non sai ancora programmare bene? Il mio suggerimento è di fare un programma da te. Imparare a programmare vuol dire soprattutto sbattere la testa cento volte su un problema prima di risolverlo. Una volta che l'hai fatto, hai assimilato non solo la soluzione a quello specifico problema, ma la mentalità per arrivarci, e ti sembrerà molto più facile risolvere problemi simili. Purtroppo sbattere la testa cento volte contro un muro è una cosa da fare da soli nel buio della propria cameretta, e fa comunque male.

La parola chiave per resistere alla frustrazione, alla noia, e in generale al "chi me lo fa fare" è la passione. Quindi la domanda è: "c'è qualche campo che ti appassiona particolarmente?". Videogiochi? AI? Grafica? Musica? Se sì, prova a dire qual è (o quali sono). Vedremo di trovare un progettino minimo da realizzare. La chiave è che dev'essere necessariamente minimo, per permetterti di poterlo svolgere e finire. Qualcosa di più di un esercizio senza senso e di meno di un'applicazione professionale. Ma abbastanza per poterti rendere fiero di aver sviluppato il tuo progetto.
Pagine: [1] 2 3 ... 137
Copyright © 2017 Edizioni Master SpA. p.iva : 02105820787

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



powered by Simple Machines