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

    [C] - Ricerca del numero massimo (programmino di esercizio)

    Un saluto a tutti,

    sto imparando il C, cominciando dalle basi. Un esercizio prevede la ricerca del numero massimo prendendo in input tre interi, ma non riesco a farlo funzionare. La logica che ho usato per scrivere il programma è la seguente: il numero massimo è sempre quello che diviso per gli altri numeri del gruppo dà come risultato un numero superiore a 1, quindi il programma prima effettua tutte le possibili divisioni fra i 3 interi, e poi confronta i sei risultati per vedere quali di essi siano superiori a 1.

    codice:
    #include <stdio.h>
    
    int main ()
    
    {
    
       int x, y, z;
       float intermedio_1, intermedio_2, intermedio_3, intermedio_4, intermedio_5, intermedio_6;
       
       printf ("Immettere tre interi:");
       scanf ("%d%d%d", &x, &y, &z);
    
       intermedio_1 = x / y;
       intermedio_2 = x / z;
       intermedio_3 = y / x;
       intermedio_4 = y / z;
       intermedio_5 = z / x;
       intermedio_6 = z / y;
    
       if ( intermedio_1 > 1 ) {
          if ( intermedio_2 > 1 ) {
             printf ("%d è il numero maggiore\n", x);
    }
    }
    
       if ( intermedio_3 > 1 ) {
          if ( intermedio_4 > 1 ) {
             printf ("%d è il numero maggiore\n", y);
    }
    }
    
       if ( intermedio_5 > 1 ) {
          if ( intermedio_6 > 1 ) {
             printf ("%d è il numero maggiore\n", z);
    }
    }
    
       return 0;
    
    }

    Grazie dell'aiuto - Daniele

  2. #2
    Ciao non c'è bisogno di utilizzare tutte quelle variabili, è più semplice utilizzarne due, una che potresti chiamare max, e che rappresenta il valore massimo, ed una temp che rappreenta il valore temporaneamente inserito da tastiera. Dopo l'input effettui un controllo e se il valore inserito è maggiore del tuo attuale max lo sostituisci, altrimenti richiedi un altro input. Qualcosa del genere (Ti scrivo solo il corpo)

    codice:
    
    float max=-32767, //Valore molto basso, bisogna decidere quanto a seconda del tipo in input
           temp,
           i; //Numeri in input
    
    do{
    
    printf ("Immettere Un Numero:");
    
    scanf ("%d", &temp);
    
    if( (int)temp>max ) max = (int) temp;
    
    i++;
    
    }while(i<3);
    MondoLibero: Informazione Libera, Varia ed Eventuale
    Sito di informazione varia ed eventuale. Quando ho voglia scrivo di ciò che mi pare. Pubblico guide, recensioni, notizie, critiche e tutto ciò che mi passa sotto mano e che penso sia interessante.

  3. #3
    Ti ringrazio per la risposta. È evidente che il tuo programma sia più elegante, però introduce una serie di costrutti che non ho ancora avuto modo di studiare a fondo. Il mio esercizio prevede solo l'utilizzo di: if, printf, scanf, variabili int/float, + * - / %. Devo farcela solo con queste poche nozioni.

    Potresti gentilmente spiegarmi perchè il mio programma non funziona? capisco che non sia per nulla il modo migliore di fare quel tipo di attività, ma comunque la logica su cui si basa dovrebbe essere corretta, no?

  4. #4
    Originariamente inviato da pastoreerrante
    Ti ringrazio per la risposta. È evidente che il tuo programma sia più elegante, però introduce una serie di costrutti che non ho ancora avuto modo di studiare a fondo. Il mio esercizio prevede solo l'utilizzo di: if, printf, scanf, variabili int/float, + * - / %. Devo farcela solo con queste poche nozioni.

    Potresti gentilmente spiegarmi perchè il mio programma non funziona? capisco che non sia per nulla il modo migliore di fare quel tipo di attività, ma comunque la logica su cui si basa dovrebbe essere corretta, no?
    Nei tuoi test con quali input hai notato errori? Comunque penso presupponga input di numeri >0 e tutti diversi giusto?
    MondoLibero: Informazione Libera, Varia ed Eventuale
    Sito di informazione varia ed eventuale. Quando ho voglia scrivo di ciò che mi pare. Pubblico guide, recensioni, notizie, critiche e tutto ciò che mi passa sotto mano e che penso sia interessante.

  5. #5
    Qualsiasi triade di numeri > 0, consecutivi o non consecutivi (esatto prevede l'inserimento di tre numeri diversi >0).

    Dalla shell (Ubuntu 8.04) comunque non ottengo errori, semplicemente il programma si chiude subito dopo che ho immesso i tre numeri.

    Grazie ancora per l'aiuto

  6. #6
    Utente di HTML.it L'avatar di sotoli
    Registrato dal
    Mar 2008
    Messaggi
    150
    Il problema è che le divisioni vengono fatte tra numeri interi e quindi producono come risultato un numero intero, ad esempio 1, che viene poi convertito in float e diventa 1.0.

    codice:
    intermedio_1 = x / y; // se x = 6 e y = 4, intermedio_1 = 1.0
    Quando fai i confronti dei valori intermedio_1 etc con 1, questi valori risulteranno = 0 oppure = 1 oppure >= 2 ma comunque numeri con parte decimale nulla. Quindi se un rapporto ti viene 1.2, tu lo consideri come 1.

  7. #7
    Originariamente inviato da pastoreerrante
    Qualsiasi triade di numeri > 0, consecutivi o non consecutivi (esatto prevede l'inserimento di tre numeri diversi >0).

    Dalla shell (Ubuntu 8.04) comunque non ottengo errori, semplicemente il programma si chiude subito dopo che ho immesso i tre numeri.

    Grazie ancora per l'aiuto
    per il fatto che ti si chiude prova a scrivere

    codice:
    printf("\n\nPremere Un Tasto Per Uscire...\n");
      _getch();
    prima di return 0

    Poi inserisci un pò di printf sui valori in input per effettuare dei test e capire dove è il problema, prova ad inserirli sui valori in input subito dopo scanf, io ho provato e mi pare non funzioni.
    MondoLibero: Informazione Libera, Varia ed Eventuale
    Sito di informazione varia ed eventuale. Quando ho voglia scrivo di ciò che mi pare. Pubblico guide, recensioni, notizie, critiche e tutto ciò che mi passa sotto mano e che penso sia interessante.

  8. #8
    Originariamente inviato da sotoli
    Il problema è che le divisioni vengono fatte tra numeri interi e quindi producono come risultato un numero intero, ad esempio 1, che viene poi convertito in float e diventa 1.0.

    Quando fai i confronti dei valori intermedio_1 etc con 1, questi valori risulteranno = 0 oppure = 1 oppure >= 2 ma comunque numeri con parte decimale nulla. Quindi se un rapporto ti viene 1.2, tu lo consideri come 1.
    Ah, capisco. Ho posto x, y, z come float, in questo modo mi aspetto di ottenere divisioni con la parte decimale integra, ma il programma non funziona ancora

    Se in input do 7 8 9, ottengo: "1080575648 è il numero maggiore"...come potrei risolvere?

    Grazie

    Edit: Risolto! È bastato trasformare i vari %d in %f e alla fine funziona come dovrebbe.

    Grazie a tutti per le dritte.

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