giovedì 10 novembre 2011

Testo esercitazione 6

Disponibile il testo dell'esercitazione 6 relativa ai puntatori.

5 commenti:

  1. Questo commento è stato eliminato dall'autore.

    RispondiElimina
  2. Salve prof.
    Nell'esercizio sull'inversione della stringa(num.5) non capisco in che modo utilizzare i puntatori per invertire le lettere.
    avevo pensato a tale soluzione senza puntatori:

    void inversion(char *s)
    {
    int i=0,j=0;
    char c;
    while(s[i] !='\0'){
    i++;
    }
    --i;
    int temp=(int) i/2;//il num delle inversioni corrispnde alla metà della grandezza per difetto
    for(int j=0;j<temp;j++)
    {
    c=s[i-j];
    s[i-j]=s[j];
    s[j]=c;
    }

    }

    RispondiElimina
  3. In pratica invece degli indici devi utilizzare dei puntatori per spostarti all'interno della stringa. Ad esempio nella prima parte del codice, quella in cui calcoli la i di fine stringa puoi usare un char* p inizializzato a s e con una while(*p != '\0') p++; ti posizioni a fine stringa.
    Per fare l'inversione potresti far scorrere s in avanti e p indietro finche' non si incontrano e scambiare ogni volta gli elementi.

    RispondiElimina
  4. Questo è il codice non funzionante dell'esercizio 5 di cui le parlavo oggi pomeriggio:

    #include

    using std::cout;
    using std::cin;
    using std::endl;

    void inverti(char*, int);

    int main() {
    const int max = 50;
    char s[max];
    cout << "Inserisci una stringa: ";
    cin >> s;

    int dim = 0;
    while(s[dim] != 0)
    ++dim;

    inverti(s, dim);
    cout << s << endl;

    system("PAUSE");
    return 0;
    }

    void inverti(char*s, int dim) {
    char tmp;
    char* p;
    p = s;
    for(int i=dim-1, j=0; i != j; i--, j++) {
    tmp = s[j];
    s[j] = *(p+i);
    *(p+i) = tmp;
    }
    return;
    }

    RispondiElimina
  5. Il problema e' che a seconda se la parola da invertire sia di lunghezza pari o dispari la tua condizione del for rischia di essere sempre vera. Puo' infatti capitare che i e j si "incrociano" senza essere mai uguali (ad esempio se i=3 e j=2 al giro successivo avrai i=2 e j=3) e quindi il for continua e fa andare in crash il programma).

    RispondiElimina