Oppure

Loading
22/04/11 8:06
RapFan
Ciao a tutti!

Sto facendo un programmino che utilizza le liste per calcolare la media e la somma di 25 numeri generati casualmente

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

struct listNode {
	int casual;
	struct listNode *nextPtr;
};
typedef struct listNode ListNode;
typedef ListNode *ListNodePtr;

int main(){
	
	int contatore; //funge da indice e da dividendo
	float somma=0; //conterrà la somma dei numeri generati casualmente
	
	ListNodePtr startPtr = NULL; //puntatore all'inizio della lista (che è vuota)
	
	srand(time(NULL)); //randomizzazione
	
	ListNodePtr newPtr; //puntatore al nuovo nodo
	ListNodePtr previousPtr; //puntatore al nodo precedente
	ListNodePtr currentPtr; //puntatore al nodo corrente
	
	
	for(contatore=0; contatore<25; contatore++){
		
		newPtr= malloc(sizeof(ListNode));// creo un nuovo nodo
		
		//c'è spazio a sufficenza per creare nodi?
		if(newPtr!=NULL){
			
			newPtr->casual=rand()%99; //genero un numero e lo metto nel nodo
			somma += newPtr->casual; //aggiorno la somma
			
			previousPtr = NULL;
			currentPtr = *startPtr;
			
			//finché sono nella lista e il mio valore è maggiore di quello nel nodo attuale...
			while(currentPtr!=NULL && newPtr->casual > currentPtr->casual){
				
				 previousPtr=currentPtr; //...mi sposto al 
				 currentPtr= currentPtr->nextPtr;// nodo successivo
				 
			 }//fine ciclo while
			
			if (previousPtr==NULL){ //se mi trovo all'inizio della lista
				
				newPtr->nextPtr = *startPtr; //aggiungo il nodo
				*startPtr = newPtr;// all'inizio
				
			}
			else { //inserisco il nodo tra previousPtr e currentPtr
			
				previousPtr->nextPtr = newPtr;
				newPtr->nextPtr=currentPtr;
			}
		
		}//fine del ramo if
		
		else
			printf("Non riesco ad allocare memoria!\n");
		
		}//fine ciclo for
		
		printf("La media di tutti i valori inseriti nei nodi è: %.2f\n", somma/contatore);
		printf("La somma di tutti i numeri inseriti nei nodi è: %f\n", somma);
		
		return 0;
	}//fine programma
		
		


Ecco gli errori di compilazione
mediaconlista.c: In function ‘main’:
mediaconlista.c:37: error: incompatible types when assigning to type ‘ListNodePtr’ from type ‘ListNode’
mediaconlista.c:49: error: incompatible types when assigning to type ‘struct listNode *’ from type ‘ListNode’
mediaconlista.c:50: error: incompatible types when assigning to type ‘ListNode’ from type ‘ListNodePtr’


forse :rofl: ho fatto casino con le typedef ma non capisco come...
Ultima modifica effettuata da RapFan 22/04/11 8:09
aaa
22/04/11 9:30
Il Totem
1. Alla riga 37 c'è questo assegnamento:
currentPtr = *startPtr

*startPtr indica il contenuto puntato da startPtr, ossia una struct di tipo ListNode, mentre currentPtr è un puntatore. Togli l'asteriscto da startPtr oppure mettilo anche davanti a currentPtr, a seconda dei casi.
2. struct listNode* equivale a ListNodePtr, non a ListNode.
3. Come in 1.
aaa