Pagina 1 di 2 12 UltimaUltima
Risultati da 1 a 10 di 12
  1. #1

    GBA Corso base Linguaggio C: 1° lezione

    Il C è un linguaggio di programmazione procedurale, a differenza dei linguaggi moderni che si basano sulla cosiddetta "programmazione ad oggetti". Viene definito procedurale in quanto un programma scritto in questo linguaggio è composto da istruzioni e strutture dati eseguite sequenzialmente l'una dopo l'altra, fatta eccezione per le funzioni che sono blocchi di codice indipendente richiamati dall'interno del programma stesso. Per quanto riguarda le funzioni approfondiremo il loro significato e la loro implementazione in una successiva lezione.
    La differenza tra linguaggio procedurale e linguaggio ad oggetti sta nell'approccio con cui il programmatore si accinge a scrivere il software.

    La programmazione procedurale richiede di concentrare l'attenzione sullo sviluppo e la risoluzione algoritmica di un determinato problema. Nel caso del C è indispensabile (chiaramente si sta parlando di programmi di un certo livello) conoscere a fondo la macchina su cui si lavora per poterla sfruttare al meglio.Inoltre chi programma con questa tecnica cerca di risolvere il problema affidatogli attraverso l'uso di comandi che istruiscano la macchina a compiere quello di cui il programmatore ha bisogno.
    La programmazione ad oggetti, invece, è molto più vicina al modo di pensare umano, in quanto ci si concentra sugli oggetti e sugli elementi di cui si ha bisogno per risolvere il problema e si trova il modo di farli cooperare insieme fino ad arrivare alla soluzione del problema. Anche se inizialmente vi è una notevole difficoltà a crearsi una mentalità orientata agli oggetti, una volta acquisita risulta molto più semplice utilizzare un approccio di questo tipo. E allora sorge spontaneamente una domanda: perchè con linguaggi potenti come ad esempio Visual Basic, Java, i linguaggi del framework .NET bisogna ostinarsi ad imparare il C?
    Vi elenco soltanto alcune delle risposte che possono essere date a questa domanda:

    1) Il C permette un approccio diretto all'hardware della macchina (ed è per questo che viene definito linguaggio di medio livello), quindi, ad esempio, se si vuole programmare un driver di periferica è indispensabile utilizzare il C
    2) Il C permette di avere programmi eseguibili molto più snelli e veloci dei corrispondenti programmi scritti con linguaggi ad alto livello. Questo perchè i compilatori C evitano di inserire istruzioni di controllo, ad esempio, sulla memoria.
    3) Se si vuole conoscere davvero come funziona una macchina è INDISPENSABILE saper programmare correttamente in C in quanto i linguaggi ad alto livello non chiariscono (anzi nascondono) assolutamente come avviene l'accesso alla memoria

    Non preoccupatevi se non capite molte delle terminologie utilizzate in questi primi incontri...verrà tutto spiegato ampliamente nel corso delle varie lezioni. Se invece non riuscite a trattenere la curiosità...chiedete pure all'interno del forum!

    Dopo questa prima breve presentazione vediamo come viene strutturato un programma in linguaggio C. Gli esempi che faremo saranno tutti brevi e semplici; questo per far capire meglio il tutto. Tutti i concetti che andremo ad esporre, comunque, sono validi ed applicabili anche a programmi ben più complessi!

    Ogni programma C è rappresentato da una o più funzioni contenenti del codice.
    Per il momento vi basti pensare che una funzione è come già detto un insieme di istruzioni che vengono eseguite in sequenza (un istruzione alla volta) finchè non viene richiamata un'altra funzione. A quel punto viene eseguito il codice contenuto nella funzione chiamata ed una volta che il codice è stato eseguito interamente si torna al punto in cui ci si era fermati (nella prima funzione) e si continua da lì ad eseguire il codice. Come avvengono questi passaggi lo vedremo meglio quando parleremo delle funzioni.
    Un programma C deve essere quindi composto da almeno una funzione. Un'altra condizione importante è che ci sia almeno una funzione che si chiami "main". Questo perchè il linker quando andrà ad assemblare il codice sorgente cercherà come prima cosa questa funzione (che sarà la prima ad essere inserita nel codice binario eseguibile) e se non la troverà segnalerà un errore.

    Vediamo un primo esempio di programma C che stampi a video la frase conosciutissima nel mondo della programmazione "Ciao mondo!"

    -----------------------------------------------------------------------
    #include <stdio.h>

    int main(int argc, char *argv[]) {
    printf("Ciao mondo!\n");

    return 0;
    }

    Vediamo di dare una breve descrizione (anche se non esauriente) al programma:

    #include <stdio.h>
    -->Questa istruzione permette di inserire (includere) all'interno del nostro programma il codice contenuto all'interno della libreria "stdio.h".
    A cosa serva questo lo vedremo nelle prossime lezioni

    int main(int argc, char *argv[]) {
    -->Abbiamo definito la funzione principale che conterrà il nostro programma. La sintassi verrà spiegata più avanti nel corso. Per ora va detto che ogni funzione ha un nome (in questo caso main) e che il codice della funzione deve essere delimitato dalle parentesi graffe

    printf("Ciao mondo!\n");
    return 0;
    }
    -->Questo è il codice della funzione main. La parentesi graffa alla fine sta ad indicare che lì finisce la funzione. Il codice presenta solo 2 istruzioni: con printf stampiamo a video un messaggio mentre con return diciamo che vogliamo uscire dalla funzione restituendo un parametro (in questo caso 0)
    ---------------------------------------------------------------------------
    Questo semplicissimo programma può essere scritto con qualsiasi compilatore C in quanto la sua sintassi risulta essere pienamente supportata dall'ANSI C.
    Quest'ultimo è uno standard su cui si basa l'attuale linguaggio C. Questo significa che tutte le istruzioni, le strutture dati e le librerie contenute in questo standard sono correttamente interpretate da tutti i compilatori in commercio. Esistono invece librerie e strutture dati che possono venire compilate solamente con determinati compilatori. Un esempio è la libreria <conio.h> presente nel compilatore Borland che presenta funzioni riconosciute solo da quest'ultimo.

    Per questa prima lezione è tutto. La prossima volta vedremo come compilare il codice presentato utilizzando vari compilatori ed inoltre spiegheremo il significato delle istruzioni esposte

  2. #2
    Senior Member L'avatar di eXavo
    Data Registrazione
    Wed Nov 2006
    Località
    Napoli
    Messaggi
    249

    Predefinito

    keeeeeeee?
    ther will be forever a door to the light you've only to find it
    I'm on the highway to hell!!!! don't stop me

  3. #3

    Predefinito

    Citazione Originariamente Scritto da eXavo Visualizza Messaggio
    keeeeeeee?
    Cosa intendi con keeeeee?

  4. #4
    Senior Member L'avatar di eXavo
    Data Registrazione
    Wed Nov 2006
    Località
    Napoli
    Messaggi
    249

    Predefinito

    ke nn ho capito neanke una parola ...nn CAPISCO UNA MAZZA DI QUESTA ROBA DI PROGRAMMAZIONE ecc. ne capir&#242; mai qualkosa quindi nn farti problemi se io nn capisco...
    ther will be forever a door to the light you've only to find it
    I'm on the highway to hell!!!! don't stop me

  5. #5

    Predefinito

    Citazione Originariamente Scritto da eXavo Visualizza Messaggio
    ke nn ho capito neanke una parola ...nn CAPISCO UNA MAZZA DI QUESTA ROBA DI PROGRAMMAZIONE ecc. ne capirò mai qualkosa quindi nn farti problemi se io nn capisco...
    E perchè non dovrei farmi problemi? Se è una cosa che non ti interessa ok, ma se ti piacerebbe imparare a programmare io insieme agli altri mod siamo qui apposta!
    D'altronde il corso base è fatto per chi parte da zero, non certo per chi ha già esperienza in questo settore!
    Basta che mi dici cosa non hai capito e vedrò di spiegartelo diversamente.

  6. #6
    Senior Member L'avatar di eXavo
    Data Registrazione
    Wed Nov 2006
    Località
    Napoli
    Messaggi
    249

    Predefinito

    precisamente a ke serve il linguaggio c?????a programmare cosa???
    ther will be forever a door to the light you've only to find it
    I'm on the highway to hell!!!! don't stop me

  7. #7

    Predefinito

    Citazione Originariamente Scritto da eXavo Visualizza Messaggio
    precisamente a ke serve il linguaggio c?????a programmare cosa???
    Questa è una delle domande che si fanno praticamente tutti coloro che sono all'inizio. Ho cercato di dare una breve risposta direttamente nella prima lezione:

    1) Il C permette un approccio diretto all'hardware della macchina (ed è per questo che viene definito linguaggio di medio livello), quindi, ad esempio, se si vuole programmare un driver di periferica è indispensabile utilizzare il C
    2) Il C permette di avere programmi eseguibili molto più snelli e veloci dei corrispondenti programmi scritti con linguaggi ad alto livello. Questo perchè i compilatori C evitano di inserire istruzioni di controllo, ad esempio, sulla memoria.
    3) Se si vuole conoscere davvero come funziona una macchina è INDISPENSABILE saper programmare correttamente in C in quanto i linguaggi ad alto livello non chiariscono (anzi nascondono) assolutamente come avviene l'accesso alla memoria
    Cercherò di essere più chiara.
    Se hai bisogno di programmare un driver di periferica come ad esempio realizzare un driver per la scheda video non puoi utilizzare linguaggi quali Visual Basic o Java....questo perchè questi linguaggi ti limitano molto l'accesso diretto alla risorsa hardware...quindi per la programmazione di driver si usa solitamente il C. Per cercare di farti comprendere meglio questo discorso ti porto l'esempio della porta parallela.
    Se in Visual Basic vuoi fare un programma che invii sulla porta parallela un determinato segnale, non puoi farlo in quanto il sistema operativo (Windows) non ti permette di usarla direttamente. L'unico modo, in questo caso, è scriversi un programma in grado di scendere al livello più basso del sistema operativo e poter operare direttamente sull'hardware. Il C come linguaggio ti permette di fare questo.

    Questo era solo un esempio, ma ce ne potrebbero essere molti altri.
    Inoltre come detto prima se non conosci il C non puoi capire completamente come funziona un programma. I linguaggi ad alto livello usano molto i puntatori...è solo che per semplificare la vita al programmatore, ne rendono l'uso trasparente. Per farti un esempio, quando in Java dichiari un oggetto, in realtà stai usando un puntatore (anche se per certi versi la definizione non è propriamente questa) anche se non te ne rendi conto perchè per te un oggetto è solamente un qualcosa che ti permette di eseguire determinate azioni all'interno di un contesto.
    Puoi programmare in Java senza sapere come è organizzata la memoria, come funziona uno stack, come avviene un indirizzamento, cosa sia un buffer overflow, etc.. ma non sarai mai un programmatore completo se non conosci anche cosa avviene dietro le quinte. E per saperlo devi imparare il C.

    Spero di essere stata un po' più chiara questa volta...chiaramente spiegare in un post perchè è necessario imparare il C non è possibile....il discorso sarebbe troppo lungo. Spero però che con queste poche righe ti abbia almeno un po' incuriosito e che mi seguirai in quello che sarà il coso futuro di C

  8. #8
    The Cadarn L'avatar di Derfel
    Data Registrazione
    Sun Jan 2005
    Località
    Ferrara
    Messaggi
    6,212

    Predefinito

    Cerchiamo di essere partecipi SE siamo interessati, non sentiamo l'esigenza di postare se non ne avete bisogno.

  9. #9
    *spallucce* L'avatar di Naked
    Data Registrazione
    Tue Mar 2005
    Località
    Milano | Caltanissetta
    Messaggi
    4,227

    Predefinito

    Salve a tutti Io sono interessato e desideroso di apprendere
    Ho gi&#224; iniziato col C proprio qualche giorno fa ma so fare ancora poco , ovvero la funzione scanf, if else, e ora la while. Solo che riguardo quest'ultima ho delle perplessit&#224;

    Per ora seguo delle "lezioni per corrispondenza" con mio cugino (sta a Genova ) e devo dire che lo stile delle spiegazioni &#232; lo stesso (sono rimasto sconvolto dalla frase "Ciao mondo!" che &#232; la stessa che mi aveva detto lui ) solo che &#232; impegnato e mi dedica poco tempo. Quindi pensavo di frequentare anche questo corso visto che ho trovato le vostre spiegazioni estremamente chiare .

    Prima domanda: se abbiamo domande le postiamo direttamente in questo topic unico vero? O richieste. Ad esempio io avrei la richiesta che mi spiegaste meglio il while (cio&#232; so a cosa serve, per&#242; a metterlo in pratica ho qualche difficolt&#224.

    Thanks!
    ~Pray, saviour\Dream, Child of Prayer\Forever and ever\Bring us peace~



  10. #10

    Predefinito

    Citazione Originariamente Scritto da Naked Visualizza Messaggio
    Prima domanda: se abbiamo domande le postiamo direttamente in questo topic unico vero? O richieste.
    Ciao Naked, la sezione &#232; (o perlomeno stiamo cercando di farla in questo modo) organizzata cos&#236;: per tutte le domande o richieste riguardanti una determinata lezione puoi postarle direttamente nel topic della lezione stessa. Per il resto apri pure un nuovo post dove esponi il tuo problema e noi ti risponderemo direttamente l&#236;!

    Ad esempio io avrei la richiesta che mi spiegaste meglio il while (cio&#232; so a cosa serve, per&#242; a metterlo in pratica ho qualche difficolt&#224.

    Thanks!
    Visto che ormai la domanda l'hai fatta ti d&#242; una breve spiegazione riguardo il while. Tieni presente che verr&#224; comunque trattato + avanti quando parleremo delle strutture di controllo.
    Il "while" viene utilizzato per eseguire un determinato codice n volte. Per farti un esempio: se volessimo stampare 10 volte la frase "Ciao mondo!" &#232; inutile scrivere per 10 volte il comando "printf("Ciao mondo!\n");"...questo risulterebbe corretto da un punto di vista logico/sintattico, ma sicuramente scorretto da un punto di vista strutturale del programma. Una scrittura del genere &#232; molto + semplificata se l'istruzione printf viene inclusa in una struttura while, per esempio cos&#236;:

    int i = 0;
    while(i < 10) {
    printf("Ciao mondo!");

    i++;
    }

    Il while esegue un controllo sulla condizione posta all'interno delle parentesi tonde, ogni volta prima di eseguire il codice contenuto tra le parentesi graffe.
    FINCHE' la condizione risulta essere vera il codice viene eseguita...nel momento in cui il controllo dovesse dare come risultato "false" il codice viene ignorato e si passa a tutto ci&#242; che viene dopo la parentesi graffa chiusa.

    Un altro esempio &#232; il seguente:

    #include <stdio.h>

    int main(int argc, char *argv[]) {
    char nomi[] = {"Aldo","Giovanni","Giacomo"};
    int i = 0;

    while(i < 3) {
    printf("Il nome e': %s\n",nomi[i]);

    i++;
    }

    return 0;
    }

    Il seguente programma stampa a video tutti e tre i nomi del famoso trio comico.
    I passaggi logici eseguiti dal computer sono i seguenti: quando arriva al while la variabile i vale 0.
    Quindi con il while il PC si chiede: "i &#232; minore di 3? SI perch&#232; vale 0" quindi esegue il codice stampando il nome contenuto alla cella 0 e aumentando di una unit&#224; la variabile i. Ora i vale 1.
    A questo punto il PC si chiede nuovamente: "i &#232; minore di 3? SI perch&#232; vale 1" quindi stampa il secondo nome ed aumenta i di un'altra unit&#224;.E di nuovo a chiedersi:"i &#232; minore di 3? SI perch&#232; vale 2". Stampa il terzo nome ed aumenta nuovamente di una unit&#224;. Infine si chiede: "i &#232; minore di 3? NO perch&#232; i adesso &#232; uguale a 3, non pi&#249; piccolo". Quindi il codice viene ignorato e si prosegue con l'istruzione return 0 che fa terminare (in questo caso) il programma
    Ultima modifica di diana05; 15-11-2006 alle 08:30

Permessi di Scrittura

  • Tu non puoi inviare nuove discussioni
  • Tu non puoi inviare risposte
  • Tu non puoi inviare allegati
  • Tu non puoi modificare i tuoi messaggi
  •