Ho deciso di implementarla cosi:
#include <stdio.h>
#include <stdlib.h>
typedef unsigned short int boolean;
#define TRUE 1
#define FALSE 0
struct list{
int value;
struct list * next_ptr;
};
//okok
void init( struct list ** ptr );
void visit( struct list * ptr );
void pre_insert(struct list ** ptr, int value);
boolean addlist(struct list ** ptr, int num, int X);
int main()
{
struct list * ptr;
int n;
int count;
int value;
int X;
int num;
init (&ptr);
printf("\n quanti numeri vuoi nella lista?");
scanf("%d", &n);
for (count=1; count<=n; count++)
{
printf( "\n inserisci l'elemento %d: ", count );
scanf( "%d", &value );
pre_insert(&ptr,value);
}
printf("\n quanto vale X?");
scanf("%d", &X);
printf( "\n la lista iniziale si presenta così: " );
visit( ptr );
addlist(&ptr, num, X);
printf( "\n la lista modificata si presenta così:" );
visit( ptr );
return (0);
}
void init( struct list ** ptr )
{
*ptr = NULL;
}
void visit( struct list * ptr)
{
while ( ptr != NULL ) {
printf( "_%d_ ", ptr->value );
ptr = ptr->next_ptr;
}
}
void pre_insert(struct list ** ptr, int value)
{
struct list * tmp_ptr = (struct list *)malloc(sizeof (struct list));
tmp_ptr -> value = value;
tmp_ptr -> next_ptr = * ptr;
* ptr = tmp_ptr;
}
boolean addlist(struct list ** ptr, int num, int X)
{
boolean found;
struct list * v;
struct list * tmp= * ptr;
int count;
int sum;
found=FALSE;
if(ptr!=NULL)
{
found=TRUE;
while(tmp != NULL && tmp -> next_ptr != NULL)
{
v=tmp;
int sum = tmp -> value;
for(count = 1; count < X; count++)
{
if(v->next_ptr==NULL)
break;
v=v->next_ptr;
sum+= v->value;
}
tmp->value=sum;
tmp -> next_ptr = v-> next_ptr;
if(tmp!=NULL)
tmp = tmp -> next_ptr;
num++;
}
}
else
found=FALSE;
return(found);
}
@smalldragon :ti faccio un esempio:facciamo che la lista in ingresso è {0,3,1,4,6}
se x=2 al termine del programma la lista sara modificata e stampata in questo modo: {3,5,6}
nell'intestazione comunque dice che x deve essere obbligatoriamente maggiore e non uguale a zero...l'errore che mi da è sempre lo stesso...
"Errors occurred during the build.
Errors running builder 'CDT Builder' on project 'programma_esame'.
java.lang.NullPointerException" questo è quello che mi da quando vado a buildare...non è che potete provare a farlo partire sul vostro compilatore e controllare?? ho come l'idea che non faccia il mio ehehe