Esercizio C

di il
10 risposte

Esercizio C

Ciao a tutti!
Devo fare questo esercizio, ma non so da dove iniziare.
Nel file array.c implementare la definizione della funzione:
extern int *crea_inizializza (unsigned int n, int val); 

La funzione accetta come parametri la dimensione di un vettore di int n e un valore intero val e
deve restituire un puntatore ad un vettore allocato dinamicamente nell’heap, formato da n
elementi in cui il primo vale val, il secondo val-1 e così via. Ad esempio, dati n=5 e val=3, il vettore
conterrà i valori 3, 2, 1, 0, -1.

Il linguaggio da utilizzare è il C, piattaforma windows.
Grazie in anticipo


ho provato a fare questo
#include <stdio.h>
#include <stdlib.h>

extern int *crea_inizializza(unsigned int n, int val); 
extern int *crea_inizializza(unsigned int n, int val)
{
	int vett[n];
	int i;
	int *p;
	p = &vett[0];

	for(i=0; i<n; i++){
		vett[i]= val-i;
	}

	return vett[n];
}
int main(void)
{
	int n = 5;
	int val = 3;

	crea_inizializza(n,val);
}
ma mi dice:
1>Origine.obj : error LNK2019: riferimento al simbolo esterno _crea_inizializza non risolto nella funzione _main
1> fatal error LNK1120: 1 esterni non risolti

10 Risposte

  • Re: Esercizio C

    Intanto devi usare la malloc per allocare il vettore, in quel modo non va affatto bene ...

    Poi la funzione va scritta nel file indicato dall'esercizio come

    int *crea_inizializza(unsigned int n, int val)

    e va compilato un progetto con i due file sorgenti.

    Nel main, potrai provarla con
    
    int *arr;
    
    arr =  crea_inizializza(5, 3);
    
  • Re: Esercizio C

    Ho creato il file e ho scritto questo:
    int *crea_inizializza(unsigned int n, int val)
    {
    	int arr[n];
    	int i;
    		int *p;
         p =(int *)malloc(sizeof(int));
    
    	for(i=0; i<n; i++){
    		arr[i]= val-i;
    	}
    
    }
    
    Ma mi dice

    1>error C2057: prevista espressione costante
    1>impossibile allocare una matrice di dimensione costante 0
    1>error C2133: 'arr': dimensione sconosciuta


    se invece definisco l'array nel file in cui c'è la definizione della funzione, il programma funziona.
    perché non accetta che l'array abbia dimensione n?
  • Re: Esercizio C

    1) l'array è quello allocato con la malloc. Quindi elimina completamente la

    int arr[n];

    2) la sizeof(int) serve ad allocare un solo intero. Ma tu ne devi allocare n

    3) ovviamente non userai arr ma p

    4) dato che la funzione è di tipo int * deve restituire il valore di p con una

    return p;

    altrimenti come lo ottiene il puntatore il main?
  • Re: Esercizio C

    Grazie mille,
    ma l'arr lo devo allocare nel main o nella funzione? e dove lo definisco se nel main lo uso come puntatore?
  • Re: Esercizio C

    Cioè ? Che vuoi dire ?

    Il puntatore che usi con la malloc rappresenta l'array.
  • Re: Esercizio C

    Scusami, non odiarmi . Lo so che sono stressante..
    allora cosi va bene?

    questa è la funzione
    int *crea_inizializza(unsigned int n, int val)
    {
    	int i;
    	int *p;
    	p =(int *)malloc(sizeof(n));
    
    	for(i=0; i<n; i++){
    		p[i]= val-i;
    	}
    	for(i=0; i<n; i++){
    		printf("%d ", p[i]);
    	}
    	return p;
    
    }

    questo è il main
    #include <stdio.h>
    #include <stdlib.h>
    
    
    extern int *crea_inizializza(unsigned int n, int val); 
    
    int main(void)
    {
    		
    	crea_inizializza(5,3);
    	
    }
    
    
  • Re: Esercizio C

    Quasi ...

    Non hai preso in considerazione quello che ti ho detto sulla sizeof ....

    E nel main devi restituire il puntatore altrimenti l'array come viene trattato?

    int *arr = crea_inizializza(5,3);

    Le printf le puoi fare nel main dopo la chiamata alla funzione e non nella funzione stessa.
  • Re: Esercizio C

    Devo fare cosi?
    p = (int *) malloc (n*sizeof(int)); 
  • Re: Esercizio C

    Sì ... e hai compreso anche il perché?

    Sai cosa fa la malloc e cosa vuol dire sizeof(int) ?
  • Re: Esercizio C

    La malloc occupa una zona di memoria sufficiente a contenere, in questo caso, un int.. e ho dovuto moltiplicare la grandezza del vettore per la quantità di memoria necessaria a contenere un int
Devi accedere o registrarti per scrivere nel forum
10 risposte