Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2010
    Messaggi
    35

    [C++] Problema su due esercizi

    Ragazzi, avrei bisogno di aiuto per la risoluzionde di questi esercizi di C++

    1) Scrivere una funzione che inverta gli elementi di un array che contiene valori a virgola mobile.

    void reverse (double a[], int a_size)

    Per scorrere gli elementi dell'array la funzione deve utilizzare due variabili puntatore e non contatori interi.

    2) Scrivere la funzione mostrata di seguito.

    void reverse (char s[])

    Questa funzione inverte una stringa di caratteri. Per sempio "Harry" diventa "yrraH".


    1) Per quanto riguarda il primo esercizio ho scritto la funzione in questo modo:

    codice:
    void reverse (double a[], int a_size)
    
    {
    
        int size = a_size;
        for (int i = 0; i < a_size/2; i++)
    
        {
            double temp = *(a+i);
            *(a+i) = a[size-i-1];
            a[size-i-1] = temp;
    
        }

    Però come potete vedere è senza variabili puntatore che sinceramente non ho capito come vanno utilizzate in questo contesto. Come andrebbe scritta la funzione con le variabili puntatore?

    2) Il secondo esercizio invece non ho proprio idea di come risolverlo. Potete aiutarmi?

  2. #2
    Utente di HTML.it L'avatar di linoma
    Registrato dal
    Mar 2010
    Messaggi
    1,346
    Usi due puntatori a double inzializzati uno all'inizio del vettore ed uno alla fine.
    Il primo lo incrementi ed il secondo lo decrementi ad ogni step.
    Per gli Spartani e Sparta usa spartan Il mio github

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2010
    Messaggi
    35
    Potresti per favore scrivermi la funzione con i due puntatori?

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    E non potresti tentare di scriverla tu in base al suggerimento ottenuto?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it
    Registrato dal
    Jun 2010
    Messaggi
    35
    E non potresti tentare di scriverla tu in base al suggerimento ottenuto?
    Ma non ho capito come si scrive... Comunque inizializzando i due puntatoti uno all'inizio e uno alla fine ho:

    double *first = a;
    double *last = (a+(size-1));

    Incrementando e decrementando:

    first = (a+i);
    last = (a+(size-1-i));

    Però non riesco a scrivere la funzione che scorra l'array con questi due puntatori, per favore potete aiutarmi?

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Per incrementare e decrementare i puntatori puoi scrivere

    first++;

    last--;

    A questo punto

    1) imposta un ciclo che termina quando first diventa > di last
    2) al suo interno
    ....a) scambi gli elementi puntati da first e last
    ....b) incrementi first e decrementi last
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Utente di HTML.it
    Registrato dal
    Jun 2010
    Messaggi
    35
    Ok, ho provato a scrivere la funzione, ma non funziona, ovvero dopo aver applicato questa funzione all'array, gli elementi dell'array non vengono cambiati di posto... Dove ho sbagliato?


    codice:
    void reverse (double a[], int a_size)
    
    {
    
        int size = a_size;
        double *first = a;
        double *last = (a+(size-1));
        while (first < last)
    
        {
            double *temp = first;
            first = (a+(size-1));
            last = temp;
    
            size--;
            first++;
            last--;
    
        }
    
    }

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Ma tu sai usare i puntatori, in generale, a prescindere dall'esercizio?

    Esamina, in particolare, questa riga ...

    double *temp = first;

    volevi ottenere il valore dell'array, a partire dal puntatore, e inserirlo nella variabile temp ... cosa c'è di sbagliato?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    Utente di HTML.it
    Registrato dal
    Jun 2010
    Messaggi
    35
    Ma tu sai usare i puntatori, in generale, a prescindere dall'esercizio? Esamina, in particolare, questa riga ... double *temp = first; volevi ottenere il valore dell'array, a partire dal puntatore, e inserirlo nella variabile temp ... cosa c'è di sbagliato?
    Sinceramente non li so usare molto bene, visto che non ho ben capito come funzionano dal punto di vista pratico... Sono al primo anno di ingegneria e tra qualche giorno ho l'esame di informatica, le altre cose le so abbastanza bene, ma i puntatori mi risultano molto ostici, quindi se gentilmente potete darmi una mano, ve ne sarei molto grato

    Analizzando la riga:

    double *temp = first;

    Così facendo ottengo il valore dell'indirizzo e non il valore dell'array, quindi all'interno della variabile puntatore temp sarà memorizzato il valore della variabile puntatore first, ovvero un indirizzo di memoria, dico bene?

  10. #10
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Originariamente inviato da ireon
    Sinceramente non li so usare molto bene ...
    Questo è un problema (per te) dato che nell'esame i puntatori saranno sicuramente un argomento trattato ed è importante dimostrare di saperli utilizzare.

    double *temp = first;

    Così facendo ottengo il valore dell'indirizzo e non il valore dell'array, quindi all'interno della variabile puntatore temp sarà memorizzato il valore della variabile puntatore first, ovvero un indirizzo di memoria, dico bene?
    Sì ... quindi non è quello che ti serve.

    Tu devi ottenere il valore double puntato da first, ovvero

    double temp = *first;

    Modifica la restante parte del ciclo di conseguenza, tenendo presente che i due puntatori (first e last) ti sono sufficienti e che non è necessaria la variabile size ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.