Puntatori

di Anonimizzato27769 il
11 risposte
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

  • Edit, aggiorno il thread per future visite.
  • 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.
  • 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.
  • 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 .
  • 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.
  • "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.
  • Comparison between pointer and integer|
  • Risolto, per accedere al valore dentro al pointer devo usare la stella.
  • Quindi stai confrontando un valore intero e un puntatore ... ovviamente un errore grave.
  • #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;
    }
  • Ma che stella ... è un asterisco e si chiama in questo caso "operatore di dereferenziazione "
Devi accedere o registrarti per scrivere nel forum
11 risposte