Consiglio per libri sul C.

Tutta l'informatica

Consiglio per libri sul C.

Messaggioda AmigaCori » mar nov 06, 2007 8:47 pm

Salve, il mio unico testo che uso ora e' "Corso completi di programmazione" di Deitel&Deitel.

Ogni tanto per approfondire cerco sul web pero' avrei bisogno di qualcosa che approfondisse quello che ho letto dul Deitel...non so se sia corretto dire piu' avanzato o piu' approfondito, e' che a volte sento la mancanza di informazioni, cosi': che testi mi consigliate?, considerando che il Deitel e' considerato un testo universitario, gradire consigli su testi NON delle superiori (anche perche' per la mia modesta esperienza sembra che chi scriva i libri per le superiori manco testi i programmi).

Oh, ovviamente vanno bene sia testi in inglese che italiano.

Grazie :felice:
Admin. di NSA www.NonSoloAmiga.com
Twitter: https://twitter.com/NonSoloAmiga
Facebook: http://www.facebook.com/NonSoloAmiga
Gruppo FB: http://www.facebook.com/groups/NonSoloAmiga/
Youube: http://www.youtube.com/user/NonSoloAmiga
AmigaCori

Supremo
 
Messaggi: 4527
Iscritto il: gio feb 26, 2004 4:48 pm

Re: Consiglio per libri sul C.

Messaggioda clros » mar nov 06, 2007 9:37 pm

In effetti, chi scrive libri delle superiori, *a volte*, sembra cadere completamente dalle nuvole per quanto riguarda i programmi messi sul testo come esempio.
Non solo non fungono o sono con errori più o meno macroscopici, ma sembrano essere anche in contraddizione con le indicazioni riportate subito prima/dopo.
Ho giusto qui davanti dei testi su Java della ***** che penso proprio di cambiare il prox anno. (anche se preferirei dare agli studenti dei miei appunti o preparare di volta in volta programmi di esempio sugli argomenti trattati, cosa che sto facendo proprio in questo momento :ride: )

Ma anche *alcuni* corsi universitari sembrano essere così; provate a vedere le lezioni di "Sistemi a microprocessore" del Poli di ******, anche li il docente sembra non aver mai provato/testato a fondo i programmi in assembly.

Per rispondere alla tua domanda...penso dipende a che punto ti vuoi spingere (il che equivale a dire:cosa vuoi fare?).
Non conosco il deitel&deitel...qui uno che sa tutto è sicuramente Riko, che credo non tarderà a risponderti.
Only AMIGA makes it possible !!
La colpa è sempre del Kernel!!
...un bit è formato da 8 byte...

Claudio "CP" La Rosa
Avatar utente
clros

Supremo
 
Messaggi: 3473
Iscritto il: ven mag 07, 2004 2:41 pm
Località: SYS 64738

Re: Consiglio per libri sul C.

Messaggioda riko » mar nov 06, 2007 10:08 pm

Mi avete chiamato?

*Il* libro per imparare il C è il Kernighan & Ritchie. Quello è definitivo. IMHO è chiaro e rigoroso, gli inglesi direbbero anche 'terse', sia in senso buono che in senso cattivo.

Sono 280 pagine. E dice *tutto*. Per inciso presentato in modo eccellente.
Come unica pecca non è aggiornato a C99 (ma nemmeno il Deitel, mi piace, ... per inciso, come mai lo hai preso? Lo prendono in tanti, ma a me non vanno giù, li trovo spesso imprecisi, incompleti).

Il K&R è oltre che un classico un libro in cui ti insegnano il C. In teoria lo potrebbe usare un principiante assoluto del linguaggio (che sarebbe meglio comunque che avesse un minimo di esperienza di programmazione, quando ti spiegano come è il for, per dire, ti spiegano come è il for in C, non ti fanno un pistolotto in cui ti insegnano i cicli etc etc etc come si fa quando vuoi *anche* insegnare a programmare).

Non a caso il K&R è costantemente nella mia libreria. Non che lo consulti moltissimo, alla fine il C è talmente 'piccolo' che quando uno lo impara non se lo scorda più. Consulto più spesso lo standard (ma è una lettura che non consiglio a meno di precise necessità).

Due libri ottimi (che non ho) sono:
1) http://www.amazon.com/Practice-Programm ... 84-4361424

2) http://www.amazon.com/C-Traps-Pitfalls- ... 313&sr=1-2

Sono libri diversi, entrambi ottimi. Il secondo però è per utenti abbastanza esperti.

Oppure un superclassico di programmazione sotto Unix. Come Unix Network Programming (ma il libro unico, vecchia edizione) oppure Advanced Programming in the Unix Environment entrambi di Stevens (+ altri).

Poi un giorno vi parlerò di Pike...
-enrico
fibs = 0 : 1: [ a + b | (a, b) <- zip fibs (tail fibs) ]


Akropolix: Community OFF-TOPIC di IKSnet
http://www.akropolix.net/forum

"se do da mangiare a un affamato mi dicono che sono un santo, se mi chiedo perch? ? affamato mi dicono che sono un comunista" (Helder C?mara, Arcivescovo di Recife)
Avatar utente
riko

Supremo
 
Messaggi: 3329
Iscritto il: gio mar 04, 2004 4:28 pm
Località: Chiba City

