Somma polinomi in C

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
Zorgio
Prode Principiante
Messaggi: 8
Iscrizione: giovedì 3 marzo 2011, 12:25

Somma polinomi in C

Messaggio da Zorgio »

Buongiorno a tutti, ho un po' di dubbi su un esercizio che mi è stato assegnato per un corso di programmazione in C all'università. L'esercizio è su puntatori e strutture e si articola in vari punti,si parte dal definire una struttura polinomio composta da il grado e un vettore dinamico di taglia n+1 e vari funzioni per trattarli.
Per esempio c'è la funzione somma polinomio che prende come parametri due puntatori di polinomi e che ritorna un puntatore verso un polinomio somma di due ricevuti in parametro. Io ho fatto così, secondo voi è un buon modo di procedere?

Codice: Seleziona tutto

#include <stdio.h>
#include <stdlib.h>

typedef struct
{
	int deg;
	int *coef;
}
polynome;

polynome * new_polynome(int n)
{
	int i;
	polynome *new;
	new=malloc(sizeof(polynome *));
	
	new->deg=n;
	new->coef=malloc(n*sizeof(new->coef));
	
	for(i=0;i<n;i++)
	{
		new->coef[i]=1;
	}
	
	return new;
}

void  print_polynome(polynome *p)
{
	int i;
	
	for(i=0;i<(p->deg);i++)
	{
		printf(" %d x^%d ",p->coef[i],i);
	}
	
	printf("\n");
}

polynome * addition_polynome(polynome *p1,polynome *p2)
{
	polynome *somme=malloc(sizeof(polynome *));
	int i;
	
	if((p1->deg)>(p2->deg))
		somme->deg=p1->deg;
	else
		somme->deg=p2->deg;
	
	somme->coef=malloc(somme->deg*sizeof(somme->coef));
	
	for(i=0;i<somme->deg;i++)
	{
		somme->coef[i]=p1->coef[i]+p2->coef[i];
	}

		
	return somme;
}



int main()
{
	polynome *pPtr1;
	polynome *pPtr2;
	polynome *somma;
	
	pPtr1=new_polynome(4);
	pPtr2=new_polynome(6);
	somma=addition_polynome(pPtr1,pPtr2);
	print_polynome(somma);
	return 0;
}

Grazie per l'attenzione.
Avatar utente
Zoff
Moderatore Globale
Moderatore Globale
Messaggi: 33338
Iscrizione: mercoledì 10 ottobre 2007, 22:36

Re: Somma polinomi in C

Messaggio da Zoff »

No non va bene. Allochi spazio per un puntatore non per la struttura:

Codice: Seleziona tutto

new=malloc(sizeof(polynome *));
Togli *.
Lo stesso sotto, new->coef è un puntatore, quindi allochi lo spazio del puntatore non dell'intero.

Ec osì via dicendo...
Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
Zorgio
Prode Principiante
Messaggi: 8
Iscrizione: giovedì 3 marzo 2011, 12:25

Re: Somma polinomi in C

Messaggio da Zorgio »

Ma non è giusto dal momento che devo restituire un puntatore?
La scrittura corretta quindi sarebbe

Codice: Seleziona tutto

new=(int*)malloc(sizeof(polynome))
?
Avatar utente
Zoff
Moderatore Globale
Moderatore Globale
Messaggi: 33338
Iscrizione: mercoledì 10 ottobre 2007, 22:36

Re: Somma polinomi in C

Messaggio da Zoff »

No. malloc() deve restituire sì un puntatore ma la memoria allocata a cui punta deve essere sufficiente per contenere il tipo di valore a cui punta non il puntatore stesso.
No. La variabile new è un puntatore a polynome quindi devi fare il cast a (polynome*) non a (int*)
Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 4 ospiti