Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Sony INZONE H6 Air: il primo headset open-back di Sony per giocatori
Sony INZONE H6 Air: il primo headset open-back di Sony per giocatori
Il primo headset open-back della linea INZONE arriva a 200 euro con driver derivati dalle cuffie da studio MDR-MV1 e un peso record di soli 199 grammi
Nutanix cambia pelle: dall’iperconvergenza alla piattaforma full stack per cloud ibrido e IA
Nutanix cambia pelle: dall’iperconvergenza alla piattaforma full stack per cloud ibrido e IA
Al .NEXT 2026 di Chicago, Nutanix ha mostrato quanto sia cambiata: una piattaforma software che gestisce VM, container e carichi di lavoro IA ovunque, dall’on-premise al cloud pubblico. Con un’esecuzione rapidissima sulle partnership e sulla migrazione da VMware
Recensione Xiaomi Pad 8 Pro: potenza bruta e HyperOS 3 per sfidare la fascia alta
Recensione Xiaomi Pad 8 Pro: potenza bruta e HyperOS 3 per sfidare la fascia alta
Xiaomi Pad 8 Pro adotta il potente Snapdragon 8 Elite all'interno di un corpo con spessore di soli 5,75 mm e pannello LCD a 144Hz flicker-free, per un tablet che può essere utilizzato con accessori dedicati di altissima qualità. Fra le caratteristiche esclusive, soprattutto per chi intende usarlo con la tastiera ufficiale, c'è la modalità Workstation di HyperOS 3, che trasforma Android in un sistema operativo con interfaccia a finestre
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 21-01-2004, 19:50   #1
Dark_Tranquillity
Member
 
Iscritto dal: Mar 2001
Messaggi: 53
[C] incompatible pointer

binsearch.c: In function `main':
binsearch.c:34: warning: passing arg 4 of `bin_search' from incompatible pointer type
binsearch.c:35: warning: comparison between pointer and integer


Cos'è come risolvo???

Ho messo le righe 34 e 35 in grassetto
Codice:
#include <stdio.h>
#include <malloc.h>

/* PROTOTIPO FUNZIONE */
void bin_search(float *A, int n, float chiave, float **ris);

/* PROGRAMMA CHIAMANTE*/
main()
{
	/* DICHIARAZIONE VARIABILI */
	float *A, *out[2], chiave;
	int i, c;
	int n, posiz;

	/* LETTURA ELEMENTI ARRAY */
	printf("Inserire il numero di elementi formanti l'array: ");
	scanf("%d",&n);

	/* ALLOCAZIONE DINAMICA DELLA MEMORIA */
	if(!(A = (float *)malloc(n*sizeof(float))))
	abort();

	/* LETTURA ELEMENTI ARRAY */
	printf("\n");
	for (i=0; i<=n-1; i++){
	printf("Inserire il valore dell'elemento %d: ", c=i+1);
	scanf("%f", &A[i]);
	}

	/* NUMERO DA RICERCARE */
	printf("\nInserire il numero che si desidera individuare: ");
	scanf("%f", &chiave);

	bin_search(A, n, chiave, &out);
	if (out[0]==1){
	printf ("Il valore %f è presente ed è situato nella locazione di mem %f",out[1], out[2]);
	} else {
	printf("Valore non presente");
	}
	
	free(A);
}

/****************** SPECIFICHE FUNZIONE *************************/
void bin_search(float *A, int n, float chiave, float **ris)
{
int alto, basso, centro, pos;

	alto = 0;
	basso = n-1;
	pos = -1;
	do {
	centro = (alto+basso)/2;
	if (A[centro]==chiave)
		{pos = centro;}
	else if (A[centro]<chiave)
		{alto = centro+1;}
	else
		{basso = centro-1;}
	}
	while(alto<=basso && pos==-1);

if(pos!= -1){
	*ris[0] = 1;
	*ris[1] = chiave;
	*ris[2] = pos; }
else
	*ris[0] = 0;
}
Dark_Tranquillity è offline   Rispondi citando il messaggio o parte di esso
Old 21-01-2004, 20:32   #2
xybercom
Senior Member
 
L'Avatar di xybercom
 
