Torna indietro   Hardware Upgrade Forum > Software > Programmazione

ASUS NUC 15 Pro e NUC 15 Pro+, mini PC che fondono completezza e duttilità
ASUS NUC 15 Pro e NUC 15 Pro+, mini PC che fondono completezza e duttilità
NUC 15 Pro e NUC 15 Pro+ sono i due nuovi mini-PC di casa ASUS pensati per uffici e piccole medie imprese. Compatti, potenti e pieni di porte per la massima flessibilità, le due proposte rispondono in pieno alle esigenze attuali e future grazie a una CPU con grafica integrata, accompagnata da una NPU per la gestione di alcuni compiti AI in locale.
Cybersecurity: email, utenti e agenti IA, la nuova visione di Proofpoint
Cybersecurity: email, utenti e agenti IA, la nuova visione di Proofpoint
Dal palco di Proofpoint Protect 2025 emerge la strategia per estendere la protezione dagli utenti agli agenti IA con il lancio di Satori Agents, nuove soluzioni di governance dei dati e partnership rafforzate che ridisegnano il panorama della cybersecurity
Hisense A85N: il ritorno all’OLED è convincente e alla portata di tutti
Hisense A85N: il ritorno all’OLED è convincente e alla portata di tutti
Dopo alcuni anni di assenza dai cataloghi dei suoi televisori, Hisense riporta sul mercato una proposta OLED che punta tutto sul rapporto qualità prezzo. Hisense 55A85N è un televisore completo e versatile che riesce a convincere anche senza raggiungere le vette di televisori di altra fascia (e altro prezzo)
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 08-09-2006, 18:58   #21
DavidGT
Member
 
Iscritto dal: Jul 2005
Messaggi: 151
Quote:
Originariamente inviato da Barbalbero
Ma new non è una parola riservata?

Cmq devi mettere l'operatore & nella scanf dell'anno
Non funziona nemmeno con la &....
DavidGT è offline   Rispondi citando il messaggio o parte di esso
Old 08-09-2006, 19:01   #22
DavidGT
Member
 
Iscritto dal: Jul 2005
Messaggi: 151
Quote:
Originariamente inviato da DavidGT
Non funziona nemmeno con la &....
Ritiro tutto... che pirla!!!


Eppure mi sembrava di averla messa e non andava lo stesso!!


Vabbè... GRAZIE MILLE!!
DavidGT è offline   Rispondi citando il messaggio o parte di esso
Old 10-09-2006, 11:30   #23
DavidGT
Member
 
Iscritto dal: Jul 2005
Messaggi: 151
Sto rifacendo per bene il programma della prima pagina.
Ho un dubbio, perchè nella chiamata ricorsiva della funzione controllonum non devo mettere "&" a num, mentre invece se la invoco nel main si (eccedenti=controllonum(PB3, &pezzi))??

Non dovrebbe esserci in entrambe?

GRAZIE!

Codice:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct {
	char tipopezzo[15];
	int x;
	int y;
} pezzo;

typedef struct el {
	pezzo pedina;
	struct el *next;
} elemento;

typedef struct {

	int PedoneBianco, PedoneNero, CavalloBianco, CavalloNero, AlfiereBianco,AlfiereNero,TorreBianca,TorreNera,ReginaBianca,ReginaNera,ReBianco,ReNero;

} MaxPezzi;


elemento * controllonum(elemento *head, MaxPezzi *num);
void inizializza ();