Re: Consiglio per libri sul C.

Messaggioda AmigaCori » mar nov 06, 2007 10:49 pm

Grazie delle risposte.

@clors

Beh, allora possiamo anche dire che i libri delle superiori a volte, molte volte, sono diseducativi e fatti coi piedi...che brutto, sarebbe meglio che facessero 2 cose ma fatte bene piuttosto che "accenarti" alla ricorsione per poi dirti che e' una cosa utilissima, ma manco tanto (es. Fibonacci) per poi dirti che ogni programmatore di C deve saper usare la ricorsione per poi dirti che si dimostra che l'iterazione fa la stessa cosa della ricorsione ma e' piu' efficiente....insomma come stavo sto: non ho imparato nulla.

riko ha scritto:Mi avete chiamato?


Chi?? noi? :scherza: Sapevo che non avresti mancato a rispondere :scherza:
*Il* libro per imparare il C è il Kernighan & Ritchie. Quello è definitivo. IMHO è chiaro e rigoroso, gli inglesi direbbero anche 'terse', sia in senso buono che in senso cattivo.
Sono 280 pagine. E dice *tutto*. Per inciso presentato in modo eccellente.


Segnato!

Come unica pecca non è aggiornato a C99 (ma nemmeno il Deitel, mi piace, ... per inciso, come mai lo hai preso? Lo prendono in tanti, ma a me non vanno giù, li trovo spesso imprecisi, incompleti).


Allora, se entri in una libreria abbastanza grande, trovi vari libri per principianti sul C, tra questi sfogliandoli al volo il Deitel e' quello che sembra fatto meglio.
Inesattezze ce ne sono, sin dal principio, quando ti dice che per eseguire un file xxx.c compilato di nome "a.out" in ambiente UNIX basta digitare a.out e basta....ora, la mia Debian si e' rifiutata di farlo eseguire e stamparmi "Hello world!" sulla console...la mia Debian HA VOLUTO che digitassi ./a.out, ora sono due le cose: o la mia Debian NON fa parte del sistema UNIX, oppure chi ha scritto il libro non si e' preso la briga di testare cio' che ha scritto...non ti dico che soddisfazione a correggere il libro sul C!!!!!, me povero cojone :ahah: totalmente ignorante sulla programmazione.

Pero', a parte questo ed altre cosine e' fatto bene, molto graduale e meglio di altra robaccia che un mio amico universitario mi ha prestato (per la cronaca, il libro-spazzatura e': "Informatica arte e mestiere"...per corsi universitari) ed il bello del Deitel e' che si trova online il programma gia' scritto da scaricare ed eseguire: ottimo per evitare di copiarsi a mano gli esempi come un'automa!

Il K&R è oltre che un classico un libro in cui ti insegnano il C. In teoria lo potrebbe usare un principiante assoluto del linguaggio (che sarebbe meglio comunque che avesse un minimo di esperienza di programmazione, quando ti spiegano come è il for, per dire, ti spiegano come è il for in C, non ti fanno un pistolotto in cui ti insegnano i cicli etc etc etc come si fa quando vuoi *anche* insegnare a programmare).
.
.
.

Due libri ottimi (che non ho) sono:
1) http://www.amazon.com/Practice-Programm ... 84-4361424

2) http://www.amazon.com/C-Traps-Pitfalls- ... 313&sr=1-2

Sono libri diversi, entrambi ottimi. Il secondo però è per utenti abbastanza esperti.

Oppure un superclassico di programmazione sotto Unix. Come Unix Network Programming (ma il libro unico, vecchia edizione) oppure Advanced Programming in the Unix Environment entrambi di Stevens (+ altri).


Segnati di nuovo e grazie delle info!!!

In effetti il C mi sembra "povero" :scherza: nel senso che lo pensavo pieno di comandi e complessissimo...invece no, e' un bene che sia cosi' "piccolo" di istruzioni perche' permette di concentrarsi sulla programmazione e non sui comandi, per un principiante e' facile tenere a mente i "mattoni" che ha per costruire cio' di cui ha bisogno; comunque il mio obiettivo e' la programmazione ad oggetti, il C++ quindi, pero' il C e' fondamentale e si inzia da qui'.

Poi un giorno vi parlerò di Pike...


Noi si e' qui' :annu:

OT
riko, se ricordi il un altro thread parlando di I/O sulla seriale in merito al C, introdussi il disccorso su Rebol, beh...io roba equivalente tipo ioctl() del C non l'ho trovata...ora, non ti sto chiedendo di cercare pr me, vorrei solo sapere se e' possibile che un linguaggio non preveda queste cose, cioe' il contatto con l'HW, ho letto pero' che sulla versione a pagamento di Rebol si puo' accedere alle DLL del sistema ospitante, forse questi comandi potrebbero essere presenti solo in quella versione?
Admin. di NSA www.NonSoloAmiga.com
Twitter: https://twitter.com/NonSoloAmiga
Facebook: http://www.facebook.com/NonSoloAmiga
Gruppo FB: http://www.facebook.com/groups/NonSoloAmiga/
Youube: http://www.youtube.com/user/NonSoloAmiga
AmigaCori

Supremo
 
Messaggi: 4527
Iscritto il: gio feb 26, 2004 4:48 pm

