Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema
Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema
Insta360 Luna Ultra integra un sensore da 1 pollice 8K, ottiche Leica e triplo chip IA. Tra schermo OLED rimovibile, workflow I-Log a 10 bit e stabilizzazione a tre assi, analizziamo le doti tecniche di una gimbal camera pensata per i professionisti
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine porta Logan in un'avventura inedita, violenta e fortemente narrativa, costruita attorno alla sua natura di combattente e al difficile rapporto con il proprio passato. Insomniac Games punta su combattimenti spettacolari, progressione e personalizzazione, inserendo l'azione in un mondo segnato dalla persecuzione dei mutanti. Un viaggio intenso, che alterna mattanza, esplorazione e momenti sorprendentemente emotivi.
DJI Romo 2: tante novità lo rendono un robot completo
DJI Romo 2: tante novità lo rendono un robot completo
Romo 2 è la seconda generazione di robot lavapavimenti di DJI, un modello che si caratterizza per la precisione nel sistema di navigazione e per il funzionamento particolarmente silenzioso. Con le modifiche introdotte in questa seconda versione, e un posizionamento di prezzo più allineato alla concorrenza, rappresenta una valida alternativa sul mercato delle soluzioni di pulizia domestica
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


Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema Insta360 Luna Ultra: la potenza del sensore da 1...
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa Marvel's Wolverine, la recensione: Logan torna p...
DJI Romo 2: tante novità lo rendono un robot completo DJI Romo 2: tante novità lo rendono un ro...
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED Sony Bravia 9 II: il True RGB alla prova, dove l...
Geely EX5, un mese al volante: il SUV elettrico cinese che ci ha sorpreso (quasi) senza riserve Geely EX5, un mese al volante: il SUV elettrico ...
Il Galaxy A18 4G è ufficiale: un ...
Claude vuole leggerti anche il conto in ...
Apple inserisce l'iMac 21,5 pollici del ...
GeForce RTX 6000: design a chiplet e arr...
Questi oggetti non dovrebbero esistere, ...
Un ESP32, un modulo ECG e un bottone cuc...
Grazie a un lancio preciso, il Nancy Gra...
Centrali elettriche libere di inquinare:...
Un razzo spaziale Vega C dell'italiana A...
Mozilla: i modelli IA aperti sono solo 4...
Intel e SK hynix al tavolo per un'allean...
Osservare la Luna con la NASA, anche in ...
Wallbox per auto elettriche su Amazon: d...
Il mistero della stagione degli uragani ...
La Corte di Cassazione affida i ricorsi ...
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: 12:23.


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