iniziando...
- exodd
- Messaggi: 728
- Iscritto il: 09 mar 2007, 19:46
- Località: sulle pendici della provincia più alta d'europa
iniziando...
sto usando Dev-C++
non riesco a dividere due numeri quando il loro risultato è un decimale
uso questo codice:
#include <cstdlib>
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
int x=7;
int y=2;
float z;
z=x/y;
printf("%d\n", z);
system("PAUSE");
return EXIT_SUCCESS;
}
non riesco a dividere due numeri quando il loro risultato è un decimale
uso questo codice:
#include <cstdlib>
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
int x=7;
int y=2;
float z;
z=x/y;
printf("%d\n", z);
system("PAUSE");
return EXIT_SUCCESS;
}
Tutto è possibile: L'impossibile richiede solo più tempo
in geometry, angles are angels
"la traslazione non è altro che un'omotetia di centro infinito e k... molto strano"
julio14 ha scritto: jordan è in realtà l'origine e il fine di tutti i mali in $ \mathbb{N} $
ispiratore del BTAEvaristeG ha scritto:Quindi la logica non ci capisce un'allegra e convergente mazza.
in geometry, angles are angels
"la traslazione non è altro che un'omotetia di centro infinito e k... molto strano"
- exodd
- Messaggi: 728
- Iscritto il: 09 mar 2007, 19:46
- Località: sulle pendici della provincia più alta d'europa
risolto...
bastava sostituire d con f e gli int con float...