Re: Consiglio per libri sul C.

Messaggioda riko » mer nov 07, 2007 12:03 am

AmigaCori ha scritto:Beh, allora possiamo anche dire che i libri delle superiori a volte, molte volte, sono diseducativi e fatti coi piedi...che brutto, sarebbe meglio che facessero 2 cose ma fatte bene piuttosto che "accenarti" alla ricorsione per poi dirti che e' una cosa utilissima, ma manco tanto (es. Fibonacci) per poi dirti che ogni programmatore di C deve saper usare la ricorsione per poi dirti che si dimostra che l'iterazione fa la stessa cosa della ricorsione ma e' piu' efficiente....insomma come stavo sto: non ho imparato nulla.


Mah, il punto è che la ricorsione è un modo *fondamentale* di ragionare.
In primo luogo esistono svariati dove la ricorsione è l'unica forma di ciclo disponibile.

In secondo luogo esistono svariati problemi la cui formulazione più naturale è di tipo ricorsivo. Certo, poi si può riformulare il problema in termini iterativi, ma bisogna gestire a mano una pila (cosa che visto che in C non è già fatta complica, specie per un principiante).

Pensa alla maggior parte degli algoritmi di ordinamento, al celebre quicksort. Ecco, formularlo in modo ricorsivo è molto più comodo.
Per non parlare degli algoritmi generici su liste, alberi o addirittura grafi.

Inesattezze ce ne sono, sin dal principio, quando ti dice che per eseguire un file xxx.c compilato di nome "a.out" in ambiente UNIX basta digitare a.out e basta....ora, la mia Debian si e' rifiutata di farlo eseguire e stamparmi "Hello world!" sulla console...la mia Debian HA VOLUTO che digitassi ./a.out, ora sono due le cose: o la mia Debian NON fa parte del sistema UNIX, oppure chi ha scritto il libro non si e' preso la briga di testare cio' che ha scritto...non ti dico che soddisfazione a correggere il libro sul C!!!!!, me povero cojone :ahah: totalmente ignorante sulla programmazione.


Via, quella non è nemmeno un'inesattezza. In primo luogo i sistemi unix moderni di default non includono nel path . *e* le shell non lo tengono nel path. Per cui quando dai un nome non qualificato lui se lo va a cercare nel path e non lo trova.

E' insomma una questione completamente veniale *e* poco rilevante. Se avessi usato che so... Mandrake 9 (IIRC) mi pare che li il path . fosse di default (ma potrebbe essere una puttanata).

Le inesattezze su un libro di programmazione sono ben altre. Schildt per esempio ne è maestro.

Pero', a parte questo ed altre cosine e' fatto bene, molto graduale e meglio di altra robaccia che un mio amico universitario mi ha prestato (per la cronaca, il libro-spazzatura e': "Informatica arte e mestiere"...per corsi universitari) ed il bello del Deitel e' che si trova online il programma gia' scritto da scaricare ed eseguire: ottimo per evitare di copiarsi a mano gli esempi come un'automa!


Salvo che tutti hanno gli esempi online (o quasi), scaricarli non è come riscriverli. Tipo quando compili e scopri il magico mondo degli errori di sintassi dovuto a temporaneo conflitto fra dita e cervello... ah, che bel mondo.


> In effetti il C mi sembra "povero" :scherza: nel senso che lo pensavo
> pieno di comandi e complessissimo...invece no, e' un bene che sia cosi'
> "piccolo" di istruzioni perche' permette di concentrarsi sulla
> programmazione e non sui comandi, per un principiante e' facile tenere
> a mente i "mattoni" che ha per costruire cio' di cui ha bisogno;
> comunque il mio obiettivo e' la programmazione ad oggetti, il C++
> quindi, pero' il C e' fondamentale e si inzia da qui'.

1. C è un linguaggio minimale, semplice. Ma è anche molto complesso da usare. Per fare due scemenze in croce ci vanno pagine di codice: pagine di codice sono pagine di potenziali errori.

2. Cosa intendi 'concentrarsi sulla programmazione e non sui comandi'?
Tipicamente i linguaggi di basso livello come il C fanno perdere di vista la programmazione proprio perchè fanno perdere dietro una serie di dettagli implementativi che tipicamente non si vorrebbe gestire fin da subito.

Tipicamente se vedi mattoni e devi costruire case hai un problema. Rischi di essere troppo preso a costruire il muro dritto e o non finisci la casa oppure fai una casa bruttina. :)

Per inciso, cosa intendi con 'comando'? E' un termine relativamente ambiguo (ha un significato, ma pochi lo usano in quel senso).

Tornando a noi c'è solo un programmatore C++ peggiore di un programmatore C++ che viene da Java: è un programmatore C++ che viene da C.

Buona parte delle best practice di C sono cose da *evitare* nel modo più assoluto in C++. Inoltre i linguaggi hanno sottili differenze che creano
*molti* problemi. Cambia il modo di pensare, di strutturare.
Insomma, il C++ è un linguaggio a se. Io ci ho messo 4 anni a 'pulire' il mio C++ dalle cattive influenze che ho preso come programmatore C.