void main () {

	MaxPezzi pezzi;
	elemento *PB,*PB2,*PB3,*eccedenti;

	pezzi.PedoneBianco=2;
	pezzi.PedoneNero=8;
	pezzi.CavalloBianco=2;
	pezzi.CavalloNero=2;
	pezzi.AlfiereBianco=2;
	pezzi.AlfiereNero=2;
	pezzi.TorreBianca=2;
	pezzi.TorreNera=2;
	pezzi.ReginaBianca=1;
	pezzi.ReginaNera=1;
	pezzi.ReBianco=1;
	pezzi.ReNero=1;

	inizializza();

	//PROVA//
	PB=(elemento *)malloc(sizeof(elemento));
	strcpy(PB->pedina.tipopezzo,"PedoneBianco");
	PB->next=NULL;

	PB2=(elemento *)malloc(sizeof(elemento));
	strcpy(PB2->pedina.tipopezzo,"PedoneBianco");
	PB2->next=PB;

	PB3=(elemento *)malloc(sizeof(elemento));
	strcpy(PB3->pedina.tipopezzo,"PedoneBianco");
	PB3->next=PB2;

	eccedenti=controllonum(PB3, &pezzi);

	printf("\n%d", pezzi.PedoneBianco);

}

elemento * controllonum(elemento *head, MaxPezzi *num) {

	elemento *eccedenti;

	eccedenti=(elemento *)malloc(sizeof(elemento));
	eccedenti=NULL;

	if (head == NULL)
		return eccedenti;
	if (head != NULL) {
		if (strcmp(head->pedina.tipopezzo, "PedoneBianco")==0)
			num->PedoneBianco=num->PedoneBianco -1;
	return eccedenti=controllonum(head->next, num);
}

	return eccedenti;
}



void inizializza () {

		int i, j;

		printf("Scacchiera vuota\n\n");

	for (i=0;i<8;i++){
		for (j=0;j<8;j++) {
			printf("X ");
		}
		printf("\n");
	}
}
DavidGT è offline   Rispondi citando il messaggio o parte di esso
Old 11-09-2006, 07:43   #24
trallallero
Senior Member
 
L'Avatar di trallallero
 
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
la "&" sta ad indicare che passi l'indirizzo della variabile e non il contenuto.
Dentro la funzione controllonum "num" é giá un indirizzo (é un puntatore, dichiarato con *)
mentre nel main passi "pezzi" che é una variabile non puntatore (MaxPezzi)
Ciao
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z Mb - Win Eight SP (1 > yours) 16 Valve
trallallero è offline   Rispondi citando il messaggio o parte di esso
Old 11-09-2006, 10:34   #25
DavidGT
Member
 
Iscritto dal: Jul 2005
Messaggi: 151
Piccola soddisfazione personale, alla fine ce l'ho fatta!!!

Ringrazio tutti per l'aiuto, sono passato da esercizi più semplici e grazie ai suggerimenti ho risolto anche questo.

Ora mi invento qualche esercizio, l'esame è mercoledì!! (peccato che sia senza compilatore)



Codice:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct {
	char tipopezzo[15];
	int x;
	int y;
}
pezzo;

typedef struct el {
	pezzo pedina;
	struct el *next;
}
elemento;

typedef struct {

	int PedoneBianco, PedoneNero, CavalloBianco, CavalloNero, AlfiereBianco,AlfiereNero,TorreBianca,TorreNera,ReginaBianca,ReginaNera,ReBianco,ReNero;

}
MaxPezzi;

typedef struct {

	int matrix[8][8];
}
matrice;


elemento * controllonum(elemento *head, MaxPezzi *num, elemento *eccedenti);
void inizializza ();
void stampalista (elemento *head);
elemento *instesta (elemento *head, pezzo A);
elemento *controllopos (elemento *head, elemento *conf, elemento *lista);


