Programma C non parte

di il
4 risposte

Programma C non parte

Salve ragazzi, avrei bisogno di un piacere enorme, devo scrivere 2 programmini C per l'orale di domani e non so come mai non mi partono!!! Il fatto è che a me interessa sapere se ho fatto errori nella scrittura del codice o se è un errore dovuto magari ad una cattiva installazione del compilatore o altre cose così. Vi allego dunque i due codicini e vi sarei troooooppo grato se mi diceste se ho fatto errori e nel caso quali errori. Grazie milleeeee

Programma 1: Devo creare una lista di int in forma collegata con puntatori e poi calcolare la somma dei dispari

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

struct list {
int value;
struct list* next_ptr;
};
struct list* ptr;
struct list** ptrptr;
int count,ins;
int sum=0;

void main(void);
void init(struct list** ptrptr);
void pre_insert(struct list** ptrptr, int value);
int it_sum(struct list* ptr);

void main(void){
init(ptrptr);
for(count=0; count<5; count++){
scanf("%d", &ins);
pre_insert(ptrptr, ins);
}
it_sum(*ptrptr);
printf("%d", sum);
}

void init(struct list **ptrptr){
*ptrptr=NULL;
}

void pre_insert(struct list** ptrptr, int value){
struct list* tmp_ptr;
tmp_ptr=*ptrptr;
*ptrptr=(struct list*)malloc(sizeof(struct list));
(*ptrptr)->value=value;
(*ptrptr)->next_ptr=tmp_ptr;
}

int it_sum(struct list* ptr){
while(ptr!=NULL){
if(ptr->value%2 == 1)
sum=sum+ptr->value;
ptr=ptr->next_ptr;
}
return sum;
}


Programma 2: Devo creare una lista collegata con arrays e indici e poi inserire in testa alla lista i numeri che ricevo da tastiera:

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

typedef unsigned short int Boolean;
#define TRUE 1;
#define FALSE 0;

//Dichiarazione di funzioni
void main(void);
void init(struct list* ptr, int size);
Boolean pre_insert(struct list*ptr, int value);

//Definizioni di funzioni
void main(void){

int grandezza, ins, num;
struct record {
int value;
int next;
};
struct list {
int first,free,size;
struct record *buffer;
};
struct list *ptr;

scanf("%d", &grandezza);
init(ptr, grandezza);
for(num=0; num<grandezza; num++){
scanf("%d", &ins);
pre_insert(ptr, ins);
}

void init(struct list *ptr, int size){
int count;
ptr->buffer=(struct record *)malloc(size*sizeof(struct record));
ptr->size=size;
ptr->first=ptr->size;
ptr->free=0;
for(count=0;count< ptr->size; count++)
ptr->buffer[count].next=count+1;
}

Boolean pre_insert(struct list *ptr, int value){
int moved;
if(ptr->free != ptr->size){
moved=ptr->free;
ptr->free=(ptr->buffer[ptr->free]).next;
ptr->buffer[moved].value=value;
ptr->buffer[moved].next=ptr->first;
ptr->first=moved;
return TRUE;
}
else
return FALSE;
}
}

Grazie grazie milleee