bastava sostituire d con f e gli int con float...
Tutto è possibile: L'impossibile richiede solo più tempo
in geometry, angles are angels
"la traslazione non è altro che un'omotetia di centro infinito e k... molto strano"
julio14 ha scritto: jordan è in realtà l'origine e il fine di tutti i mali in $ \mathbb{N} $
ispiratore del BTAEvaristeG ha scritto:Quindi la logica non ci capisce un'allegra e convergente mazza.
in geometry, angles are angels
"la traslazione non è altro che un'omotetia di centro infinito e k... molto strano"
-
- Messaggi: 214
- Iscritto il: 01 gen 1970, 01:00
- Località: Catania
Re: iniziando...
Se vuoi fare una divisione tra interi e avere un risultato decimale devi fare il cast del tipo cioè sostituire a "z = x/y" "z = (float) x/y". Per visualizzare un numero decimale devi sostituire la d con la f.exodd ha scritto:
int main(int argc, char *argv[])
{
int x=7;
int y=2;
float z;
z= x/y;
printf("%d\n", z);
system("PAUSE");
return EXIT_SUCCESS;
}
Codice: Seleziona tutto
int main(int argc, char *argv[])
{
int x=7;
int y=2;
float z;
z= (float) x/y;
printf("%f\n", z);
system("PAUSE");
return EXIT_SUCCESS;
Dirty Physician!!!! (senza offesa per i farmacisti, ovviamente) :-)
- exodd
- Messaggi: 728
- Iscritto il: 09 mar 2007, 19:46
- Località: sulle pendici della provincia più alta d'europa
non ha senso aprire un altro topic
volevo calcolare le soluzioni intere di un'equazione di grado 7, così ho scritto:
solo che dandogli come input h=1 g=2 f=1 e tutti gli altri zeri, oltre alla soluzione x=-1, mi da anche le due soluzioni x=-65537 e x=65535..
devo solo abbassare il range degli x, o c'è un modo di aggiustarlo?
volevo calcolare le soluzioni intere di un'equazione di grado 7, così ho scritto:
Codice: Seleziona tutto
#include <cstdlib>
#include <iostream>
#include <stdio>
using namespace std;
int main(int argc, char *argv[])
{
int a;
int b;
int c;
int d;
int e;
int f;
int g;
int h;
int y;
int z;
int w;
int k;
int j;
int v;
int x;
int p;
printf("immettere coefficiente grado 0: ");
scanf("%d", &h);
printf("immettere coefficiente grado 1: ");
scanf("%d", &g);
printf("immettere coefficiente grado 2: ");
scanf("%d", &f);
printf("immettere coefficiente grado 3: ");
scanf("%d", &e);
printf("immettere coefficiente grado 4: ");
scanf("%d", &d);
printf("immettere coefficiente grado 5: ");
scanf("%d", &c);
printf("immettere coefficiente grado 6: ");
scanf("%d", &b);
printf("immettere coefficiente grado 7: ");
scanf("%d", &a);
x=-99999;
while (x<=99999)
{
v=x*x;
j=v*x;
k=j*x;
w=k*x;
z=w*x;
y=z*x;
p=a*y+b*z+c*w+d*k+e*j+f*v+g*x+h;
if (p==0)
{
printf ("%d\n", x);
}
x=x+1;
}
system("PAUSE");
return EXIT_SUCCESS;
}
devo solo abbassare il range degli x, o c'è un modo di aggiustarlo?
Tutto è possibile: L'impossibile richiede solo più tempo
in geometry, angles are angels
"la traslazione non è altro che un'omotetia di centro infinito e k... molto strano"
julio14 ha scritto: jordan è in realtà l'origine e il fine di tutti i mali in $ \mathbb{N} $
ispiratore del BTAEvaristeG ha scritto:Quindi la logica non ci capisce un'allegra e convergente mazza.
in geometry, angles are angels
"la traslazione non è altro che un'omotetia di centro infinito e k... molto strano"
Puoi "alzare il range degli int": sostituisci la parola 'long', o le parole 'long long', alla parola 'int' e dovresti avere un tipo di dato che puo' arrivare a valori interi ben piu' alti.
[seguono suggerimenti piu' sofisticati, se stai solo imparando il C ignorali, se ti serve performance pensaci]
Inoltre, ti consiglio http://en.wikipedia.org/wiki/Horner_scheme per valutare il polinomio. Un'altra possibilita' e' calcolarti p(x+1)-p(x) (che e' di grado piu' basso) e valutare quello. E un altro trucco potrebbe essere valutare p(x) e p(-x) insieme -- ma non quaglia bene con il metodo di Horner, bisogna vedere chi costa meno.
[seguono suggerimenti piu' sofisticati, se stai solo imparando il C ignorali, se ti serve performance pensaci]
Inoltre, ti consiglio http://en.wikipedia.org/wiki/Horner_scheme per valutare il polinomio. Un'altra possibilita' e' calcolarti p(x+1)-p(x) (che e' di grado piu' basso) e valutare quello. E un altro trucco potrebbe essere valutare p(x) e p(-x) insieme -- ma non quaglia bene con il metodo di Horner, bisogna vedere chi costa meno.
--federico
[tex]\frac1{\sqrt2}\bigl(\left|\text{loves me}\right\rangle+\left|\text{loves me not}\right\rangle\bigr)[/tex]
[tex]\frac1{\sqrt2}\bigl(\left|\text{loves me}\right\rangle+\left|\text{loves me not}\right\rangle\bigr)[/tex]
- exodd
- Messaggi: 728
- Iscritto il: 09 mar 2007, 19:46
- Località: sulle pendici della provincia più alta d'europa
codice con horner:
stesso problema di prima..
Codice: Seleziona tutto
#include <cstdlib>
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
int a;
int b;
int c;
int d;
int e;
int f;
int g;
int h;
long y;
long z;
long w;
long k;
long j;
long v;
long x;
long p;
printf("immettere coefficiente grado 0: ");
scanf("%d", &h);
printf("immettere coefficiente grado 1: ");
scanf("%d", &g);
printf("immettere coefficiente grado 2: ");
scanf("%d", &f);
printf("immettere coefficiente grado 3: ");
scanf("%d", &e);
printf("immettere coefficiente grado 4: ");
scanf("%d", &d);
printf("immettere coefficiente grado 5: ");
scanf("%d", &c);
printf("immettere coefficiente grado 6: ");
scanf("%d", &b);
printf("immettere coefficiente grado 7: ");
scanf("%d", &a);
x=-999999;
while (x<=999999)
{
v=b+a*x;
j=c+v*x;
k=d+j*x;
w=e+k*x;
z=f+w*x;
y=g+z*x;
p=h+y*x;
if (p==0)
{
printf ("%d\n", x);
}
x=x+1;
}
system("PAUSE");
return EXIT_SUCCESS;
}
Tutto è possibile: L'impossibile richiede solo più tempo
in geometry, angles are angels
"la traslazione non è altro che un'omotetia di centro infinito e k... molto strano"
julio14 ha scritto: jordan è in realtà l'origine e il fine di tutti i mali in $ \mathbb{N} $
ispiratore del BTAEvaristeG ha scritto:Quindi la logica non ci capisce un'allegra e convergente mazza.
in geometry, angles are angels
"la traslazione non è altro che un'omotetia di centro infinito e k... molto strano"
Ti servono i long long. Il problema e' sempre che 65535 e' troppo su: (2^16)^2 = 2^(32) che e' esattamente l'ampiezza del range dei long -- i calcoli vengono fatti mod 2^32 che per i tuoi gusti e' troppo poco.
(incidentalmente, sei andato a scegliere come esempio proprio uno dei pochissimo polinomi che genera dei "falsi positivi"... notevole)
(incidentalmente, sei andato a scegliere come esempio proprio uno dei pochissimo polinomi che genera dei "falsi positivi"... notevole)
--federico
[tex]\frac1{\sqrt2}\bigl(\left|\text{loves me}\right\rangle+\left|\text{loves me not}\right\rangle\bigr)[/tex]
[tex]\frac1{\sqrt2}\bigl(\left|\text{loves me}\right\rangle+\left|\text{loves me not}\right\rangle\bigr)[/tex]
- exodd
- Messaggi: 728
- Iscritto il: 09 mar 2007, 19:46
- Località: sulle pendici della provincia più alta d'europa
si, facendo un po' di prove avevo capito che il limite era 10 cifre.. però adesso che so che siamo in mod 2^32 mi posso giostrare un po' meglio 

Tutto è possibile: L'impossibile richiede solo più tempo
in geometry, angles are angels
"la traslazione non è altro che un'omotetia di centro infinito e k... molto strano"
julio14 ha scritto: jordan è in realtà l'origine e il fine di tutti i mali in $ \mathbb{N} $
ispiratore del BTAEvaristeG ha scritto:Quindi la logica non ci capisce un'allegra e convergente mazza.
in geometry, angles are angels
"la traslazione non è altro che un'omotetia di centro infinito e k... molto strano"
- exodd
- Messaggi: 728
- Iscritto il: 09 mar 2007, 19:46
- Località: sulle pendici della provincia più alta d'europa
grazie ad un piccolo accorgimento, non mi va più in errore
codice definitivo per le radici intere di un'equazione di, al massimo, 7° grado
(più scomposizione dello stesso)

Codice: Seleziona tutto
#include <cstdlib>
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
int q=0;
int t=0;
long a;
long b;
long c;
long d;
long e;
long f;
long g;
long h;
long i;
long l;
long m;
long n;
long o;
long r;
long s;
long y;
long z;
long w;
long k;
long j;
long v;
long x;
long p;
printf("immettere coefficiente grado 0: ");
scanf("%d", &h);
printf("immettere coefficiente grado 1: ");
scanf("%d", &g);
printf("immettere coefficiente grado 2: ");
scanf("%d", &f);
printf("immettere coefficiente grado 3: ");
scanf("%d", &e);
printf("immettere coefficiente grado 4: ");
scanf("%d", &d);
printf("immettere coefficiente grado 5: ");
scanf("%d", &c);
printf("immettere coefficiente grado 6: ");
scanf("%d", &b);
printf("immettere coefficiente grado 7: ");
scanf("%d", &a);
x=-800;
while (x<=800)
{
y=b+a*x;
z=c+y*x;
k=d+z*x;
w=e+k*x;
j=f+w*x;
v=g+j*x;
p=h+v*x;
if (v>10000000)
{
p=1;
}
if (v<-10000000)
{
p=1;
}
if (j>10000000)
{
p=1;
}
if (j<-10000000)
{
p=1;
}
if (w>10000000)
{
p=1;
}
if (w<-10000000)
{
p=1;
}
if (k>10000000)
{
p=1;
}
if (k<-10000000)
{
p=1;
}
if (z>10000000)
{
p=1;
}
if (z<-10000000)
{
p=1;
}
if (y>10000000)
{
p=1;
}
if (y<-10000000)
{
p=1;
}
if (p==0)
{
q=q+1;
if (x>0)
{
printf("(x-");
printf("%d", x);
printf(")");
}
if (x<0)
{
printf("(x+");
x=(-1)*x;
printf("%d", x);
printf(")");
x=(-1)*x;
}
if (x==0)
{
printf("x");
}
i=a;
l=b;
m=c;
n=d;
o=e;
r=f;
s=g;
a=0;
b=i;
c=l+b*x;
d=m+c*x;
e=n+d*x;
f=o+e*x;
g=r+f*x;
h=s+g*x;
x=x-1;
}
x=x+1;
}
if (a==0)
{
t=t+1;
}
if (b==0)
{
t=t+1;
}
if (c==0)
{
t=t+1;
}
if (d==0)
{
t=t+1;
}
if (e==0)
{
t=t+1;
}
if (f==0)
{
t=t+1;
}
if (g==0)
{
t=t+1;
}
if (h==0)
{
t=t+1;
}
if (t<7)
{
printf("(");
}
if (a!=0)
{
if (a!=1)
{
printf("%d", a);
}
printf("x^7");
}
if (b!=0)
{
if (b>0)
{
printf("+");
}
if (b!=1)
{
printf("%d", b);
}
printf("x^6");
}
if (c!=0)
{
if (c>0)
{
printf("+");
}
if (c!=1)
{
printf("%d", c);
}
printf("x^5");
}
if (d!=0)
{
if (d>0)
{
printf("+");
}
if (d!=1)
{
printf("%d", d);
}
printf("x^4");
}
if (e!=0)
{
if (e>0)
{
printf("+");
}
if (e!=1)
{
printf("%d", e);
}
printf("x^3");
}
if (f!=0)
{
if (f>0)
{
printf("+");
}
if (f!=1)
{
printf("%d", f);
}
printf("x^2");
}
if (g!=0)
{
if (g>0)
{
printf("+");
}
if (g!=1)
{
printf("%d", g);
}
printf("x");
}
if (h!=0)
{
if (t<7)
{
if (h>0)
{
printf("+%d", h);
}
if (h<0)
{
printf("%d", h);
}
}
if (t>=7)
{
if (h<0)
{
printf("(%d)", h);
}
if (h>0)
{
printf("%d", h);
}
}
}
if (t<7)
{
printf(")");
}
printf("\n");
system("PAUSE");
return EXIT_SUCCESS;
}
(più scomposizione dello stesso)
Tutto è possibile: L'impossibile richiede solo più tempo
in geometry, angles are angels
"la traslazione non è altro che un'omotetia di centro infinito e k... molto strano"
julio14 ha scritto: jordan è in realtà l'origine e il fine di tutti i mali in $ \mathbb{N} $
ispiratore del BTAEvaristeG ha scritto:Quindi la logica non ci capisce un'allegra e convergente mazza.
in geometry, angles are angels
"la traslazione non è altro che un'omotetia di centro infinito e k... molto strano"