Repository 32bit  Forum
Repository 64bit  Wiki

[C] funzione pow() [Risolto]

Forum dedicato alla programmazione.

Moderatore: Staff

Regole del forum
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.

[C] funzione pow() [Risolto]

Messaggioda Vito » dom set 11, 2011 18:45

Codice: Seleziona tutto

#include <stdio.h>
#include <math.h>
#define DIM 2

int main(){
 
  int a=0;
  int i=0;
  int c[DIM];
  printf("inserisci numero da convertire:");
  scanf("%d",&a);
  printf("numero inserito: %d\n",a);
  for(i=0;i<DIM;i++){
   
    c[i]=a*pow(10,i-DIM+1);
    c[i]=c[i]%10;
    printf("%d\n",c[i]);
    c[i]=c[i]+48;
  }
 
  printf("%d,%d\n",c[1],c[0]);
  return 0;
 
}




ricevo il seguente errore: "undefined reference to `pow' ".
Da cosa può dipendere!?

il prototipo della funzione è : double pow(double x, double y).
Ho provato a fare un casting a double,ma nulla.
È come se la funzione pow non accettasse come argomento una variabile.
Ho provato a scrivere il tutto in C++ e non ho avuto errori.

EDIT : Il problema è presente solo quando compilo con GCC(4.5.2 multilib), ho provato ad utilizzare un altro compilatore (MinGW) e non ho avuto nessun problema.
"Stat rosa pristina nomina, nomina nuda tenemus." [ Umberto Eco - Il nome della rosa]

"Faber est suae quisque fortunae ." [ Appio Claudio Cieco]
Avatar utente
Vito
Staff
Staff
 
Messaggi: 4124
Iscritto il: mar dic 05, 2006 17:28
Località: Augsburg
Nome Cognome: Vito
Slackware: 64 14.0 multilib
Kernel: 3.2.29-xps
Desktop: KDE 4.10.2
Distribuzione: Linux Mint 17

Re: [C] funzione pow()

Messaggioda targzeta » dom set 11, 2011 18:53

Devi copilare linkandolo con qualche libreria matematica. Prova con:
Codice: Seleziona tutto
-lImath

Emanuele
Linux Registered User #454438
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama
20/04/2013 - Io volevo Rodotà
Avatar utente
targzeta
Iper Master
Iper Master
 
Messaggi: 6149
Iscritto il: gio nov 03, 2005 14:05
Località: Carpignano Sal. (LE) <-> Pisa
Nome Cognome: Emanuele Tomasi
Slackware: current
Kernel: latest stable
Desktop: IceWM

Re: [C] funzione pow()

Messaggioda 414N » dom set 11, 2011 18:56

spina ha scritto:Devi copilare linkandolo con qualche libreria matematica. Prova con:
Codice: Seleziona tutto
-lImath

Emanuele

Credo che il flag corretto da aggiungere a gcc sia -lm
Avatar utente
414N
Iper Master
Iper Master
 
Messaggi: 2877
Iscritto il: mer feb 13, 2008 16:19
Località: Bulagna
Slackware: 14.0 (x64)
Kernel: 3.2.29
Desktop: LXDE

Re: [C] funzione pow()

Messaggioda targzeta » dom set 11, 2011 19:03

414N ha scritto:
spina ha scritto:Devi copilare linkandolo con qualche libreria matematica. Prova con:
Codice: Seleziona tutto
-lImath

Emanuele

Credo che il flag corretto da aggiungere a gcc sia -lm

Boh, dipende da cosa si intende per "corretto", con Imath funziona lo stesso. Comunque anche io stavo pensando (e suggerisco) '-lm' poi, non ricordando il nome preciso ho fatto un 'ls *math*' tra le libreria e ho trovato quella :lol:.

Emanuele
Linux Registered User #454438
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama
20/04/2013 - Io volevo Rodotà
Avatar utente
targzeta
Iper Master
Iper Master
 
Messaggi: 6149
Iscritto il: gio nov 03, 2005 14:05
Località: Carpignano Sal. (LE) <-> Pisa
Nome Cognome: Emanuele Tomasi
Slackware: current
Kernel: latest stable
Desktop: IceWM

Re: [C] funzione pow()

Messaggioda Vito » dom set 11, 2011 19:12

Grazie mille!
Adesso compila.
"Stat rosa pristina nomina, nomina nuda tenemus." [ Umberto Eco - Il nome della rosa]

"Faber est suae quisque fortunae ." [ Appio Claudio Cieco]
Avatar utente
Vito
Staff
Staff
 
Messaggi: 4124
Iscritto il: mar dic 05, 2006 17:28
Località: Augsburg
Nome Cognome: Vito
Slackware: 64 14.0 multilib
Kernel: 3.2.29-xps
Desktop: KDE 4.10.2
Distribuzione: Linux Mint 17