Aggiungo poi che C++ è assolutamente inadatto come linguaggio per principianti. Per usarlo bene bisogna studiare tanto, ma tanto. E fare tanta esperienza: solo che per capire perchè certe cose si fanno in un dato modo, è utile essersi immusati nei problemi che vengono risolti.

Questo *se* l'obiettivo è C++. Poi non vedo perchè avere come obiettivo C++. Mi spiego. Io mi ci diverto tanto, ma lo uso se ce ne è bisogno. Non mi sono svegliato dicendo 'voglio il C++'. So che mi è utile e me lo sono imparato. In particolare se non ne avessi bisogno, farei volentieri a meno.

Tornando a noi, insomma, se l'obiettivo è 'programmare ad oggetti', C++ sicuramente meglio di Java, ma... come dire. E' una bella gatta da pelare.
In primo luogo ti mostra solo *un* modo di programmare ad oggetti (per inciso uno discutibile, basato sulle esigenze del compilatore più che sull'astrazione della programmazione ad oggetti). In secondo luogo la parte più fica di C++ è la parte templatica: che in un certo senso è un mondo *a parte*. Sostanzialmente ti introduce in modo splendido al concetto di tipo, peccato che non lo dice chiaramente *e* fino a quel momento ti ha introdotto solo al concetto di classe. Per cui ti insegna la differenza fra tipo e classe, ma non te lo dice :)

Per non parlare poi del fatto che l'altro pezzo forte della programmazione C++, l'uso *corretto*, *efficiente* ed *effettivo* della STL, eventualmente appoggiandosi a Boost è molto più intuitivo se si è familiari con la programmazione funzionale. Sfortunatamente la maggior parte dei programmatori C++ (o C) non hanno un background di programmatori funzionali (anche se in alcune Uni si fa).




Poi un giorno vi parlerò di Pike...


Noi si e' qui' :annu:

OT
riko, se ricordi il un altro thread parlando di I/O sulla seriale in merito al C, introdussi il disccorso su Rebol, beh...io roba equivalente tipo ioctl() del C non l'ho trovata...ora, non ti sto chiedendo di cercare pr me, vorrei solo sapere se e' possibile che un linguaggio non preveda queste cose, cioe' il contatto con l'HW, ho letto pero' che sulla versione a pagamento di Rebol si puo' accedere alle DLL del sistema ospitante, forse questi comandi potrebbero essere presenti solo in quella versione?[/quote]
-enrico
fibs = 0 : 1: [ a + b | (a, b) <- zip fibs (tail fibs) ]


Akropolix: Community OFF-TOPIC di IKSnet
http://www.akropolix.net/forum

"se do da mangiare a un affamato mi dicono che sono un santo, se mi chiedo perch? ? affamato mi dicono che sono un comunista" (Helder C?mara, Arcivescovo di Recife)
Avatar utente
riko

Supremo
 
Messaggi: 3329
Iscritto il: gio mar 04, 2004 4:28 pm
Località: Chiba City

Re: Consiglio per libri sul C.

Messaggioda AmigaCori » gio nov 08, 2007 1:34 am

riko ha scritto:In secondo luogo esistono svariati problemi la cui formulazione più naturale è di tipo ricorsivo. Certo, poi si può riformulare il problema in termini iterativi, ma bisogna gestire a mano una pila (cosa che visto che in C non è già fatta complica, specie per un principiante).

Beh, da principiante ti posso dire che la ricorsione sembra una pratica magica...arrivi fino all'ultimo caso e poi si richiude tutto all'indietro fornendo il risultato, mi sa di gioco :scherza:

Pero' ho visto vari esempi ed in effetti e' molto naturale applicare il ragionamento della ricorsione, anche se devo ancora afferrare bene il concetto.


Via, quella non è nemmeno un'inesattezza. In primo luogo i sistemi unix moderni di default non includono nel path . *e* le shell non lo tengono nel path. Per cui quando dai un nome non qualificato lui se lo va a cercare nel path e non lo trova.

Non capisco...anzi credo di non sapere... "./pluto" non significa esegui pluto? ovviamente se pluto e' eseguibile.
Se io ho pluto.cc, poi compilo ed ho pluto.out, per eseguire pluto.out, non devo digitare ./pluto.out?

Le inesattezze su un libro di programmazione sono ben altre. Schildt per esempio ne è maestro.


O certo!, io parlo per quello che conosco, pero' segui il libro..fai tutti i passi per far girare il tuo primo programmino in C e poi non funge...perdi fiducia nel libro fin dall'inizio :ahah:

Salvo che tutti hanno gli esempi online (o quasi), scaricarli non è come riscriverli. Tipo quando compili e scopri il magico mondo degli errori di sintassi dovuto a temporaneo conflitto fra dita e cervello... ah, che bel mondo.

:ahah: ci fosse mai una volta, dico una sola volta che non mi dimentico un ";" o una "}", si...pero' a volte copiarsi le due pagine di listato e' una palla mostruosa se non e' roba che hai pensato te...poi il bello e' poter scegliere: copi o scarichi :felice:

1. C è un linguaggio minimale, semplice. Ma è anche molto complesso da usare. Per fare due scemenze in croce ci vanno pagine di codice: pagine di codice sono pagine di potenziali errori.

Buono per iniziare pero', anche se secondo me Rebol e' portentoso per un megaprincipiante di programmazione: con due righe crei le prime finestrelle colorate!

2. Cosa intendi 'concentrarsi sulla programmazione e non sui comandi'?


Intendo che ho meno *paroline* magiche (comandi cfr. sotto) da tenere a mente, e' come avere solo 5 lego differenti per costruire una casa e quindi devo solo ragionare sul come incastrare i lego.

Tipicamente i linguaggi di basso livello come il C fanno perdere di vista la programmazione proprio perchè fanno perdere dietro una serie di dettagli implementativi che tipicamente non si vorrebbe gestire fin da subito.

Tipicamente se vedi mattoni e devi costruire case hai un problema. Rischi di essere troppo preso a costruire il muro dritto e o non finisci la casa oppure fai una casa bruttina. :)