void main () {

	MaxPezzi pezzi;
	elemento *conf;
	elemento *PB,*PB2,*PB3,*eccedenti, *RN, *RN1, *ReB, *ReN, *ReN1;


	eccedenti=(elemento *)malloc(sizeof(elemento));
	eccedenti=NULL;

	pezzi.PedoneBianco=8;
	pezzi.PedoneNero=8;
	pezzi.CavalloBianco=2;
	pezzi.CavalloNero=2;
	pezzi.AlfiereBianco=2;
	pezzi.AlfiereNero=2;
	pezzi.TorreBianca=2;
	pezzi.TorreNera=2;
	pezzi.ReginaBianca=1;
	pezzi.ReginaNera=1;
	pezzi.ReBianco=1;
	pezzi.ReNero=1;

	inizializza();

	//PROVA//
	PB=(elemento *)malloc(sizeof(elemento));
	strcpy(PB->pedina.tipopezzo,"PedoneBianco");
	PB->next=NULL;

	PB2=(elemento *)malloc(sizeof(elemento));
	strcpy(PB2->pedina.tipopezzo,"PedoneBianco");
	PB2->next=PB;
	PB2->pedina.x=3;
	PB2->pedina.y=2;

	PB3=(elemento *)malloc(sizeof(elemento));
	strcpy(PB3->pedina.tipopezzo,"PedoneBianco");
	PB3->next=PB2;
	PB3->pedina.x=5;
	PB3->pedina.y=2;

	RN=(elemento *)malloc(sizeof(elemento));
	strcpy(RN->pedina.tipopezzo,"ReginaNera");
	RN->next=PB3;
	RN->pedina.x=5;
	RN->pedina.y=2;

	RN1=(elemento *)malloc(sizeof(elemento));
	strcpy(RN1->pedina.tipopezzo,"ReginaNera");
	RN1->next=RN;
	RN1->pedina.x=3;
	RN1->pedina.y=0;

	ReB=(elemento *)malloc(sizeof(elemento));
	strcpy(ReB->pedina.tipopezzo,"ReBianco");
	ReB->next=RN1;
	ReB->pedina.x=4;
	ReB->pedina.y=7;

	ReN=(elemento *)malloc(sizeof(elemento));
	strcpy(ReN->pedina.tipopezzo,"ReNero");
	ReN->next=ReB;
	ReN->pedina.x=4;
	ReN->pedina.y=7;

	ReN1=(elemento *)malloc(sizeof(elemento));
	strcpy(ReN1->pedina.tipopezzo,"ReNero");
	ReN1->next=ReN;
	ReN1->pedina.x=3;
	ReN1->pedina.y=4;

	conf=ReN1->next;

	printf("Elementi in gioco:\n");
	stampalista(ReN1);
	eccedenti=controllonum(ReN1, &pezzi, eccedenti);

	ReN1=controllopos(ReN1,conf, ReN1);
	printf("Lista dopo aver eliminato gli elementi occupanti la stessa posizione:\n");
	stampalista(ReN1);
}

