Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    636

    [C] approssimazione di numeri in virgola mobile

    ciao a tutti
    vorrei sapere come faccio ad approssimare un numero in virgola mobile, per esempio
    123.456789 a 123.456

  2. #2
    Per troncare ad una determinata cifra decimale:
    codice:
    double Truncate(double Number, unsigned int Position)
    {
        return floor(Number*pow(10,Position))/pow(10,Position);
    }
    .
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    636
    ok grazie
    il programmino richiede di inserire da tastiera N numeri reali, di ordinarli.
    Successivamente leggere da tastiera un numero reale e verificare con ricerca binaria se questo numero reale coincide (con approssimazione di 1/1000) con uno degli N numeri ordinati precedentemente.
    stampi la posizione nel vettore dell'eventiale numero coincidente.
    Ho fatto in questo modo
    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #define N 4
    
    /*
     * 
     */
    
    
    
    int main() {
    
        int i,j;
        float n;
        float app;
        float A[N];
        
        printf ("Inserisci numeri\n");
        
        for (i = 0; i < N; i++){
            scanf ("%f", &n);
            A[i] = n;
            }
        
        for (i = 0; i < N - 1; i++){
            for (j = i + 1; j < N; j++){
                if (A[i] < A[j]){
                    app = A[j];
                    A[j] = A[i];
                    A[i] = app;
                    }
            }
        }
        
        printf ("Numeri : %f", A[i]);
    
    
    
        return 0;
    }
    ma non riesco a capire come effettuare quella approssimazione

  4. #4
    Usa la funzione che ti ho scritto.
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #5
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    636
    ho fatto in questo modo, ma non va
    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    #define N 2
    
    float Truncate(float Number, unsigned int Position);
    
    
    
    int main() {
    
        int i,j;
        float n;
        float app;
        float A[N];
    	float REAL;
    	int tronc = 3;
    
        printf ("Inserisci numeri\n");
    
        for (i = 0; i < N; i++){
            scanf ("%f", &n);
            A[i] = n;
            }
    
        for (i = 0; i < N - 1; i++){
            for (j = i + 1; j < N; j++){
                if (A[i] < A[j]){
                    app = A[j];
                    A[j] = A[i];
                    A[i] = app;
                    }
            }
        }
    
    printf ("\nNumeri ordinati: \n");
    for (i = 0; i < N; i++){
        printf ("%f\n", A[i]);
    }
    
    printf ("Inserisci il numero da cercare\n");
    scanf ("%f", &REAL);
    
    float Truncate(float REAL, unsigned int tronc);
    
    for (i = 0; i < N; i++){
    	if (A[i] == REAL){
    		printf("La posizione del numero all'interno del vettore : %d\n", i);
    	}
    }
    
    
    
    	system("PAUSE");
        return 0;
    }
    
    float Truncate(float Number, unsigned int Position)
    {
        return floor(Number*pow(10,Position))/pow(10,Position);
    }

  6. #6
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    si ma ti rendi conto che non solo non la usi ma l'hai inserita all'interno del main ricopiandola senza usarla..

    continuo a dirti che hai delle pecche non da poco nella conoscenza del linguaggio c++ (questo è tipo il capitolo 2 o 3 di qualsiasi libro, cioè l'uso delle funzioni)

  7. #7
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    636
    si vero...alcune volte mi perdo tra errori veramente banali..ecco fatto
    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    #define N 2
    
    float Truncate(float Number, unsigned int Position);
    
    
    
    int main() {
    
        int i,j;
        float n;
        float app;
        float A[N];
    	float REAL;
    	int tronc = 3;
    
        printf ("Inserisci numeri\n");
    
        for (i = 0; i < N; i++){
            scanf ("%f", &n);
            A[i] = n;
            }
    
        for (i = 0; i < N - 1; i++){
            for (j = i + 1; j < N; j++){
                if (A[i] < A[j]){
                    app = A[j];
                    A[j] = A[i];
                    A[i] = app;
                    }
            }
        }
    
    printf ("\nNumeri ordinati: \n");
    for (i = 0; i < N; i++){
        printf ("%f\n", A[i]);
    }
    
    printf ("Inserisci il numero da cercare\n");
    scanf ("%f", &REAL);
    
    
    
    for (i = 0; i < N; i++){
    	if (Truncate(A[i], tronc) == Truncate(REAL, tronc)){
    		printf("La posizione del numero all'interno del vettore : %d\n", i);
    	}
    }
    
    
    
    	system("PAUSE");
        return 0;
    }
    
    float Truncate(float Number, unsigned int Position)
    {
        return floor(Number*pow(10,Position))/pow(10,Position);
    }
    grazie

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 © 2025 vBulletin Solutions, Inc. All rights reserved.