iniziando...

Programmazione, algoritmica, teoria dell'informazione, ...
Rispondi
Avatar utente
exodd
Messaggi: 728
Iscritto il: 09 mar 2007, 19:46
Località: sulle pendici della provincia più alta d'europa

iniziando...

Messaggio da exodd »

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;
}
Tutto è possibile: L'impossibile richiede solo più tempo
julio14 ha scritto: jordan è in realtà l'origine e il fine di tutti i mali in $ \mathbb{N} $
EvaristeG ha scritto:Quindi la logica non ci capisce un'allegra e convergente mazza.
ispiratore del BTA

in geometry, angles are angels

"la traslazione non è altro che un'omotetia di centro infinito e k... molto strano"
Avatar utente
exodd
Messaggi: 728
Iscritto il: 09 mar 2007, 19:46
Località: sulle pendici della provincia più alta d'europa

Messaggio da exodd »

risolto... :D

bastava sostituire d con f e gli int con float...
Tutto è possibile: L'impossibile richiede solo più tempo
julio14 ha scritto: jordan è in realtà l'origine e il fine di tutti i mali in $ \mathbb{N} $
EvaristeG ha scritto:Quindi la logica non ci capisce un'allegra e convergente mazza.
ispiratore del BTA

in geometry, angles are angels

"la traslazione non è altro che un'omotetia di centro infinito e k... molto strano"
antosecret
Messaggi: 214
Iscritto il: 01 gen 1970, 01:00
Località: Catania

Re: iniziando...

Messaggio da antosecret »

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;
}
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.

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) :-)
Avatar utente
exodd
Messaggi: 728
Iscritto il: 09 mar 2007, 19:46
Località: sulle pendici della provincia più alta d'europa

Messaggio da exodd »

non ha senso aprire un altro topic
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;
}
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?
Tutto è possibile: L'impossibile richiede solo più tempo
julio14 ha scritto: jordan è in realtà l'origine e il fine di tutti i mali in $ \mathbb{N} $
EvaristeG ha scritto:Quindi la logica non ci capisce un'allegra e convergente mazza.
ispiratore del BTA

in geometry, angles are angels

"la traslazione non è altro che un'omotetia di centro infinito e k... molto strano"
fph
Site Admin
Messaggi: 3956
Iscritto il: 01 gen 1970, 01:00
Località: in giro
Contatta:

Messaggio da fph »

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.
--federico
[tex]\frac1{\sqrt2}\bigl(\left|\text{loves me}\right\rangle+\left|\text{loves me not}\right\rangle\bigr)[/tex]
Avatar utente
exodd
Messaggi: 728
Iscritto il: 09 mar 2007, 19:46
Località: sulle pendici della provincia più alta d'europa

Messaggio da exodd »

codice con horner:

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;
} 
stesso problema di prima..
Tutto è possibile: L'impossibile richiede solo più tempo
julio14 ha scritto: jordan è in realtà l'origine e il fine di tutti i mali in $ \mathbb{N} $
EvaristeG ha scritto:Quindi la logica non ci capisce un'allegra e convergente mazza.
ispiratore del BTA

in geometry, angles are angels

"la traslazione non è altro che un'omotetia di centro infinito e k... molto strano"
fph
Site Admin
Messaggi: 3956
Iscritto il: 01 gen 1970, 01:00
Località: in giro
Contatta:

Messaggio da fph »

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)
--federico
[tex]\frac1{\sqrt2}\bigl(\left|\text{loves me}\right\rangle+\left|\text{loves me not}\right\rangle\bigr)[/tex]
Avatar utente
exodd
Messaggi: 728
Iscritto il: 09 mar 2007, 19:46
Località: sulle pendici della provincia più alta d'europa

Messaggio da exodd »

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 :wink:
Tutto è possibile: L'impossibile richiede solo più tempo
julio14 ha scritto: jordan è in realtà l'origine e il fine di tutti i mali in $ \mathbb{N} $
EvaristeG ha scritto:Quindi la logica non ci capisce un'allegra e convergente mazza.
ispiratore del BTA

in geometry, angles are angels

"la traslazione non è altro che un'omotetia di centro infinito e k... molto strano"
Avatar utente
exodd
Messaggi: 728
Iscritto il: 09 mar 2007, 19:46
Località: sulle pendici della provincia più alta d'europa

Messaggio da exodd »

grazie ad un piccolo accorgimento, non mi va più in errore :wink:

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;
}
codice definitivo per le radici intere di un'equazione di, al massimo, 7° grado
(più scomposizione dello stesso)
Tutto è possibile: L'impossibile richiede solo più tempo
julio14 ha scritto: jordan è in realtà l'origine e il fine di tutti i mali in $ \mathbb{N} $
EvaristeG ha scritto:Quindi la logica non ci capisce un'allegra e convergente mazza.
ispiratore del BTA

in geometry, angles are angels

"la traslazione non è altro che un'omotetia di centro infinito e k... molto strano"
Rispondi