elemento * controllonum(elemento *head, MaxPezzi *num, elemento *eccedenti) {

	if (head == NULL) {

		if (eccedenti != NULL) {
			printf("Elementi eccedenti:\n");
			stampalista(eccedenti);
		}

		return eccedenti;
	}

	if (head != NULL) {

		if (strcmp(head->pedina.tipopezzo, "PedoneBianco")==0) {
			num->PedoneBianco=num->PedoneBianco -1;

			if (num->PedoneBianco < 0) {
				eccedenti=instesta(eccedenti, head->pedina);
				num->PedoneBianco=0;
			}
		}

		if (strcmp(head->pedina.tipopezzo, "PedoneNero")==0) {
			num->PedoneNero=num->PedoneNero -1;

			if (num->PedoneNero < 0) {
				eccedenti=instesta(eccedenti, head->pedina);
				num->PedoneNero=0;
			}
		}

		if (strcmp(head->pedina.tipopezzo, "CavalloBianco")==0) {
			num->CavalloBianco=num->CavalloBianco -1;

			if (num->CavalloBianco < 0) {
				eccedenti=instesta(eccedenti, head->pedina);
				num->CavalloBianco=0;
			}
		}

		if (strcmp(head->pedina.tipopezzo, "CavalloNero")==0) {
			num->CavalloNero=num->CavalloNero -1;

			if (num->CavalloNero < 0) {
				eccedenti=instesta(eccedenti, head->pedina);
				num->CavalloNero=0;
			}
		}

		if (strcmp(head->pedina.tipopezzo, "AlfiereBianco")==0) {
			num->AlfiereBianco=num->AlfiereBianco -1;

			if (num->AlfiereBianco < 0) {
				eccedenti=instesta(eccedenti, head->pedina);
				num->AlfiereBianco=0;
			}
		}

		if (strcmp(head->pedina.tipopezzo, "AlfiereNero")==0) {
			num->AlfiereNero=num->AlfiereNero -1;

			if (num->AlfiereNero < 0) {
				eccedenti=instesta(eccedenti, head->pedina);
				num->AlfiereNero=0;
			}
		}

		if (strcmp(head->pedina.tipopezzo, "ReginaBianca")==0) {
			num->ReginaBianca=num->ReginaBianca -1;

			if (num->ReginaBianca < 0) {
				eccedenti=instesta(eccedenti, head->pedina);
				num->ReginaBianca=0;
			}
		}

		if (strcmp(head->pedina.tipopezzo, "ReginaNera")==0) {
			num->ReginaNera=num->ReginaNera -1;

			if (num->ReginaNera < 0) {
				eccedenti=instesta(eccedenti, head->pedina);
				num->ReginaNera=0;
			}
		}

		if (strcmp(head->pedina.tipopezzo, "ReBianco")==0) {
			num->ReBianco=num->ReBianco -1;

			if (num->ReBianco < 0) {
				eccedenti=instesta(eccedenti, head->pedina);
				num->ReBianco=0;
			}
		}

		if (strcmp(head->pedina.tipopezzo, "ReNero")==0) {
			num->ReNero=num->ReNero -1;

			if (num->ReNero < 0) {
				eccedenti=instesta(eccedenti, head->pedina);
				num->ReNero=0;
			}
		}


		return eccedenti=controllonum(head->next, num, eccedenti);
	}
	return eccedenti;
}



void inizializza () {

	int i, j;

	printf("Scacchiera vuota\n\n");

	for (i=0;i<8;i++){
		for (j=0;j<8;j++) {
			printf("X ");
		}
		printf("\n");
	}
}

void stampalista(elemento *head) {

	while (head != NULL) {
		printf("%s\n", head->pedina.tipopezzo);
		head=head->next;
	}
	printf("\n");
}

elemento *instesta(elemento *head, pezzo A) {

	elemento *new;
	new=(elemento *)malloc(sizeof(elemento));

	new->next=head;
	strcpy(new->pedina.tipopezzo,A.tipopezzo);
	return new;
}

elemento *controllopos(elemento *head, elemento *conf, elemento *lista) {

	elemento *temp, *succ;

	if (head->next == NULL)
		return lista;

	if (conf == NULL) {
		temp=head->next;

		return head=controllopos(head->next, temp->next, lista);
	}
	else {
		if (head->pedina.x == conf->pedina.x && head->pedina.y == conf->pedina.y) {

			temp=head;
			temp->next=conf->next;
			free(conf);
			conf=temp->next;
			return head=controllopos(head, conf, lista);
		}

		return head=controllopos(head, conf->next, lista);
	}
}
DavidGT è offline   Rispondi citando il messaggio o parte di esso
Old 11-09-2006, 11:15   #26
Marco Giunio Silano
Senior Member
 
L'Avatar di Marco Giunio Silano
 
Iscritto dal: Jun 2006
Città: Inverno: Novgorod. Estate: Haifa
Messaggi: 879
Quote:
Originariamente inviato da DavidGT
(peccato che sia senza compilatore)
Ma, da quanto visto, c'è Trallallero che sta facendo da compilatore umano
Ben tornato trallallero!
__________________
Hosti non solum dandam esse viam ad fugiendum, sed etiam muniendam / Ceterum censeo Carthaginem esse delendam / Et facere et pati fortia romanum est / Nemo Romanorum pacis mentionem habere dignatus est / Roma locuta, causa finita
Milla
Marco Giunio Silano è offline   Rispondi citando il messaggio o parte di esso
Old 11-09-2006, 11:16   #27
DavidGT
Member
 
