PDA

Visualizza la versione completa : [C] come riporto tutto in void???


Metallica
15-12-2003, 10:21
#include <malloc.h>
#include <stdio.h>

int horner(float *coeff, int n, int c);

int main(){

int i, c, n;
float *coeff;

printf("Inserire il grado del polinomio: ");
scanf("%d", &n);

if(!(coeff = (float *)malloc(n*sizeof(float))))
abort();

printf("\nInserire uno ad uno i valori dei coefficienti: \n");
for(i = 0; i <= n; i++){
printf("Inserire il valore del coeff %d: ", i);
scanf("%f", &coeff[i]);
}

printf("\nInserisci il valore del punto c: ");
scanf("%d",&c);

printf("%d", horner(coeff, n, c));

free(coeff);
}

int horner(float *coeff, int n, int c){

int i, p;

p = coeff[n];
for(i = n-1; i >= 0; i--)
{
p = p * c + coeff[i];
}
return p;
}

cristiano_longo
15-12-2003, 11:01
void sta per generico. Ha due usi. Come tipo di ritorno di una funzione significa che la funzione non ritorna nulla. Come tipo di puntatore significa "puntatore ad un oggetto generico". In questo caso, prima di poter usare l'oggetto puntato, di solito e' necessario effettuare un cast da "* void" a "* tipo effettivo dell'oggetto".

Metallica
15-12-2003, 11:09
siccome domani ho la prova intercorso e non ho ancora un buon libro su C ti dispiacerebbe riscrivere il programma che ho postato in void?

ti ringrazio infinitamente....

cristiano_longo
15-12-2003, 11:33
comunque per la mia esperienza accademica, posso ipotizzare la risposta.


int horner(void *coeff, int n, int c);





int horner(void *coeff, int n, int c){

int i, p;
float* coeff1 = (float*)coeff;

p = coeff1[n];
for(i = n-1; i >= 0; i--)
p = p * c + coeff1[i];

return p;
}

Metallica
15-12-2003, 14:31
a quanto mi è stato detto la function la devo scrivere di tipo void.

cioè void horner al posto di int horner. Solo che se scrivo void mi dà errore :(

pixer
15-12-2003, 15:18
Originariamente inviato da Metallica
a quanto mi è stato detto la function la devo scrivere di tipo void.

cioè void horner al posto di int horner. Solo che se scrivo void mi dà errore :( ma void non può ritornare valori :dottò:

Metallica
15-12-2003, 15:20
Originariamente inviato da pixer
ma void non può ritornare valori :dottò:
apputno però il testo della prova era scrivere una function di tipo void che calcoli il valore di un polinomio mediante il metodo di horner. :dottò:

Puffolott0
15-12-2003, 15:25
Originariamente inviato da Metallica
#include <malloc.h>
#include <stdio.h>

int p; // p = variabile globale

void horner(float *coeff, int n, int c); //Adesso è void

int main(){

int i, c, n;
float *coeff;

printf("Inserire il grado del polinomio: ");
scanf("%d", &n);

if(!(coeff = (float *)malloc(n*sizeof(float))))
abort();

printf("\nInserire uno ad uno i valori dei coefficienti: \n");
for(i = 0; i <= n; i++){
printf("Inserire il valore del coeff %d: ", i);
scanf("%f", &coeff[i]);
}

printf("\nInserisci il valore del punto c: ");
scanf("%d",&c);

horner(coeff, n, c) // chiama la funzione che calcola p

printf("%d", p); // scrive p

free(coeff);
}

void horner(float *coeff, int n, int c){ // void...

int i;

p = coeff[n];
for(i = n-1; i >= 0; i--)
{
p = p * c + coeff[i]; // calcola p
} // ma non lo ritorna
}

Non ho provato ma spero che vada...

cristiano_longo
15-12-2003, 15:27
Originariamente inviato da Metallica
a quanto mi è stato detto la function la devo scrivere di tipo void.


Assicuratene perchè a me sembra una bagianata. LA soluzione più corretta mi sembra quella che hai postato tu. Attenta ai cattivi consigli e non fidarti mai di nessuno.



cioè void horner al posto di int horner. Solo che se scrivo void mi dà errore :(


Certo, perchè horner ritorna un valore. Puoi fare due cose :
A) usare un parametro di ritorno



void horner(float *coeff, int n, int c, int *ret){
int i, p;

p = coeff[n];
for(i = n-1; i >= 0; i--)
p = p * c + coeff[i];

*ret=p;
}

int main(){

int i, c, n, r;
float *coeff;

printf("Inserire il grado del polinomio: ");
scanf("%d", &n);

if(!(coeff = (float *)malloc(n*sizeof(float))))
abort();

printf("\nInserire uno ad uno i valori dei coefficienti: \n");
for(i = 0; i <= n; i++){
printf("Inserire il valore del coeff %d: ", i);
scanf("%f", &coeff[i]);
}

printf("\nInserisci il valore del punto c: ");
scanf("%d",&c);

//nuovo
horner(coeff, n, c, &r);
printf("%d", r);

free(coeff);
}


B) ritornare un puntatore a void, ma non credo sia il caso ...

Metallica
15-12-2003, 16:06
sì ecco la prima è la soluzione + adatta credo ritornare un puntatore al risultato...

Loading