Esercizio semplice in C

di il
8 risposte

Esercizio semplice in C

L'esercizio chide di Trovare i multipli minori di uno di un numero n con 0<n<1.

Es. n=0.3 0.3 0.6 0.9
// TROVARE I MULTIPLI MINORI DI UNO DI UN NUMERO n CON 0<n<1;

#include <stdio.h>

int main() {
	
	float min,max,n,tot;
	
	printf("Inserisci un numero da 0 a 1:");
	scanf("%f" , &n);
	
	min = 0.0;
	max = 1.0;
	
	
	for ( tot = 0.1; tot < max; ++min ) {
		tot = n * min;
		printf("%.1f\n" , tot);
		}
	
	}
l'output però mi calcola sempre un valore finale superiore a 1.0 ; ovvero: n=0.4 0.0 0.4 0.8 1.2

il primo risultato 0.0 non dovrebbe nemmeno calcolarlo dato che la variabile tot è inizializzata a 0.1

8 Risposte

  • Re: Esercizio semplice in C

    Ma che esercizio è?

    Intanto con i float avrai un bel po' di problemi con gli errori di approssimazione (specialmente con 0.1) ... usa i double.

    In ogni caso, farei tutto con gli interi e solo per visualizzare i risultati dividerei in modo opportuno.
  • Re: Esercizio semplice in C

    oregon ha scritto:


    Ma che esercizio è?

    Intanto con i float avrai un bel po' di problemi con gli errori di approssimazione (specialmente con 0.1) ... usa i double.

    In ogni caso, farei tutto con gli interi e solo per visualizzare i risultati dividerei in modo opportuno.
    L'esercizio mi è stato dato a scuola dal professore.

    Il problema non è il float, ho provato anche con i double ed è la stessa cosa.

    Facendo l'esercizio con gli interi da 1 a 10 risolvo il problema del primo prodotto che dava 0, però persiste il fatto che da come output l'ultimo risultato maggiore di 10 ovvero: n=6 6 - 12 mentre dovrebbe essere n=6 6
  • Re: Esercizio semplice in C

    
    	double min, max, n, tot;
    
    	printf("Inserisci un numero da 0 a 1:");
    	scanf("%lf", &n);
    
    	min = 2.0;
    	max = 1.0;
    
    	while ((tot = n*min) < max)
    	{
    		printf("%lf\n", tot);
    		min++;
    	}
    
  • Re: Esercizio semplice in C

    Grazie mille! In pratica dovevo solo mettere tot = n*min e tot < max in un unica espressione e non eseguire tot = n*min come istruzione? e il min assegnarlo come numero intero ma dichiararlo come reale?

    Potrei farlo comunque con il ciclo for in questo modo:
    max = 1.0;
    	
    	for ( min = 1.0; (tot = n*min) < max; min++ ) {
    		printf("%.1lf\n" , tot);
    		}
    Correggimi se sbaglio, sto imparando adesso a programmare e vorrei capire, non solo fare copia e incolla di un codice.
  • Re: Esercizio semplice in C

    Attenzione

    for ( min = 2.0; ...

    Anche se la sintassi del C permette di usare la for, sarebbe meglio in questi casi utilizzare la while per il loop.
  • Re: Esercizio semplice in C

    Il min è inizializzato a 1.0 volutamente, perchè il primo risultato deve essere moltiplicato per 1.

    Quindi come dicevo prima il mio errore era mettere tot = n*min e tot < max in un unica espressione e non eseguire tot = n*min come istruzione? e il min assegnarlo come numero intero ma dichiararlo come reale?
    "Il for va usato quando si sa a priori quante volte si ripeterà l'iterazione"
    "Il while va usato quando non si sa a priori quante volte si ripeterà l'iterazione"
    In questo caso so già che l'iterazione si ripeterà finchè tot < max.
  • Re: Esercizio semplice in C

    The_BoSs_ ha scritto:


    Quindi come dicevo prima il mio errore era ...
    Intendi nel codice iniziale?
    mettere tot = n*min e tot < max in un unica espressione e non eseguire tot = n*min come istruzione? e il min assegnarlo come numero intero ma dichiararlo come reale?
    min non è mai stato intero e non era comunque un problema.

    L'errore è stato non scrivere la for così
    
    		for (tot = n * min; tot < max; ) {
    			printf("%lf\n", tot);
    			tot = n * ++min;
    		}
    
    non tenendo conto della sequenza di operazioni che effettua la for.

    Per questo era più adatta la while.
    In questo caso so già che l'iterazione si ripeterà finchè tot < max.
    Hai scritto "finchè" che si associa a loop con la "while" ...
    Se avessi capito che andava ripetuto "per" un preciso numero di volte, avresti dovuto pensare alla "for"

    Anche se il C consente l'uso di while e for in maniera abbastanza equivalente, in questo caso è meglio la while. Poi fai come vuoi ...
  • Re: Esercizio semplice in C

    Si scusa, ho fatto un po di confusione io.

    Adesso è tutto più chiaro, grazie mille!
Devi accedere o registrarti per scrivere nel forum
8 risposte