Iscritto dal: Jul 2005
Messaggi: 151
Quote:
Originariamente inviato da Marco Giunio Silano
Ma, da quanto visto, c'è Trallallero che sta facendo da compilatore umano
Ben tornato trallallero!
Senza compilatore all'esame....
DavidGT è offline   Rispondi citando il messaggio o parte di esso
Old 11-09-2006, 11:27   #28
trallallero
Senior Member
 
L'Avatar di trallallero
 
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
Quote:
Originariamente inviato da Marco Giunio Silano
Ma, da quanto visto, c'è Trallallero che sta facendo da compilatore umano
Segnalato!!!
compilatore lo dici al tuo gatto

Quote:
Originariamente inviato da Marco Giunio Silano
Ben tornato trallallero!
grazie ma stavo meglio prima
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z Mb - Win Eight SP (1 > yours) 16 Valve
trallallero è offline   Rispondi citando il messaggio o parte di esso
Old 11-09-2006, 11:31   #29
Marco Giunio Silano
Senior Member
 
L'Avatar di Marco Giunio Silano
 
Iscritto dal: Jun 2006
Città: Inverno: Novgorod. Estate: Haifa
Messaggi: 879
Quote:
Originariamente inviato da trallallero
Segnalato!!!
compilatore lo dici al tuo gatto


grazie ma stavo meglio prima
Bè non conosco il prima, ma t'immagino in ferie, quindi meglio.
ok ok, basta OT. Chiedo venia
__________________
Hosti non solum dandam esse viam ad fugiendum, sed etiam muniendam / Ceterum censeo Carthaginem esse delendam / Et facere et pati fortia romanum est / Nemo Romanorum pacis mentionem habere dignatus est / Roma locuta, causa finita
Milla
Marco Giunio Silano è offline   Rispondi citando il messaggio o parte di esso
Old 11-09-2006, 15:04   #30
DavidGT
Member
 
Iscritto dal: Jul 2005
Messaggi: 151
Nuovo esercizio...

Oggi volevo provare ad ordinare una lista dinamica, e stavo provando un algoritmo tipo bubble sort che usavo per gli array.


il problema è che poniamo io abbia 3 elementi:
(a priori io non so se il primo elemento è più grande del secondo o no)

|3| --> |2| --> |5|

se scambio di posto il primo con il secondo perdo l'indirizzo della testa dell'array e quando vado a stamparlo non funziona.

Come posso fare?!

Avete un algoritmo da propormi che risolva il problema?

Grazie
DavidGT è offline   Rispondi citando il messaggio o parte di esso
Old 11-09-2006, 15:10   #31
trallallero
Senior Member
 
L'Avatar di trallallero
 
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
devi scambiare di posto il valore non l'indirizzo
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z Mb - Win Eight SP (1 > yours) 16 Valve
trallallero è offline   Rispondi citando il messaggio o parte di esso
Old 11-09-2006, 15:12   #32
DavidGT
Member
 
Iscritto dal: Jul 2005
Messaggi: 151
Quote:
Originariamente inviato da trallallero
devi scambiare di posto il valore non l'indirizzo
non ci avevo pensato... si vede che sono un pivello!!
DavidGT è offline   Rispondi citando il messaggio o parte di esso
Old 11-09-2006, 15:16   #33
trallallero
Senior Member
 
L'Avatar di trallallero
 
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
Quote:
Originariamente inviato da DavidGT
non ci avevo pensato... si vede che sono un pivello!!
mai vantarsi
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z Mb - Win Eight SP (1 > yours) 16 Valve
trallallero è offline   Rispondi citando il messaggio o parte di esso
Old 11-09-2006, 22:38   #34
DavidGT
Member
 
