Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Le soluzioni FSP per il 2026: potenza e IA al centro
Le soluzioni FSP per il 2026: potenza e IA al centro
In occasione del Tech Tour 2025 della European Hardware Association abbiamo incontrato a Taiwan FSP, azienda impegnata nella produzione di alimentatori, chassis e soluzioni di raffreddamento tanto per clienti OEM come a proprio marchio. Potenze sempre più elevate negli alimentatori per far fronte alle necessità delle elaborazioni di intelligenza artificiale.
AWS annuncia European Sovereign Cloud, il cloud sovrano per convincere l'Europa
AWS annuncia European Sovereign Cloud, il cloud sovrano per convincere l'Europa
AWS è il principale operatore di servizi cloud al mondo e da tempo parla delle misure che mette in atto per garantire una maggiore sovranità alle organizzazioni europee. L'azienda ha ora lanciato AWS European Sovereign Cloud, una soluzione specificamente progettata per essere separata e distinta dal cloud "normale" e offrire maggiori tutele e garanzie di sovranità
Redmi Note 15 Pro+ 5G: autonomia monstre e display luminoso, ma il prezzo è alto
Redmi Note 15 Pro+ 5G: autonomia monstre e display luminoso, ma il prezzo è alto
Xiaomi ha portato sul mercato internazionale la nuova serie Redmi Note, che rappresenta spesso una delle migliori scelte per chi non vuole spendere molto. Il modello 15 Pro+ punta tutto su una batteria capiente e su un ampio display luminoso, sacrificando qualcosa in termini di potenza bruta e velocità di ricarica
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 21-01-2004, 20: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, 21: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, 21: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, 22: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 22:12.
xybercom è offline   Rispondi citando il messaggio o parte di esso
Old 21-01-2004, 22: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, 22: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, 22: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 07:20.
xybercom è offline   Rispondi citando il messaggio o parte di esso
Old 21-01-2004, 22: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, 22: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, 22: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, 22: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, 22: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, 22: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, 23: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, 23: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, 23: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, 23: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, 23: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, 23: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, 23: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


Le soluzioni FSP per il 2026: potenza e IA al centro Le soluzioni FSP per il 2026: potenza e IA al ce...
AWS annuncia European Sovereign Cloud, il cloud sovrano per convincere l'Europa AWS annuncia European Sovereign Cloud, il cloud ...
Redmi Note 15 Pro+ 5G: autonomia monstre e display luminoso, ma il prezzo è alto Redmi Note 15 Pro+ 5G: autonomia monstre e displ...
HONOR Magic 8 Pro: ecco il primo TOP del 2026! La recensione HONOR Magic 8 Pro: ecco il primo TOP del 2026! L...
Insta360 Link 2 Pro e 2C Pro: le webcam 4K che ti seguono, anche con gimbal integrata Insta360 Link 2 Pro e 2C Pro: le webcam 4K che t...
Il remake di Assassin's Creed IV: Black ...
Tutti i robot aspirapolvere in offerta s...
Amazon Haul spinge la promo di San Valen...
Offerte hardware Amazon per l'upgrade de...
iPhone 17e dovrà fare i conti con...
Offerte Amazon sugli iPhone di ultima ge...
DJI Mini 5 Pro Combo Fly More scende a 8...
Ubisoft potrebbe licenziare ancora ma se...
Samsung Galaxy S26: un leak anticipa col...
Aetherflux e Lockheed Martin insieme per...
SpaceX sta proseguendo i test della terz...
Axiom Space ha mostrato un nuovo video d...
Realme: la trasformazione in sub-brand d...
PlayStation 6 si farà attendere: ...
BWT Alpine chiude la prima tornata di pr...
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: 21:56.


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