Si..si...ho capito cosa vuoi dire, ma sono cose *avanzate* che ad un vero principiante balzerebbero solo come complesse, ovvero tante cose da imparare prima di vedere qualcosa di concreto.
Comunque non credo di poter capire cosa dici, io proprio non ho presente lo scenario del programmatore. sono solo felice che ci siano pochi *comandi* cosi' il mio cervello si trova a rigirare tra quei 3-4 mezzi messi a disposizione dal C.

Per inciso, cosa intendi con 'comando'? E' un termine relativamente ambiguo (ha un significato, ma pochi lo usano in quel senso).


Non mi fare il professore ora! :scherza:
Allora, riko, ti levo subito il dubbio: il Deitel chiama comando for...while....if... e dice: le istruzioni all'interno del corpo del comando for...; mentre: continue usata all'interno di switch la chiama istruzione continue...

Quando ho scritto comandi, intendevo quelle paroline particolari che il C si riserva e che io non posso usare, con istruzione invece intendo la *frase* dove descrivo al computer, tramite comandi e non solo, l'azione da compiere.

Quindi un programma sara' un insieme di istruzioni, all'interno delle istruzioni ci possono essere dei comandi, per esempio un'istruzione di assegnamento non contiene alcun comando.

Ora, io ho capito questo e mi sembra che fili anche come logica...poi boh, non mi sembra d'aver letto la definizione rigorosa di cosa sia un'istruzione e cosa sia un comando :sperduto:

Tornando a noi c'è solo un programmatore C++ peggiore di un programmatore C++ che viene da Java: è un programmatore C++ che viene da C.

Nooooooooooooooooooooooooo! :ahah: non me lo dire che lascio perdere subito il C!!!

Buona parte delle best practice di C sono cose da *evitare* nel modo più assoluto in C++. Inoltre i linguaggi hanno sottili differenze che creano
*molti* problemi. Cambia il modo di pensare, di strutturare.
Insomma, il C++ è un linguaggio a se. Io ci ho messo 4 anni a 'pulire' il mio C++ dalle cattive influenze che ho preso come programmatore C.

Aggiungo poi che C++ è assolutamente inadatto come linguaggio per principianti. Per usarlo bene bisogna studiare tanto, ma tanto. E fare tanta esperienza: solo che per capire perchè certe cose si fanno in un dato modo, è utile essersi immusati nei problemi che vengono risolti.

Appunto...il C++ e' complesso per iniziare, il C non va bene per il C++, il Java peggio mi sento...insomma, dovrei iniziare dal Basic?...no perche' cosi manderei aff...quelpaese la programmazione strutturata :scherza: insomma come faccio, faccio male....:sperduto:

Questo *se* l'obiettivo è C++. Poi non vedo perchè avere come obiettivo C++. Mi spiego. Io mi ci diverto tanto, ma lo so se ce ne è bisogno. Non mi sono svegliato dicendo 'voglio il C++'. So che mi è utile e me lo sono imparato. In particolare se non ne avessi bisogno, farei volentieri a meno.


Mmm cosa dire...a me non serve nel senso stretto della parola, voglio semplicemente usare *dal dentro* il computer.

L'unica cosa che vorrei fare con un certo interesse e' I/O con dispositivi esterni: acquisizione dati e pilotaggio accrocchi elettronici.

A cosa mi serve il C++?, perche' mi sembra d'aver capito che e' un modo migliore di programmare, un po' come quando si comprese che il go to era sbagliato e c'era un modo migliore di fare le cose.
Admin. di NSA www.NonSoloAmiga.com
Twitter: https://twitter.com/NonSoloAmiga
Facebook: http://www.facebook.com/NonSoloAmiga
Gruppo FB: http://www.facebook.com/groups/NonSoloAmiga/
Youube: http://www.youtube.com/user/NonSoloAmiga
AmigaCori

Supremo
 
Messaggi: 4527
Iscritto il: gio feb 26, 2004 4:48 pm

Re: Consiglio per libri sul C.

Messaggioda riko » ven nov 09, 2007 8:20 pm

AmigaCori ha scritto:Beh, da principiante ti posso dire che la ricorsione sembra una pratica magica...arrivi fino all'ultimo caso e poi si richiude tutto all'indietro fornendo il risultato, mi sa di gioco :scherza:


In realtà la ricorsione può anche essere fatta meglio eh :)
Tipicamente una buona ricorsione *non* richiude alla fine, ma è fatta in modo tale che possa sempre riusare lo stesso stack frame (con efficienza pari ad un ciclo). Non è sempre possibile, ma spesso si.

