Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    Linguaggio C - Metodo di bisezione per zeri di funzione

    Salve ragazzi mi sono imbattuto in queste esercizio che mi dice di trovare gli zeri di una funzione(scelta a caso) tramite il metodo di bisezione degli intervalli.

    La mia idea era la seguente:
    codice:
    #include<iostream>
    #include<stdio.h>
    #include<math.h>
    
    void Bis( float *piG, float *pi_g){
    int n;
    printf("Digita l'approssimazione: ")
    scanf("%d",&n);
    
    float x[n];
    
    for(int i=1;i<=n;i++){
    
    //1 x[i]=(*piG+*pi_g)/(pow(2,i)) ; //questa è la generalizzazione della bisezione
    }
    for(int i=1;i<=n;i++){
    //2 if(sin(x[i])==0){
    printf("Gli zeri di funzione sono %.2f" , x[i]);
    
    }
    
    int main () {
    
    float piG=4,71 //corrispondente a 2/3 piGreco
    float  pi_g=1,57 //corrispondente a 1/2 piGreco
    
    Bis(&piG,&pi_g);
    
    return 0;
    
    }
    Quindi la mia idea era dare la possibilità di scegliere a me l'approssimazione, conoscendo già l'intervallo su cui calcolare la bisezione, salvare i risultati in un vettore e dopo dichè vedere tutti quei valori talichè rendevano 0 la funzione seno! Solo che il compilatore mi dice che c'è un'invalida assegnazione per il vettore sia nel punto 1) che 2) del programma!! Cosa c'è di sbagliato??

  2. #2
    Utente di HTML.it L'avatar di linoma
    Registrato dal
    Mar 2010
    Messaggi
    1,346
    Nn puoi allocare un vettore di float in quel modo, devi usare tipo quest righe:

    codice:
    float *x = (float *)malloc(sizeof(foat)*n)
    Per gli Spartani e Sparta usa spartan Il mio github

  3. #3
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Se il compilatore la supporta quell'allocazione va bene.

    Quello che è sbagliato è il ciclo for che non può andare da 1 a n ma da 0 a n-1
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  4. #4
    Salva ragazzi!! Si avete ragione entrambi ho usato malloc e poi il vettore( ho fatto un errore stupido) parte da 0 non da 1 !! Comunque con un pò di revisione ci sono arrivato ma come sempre ci ringrazio per aver risposto!!
    codice:
    #inculde<iostream>
    #include<studio.h>
    #include<math.h>
    #include<cstdlib>
    
    void Bis( float *piG, float *pi_g){
    
       int n;
        printf("Digita l'approssimazione: ");
        scanf("%d",&n);
    
        float *ptrF = (float*) malloc(n * sizeof(float));
     
        for(int i=0;i<n;i++) {
            ptrF[i]=(*piG+*pi_g)/(pow(2,i+1)); //questa è la generalizzazione della bisezione
      
        }
       
       
       
        for(int i=0;i<n;i++)    {
            if(fabs(sin(ptrF[i])) < 0.0000001)  {
                printf("Gli zeri di funzione sono %.8f\n" , ptrF[i]);
                }
            }
            free(ptrF);
            ptrF = NULL;
           
            return;
           
    }
    int main () {
     
        float piG = 4.71238898; //corrispondente a 2/3 piGreco
        float  pi_g = 1.57079633; //corrispondente a 1/2 piGreco
        Bis(&piG, &pi_g);
     
    return 0;
     
    }

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.