Torna indietro   Hardware Upgrade Forum > Software > Programmazione

 Hisense 55U7SE: tuttofare e accessibile, il MiniLED per film, sport e gioco
Hisense 55U7SE: tuttofare e accessibile, il MiniLED per film, sport e gioco
MiniLED di fascia media con local dimming a 192 zone, 144 Hz nativi e audio firmato Devialet. La prova strumentale riscontra colori affidabili e gaming reattivo, per un prodotto molto accessibile e convincente. Ma la soundbar aggiuntiva è quasi d'obbligo
Kindle Scribe Colorsoft: riduce le cornici e diventa a colori, ma il prezzo è alto
Kindle Scribe Colorsoft: riduce le cornici e diventa a colori, ma il prezzo è alto
Amazon porta i colori sul suo Kindle da scrittura più grande: schermo Colorsoft a 11 pollici, processore quad-core, penna premium più reattiva e strumenti IA per le note, sono le note salienti. Il salto di prezzo rispetto al modello in bianco e nero si fa sentire, anche se la percezione è quella di trovarsi di fronte a un prodotto di fascia altissima, per veri appassionati
L'IA cambia tutte le regole della sicurezza tra vulnerabilità e sorveglianza. Intervista al CEO di Proofpoint
L'IA cambia tutte le regole della sicurezza tra vulnerabilità e sorveglianza. Intervista al CEO di Proofpoint
Abbiamo intervistato Sumit Dhawan, CEO di Proofpoint, per capire come stia cambiando il mondo della sicurezza con l'avvento dell'intelligenza artificiale e con il ritmo sempre più serrato a cui vengono trovate vulnerabilità nel software. Un problema significativo, che richiederà del tempo per essere risolto (o quantomeno arginato)
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


 Hisense 55U7SE: tuttofare e accessibile, il MiniLED per film, sport e gioco Hisense 55U7SE: tuttofare e accessibile, il Min...
Kindle Scribe Colorsoft: riduce le cornici e diventa a colori, ma il prezzo è alto Kindle Scribe Colorsoft: riduce le cornici e div...
L'IA cambia tutte le regole della sicurezza tra vulnerabilità e sorveglianza. Intervista al CEO di Proofpoint L'IA cambia tutte le regole della sicurezza tra ...
L'Europa conta nella tecnologia e può essere autonoma. Cosa si è detto al Nextcloud Summit 2026 L'Europa conta nella tecnologia e può ess...
Dreame X60 Pro Ultra Complete: i bracci si estendono sempre di più Dreame X60 Pro Ultra Complete: i bracci si esten...
Google condannata in Svezia: dovrà...
Samsung Foundry aggiorna la roadmap: il ...
La Cina risponde a NVIDIA con LongCat-2....
Godox C100: la prima fotocamera del marc...
Boom IA e affitti fuori controllo: chi l...
Le RTX 5000 abbattono il muro dei 4 GHz,...
Onimusha: Way of the Sword non sar&agrav...
Anche Microsoft anticipa al 2029 il pass...
Sei falle in AirDrop e Quick Share: cras...
Altri tagli in arrivo in casa XBOX: a ri...
Quando l'IA entra nei processi: due part...
La contea con più data center del...
Galaxy Ring 2, Samsung conferma lo svilu...
1TB e velocità di scrittura garan...
Volkswagen apre alla produzione europea ...
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: 06:07.


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