> Pero' ho visto vari esempi ed in effetti e' molto naturale applicare il
> ragionamento della ricorsione, anche se devo ancora afferrare bene il
> concetto.

Studiando un po' di algoritmi e strutture dati lo afferri per forza.


> Non capisco...anzi credo di non sapere... "./pluto" non significa esegui
> pluto
? ovviamente se pluto e' eseguibile.

No. ./pluto vuole dire la stessa cosa di src/pluto, foo/pluto etc.

Ovvero esegui l'eseguibile pluto dentro la directory . (che è la directory corrente).

Qualifica pluto. Potresti avere anche un pluto nel PATH e lui eseguirebbe 'questo qui'.

> Se io ho pluto.cc, poi compilo ed ho pluto.out, per eseguire pluto.out,
> non devo digitare ./pluto.out?

E' un modo. Poi nessuno mette estensione .out ai files che non siano a.out, eh. :)



> Buono per iniziare pero', anche se secondo me Rebol e' portentoso per
> un megaprincipiante di programmazione: con due righe crei le prime
> finestrelle colorate!

E' una questione dibattuta. Io non sono completamente convinto che ammazzare il principiante di dettagli lo aiuti. In primo luogo lo costringe a cose veramente giocattolose, in secondo luogo gli impedisce di assumere una visione d'insieme.

Lasciando stare le finestre, io pure sono per un approccio più di alto livello. Tanto per vedere un po' cosa si può fare *e* fare qualcosa di utile.

> Intendo che ho meno *paroline* magiche (comandi cfr. sotto) da tenere
> a mente, e' come avere solo 5 lego differenti per costruire una casa e
> quindi devo solo ragionare sul come incastrare i lego.

Non sono convinto che il paragone regga. Poi chiarifico.

Tipicamente i linguaggi di basso livello come il C fanno perdere di vista la programmazione proprio perchè fanno perdere dietro una serie di dettagli implementativi che tipicamente non si vorrebbe gestire fin da subito.

Tipicamente se vedi mattoni e devi costruire case hai un problema. Rischi di essere troppo preso a costruire il muro dritto e o non finisci la casa oppure fai una casa bruttina. :)


> Si..si...ho capito cosa vuoi dire, ma sono cose *avanzate* che ad un
> vero principiante balzerebbero solo come complesse, ovvero tante cose > da imparare prima di vedere qualcosa di concreto.

Mi spiego... pensa a questo compito cretino. Prendi e vai a sostituire a tutti i files contentuti 'ricorsivamente' nella directory corrente che si chiamano 'Root' e sostituisci al loro interno la parola foo con la parola bar.

Ecco... questa è una cosa cretina che ho dovuto fare questa mattina (ho spostato un repository CVS). Ho risolto in 30 secondi con suppongo 5 righe di python (tra l'altro buttate in un'interprete interattivo). Avrei potuto pure farlo a suon di zsh e sed, per dire, ma avrei dovuto pensarci.

Immaginati di farlo in C...

Il bello di 'saper programmare' è quello di sapersi risolvere i problemi, sapere scrivere qualcosa che ci serve. Partire da C è IMHO contro questa filosofia, ecco tutto.

In pratica in un linguaggio di basso livello come C per fare qualunque cosa ci va un sacco di codice. E i principianti sbagliano più dei professionisti, per cui c'è anche il caso che rimangano frustrati *prima* di avere finito.

C ti nasconde gli errori: per cui appena superi le poche righe devi imparare *anche* il debugger. Per dire. E così via.

> Comunque non credo di poter capire cosa dici, io proprio non ho
> presente lo scenario del programmatore. sono solo felice che ci siano
> pochi *comandi* cosi' il mio cervello si trova a rigirare tra quei 3-4
> mezzi messi a disposizione dal C.

Vedi sotto.

> Non mi fare il professore ora! :scherza:
> Allora, riko, ti levo subito il dubbio: il Deitel chiama comando
> for...while....if... e dice: le istruzioni all'interno del corpo del
> comando for...
; mentre: continue usata all'interno di
> switch la chiama istruzione continue...

> Quando ho scritto comandi, intendevo quelle paroline particolari che il C
> si riserva e che io non posso usare, con istruzione invece intendo la
> *frase* dove descrivo al computer, tramite comandi e non solo, l'azione
> da compiere.

Allora il significato di comando di deitel è corretta. E' quello che in inglese si chiama statement (ovvero 'frase'). Quasi tutti i linguaggi 'moderni' hanno pochi *comandi*. Alcuni non hanno nemmeno il concetto di statement (perchè tutto è un'espressione).

In generale si può fare tutto con roba di libreria. Come è giusto e come fa anche il C. La differenza è su quanto esplicito devi essere.


> Quindi un programma sara' un insieme di istruzioni, all'interno delle
> istruzioni ci possono essere dei comandi, per esempio un'istruzione di
> assegnamento non contiene alcun comando.

Il concetto di 'istruzione' non è in effetti corretto (o meglio, non è preciso). Usa pure statement o comando. L'assegnamento in C è un espressione (e può stare ovunque stia un espressione, per quanto assurdo possa essere).