4 Risposte

  • Re: Programma C non parte

    Devi postare il codice utilizzando i tag CODE altrimenti non si capisce nulla.

    E devi anche dirci cosa succede, se hai errori in avvio o altro ...
  • Re: Programma C non parte

    CODICE 1
    #include <stdio.h>
    #include <stdlib.h>
    
    typedef unsigned short int Boolean;
    #define TRUE 1;
    #define FALSE 0;
    
    //Dichiarazione di funzioni
    void main(void);
    void init(struct list* ptr, int size);
    Boolean pre_insert(struct list*ptr, int value);
    
    //Definizioni di funzioni
    void main(void){
    
    int grandezza, ins, num;
    struct record {
    	int value;
    	int next;
    };
    struct list {
    	int first,free,size;
    	struct record *buffer;
    };
    struct list *ptr;
    
    scanf("%d", &grandezza);
    init(ptr, grandezza);
    for(num=0; num<grandezza; num++){
    	scanf("%d", &ins);
    	pre_insert(ptr, ins);
    }
    
    void init(struct list *ptr, int size){
    	int count;
    	ptr->buffer=(struct record *)malloc(size*sizeof(struct record));
    	ptr->size=size;
    	ptr->first=ptr->size;
    	ptr->free=0;
    	for(count=0;count< ptr->size; count++)
    		ptr->buffer[count].next=count+1;
    }
    
    Boolean pre_insert(struct list *ptr, int value){
    	int moved;
    	if(ptr->free != ptr->size){
    		moved=ptr->free;
    		ptr->free=(ptr->buffer[ptr->free]).next;
    		ptr->buffer[moved].value=value;
    		ptr->buffer[moved].next=ptr->first;
    		ptr->first=moved;
    		return TRUE;
    	}
    	else
    		return FALSE;
    }
    }
    
    CODICE 2
    #include <stdio.h>
    #include <stdlib.h>
    
    struct list {
    		int value;
    		struct list* next_ptr;
    	};
    	struct list* ptr;
    	struct list** ptrptr;
    	int count,ins;
    	int sum=0;
    
    void main(void);
    void init(struct list** ptrptr);
    void pre_insert(struct list** ptrptr, int value);
    int it_sum(struct list* ptr);
    
    void main(void){
    	init(ptrptr);
    	for(count=0; count<5; count++){
    		scanf("%d", &ins);
    		pre_insert(ptrptr, ins);
    	}
    	it_sum(*ptrptr);
    	printf("%d", sum);
    }
    
    void init(struct list **ptrptr){
    	*ptrptr=NULL;
    }
    
    void pre_insert(struct list** ptrptr, int value){
    	struct list* tmp_ptr;
    	tmp_ptr=*ptrptr;
    	*ptrptr=(struct list*)malloc(sizeof(struct list));
    	(*ptrptr)->value=value;
    	(*ptrptr)->next_ptr=tmp_ptr;
    }
    
    int it_sum(struct list* ptr){
    		while(ptr!=NULL){
    			if(ptr->value%2 == 1)
    				sum=sum+ptr->value;
    			ptr=ptr->next_ptr;
    		}
    		return sum;
    }
    Scusatemi ma mi sono appena iscritto..così va bene?

    codice 1: Deve creare una lista collegata con arrays e indici e poi inserire in testa alla lista i numeri che ricevo da tastiera

    codice 2: deve creare una lista collegata con puntatori e calcolare la somma dei dispari

    Gli errori sono...per quanto riguarda il codice 1 questi:
    Multiple markers at this line
    - passing argument 1 of 'init' from incompatible pointer type [enabled by
    default]
    - riferimento non definito a "init"
    e lo stesso errore me lo da anche per la funzione pre_insert

    per quanto riguarda il codice 2 questi:
    - definito qui per la prima volta
    me lo mette accanto a tutte le definizioni delle funzioni

    Comunque se non mi partono per un qualche motivo strano mi interessa il giusto..l'importante è che il codice sia scritto bene sennò quella mi boccia :S
  • Re: Programma C non parte

    Il primo non è compilabile perché nel main c'è qualche parentesi che manca ...
    Inoltre è bene che le strutture stiano fuori dal main ...

    Nel secondo, la prima chiamata della init usa un puntatore non inizializzato e quindi genera subito un errore di violazione della memoria.

    Per delle cose di questo tipo "quella" ti boccia lo stesso ed avrebbe anche ragione.
  • Re: Programma C non parte

    Ok, ma quindi nella seconda cosa devo fare per inizializzare il puntatore? Devo creare una struttura e poi inizializzare il puntatore con l'indirizzo della struttura? Tipo

    struct list a;
    ptr=&a;
    ptrptr=&ptr;

    così andrebbe bene?
Devi accedere o registrarti per scrivere nel forum
4 risposte