Puntatori

di il
11 risposte

Puntatori

Traccia : restituisci 0 se l'ordine non e' crescente, viceversa 1.
#include <stdio.h>
#include <stdlib.h>
int Num_vettore(int * );
int Ordinatore(int *,int *);
int main()
{
    int vettore[]={1,2,3,4,5,6,7,0},risultato=0,dim=0,*puntatore_vettore=&vettore[0],*puntatore_dim=&dim;
    dim=Num_vettore(puntatore_vettore);
    printf("%d\n",dim);
    risultato=Ordinatore(puntatore_vettore,puntatore_dim);
    printf("%d\n",risultato);
    return 0;
}
int Num_vettore(int *vettore)
{
    int dim=0;
    for (int i=0;i<1;)
    {
        if(vettore[dim]!='\0')
        {
            dim++;
        }
        else
        {
            i++;
        }
    }
    return dim;
}
int Ordinatore(int *vettore,int *dim)
{

    for(int i=0;i<(dim-1);i++)
    {
        if(vettore[i]<=vettore[i+1])
        {
            if(i==(dim-2))
            {
                return 1;
            }
        }
        else
        {
            if(vettore[i]>vettore[i+1])
            {
                return 0;
                break;
            }
        }
    }
}
1)Posso dichiarare un puntatore vettore cosi:
int Num_vettore(int * );//si
int Ordinatore(int *,int *);//si
oppure
int Num_vettore(int *[] );//no
int Ordinatore(int *[],int *)//no
2)Ho le stesse prestazioni se uso la variabile al posto del puntatore ? - ottenendo lo stesso risultato ?
dim=Num_vettore(puntatore_vettore);
risultato=Ordinatore(puntatore_vettore,puntatore_dim);
3)Si dichiara cosi' il puntatore di un vettore.
int vettore[]={1,2,3,4,5,6,7,0},risultato=0,dim=0,*puntatore_vettore=&vettore[0],*puntatore_dim=&dim;
3)la dichiarazione e' corretta.
4)Qui posso usarlo cosi' oppure devo utilizzarlo come *(vettore +i)
if(vettore[dim]!='\0')
5)Poi perche' sono costretto a mettere lo 0 per terminare? - non dovrebbe assegnare 0 ai prossimi valori ?
int vettore[]={1,2,3,4,5,6,7,0}
5)[forse risolto] il vettore assegna soltanto i valori, per azzerarlo bisogna dichiararlo con
int vettore[]={}
per poi assegnarci un valore.
e' un po' ostico come argomento, ma mi ci devo soffermare per apprendere al meglio il suo potenziale.
Il libro lo tratta come un argomento un po' di nicchia, quindi non si sofferma molto.

11 Risposte

  • Re: Puntatori

    Edit, aggiorno il thread per future visite.
  • Re: Puntatori

    Il codice che hai postato presenta numerosi problemi, in ogni caso l'esercizio può essere risolto molto semplicemente:
    #include <stdio.h>
    
    #define DIM 7
    
    int fun(int *v, int dim)
    {
        for(unsigned int i = 0; i < dim - 1; ++i)
        {
            if(v[i] > v[i + 1])
            {
                return 0;
            }
        }
        return 1;
    }
    
    int main()
    {
        int v[DIM] = {1, 2, 3, 4, 5, 6, 7};
        printf("%d\n", fun(v, DIM));
        return 0;
    }
    Per quanto riguarda invece le varie domande che hai esposto, sinceramente ci ho capito ben poco... il mio consiglio è quello di riformulare le domande in modo più chiaro e preciso soffermandoti su un dubbio alla volta.
  • Re: Puntatori

    Una gran confusione. Questo perché in un thread si fa una domanda, non mille.

    Intanto il primo codice che hai mostrato non è compilabile perchè

    1) for (int i = 0; i<(dim - 1); i++)

    2) if (i == (dim - 2))

    sono scritte in maniera sbagliata.

    Per non parlare del fatto (assurdo) che c'è un break dopo un return e che non tutti i rami della funzione Ordinatore restituiscono un valore.
  • Re: Puntatori

    Nippolo ha scritto:


    Il codice che hai postato presenta numerosi problemi, in ogni caso l'esercizio può essere risolto molto semplicemente:
    #include <stdio.h>
    
    #define DIM 7
    
    int fun(int *v, int dim)
    {
        for(unsigned int i = 0; i < dim - 1; ++i)
        {
            if(v[i] > v[i + 1])
            {
                return 0;
            }
        }
        return 1;
    }
    
    int main()
    {
        int v[DIM] = {1, 2, 3, 4, 5, 6, 7};
        printf("%d\n", fun(v, DIM));
        return 0;
    }
    Per quanto riguarda invece le varie domande che hai esposto, sinceramente ci ho capito ben poco... il mio consiglio è quello di riformulare le domande in modo più chiaro e preciso soffermandoti su un dubbio alla volta.
    Hai risolto a tutti i problemi .
  • Re: Puntatori

    oregon ha scritto:


    Una gran confusione. Questo perché in un thread si fa una domanda, non mille.

    Intanto il primo codice che hai mostrato non è compilabile perchè

    1) for (int i = 0; i<(dim - 1); i++)

    2) if (i == (dim - 2))

    sono scritte in maniera sbagliata.

    Per non parlare del fatto (assurdo) che c'è un break dopo un return e che non tutti i rami della funzione Ordinatore restituiscono un valore.
    vanno messi senza parentesi vero ?
    il libro non e' il massimo, non parlava che un return chiude la funzione restituendo un valore.
  • Re: Puntatori

    "Hai risolto a tutti i problemi" ? E che lingua è ?
    vanno messi senza parentesi vero ?
    No. Lo hai letto l'errore che ti dà il compilatore?

    Il libro non ti dice cosa fa il return? Ci credo poco ... e comunque tu non l'hai capito se scrivi altre istruzioni subito dopo.
    Altro che puntatori, sei ancora alle basi.
  • Re: Puntatori

    Comparison between pointer and integer|
  • Re: Puntatori

    Risolto, per accedere al valore dentro al pointer devo usare la stella.
  • Re: Puntatori

    Quindi stai confrontando un valore intero e un puntatore ... ovviamente un errore grave.
  • Re: Puntatori

    #include <stdio.h>
    #include <stdlib.h>
    int Num_vettore(int * );
    int Ordinatore(int *,int *);
    int main()
    {
        int vettore[]={1,2,3,4,5,6,7,8,0},risultato=0,dim=0,*puntatore_vettore=&vettore[0],*puntatore_dim=&dim;
        *puntatore_dim=Num_vettore(puntatore_vettore);
        printf("%d\n",dim);
        risultato=Ordinatore(puntatore_vettore,puntatore_dim);
        printf("%d\n",risultato);
        return 0;
    }
    int Num_vettore(int *vettore)
    {
        int dim=0;
        for (int i=0;i<1;)
        {
            if(vettore[dim]!='\0')
            {
                dim++;
            }
            else
            {
                i++;
            }
        }
        return dim;
    }
    int Ordinatore(int *vettore,int *dim)
    {
    
        for(int i=0;i<*dim-1;i++)
        {
            if(vettore[i]>=vettore[i+1])
            {
                return 0;
            }
        }
        return 1;
    }
  • Re: Puntatori

    Ma che stella ... è un asterisco e si chiama in questo caso "operatore di dereferenziazione "
Devi accedere o registrarti per scrivere nel forum
11 risposte