Zeri della funzione senx/x

di il
9 risposte

Zeri della funzione senx/x


Cattura.PNG
Cattura.PNG

Mi servirebbe un aiuto con questo esercizio.
io ho provato a farlo cosi:
https://pastebin.com/1paK6LM
ho fatto solamente il punto 1 e per vedere che mi fosse venuto bene ho chiesto al compilatore di stamparmi a video i valori di prodotto.
Solamente che, innanzitutto ottengo un warning:"Value computed is not used".
E seconda cosa l'incremento di b si arresta per b=1 e riprende solo quando a = 1
Qualche idea?

9 Risposte

  • Re: Zeri della funzione senx/x

    Postate il codice nel forum tra tag code per favore!
  • Re: Zeri della funzione senx/x

    #include <stdio.h>
    #include <math.h>
    int main()
    {
    int a,b;
    double prodotto;
    a = -15.0;
    b = -14.0;
    for((a=-15) && (b=-14);(a<15) && (b<16);(a++) && (b++))
    {
    prodotto = sin(a)/a * sin(b)/(b);
    if ((a == 0))
    {
    printf("sin(%d)/(%d) * sin(%d)/(%d) = %lf\n",a,a,b,b,sin(b)/(b));
    }
    else if(b==0)
    {
    printf("sin(%d)/(%d) * sin(%d)/(%d) = %lf\n",a,a,b,b,sin(a)/(a));
    }
    else if ((a != 0) && (b!=0) && (a!=b))
    {
    printf("sin(%d)/(%d) * sin(%d)/(%d) = %lf\n",a,a,b,b,prodotto);
    }

    }


    return 0;
    }
  • Re: Zeri della funzione senx/x

    Non devi usare gli operatori short circuit (&&) ma le virgole.
    I cast da int a double e viceversa andrebbero esplicitati. b è una variabile inutile essendo uguale ad a + 1. prodotto lo calcoli ma non lo usi, quando la traccia ti dice di farlo. Attento alle divisioni per zero

    Dovresti studiare e rafforzare la conoscenza delle basi del linguaggio
  • Re: Zeri della funzione senx/x

    Ciao, grazie dei chiarimenti. Si lo so è che ho iniziato a programmare per la prima volta nella mia vita da 1 mese circa, col tempo e con lo studio migliorerò
  • Re: Zeri della funzione senx/x

    Ora sono riuscito a far funzionare l'algoritmo:

    #include <stdio.h>
    #include <math.h>
    int main()
    {
    int a=-15, b=a+1 ;
    double prodotto;
    for(a=-15; a<15; a++,b++)
    {
    prodotto = sin(a)/(a) * sin(b)/(b);
    if (prodotto > 0 && a!=0 && b!=0)
    {
    prodotto = sin(a)/(a) * sin(b)/(b);
    printf("sin(%d)/(%d) * sin(%d)*sin(%d) = %lf >0, non e' uno zero\n",a,a,b,b,prodotto);
    }
    else if (prodotto <= 0 && a!=0 && b!=0)
    {
    prodotto = sin(a)/(a) * sin(b)/(b);
    printf("sin(%d)/(%d) * sin(%d)*sin(%d) = %lf <=0, e' uno zero\n",a,a,b,b,prodotto);
    }
    if (a==0)
    {
    prodotto = sin(b)/(b);
    printf("sin(0)/(0) * sin(%d)*sin(%d) = %lf >0, non e' uno zero\n",b,b,prodotto);
    }
    if (b==0)
    {
    prodotto = sin(a)/(a);
    printf("sin(%d)/(%d) * sin(0)*sin(0) = %lf >0, non e' uno zero\n",a,a,prodotto);
    }
    }
    return 0;
    }


    Ora non so come far stampare a video il numero degli zeri trovati, qualcuno con un pò di pazienza può aiutarmi?
  • Re: Zeri della funzione senx/x

    Usa I'll tasto </> per scrivere il codice altrimenti non si capisce nulla!
  • Re: Zeri della funzione senx/x

    Usa i tag CODE.
    Basta solo contarli gli zeri... riscrivendo in maniera più efficiente il tuo codice ed evitando le divisioni per zero e i passaggi inutili:
    #include <math.h>
    int main(){
        int a=-15, b=a+1;
        double prodotto;
        int zeri = 0;
        for(; a<15; a++,b++){
            if(a == 0)
                prodotto = sin(b)/(double)b;
            else if (b == 0)
                prodotto = sin(a)/(double)a;
            else
                prodotto = sin(a) * sin(b) / (double) a / (double) b;
            
            if(prodotto <= 0.0)
                zeri++;
        }
        printf("zeri = %d", zeri);
        return 0;
    }
    Se ci pensi attentamente, non ti serve nemmeno la divisione
    #include <stdio.h>
    #include <math.h>
    int main(){
        int a=-15, b=a+1;
        double segno;
        int zeri = 0;
        for(; a<15; a++,b++){
            if(a == 0)
                segno = sin(1);
            else if (b == 0)
                segno = - sin(-1);
            else
                segno = sin(a) * sin(b) * (double) (a*b);
            
            if(segno <= 0.0)
                zeri++;
        }
        printf("zeri = %d", zeri);
        return 0;
    }
  • Re: Zeri della funzione senx/x

    Weierstrass ha scritto:


    Usa i tag CODE.
    Basta solo contarli gli zeri... riscrivendo in maniera più efficiente il tuo codice ed evitando le divisioni per zero e i passaggi inutili:
    #include <math.h>
    int main(){
        int a=-15, b=a+1;
        double prodotto;
        int zeri = 0;
        for(; a<15; a++,b++){
            if(a == 0)
                prodotto = sin(b)/(double)b;
            else if (b == 0)
                prodotto = sin(a)/(double)a;
            else
                prodotto = sin(a) * sin(b) / (double) a / (double) b;
            
            if(prodotto <= 0.0)
                zeri++;
        }
        printf("zeri = %d", zeri);
        return 0;
    }
    Se ci pensi attentamente, non ti serve nemmeno la divisione
    #include <stdio.h>
    #include <math.h>
    int main(){
        int a=-15, b=a+1;
        double segno;
        int zeri = 0;
        for(; a<15; a++,b++){
            if(a == 0)
                segno = sin(1);
            else if (b == 0)
                segno = - sin(-1);
            else
                segno = sin(a) * sin(b);
            
            if(segno <= 0.0)
                zeri++;
        }
        printf("zeri = %d", zeri);
        return 0;
    }
  • Re: Zeri della funzione senx/x

    Perfetto, grazie dell'aiuto
Devi accedere o registrarti per scrivere nel forum
9 risposte