Iscritto dal: Dec 2000
Città: dintorni di Seregno (MI)
Messaggi: 312
Il programma funziona ?
I warning spesso ( ma non sempre ) si possono trascurare almeno se il programma va.

Comunque alla linea 35 stai confrontando un puntatore a float (out[0]) con un intero che non penso sia quello che vuoi.
Nella 34 penso che dovrebbe funzionare (ma non sono sicurissimo): &(out[0]) o addirittura out al posto di &out [out dovrebbe essere infatti l'indirizzo del primo puntatore out[0]).
__________________
powered by GNU/Linux [ Debian Sid ]
xybercom è offline   Rispondi citando il messaggio o parte di esso
Old 21-01-2004, 20:52   #3
Dark_Tranquillity
Member
 
Iscritto dal: Mar 2001
Messaggi: 53
Quote:
Originariamente inviato da xybercom
Il programma funziona ?
I warning spesso ( ma non sempre ) si possono trascurare almeno se il programma va.
giusto....
e come faccio a rendere un valore float intero???
Dark_Tranquillity è offline   Rispondi citando il messaggio o parte di esso
Old 21-01-2004, 21:09   #4
xybercom
Senior Member
 
L'Avatar di xybercom
 
Iscritto dal: Dec 2000
Città: dintorni di Seregno (MI)
Messaggi: 312
?? Come ti dice il compilatore out[0] è puntatore a un float = contiene l'indirizzo di memoria relativo a una variabile floating point , non è una variabile float (almeno stando alla tua dichiarazione).
Come la confronti con l'intero 1 non lo so (se vuoi prova a fare cout << out[0]).
Diverso sarebbe stato se tu avessi confrontato il puntatore con 0, in quanto i puntatori non inizializzati in genere hanno il valore 0 (che è interpretato come null dalla maggior parte dei compilatori a quanto ne so).

Per convertire un float in intero si usa un cast, es.
float x;
int j=5;
x = (float)(j); // ora x=5.0
x++;
j = (int)(x); // ora j=6
__________________
powered by GNU/Linux [ Debian Sid ]

Ultima modifica di xybercom : 21-01-2004 alle 21:12.
xybercom è offline   Rispondi citando il messaggio o parte di esso
Old 21-01-2004, 21:39   #5
Dark_Tranquillity
Member
 
Iscritto dal: Mar 2001
Messaggi: 53
Perfetto grazie dell'aiuto...
ora si compila senza problemi, ma se il valore da cercare. esiste nell'array và in segmentation fault

Spero mi voglia tu aiutare...
è per l'esame di programmazione che ho tra pochi giorni

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

/* PROTOTIPO FUNZIONE */
void bin_search(int *A, int n, int chiave, int **ris);

/* PROGRAMMA CHIAMANTE*/
main()
{
	/* DICHIARAZIONE VARIABILI */
	int *A, *out[2], chiave;
	int i, c;
	int n, posiz;

	/* LETTURA ELEMENTI ARRAY */
	printf("Inserire il numero di elementi formanti l'array: ");
	scanf("%d",&n);

	/* ALLOCAZIONE DINAMICA DELLA MEMORIA */
	if(!(A = (int *)malloc(n*sizeof(int))))
	abort();

	/* LETTURA ELEMENTI ARRAY */
	printf("\n");
	for (i=0; i<=n-1; i++){
	printf("Inserire il valore dell'elemento %d: ", c=i+1);
	scanf("%d", &A[i]);
	}

	/* NUMERO DA RICERCARE */
	printf("\nInserire il numero che si desidera individuare: ");
	scanf("%d", &chiave);

	bin_search(A, n, chiave, out);
		
	printf("Esito: %d \n Chiave: %d \n Posizione: %d", out[0], out[1], out[2]);
	
	free(A);
}

/****************** SPECIFICHE FUNZIONE *************************/
void bin_search(int *A, int n, int chiave, int **ris)
{
int alto, basso, centro, pos;

	alto = 0;
	basso = n-1;
	pos = -1;
	do {
	centro = (alto+basso)/2;
	if (A[centro]==chiave)
		{pos = centro;}
	else if (A[centro]<chiave)
		{alto = centro+1;}
	else
		{basso = centro-1;}
	}
	while(alto<=basso && pos==-1);

if(pos!= -1){
	*ris[0] = 1;
	*ris[1] = chiave;
	*ris[2] = pos; }
else
	*ris[0] = 0;
}
Dark_Tranquillity è offline   Rispondi citando il messaggio o parte di esso
Old 21-01-2004, 21:47   #6
xybercom
Senior Member
 
L'Avatar di xybercom
 
Iscritto dal: Dec 2000
Città: dintorni di Seregno (MI)
Messaggi: 312
La funzione di ricerca non mi convince molto comunque devi dichiarare
int *out[3] e non int *out[2];
se vuoi poter accedere a out[2] infatti quando dichiarari un array gli elementi vanno da 0 a size-1, esempio
int a[3]; // array di 3 elementi, a[0],a[1],a[2]
int a[2]; // array di 2 elementi, a[0],a[1]


Inoltre nella funzione di ricerca puoi usare esplicitamente int *ris[3] invece che int **ris ( e si può fare di meglio ma te lo racconto quando il programma ti va).
__________________
powered by GNU/Linux [ Debian Sid ]
xybercom è offline   Rispondi citando il messaggio o parte di esso
Old 21-01-2004, 21:50   #7
xybercom
Senior Member
 
L'Avatar di xybercom
 
Iscritto dal: Dec 2000
Città: dintorni di Seregno (MI)
Messaggi: 312
Ah, non è che sei del Politecnico di milano ?
__________________
powered by GNU/Linux [ Debian Sid ]

Ultima modifica di xybercom : 22-01-2004 alle 06:20.
xybercom è offline   Rispondi citando il messaggio o parte di esso
Old 21-01-2004, 21:51   #8
Bane
Member
 
Iscritto dal: Aug 2003
Messaggi: 125
Per iniziare:

Dichiari un vettore di puntatori a int (int *out[2]) ma non gli allochi la memoria necessaria.

out[0] = new (int);
out[1] = new (int);
out[2] = new (int);


Dichiari un vettore di 2 elementi e lo utilizzi come ne avesse 3 (*ris[2] = pos).
Bane è offline   Rispondi citando il messaggio o parte di esso
Old 21-01-2004, 21:54   #9
Dark_Tranquillity
Member
 
Iscritto dal: Mar 2001
Messaggi: 53
ahi ancora segmentation fault
deve funzionare

cmq la funzione l'ho copiata da Linguaggio C di bellini-guidi

no non sono del politecnico sto alla federico II
Dark_Tranquillity è offline   Rispondi citando il messaggio o parte di esso
Old 21-01-2004, 21:56   #10
Bane
Member
 
Iscritto dal: Aug 2003
Messaggi: 125
Sistemato in velocita'... controllalo pero'

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

/* PROTOTIPO FUNZIONE */
void bin_search(int *A, int n, int chiave, int **ris);

/* PROGRAMMA CHIAMANTE*/
main()
{
/* DICHIARAZIONE VARIABILI */
int *A, *out[3], chiave;
int i, c;
int n;

out[0] = new (int);
out[1] = new (int);
out[2] = new (int);



/* LETTURA ELEMENTI ARRAY */
printf("Inserire il numero di elementi formanti l'array: ");
scanf("%d",&n);

/* ALLOCAZIONE DINAMICA DELLA MEMORIA */
if(!(A = (int *)malloc(n*sizeof(int))))
abort();

/* LETTURA ELEMENTI ARRAY */
printf("\n");
for (i=0; i<=n-1; i++){
printf("Inserire il valore dell'elemento %d: ", c=i+1);
scanf("%d", &A[i]);
}

/* NUMERO DA RICERCARE */
printf("\nInserire il numero che si desidera individuare: ");
scanf("%d", &chiave);

bin_search(A, n, chiave, out);

printf("Esito: %d \n Chiave: %d \n Posizione: %d", *out[0], *out[1], *out[2]+1);

free(A);
return 0;
}

/****************** SPECIFICHE FUNZIONE *************************/
void bin_search(int *A, int n, int chiave, int **ris)
{
int alto, basso, centro, pos;

alto = 0;
basso = n-1;
pos = -1;
do {
centro = (alto+basso)/2;
if (A[centro]==chiave)
{pos = centro;}
else if (A[centro]<chiave)
{alto = centro+1;}
else
{basso = centro-1;}
}
while(alto<=basso && pos==-1);

if(pos!= -1){
*ris[0] = 1;
*ris[1] = chiave;
*ris[2] = pos; }
else
*ris[0] = 0;
}
Bane è offline   Rispondi citando il messaggio o parte di esso
Old 21-01-2004, 21:57   #11
maxithron
Senior Member
 
L'Avatar di maxithron
 
Iscritto dal: Mar 2002
Città: Italy/Usa
Messaggi: 2817
Quote:
Originariamente inviato da Dark_Tranquillity
ahi ancora segmentation fault
deve funzionare

cmq la funzione l'ho copiata da Linguaggio C di bellini-guidi

no non sono del politecnico sto alla federico II
Federico II di Napoli?
__________________
"Utilizzando atomi pentavalenti drogheremo il silicio di tipo n;
Utilizzando atomi trivalenti drogheremo il silicio di tipo p;
Utilizzando della cannabis ci drogheremo noi e vedremo il silicio fare cose impossibili" - DSDT-HowTo
maxithron è offline   Rispondi citando il messaggio o parte di esso
Old 21-01-2004, 21:59   #12
xybercom
Senior Member
 
L'Avatar di xybercom
 
Iscritto dal: Dec 2000
Città: dintorni di Seregno (MI)
Messaggi: 312
-edited-
__________________
powered by GNU/Linux [ Debian Sid ]
xybercom è offline   Rispondi citando il messaggio o parte di esso
Old 21-01-2004, 21:59   #13
Dark_Tranquillity
Member
 
Iscritto dal: Mar 2001
Messaggi: 53
Quote:
Originariamente inviato da maxithron
Federico II di Napoli?

anche tu lì??? che studi???
Dark_Tranquillity è offline   Rispondi citando il messaggio o parte di esso
Old 21-01-2004, 22:01   #14
Dark_Tranquillity
Member
 
Iscritto dal: Mar 2001
Messaggi: 53
Quote:
Originariamente inviato da xybercom
-edited-
quindi le new le posso usare?
Dark_Tranquillity è offline   Rispondi citando il messaggio o parte di esso
Old 21-01-2004, 22:04   #15
maxithron
Senior Member
 
L'Avatar di maxithron
 
Iscritto dal: Mar 2002
Città: Italy/Usa
Messaggi: 2817
Quote:
Originariamente inviato da Dark_Tranquillity

anche tu lì??? che studi???

No...non sono li e non studio da nessun'altra parte se non a casa mia

Era solo una curiosità.

Fine [OT]
__________________
"Utilizzando atomi pentavalenti drogheremo il silicio di tipo n;
Utilizzando atomi trivalenti drogheremo il silicio di tipo p;
Utilizzando della cannabis ci drogheremo noi e vedremo il silicio fare cose impossibili" - DSDT-HowTo
maxithron è offline   Rispondi citando il messaggio o parte di esso
Old 21-01-2004, 22:07   #16
xybercom
Senior Member
 
L'Avatar di xybercom
 
Iscritto dal: Dec 2000
Città: dintorni di Seregno (MI)
Messaggi: 312
Allora, new in C non c'è a quanto ne so.
Comunque è vero, int *out[3] rappresenta un array di puntatori, non può scriverci sopra se prima non allochi la memoria per gli oggetti puntati.

Adesso dovrebbe funzionare, sto passando direttamente alla funzione di ricerca l'array out[3] (esattamente come per A).


#include <stdio.h>
#include <malloc.h>

/* PROTOTIPO FUNZIONE */
void bin_search(int *A, int n, int chiave, int ris[3]);

/* PROGRAMMA CHIAMANTE*/
main()
{
/* DICHIARAZIONE VARIABILI */
int *A, out[3], chiave;
int i, c;
int n, posiz;

/* LETTURA ELEMENTI ARRAY */
printf("Inserire il numero di elementi formanti l'array: ");
scanf("%d",&n);

/* ALLOCAZIONE DINAMICA DELLA MEMORIA */
if(!(A = (int *)malloc(n*sizeof(int))))
abort();

/* LETTURA ELEMENTI ARRAY */
printf("\n");
for (i=0; i<=n-1; i++){
printf("Inserire il valore dell'elemento %d: ", c=i+1);
scanf("%d", &A[i]);
}

/* NUMERO DA RICERCARE */
printf("\nInserire il numero che si desidera individuare: ");
scanf("%d", &chiave);

bin_search(A, n, chiave, out);

printf("Esito: %d \n Chiave: %d \n Posizione: %d", out[0], out[1], out[2]);

free(A);
return 0;
}

/****************** SPECIFICHE FUNZIONE *************************/
void bin_search(int *A, int n, int chiave, int ris[3])
{
int alto, basso, centro, pos;

alto = 0;
basso = n-1;
pos = -1;
do {
centro = (alto+basso)/2;
if (A[centro]==chiave)
{pos = centro;}
else if (A[centro]<chiave)
{alto = centro+1;}
else
{basso = centro-1;}
}
while(alto<=basso && pos==-1);

if(pos!= -1){
ris[0] = 1;
ris[1] = chiave;
ris[2] = pos; }
else
ris[0] = 0;
}
__________________
powered by GNU/Linux [ Debian Sid ]
xybercom è offline   Rispondi citando il messaggio o parte di esso
Old 21-01-2004, 22:07   #17
Dark_Tranquillity
Member
 
Iscritto dal: Mar 2001
Messaggi: 53
lo provo
Dark_Tranquillity è offline   Rispondi citando il messaggio o parte di esso
Old 21-01-2004, 22:10   #18
Dark_Tranquillity
Member
 
Iscritto dal: Mar 2001
Messaggi: 53
uà sei un toro
funziona da dio
Dark_Tranquillity è offline   Rispondi citando il messaggio o parte di esso
Old 21-01-2004, 22:11   #19
Bane
Member
 
Iscritto dal: Aug 2003
Messaggi: 125
Quote:
Originariamente inviato da xybercom
Allora, new in C non c'è a quanto ne so.
Argh, hai perfettamente ragione, la forza dell'abitudine =))
Bane è offline   Rispondi citando il messaggio o parte di esso
Old 21-01-2004, 22:12   #20
xybercom
Senior Member
 
L'Avatar di xybercom
 
Iscritto dal: Dec 2000
Città: dintorni di Seregno (MI)
Messaggi: 312
Mi è sembrato più sensato usare un array statico dato che sappiamo già che ci sono 3 elementi di ritorno.
Altrimenti si può allocare dinamicamente anche out:
cioè

int *out = (int *) malloc ( 3 * sizeof(int) );

se non vuoi cambiare la definizione originale della funzione basta poi che gli passi &out.
__________________
powered by GNU/Linux [ Debian Sid ]
xybercom è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Sony INZONE H6 Air: il primo headset open-back di Sony per giocatori Sony INZONE H6 Air: il primo headset open-back d...
Nutanix cambia pelle: dall’iperconvergenza alla piattaforma full stack per cloud ibrido e IA Nutanix cambia pelle: dall’iperconvergenza alla ...
Recensione Xiaomi Pad 8 Pro: potenza bruta e HyperOS 3 per sfidare la fascia alta Recensione Xiaomi Pad 8 Pro: potenza bruta e Hyp...
NZXT H9 Flow RGB+, Kraken Elite 420 e F140X: abbiamo provato il tris d'assi di NZXT NZXT H9 Flow RGB+, Kraken Elite 420 e F140X: abb...
ASUS ROG Swift OLED PG34WCDN recensione: il primo QD-OLED RGB da 360 Hz ASUS ROG Swift OLED PG34WCDN recensione: il prim...
Ecovacs presenta la gamma 2026: paviment...
Efficienza energetica fino a 2.000 volte...
Lenovo 360: il programma di canale dell'...
Appena 10.000 qubit per rompere la critt...
Analisi dei transistor durante il funzio...
Attacco informatico a Booking.com: espos...
A quattro mesi dal divieto dei social ne...
NVIDIA GeForce RTX 5060 e 5060 Ti: in ar...
Rebellions, Arm e SK Telecom, nuova alle...
Modernizzazione delle app: Red Hat OpenS...
Nel mirino di Google c'è il back ...
PRAGMATA in bundle con GeForce RTX 5000:...
Le novità MOVA per il 2026: robot e impi...
Windows, stop all'attivazione telefonica...
ASUS porta la serie TUF nel formato Mini...
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: 04:29.


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