Iscritto dal: Jul 2005
Messaggi: 151
Nuovo programmino..... altro problema

Ho una lista di array, devo fare la media del singolo array e poi la media di tutto.

Perchè non mi prende i decimali?!?!

Anche se metto 17/4, risultato = 4....

ho messo sia double che float...
perchè???

Grazie!

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

typedef struct el {
	int A[5];
	struct el *next;
} elemento;

float mediavect (int array[]);
float sommalista (elemento *head);
int numel (elemento *head);
float medialista (elemento *head);


void main () {

	elemento *lista,*lista1,*lista2,*lista3;
	float media;


	lista=(elemento *)malloc(sizeof(elemento));
	lista->A[0]=4;
	lista->A[1]=2;
	lista->A[2]=3;
	lista->A[3]=8;
	lista->A[4]='\0';


	lista1=(elemento *)malloc(sizeof(elemento));
	lista->next=lista1;
	lista1->A[0]=3;
	lista1->A[1]=1;
	lista1->A[2]=6;
	lista1->A[3]='\0';


	lista2=(elemento *)malloc(sizeof(elemento));
	lista1->next=lista2;
	lista2->A[0]=1;
	lista2->A[1]=1;
	lista2->A[2]='\0';


	lista3=(elemento *)malloc(sizeof(elemento));
	lista2->next=lista3;
	lista3->A[0]=4;
	lista3->A[1]='\0';

	lista3->next=NULL;

	media=medialista(lista);
	media=17/4;

	printf("%f",media);

}

float mediavect (int array[]) {

		int i=0,somma=0;
		float media=0.0;

	while (array[i] != '\0') {
		somma=somma+array[i];
		i=i+1;
	}

	media=somma / i;
	return media;
}

float sommalista (elemento *head) {

		float ris=0.0;

	if (head == NULL)
		return 0.0;
	else
		ris=mediavect(head->A)+sommalista(head->next);
		return ris;
   }

int numel (elemento *head) {

		int num=0;

	if (head == NULL)
		return 0;
	else
		num=1 + numel(head->next);
		return num;
}

float medialista (elemento *head) {

		float media=0.0;

	media=sommalista(head)/numel(head);
	return media;
}
DavidGT è offline   Rispondi citando il messaggio o parte di esso
Old 11-09-2006, 23:01   #35
Paco De Luciaaaaa
Senior Member
 
L'Avatar di Paco De Luciaaaaa
 
Iscritto dal: Mar 2005
Città: Torino... ma Abruzzo rulez!
Messaggi: 613
Quote:
Originariamente inviato da DavidGT
guardate un secondo questo...

perchè non mi prende in modo corretto l'anno??

Grazie!!

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

//Creare un programma che permetta di creare una lista di
//nominativi che contenga una anagrafica con i seguenti dati: nome cognome e data di
//nascita. Le funzionalità richieste sono l’inserimento di nuovi nominativi e la stampa di tutto
//l’archivio.

typedef struct el {
	int anno;
	char nome[10];
	char cognome[10];
	struct el *next;
} elemento;


elemento * inseriscitesta (elemento *head);
void stampa (elemento *head);


void main () {


	int scelta=5;
	elemento *lista;

	lista=NULL;

	while (scelta != 9) {
	printf("Se vuoi inserire un nominativo premi 1 altrimenti premi 0 per stampare la lista || per uscire 9\n\n");
	scanf("%d",&scelta);

	if (scelta == 1) {

		lista=inseriscitesta(lista);
	}

	if (scelta == 2) {

		stampa (lista);

	}
}
}