In C c'è il cosidetto ;-statement che trasforma un'espressione in uno statement. BTW, anche la chiamata di funzione è un'espressione. Quando scrivi printf(...); stai facendo esattamente questo. Hai lo statement; che 'contiene' un'espressione.


> Nooooooooooooooooooooooooo! :ahah: non me lo dire che lascio
> perdere subito il C!!!

Questione di gusti. Io per un principiante suggerisco Ruby o Python a scelta tua e di quanto sei 'modaiolo' :)

> Appunto...il C++ e' complesso per iniziare, il C non va bene per il C++,
> il Java peggio mi sento...insomma, dovrei iniziare dal Basic?...no
> perche' cosi manderei aff...quelpaese la programmazione strutturata
> :scherza: insomma come faccio, faccio male....:sperduto:

No, affatto. Aggiungo anche il PHP meglio dimenticarlo. Finito questo hai un *sacco* di scelta. Basic purtroppo vuole dire poco e nulla. E' più una famiglia di linguaggi che altro.

IMHO i linguaggi più belli da usare fra quelli procedurali/imperativi sono Python e/o Ruby. Sono estremamente facili, lineari e potenti. Per di più puoi usarli per quasi tutto, dal calcolo scientifico (ma in questo molto meglio Python) al web allo scripting di sistema alle gui.

Rebol non mi pare male, ma non lo conosco bene. Poi ci sono i linguaggi funzionali, ma se la semplice ricorsione ti mette in difficoltà... meglio evitare (visto che in molti casi hai *solo* la ricorsione).

Potrebbe essere interessante anche Objective Pascal (Lazarus). Ma resta IMHO ben più complesso di Python o Ruby. Ma è carino da usare, io però non lo conosco affatto bene.

> L'unica cosa che vorrei fare con un certo interesse e' I/O con dispositivi
> esterni: acquisizione dati e pilotaggio accrocchi elettronici.

Puoi provare imparare Python. Ci sono diverse librerie comode per questo. Poi C può davvero essere la scelta giusta, ma ribadisco, didatticamente IMHO è meglio il contrario.

> A cosa mi serve il C++?, perche' mi sembra d'aver capito che e' un
> modo migliore di programmare, un po' come quando si comprese che il
> go to era sbagliato e c'era un modo migliore di fare le cose.

E' un modo di programmare. Il 'migliore' lo lascio mettere ad altri. Io non mi trovo male in C++. Ma fai conto che per usarlo *bene* devi lavorarci *tanto*. E dubito che senza un eccellente professore (o esperienza) le cose siano facili.

Tipicamente la maggior parte delle persone usano C++ talmente male che sarebbe meglio che usassero altro. :)
-enrico
fibs = 0 : 1: [ a + b | (a, b) <- zip fibs (tail fibs) ]


Akropolix: Community OFF-TOPIC di IKSnet
http://www.akropolix.net/forum

"se do da mangiare a un affamato mi dicono che sono un santo, se mi chiedo perch? ? affamato mi dicono che sono un comunista" (Helder C?mara, Arcivescovo di Recife)
Avatar utente
riko

Supremo
 
Messaggi: 3329
Iscritto il: gio mar 04, 2004 4:28 pm
Località: Chiba City

Re: Consiglio per libri sul C.

Messaggioda MazinKaesar » ven nov 09, 2007 9:06 pm

riko ha scritto:Il K&R è oltre che un classico un libro in cui ti insegnano il C. In teoria lo potrebbe usare un principiante assoluto del linguaggio (che sarebbe meglio comunque che avesse un minimo di esperienza di programmazione, quando ti spiegano come è il for, per dire, ti spiegano come è il for in C, non ti fanno un pistolotto in cui ti insegnano i cicli etc etc etc come si fa quando vuoi *anche* insegnare a programmare).


Quoto, cmq il K&R è meglio leggerlo dopo qualcghe altre testo più... di base. Figurati molti miei colleghi al tempo erano convinti che non servisse a nulla ... :riflette:

Non a caso il K&R è costantemente nella mia libreria.


Figurati nella mia, sia a casa che in ufficio :ammicca:
Immagine Immagine
Immagine Immagine
Immagine Immagine
Avatar utente
MazinKaesar

Supporter!!
 
Messaggi: 4053
Iscritto il: sab set 18, 2004 8:43 pm
Località: Modena

Messaggioda AmigaCori » dom nov 11, 2007 8:34 pm

Admin. di NSA www.NonSoloAmiga.com
Twitter: https://twitter.com/NonSoloAmiga
Facebook: http://www.facebook.com/NonSoloAmiga
Gruppo FB: http://www.facebook.com/groups/NonSoloAmiga/
Youube: http://www.youtube.com/user/NonSoloAmiga
AmigaCori

Supremo
 
Messaggi: 4527
Iscritto il: gio feb 26, 2004 4:48 pm

Messaggioda NubeCheCorre » dom nov 11, 2007 9:18 pm

Ma il libro che hai te ha la copertina blu ? se si anche io ho quel libro e mi son trovato molto bene :felice:

Ho imparato il C con quello e con Amiga os.. sai io trovo il C ed amiga os molto complementari ed alcuni aspetti del C li ho capiti proprio programmando su amiga os..

Claudio ne sa qualcosa :scherza:

