i vettori guida C

imparare il C linguaggio di programmazione

« Older   Newer »
 
  Share  
.
  1. ~Kra†os~
        +1   -1
     
    .

    User deleted


    Oggi vi spiegherò un argomento interessante e abbastanza semplice,i Vettori.

    mi scuso con lo staff del forum se stò spiegando adesso i vettori al posto di andare avanti stò tornando indietro, però dato che non avete postato nulla a proposito ne approfitto :)

    i Vettori non sono indispensabili per studiare il linguaggio C, però è molto importante saperli riconoscere!

    Per prima cosa scriviamo un programma che conta le occorrenze delle diverse cifre, dei caratteri di spaziatura (spazio,
    carattere di tabulazione e new line), e di tutti gli altri caratteri. Questa suddivisione è artificiosa, ma ci
    consente di evidenziare alcune caratteristiche di un programma C.
    Poiché i possibili tipi di input sono dodici, per memorizzare le occorrenze delle dieci cifre useremo un vettore
    (array), anziché dieci variabili distinte. Ecco dunque una versione del programma:

    CODICE
    #include <stdio.h>
    /* conta le cifre, le spaziature e gli altri caratteri */
    main()
    {
    int c, i, nwhite, nother;
    int ndigit[10];
    nwhite=nother=0;
    for (i=0; i<10; ++i)
    ndigit[i]=0;
    while ((c=getchar()) != EOF)
    if (c>=‘0’ && c<=‘9’)
    ++ndigit[c-‘0’];
    else if (c==‘ ‘ || c==‘\n’ || c==‘\t’)
    ++nwhite;
    else
    ++nother;
    printf(“cifre =”);
    for (i=0; i<10; ++i)
    printf(“ %d”, ndigit[i]);
    printf(“, spaziature = %d, altri = %d\n, nwhite, nother);
    }


    L’output di questo programma, eseguito con il suo stesso testo in input, è
    Cifre = 9 3 0 0 0 0 0 0 0 1, spaziature = 123, altri = 345
    La dichiarazione

    int ndigit[10];

    definisce ndigit come un vettore di dieci interi. Poiché, in C, gli indici di un vettore partono sempre da zero,

    gli elementi di ndigit sono ndigit[0], ndigit[1], . . . ., ndigit[9]. Questa proprietà si riflette
    nella struttura dei cicli for che inizializzano e stampano il vettore.

    Un indice può essere una qualsiasi espressione intera e, in quanto tale, può contenere costanti e variabili
    intere come, nel nostro caso, la variabile i.
    Questo particolare programma si basa sulle proprietà di rappresentazione alfanumerica delle cifre. Per esempio, il test

    if (c>=‘0’ && c<=‘9’) ……

    stabilisce se il carattere c è o meno una cifra. Se lo è, il valore numerico di quella cifra è
    c=‘0’
    Questa vale soltanto se ‘0’, ‘1’, . . . ., ‘9’ possiedono valori crescenti e consecutivi. Fortunatamente, ciò è vero per tutti i set di caratteri.

    Per definizione, i char non sono altro che dei piccoli interi; questo comporta che, nelle espressioni aritmetiche, essi siano identici agli int. Una simile convenzione è molto vantaggiosa; per esempio, c-‘0’ è una espressione intera, con un valore compreso fra 0 e 9 corrispondente al carattere da ‘0’ a ‘9’ memorizzato in c: tale valore è, dunque, utilizzabile anche come indice del vettore ndigit.

    L’identificazione della classe di appartenenza del carattere (spaziatura, cifra o altro), viene effettuata con la
    sequenza

    CODICE
    if (c>=‘0’ && c<=‘9’)
    ++ndigit[c-‘0’];
    else if (c==‘ ‘ || c==‘\n’ || c==‘\t’)
    ++nwhite;
    else
    ++nother;
    La struttura
    if (condizione_1)
    istruzione_1
    else if (condizione_2)
    istruzione_2
    .....
    .......
    else
    istruzione_n


    viene utilizzata spesso come mezzo per effettuare una scelta fra più possibilità. A partire dalla prima in alto,
    le diverse condizioni vengono valutate sequenzialmente, fino a che non se ne trovi una vera; a questo punto,
    viene eseguita l’istruzione corrispondente alla condizione vera, dopodiché si esce dall’intera struttura (ogni
    istruzione può essere costituita da più istruzioni racchiuse fra parentesi graffe). Se nessuna delle condizioni
    previste è soddisfatta, l’istruzione eseguita è quella controllata dall’ultimo else, se esiste. Se l’else finale e
    la corrispondente istruzione vengono omessi, come nel programma per il conteggio delle parole, non viene
    eseguita alcuna azione particolare. Il numero dei gruppi
    else if (condizione)
    istruzione
    compresi tra il primo if è l’ultimo else è arbitrario.
    Per motivi di chiarezza, è conveniente rappresentare il costrutto else-if nel modo illustrato dal programma;
    se ogni if fosse indentato rispetto all’else precedente, una lunga sequenza di alternative sconfinerebbe
    oltre il margine destro della pagina.
    L’istruzione switch, fornisce un modo alternativo di realizzare un simile
    costrutto. L’uso di quest’istruzione è particolarmente indicato quando la condizione consiste nel determinare
    se una particolare espressione possiede valori all’interno di un certo insieme di costanti.

    Edited by Mr.we&zio™ - 21/6/2011, 10:44
     
    Top
    .
  2.     +1   -1
     
    .
    Avatar

    Founder Heroes

    Group
    Founder
    Posts
    2,052
    Grazie ricevuti
    +53

    Status
    Anonymous
    devo finire di leggerla, però sembra fatta bene, bravo :)
     
    Top
    .
  3. El Mastino
        +1   -1
     
    .

    User deleted


    complimenti è fatta molto bene...quella che ho seguito io spiegava gli array in modo molto complicato...
     
    Top
    .
  4.     +1   -1
     
    .
    Avatar

    Senior Member

    Group
    Member
    Posts
    10,796
    Grazie ricevuti
    +3

    Status
    Anonymous
    Sinceramente la trovo imprecisa e fatta non molto bene (la guida sarebbe buona, se non fosse copiata e tradotta male). Senza contare il codice copiato.

    E faccio notare che se avessi tradotto meglio (lol) avresti notato che:
    CODICE
    if (c >= '0' && c <= '9')

    determines whether the character in c is a digit.


    Determina se il carattere in c è una cifra. E non come hai scritto tu "stabilisce se il carattere c è una cifra".

    E' stato quindi "tradotto" e scopiazzato tutto da questo pdf: www.nits.ac.in/department/new%20cse.../C_Language.pdf
     
    Top
    .
  5.     +1   -1
     
    .
    Avatar

    Founder Heroes

    Group
    Founder
    Posts
    2,052
    Grazie ricevuti
    +53

    Status
    Anonymous
    Non mi ero accorto della copiatura, verificherò. La guida comunque è accettabile, sono imprecisi invece i codici, c'è qualcosa da correggere
     
    Top
    .
  6. El Mastino
        +1   -1
     
    .

    User deleted


    allora inseriremo la fonte.
     
    Top
    .
  7.     +1   -1
     
    .
    Avatar

    Senior Member

    Group
    Member
    Posts
    10,796
    Grazie ricevuti
    +3

    Status
    Anonymous
    La guida originale è sicuramente accettabile... è di Brian W. Kernighan e Dennis M. Ritchie.
     
    Top
    .
6 replies since 21/6/2011, 09:41   106 views
  Share  
.
Top