elemento * inseriscitesta (elemento *head) {

	elemento *new;

	new=(elemento *)malloc(sizeof(elemento));
	new->next=head;

		printf("Inserire il nome\n");
		scanf("%s", new->nome);
		printf("Inserire il cognome\n");
		scanf("%s", new->cognome);
		printf("Inserire anno di nascita\n");
		scanf("%d", new->anno);

	return new;
}

void stampa (elemento *head) {

	while (head != NULL) {

		printf("%s - %s - %d\n", head->nome, head->cognome, head->anno);
		head=head->next;
	}
}

Probabilmente perchè nello stream dopo aver letto la stringa cognome rimane il carattere di spaziatura e/o LF eo '\n'

prova a modificare così:
Codice:
	scanf("%s%*c", new->cognome);
__________________
Case AT big tower - Mobo XXX - amd 486DX2@66Mhz - 8 MB edo-ram - Trident SVGA 2MB - HDD 270MB Conner - CD-ROM Hitachi 4X
"Muletto": DFI Lanparty LT X38@X48 T2R - e8400@3870 1.2xV - 4GB black dragon @ 1147 - 2x320 Barracuda 0Raided - from 8800GT Club3d to 5850 Sapphire
Paco De Luciaaaaa è offline   Rispondi citando il messaggio o parte di esso
Old 11-09-2006, 23:06   #36
Paco De Luciaaaaa
Senior Member
 
L'Avatar di Paco De Luciaaaaa
 
Iscritto dal: Mar 2005
Città: Torino... ma Abruzzo rulez!
Messaggi: 613
Quote:
Originariamente inviato da DavidGT
Ho una lista di array, devo fare la media del singolo array e poi la media di tutto.

Perchè non mi prende i decimali?!?!

Anche se metto 17/4, risultato = 4....

ho messo sia double che float...
perchè???

Grazie!
La divisione di due numeri interi in c restituisce sempre un intero, devi forzare con un cast a float quindi:
Codice:
media = (float ) 17/4;

P.S. Quando usi la malloc abbi sempre l'accortezza di controllare che l'esito dell'allocazione sia avvenuto correttamente, te l'hanno detto anche sopra.

es.
Codice:
puntatore = ( cast *) malloc (sizeof(cast));
if (puntatore == NULL){
   fprintf(stdout,"\nErrore di allocazione della memoria.");
   free( ...); // tutti i puntatori a strutture create in precedenza
   exit(-1);
}
__________________
Case AT big tower - Mobo XXX - amd 486DX2@66Mhz - 8 MB edo-ram - Trident SVGA 2MB - HDD 270MB Conner - CD-ROM Hitachi 4X
"Muletto": DFI Lanparty LT X38@X48 T2R - e8400@3870 1.2xV - 4GB black dragon @ 1147 - 2x320 Barracuda 0Raided - from 8800GT Club3d to 5850 Sapphire

Ultima modifica di Paco De Luciaaaaa : 11-09-2006 alle 23:11.
Paco De Luciaaaaa è offline   Rispondi citando il messaggio o parte di esso
Old 12-09-2006, 17:42   #37
DavidGT
Member
 
Iscritto dal: Jul 2005
Messaggi: 151
Forse l'ultima domanda :-)

Perchè in questa funzione ho dovuto mettere un puntatore alla testa della lista (elemento *lista) altrimenti mi perdeva l'indirizzo scorrendo la funzione

Codice:
elemento *controllopos(elemento *head, elemento *conf, elemento *lista,elemento *prec) {

	elemento *temp, *succ;

	if (head->next == NULL)
		return lista;

	if (conf == NULL) {
		temp=head->next;

		return head=controllopos(head->next, temp->next,lista,head->next);
	}
	else {
		if (head->pedina.x == conf->pedina.x && head->pedina.y == conf->pedina.y) {

			temp=prec;
			temp->next=conf->next;
			free(conf);
			conf=temp->next;
			return head=controllopos(head, conf,lista,prec);
		}

		return head=controllopos(head, conf->next, lista,prec->next);
	}
}
mentre invece in quest'altra funzione alla fine ritorno lo stesso head, che anch'esso è stato incrementato, e punta alla testa iniziale anche senza ricorrere al riferimento in testata come avevo fatto prima?????