Re: [C] funzione pow()

Messaggioda 414N » dom set 11, 2011 19:18

Vito ha scritto:Grazie mille!
Adesso compila.

In realtà non era la compilazione a fallire, ma il linking per creare l'eseguibile finale, volendo proprio essere pignoli ;)
Avatar utente
414N
Iper Master
Iper Master
 
Messaggi: 2877
Iscritto il: mer feb 13, 2008 16:19
Località: Bulagna
Slackware: 14.0 (x64)
Kernel: 3.2.29
Desktop: LXDE

Re: [C] funzione pow()

Messaggioda Vito » dom set 11, 2011 19:21

414N ha scritto:
Vito ha scritto:Grazie mille!
Adesso compila.

In realtà non era la compilazione a fallire, ma il linking per creare l'eseguibile finale, volendo proprio essere pignoli ;)

:thumbright:
"Stat rosa pristina nomina, nomina nuda tenemus." [ Umberto Eco - Il nome della rosa]

"Faber est suae quisque fortunae ." [ Appio Claudio Cieco]
Avatar utente
Vito
Staff
Staff
 
Messaggi: 4124
Iscritto il: mar dic 05, 2006 17:28
Località: Augsburg
Nome Cognome: Vito
Slackware: 64 14.0 multilib
Kernel: 3.2.29-xps
Desktop: KDE 4.10.2
Distribuzione: Linux Mint 17

Re: [C] funzione pow() [Risolto]

Messaggioda Vito » dom set 11, 2011 19:37

Ho un'ulteriore domanda:

Codice: Seleziona tutto
[vito@Freedom:int2string]$ gcc -lm -o int2string int2string.c

in questo caso non mi ritrovo nessun fil oggetto.

Mentre invece se utilizzo un ambiente (dove per ogni progetto mi crea un makefile) "giustamente" mi ritrovo il file oggetto:

Codice: Seleziona tutto
make all
Building file: ../int2string.c
Invoking: GCC C Compiler
gcc  -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"int2string.d" -MT"int2string.d" -o "int2string.o" "../int2string.c"
Finished building: ../int2string.c
 
Building target: int2string
Invoking: GCC C Linker
gcc -lm -o "int2string"  ./int2string.o   
Finished building target: int2string



Nel primo caso la creazione del file oggetto avviene "implicitamente",mentre nel secondo caso separo "esplicitamente" la fase di compilazione dalla fase di linking,ecco perchè l'opzione "-lm" la passo quando invoco il linker,giusto?
"Stat rosa pristina nomina, nomina nuda tenemus." [ Umberto Eco - Il nome della rosa]

"Faber est suae quisque fortunae ." [ Appio Claudio Cieco]
Avatar utente
Vito
Staff
Staff
 
Messaggi: 4124
Iscritto il: mar dic 05, 2006 17:28
Località: Augsburg
Nome Cognome: Vito
Slackware: 64 14.0 multilib
Kernel: 3.2.29-xps
Desktop: KDE 4.10.2
Distribuzione: Linux Mint 17

Re: [C] funzione pow() [Risolto]

Messaggioda targzeta » dom set 11, 2011 19:40

Guarda i parametri passati dall'ambiente di creazione al gcc. Il parametro '-c' in particolare.

Emanuele

:edit: nota che il makefile fa due passaggi. Prima crea il file oggetto con '-c' e poi esegue il linking. Guarda il man di gcc.
Linux Registered User #454438
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama
20/04/2013 - Io volevo Rodotà
Avatar utente
targzeta
Iper Master
Iper Master
 
Messaggi: 6149
Iscritto il: gio nov 03, 2005 14:05
Località: Carpignano Sal. (LE) <-> Pisa
Nome Cognome: Emanuele Tomasi
Slackware: current
Kernel: latest stable
Desktop: IceWM

Re: [C] funzione pow() [Risolto]

Messaggioda Vito » dom set 11, 2011 19:43

spina ha scritto:Guarda i parametri passati dall'ambiente di creazione al gcc. Il parametro '-c' in particolare.

Emanuele


-c : compila senza linkare :thumbright:
Grazie mille,non ricordavo proprio questa cosa!
"Stat rosa pristina nomina, nomina nuda tenemus." [ Umberto Eco - Il nome della rosa]

"Faber est suae quisque fortunae ." [ Appio Claudio Cieco]
Avatar utente
Vito
Staff
Staff
 
Messaggi: 4124
Iscritto il: mar dic 05, 2006 17:28
Località: Augsburg
Nome Cognome: Vito
Slackware: 64 14.0 multilib
Kernel: 3.2.29-xps
Desktop: KDE 4.10.2
Distribuzione: Linux Mint 17


Torna a Programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 2 ospiti