Cmq l' unico consiglio che posso darti e' che non basta spararsi un libro di C in sola teoria devi anche fare e non preoccuparti se alcuni concetti subito non ti appariranno chiari lo saranno con il tempo e la pratica :felice:

Ovviamente io parlo per me in quanto questa e' la mia piccola esperienza ma credo che gli altri possano confermare :felice:
W il Veneto :ride:
Avatar utente
NubeCheCorre

Leggenda
 
Messaggi: 10624
Iscritto il: dom set 21, 2003 9:21 pm
Località: San remo

Messaggioda AmigaCori » dom nov 11, 2007 10:08 pm

@NubeCheCorre

Ti riferisci al Deitel?, se e' cosi' il mio e' blu/azzurro con in copertina due formiche sui binari...
Admin. di NSA www.NonSoloAmiga.com
Twitter: https://twitter.com/NonSoloAmiga
Facebook: http://www.facebook.com/NonSoloAmiga
Gruppo FB: http://www.facebook.com/groups/NonSoloAmiga/
Youube: http://www.youtube.com/user/NonSoloAmiga
AmigaCori

Supremo
 
Messaggi: 4527
Iscritto il: gio feb 26, 2004 4:48 pm

Messaggioda riko » lun nov 12, 2007 12:23 am

AmigaCori ha scritto:E' questo il K&R?
http://www.hoepli.it/libro.asp?ty=&id=4 ... 2002&mcs=0
Grazie
:felice:


È quello. io suggerisco *sempre* le edizioni ammeregane, ma per completezza ti avverto che c'è anche in Italiano. Se vuoi prenderlo USA, puoi provare a vedere sull'usato. IMHO su Amazon potrebbero tirartene dietro.
-enrico
fibs = 0 : 1: [ a + b | (a, b) <- zip fibs (tail fibs) ]


Akropolix: Community OFF-TOPIC di IKSnet
http://www.akropolix.net/forum

"se do da mangiare a un affamato mi dicono che sono un santo, se mi chiedo perch? ? affamato mi dicono che sono un comunista" (Helder C?mara, Arcivescovo di Recife)
Avatar utente
riko

Supremo
 
Messaggi: 3329
Iscritto il: gio mar 04, 2004 4:28 pm
Località: Chiba City

Messaggioda AmigaCori » lun nov 12, 2007 2:34 am

riko ha scritto:
AmigaCori ha scritto:E' questo il K&R?
http://www.hoepli.it/libro.asp?ty=&id=4 ... 2002&mcs=0
Grazie
:felice:


È quello. io suggerisco *sempre* le edizioni ammeregane, ma per completezza ti avverto che c'è anche in Italiano. Se vuoi prenderlo USA, puoi provare a vedere sull'usato. IMHO su Amazon potrebbero tirartene dietro.


:annu: http://www.amazon.com/C-Programming-Lan ... 147&sr=1-1
Admin. di NSA www.NonSoloAmiga.com
Twitter: https://twitter.com/NonSoloAmiga
Facebook: http://www.facebook.com/NonSoloAmiga
Gruppo FB: http://www.facebook.com/groups/NonSoloAmiga/
Youube: http://www.youtube.com/user/NonSoloAmiga
AmigaCori

Supremo
 
Messaggi: 4527
Iscritto il: gio feb 26, 2004 4:48 pm

Messaggioda riko » mar nov 13, 2007 9:31 am

I terzi di questa lista spediscono anche in Italia:
http://www.amazon.com/gp/offer-listing/ ... ref=lp_g_1

Ma non hai abbastaza risparmio. 18 $ sono poco più di 10 €, ma se aggiungi le spedizioni li vai a pagare troppo.

Mi aspettavo che essendo un libro vecchiotto si trovassero anche gente che lo vendeva a 5 $. Io qualche libro a quelle condizioni lo ho preso. Tipo la prima edizione di Unix Network Programming a tipo 10 $.
-enrico
fibs = 0 : 1: [ a + b | (a, b) <- zip fibs (tail fibs) ]


Akropolix: Community OFF-TOPIC di IKSnet
http://www.akropolix.net/forum

"se do da mangiare a un affamato mi dicono che sono un santo, se mi chiedo perch? ? affamato mi dicono che sono un comunista" (Helder C?mara, Arcivescovo di Recife)
Avatar utente
riko

Supremo
 
Messaggi: 3329
Iscritto il: gio mar 04, 2004 4:28 pm
Località: Chiba City

Messaggioda MazinKaesar » mar nov 13, 2007 10:18 am

All'epoca la Jackon libri pubblicò un altro interessante libro che riportava tutta la standard library del C, e che aveva la copertina simile a quella della loro edizione del K&R. Lo trovai a CT in una bancherella ma non lo potei prendere perchè avevo in tasca solo 10.000 lire per tornare a casa. Che palle la vita da studente squattrinato :riflette:

http://www.libreriauniversitaria.it/standard-c-library-usare-tutte/libro/9788825604818

Immagine
Immagine Immagine
Immagine Immagine
Immagine Immagine
Avatar utente
MazinKaesar

Supporter!!
 
Messaggi: 4053
Iscritto il: sab set 18, 2004 8:43 pm
Località: Modena

Prossimo

Torna a Tecnologia, internet, coding

Chi c’è in linea

Visitano il forum: Nessuno e 2 ospiti