Codice:
elemento * elimina (elemento *head, char cercacogn[10]) {
	elemento *succ;
	succ=head->next;

	if (strcmp(succ->cognome,cercacogn)==0) {

		free(succ);
		head->next=succ->next;
	}

	else
		if(head!=NULL) {
			succ=head->next;
			elimina((head->next), cercacogn);
		}

	return head;
}

Non so se mi sono spiegato bene....
DavidGT è offline   Rispondi citando il messaggio o parte di esso
Old 12-09-2006, 19:46   #38
DavidGT
Member
 
Iscritto dal: Jul 2005
Messaggi: 151
UP
DavidGT è offline   Rispondi citando il messaggio o parte di esso
Old 12-09-2006, 20:32   #39
Paco De Luciaaaaa
Senior Member
 
L'Avatar di Paco De Luciaaaaa
 
Iscritto dal: Mar 2005
Città: Torino... ma Abruzzo rulez!
Messaggi: 613
Nel primo caso è ovvio: chiami recursivamente la funzione ma devi considerare che in quel caso il puntatore head alla lista lo devi passare by reference e quindi accedervi come doppio puntatore.

Nel secondo caso ci sarà un errore a run time perchè usi la free e poi tenti di accedere al campo succ che è stato eliminato.


Cmq devi ben imparare 2 cose fondamentali:
- La ricorsione è molto elegante ma devi saperla usare. Basta un ciclo while e un puntatore che funge da scorritore
- Il passaggio dei parametri in una funzione e il loro ambiente o scope.

Ciao
__________________
Case AT big tower - Mobo XXX - amd 486DX2@66Mhz - 8 MB edo-ram - Trident SVGA 2MB - HDD 270MB Conner - CD-ROM Hitachi 4X
"Muletto": DFI Lanparty LT X38@X48 T2R - e8400@3870 1.2xV - 4GB black dragon @ 1147 - 2x320 Barracuda 0Raided - from 8800GT Club3d to 5850 Sapphire
Paco De Luciaaaaa è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


ASUS NUC 15 Pro e NUC 15 Pro+, mini PC che fondono completezza e duttilità ASUS NUC 15 Pro e NUC 15 Pro+, mini PC che fondo...
Cybersecurity: email, utenti e agenti IA, la nuova visione di Proofpoint Cybersecurity: email, utenti e agenti IA, la nuo...
Hisense A85N: il ritorno all’OLED è convincente e alla portata di tutti Hisense A85N: il ritorno all’OLED è convi...
Acer TravelMate P6 14 AI: il Copilot+ PC sotto il chilo per il professionista in movimento Acer TravelMate P6 14 AI: il Copilot+ PC sotto i...
Recensione Borderlands 4, tra divertimento e problemi tecnici Recensione Borderlands 4, tra divertimento e pro...
Xbox Game Pass cambia: nuovi piani e pre...
Intel produrrà chip per AMD? L'in...
Ecco il nuovo Amazon Luna: videogiochi p...
ISRO: prosegue lo sviluppo della navicel...
CoD Black Ops 7 offrirà la beta p...
Il telescopio spaziale James Webb sta ai...
Crucial spinge sui moduli LPCAMM2: fino ...
Imgur blocca gli utenti del Regno Unito:...
ROG Xbox Ally già in consegna: qu...
Ubisoft annuncia Vantage Studios: Assass...
Il solare diventa la prima fonte di elet...
Google Home si rinnova completamente: ar...
Dense Geometry Format (DGF): novit&agrav...
Gemini for Home arriva a ottobre sui dis...
Amazon Smart Air Quality Monitor: a soli...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 02:15.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v