Pagina 1 di 3 123 UltimaUltima
Risultati da 1 a 10 di 26

Discussione: Programmare in C++

  1. #1

    Predefinito Programmare in C++

    Vorrei capire una cosa.
    Guardate questo programma (per calcolare il massimo e il minimo tra n numeri inseriti dll'utente):
    #include <stdio.h>
    #include <iostream>
    int main () {

    char fine;
    int val, max=-val, min=val;

    printf("Inserire i numeri da confrontare e premere q per terminare.\n");
    do {
    scanf("%d", &val);
    if (val>=max) max=val;
    if (val<=min) min=val;

    scanf("%c", &fine);
    }while(fine!='q');


    printf("Massimo: %d\n", max);
    printf("Minino: %d\n", min);

    system ("pause");
    return 0;
    }
    Perchè se utilizzo i float al posto degli int il programma preimposta come 1° minimo il valore 0 anziche il valore val?

    Seconda domanda: così com'è quotato il programma funziona. Ma non dovrebbe esserci una \n all'interno della seconda scanf che legge il carattere fine?
    Eppure se la inserisco il programma è errato. Boh...

    Spero qualcuno sappia rispondermi.

  2. #2
    coffeecoffeecoffeecoffeec L'avatar di Black Ghost
    Data Registrazione
    Sat Feb 2007
    Località
    クィーン・デキム
    Messaggi
    12,356

    Predefinito

    Penso che il backslash n si usi solamente all'interno di stringhe. Per andare a capo prova con l'end line.

    stupid sexy greedo butt


  3. #3
    Senior Member L'avatar di Roscio360
    Data Registrazione
    Tue Mar 2009
    Messaggi
    20,647

    Predefinito

    mi spiace. a scuola uso dei comandi un p&#242; diversi <_<


  4. #4
    A morte i camperoni! L'avatar di Darkito
    Data Registrazione
    Sat May 2006
    Località
    Catania
    Messaggi
    4,083

    Predefinito

    1) non ho capito bene la domanda ovvero, non ho capito se con la frase utilizzare i float intendi riscrivere il programma interamente oppure inserire dei numeri con la virgola senza modificare il programma. Nel primo caso dovrebbe funzionare,ma stai attento a non cambiare solo la dicitura int in float perch&#232; devi anche modificare i parametri delle funzioni printf e scanf. Ovvero devi scrivere cos&#236;:

    #include <stdio.h>
    #include <iostream>
    int main () {

    char fine;
    float val, max=-val, min=val;

    printf("Inserire i numeri da confrontare e premere q per terminare.\n");
    do {
    scanf("%f", &val);
    if (val>=max) max=val;
    if (val<=min) min=val;

    scanf("%c", &fine);
    }while(fine!='q');


    printf("Massimo: %f\n", max);
    printf("Minino: %f\n", min);

    system ("pause");
    return 0;
    }
    Nel secondo caso invece siccome accetti solo interi puoi avere problemi quando provi ad inserire numeri decimali.

    2) No, forse non hai ben chiaro come funzioni la funzione scanf. Il suo prototipo &#232; int scanf ( const char * formato, &variabile)
    Il primo argomento &#232; il tipo di dato che si vuole leggere dalla tastiera. Nel tuo caso "%d" per gli interi o "%f" per i float. Il secondo membro &#232; l'indirizzo della variabile in cui vuoi "salvare" il carattere letto dalla tastiera. Quindi scrivi &fine.


    PS: Comunque questo &#232; C e non C++
    Ultima modifica di Darkito; 31-10-2010 alle 20:39


    Max Pezzali Mania
    ---> http://www.maxpezzalimania.it

  5. #5
    Senior Member L'avatar di Roscio360
    Data Registrazione
    Tue Mar 2009
    Messaggi
    20,647

    Predefinito

    Citazione Originariamente Scritto da Darkito Visualizza Messaggio


    PS: Comunque questo è C e non C++
    ah ecco. ora si spiega io in c non so ancora programmare


  6. #6
    Senior Member L'avatar di Smallman_647
    Data Registrazione
    Tue Apr 2010
    Località
    Manfredonia(FG)
    Messaggi
    5,592

    Predefinito

    Per la tua prima domanda, semplicemente in queste stringa:

    if (val>=max) max=val;
    if (val<=min) min=val;

    se tu inserisci un float non riesce a fare un confronto in modo giusto.

    Precisamente non riesce a confrontare ad esempio se 7.00=7.00, per una questione di approssimazione. Proprio per questo bisogna sempre evitare i confronti con i numeri float.

    Per la seconda, semplicemente \n si usa al massimo nella printf, non nella scanf.

    perchè lo hai detto tu che sei ogni sapiente

  7. #7
    A morte i camperoni! L'avatar di Darkito
    Data Registrazione
    Sat May 2006
    Località
    Catania
    Messaggi
    4,083

    Predefinito

    Citazione Originariamente Scritto da Smallman_647 Visualizza Messaggio
    Per la tua prima domanda, semplicemente in queste stringa:

    if (val>=max) max=val;
    if (val<=min) min=val;

    se tu inserisci un float non riesce a fare un confronto in modo giusto.

    Precisamente non riesce a confrontare ad esempio se 7.00=7.00, per una questione di approssimazione. Proprio per questo bisogna sempre evitare i confronti con i numeri float.

    Per la seconda, semplicemente \n si usa al massimo nella printf, non nella scanf.
    In realt&#224; quella riga di codice non da alcun problema in questo caso specifico,dato che l'operazione di maggiore o minore sui float funziona perfettamente. L'unica operazione che non si riesce a fare perfettamente con i float sono le operazione di uguaglianza del tipo:
    float prova=7.8;
    if(prova==7.8)
    printf("Confronto riuscito!");
    else
    printf("Confronto non riuscito!")
    L'output de codice di sopra sar&#224; sempre "Confronto non riuscito", per via delle varie approssimazioni che avvengono dopo la virgola.
    Ultima modifica di Darkito; 01-11-2010 alle 02:04


    Max Pezzali Mania
    ---> http://www.maxpezzalimania.it

  8. #8
    *spallucce* L'avatar di Naked
    Data Registrazione
    Tue Mar 2005
    Località
    Milano | Caltanissetta
    Messaggi
    4,227

    Predefinito

    Intanto &#232; sbagliato non inizializzare le variabili. Il programma sostanzialmente sembra che funzionai perch&#232; i valori che spara dentro le variabili all'inizio sono altissimi (a me 4200240). Se provi a dare come input 9999999 il programma produce come massimo 9999999 e minimo 4200240, anche se io non l'ho digitato.
    Per quanto riguarda le float il discorso parte da qua: tu non inizializzi le variabili, ed &#232; il programma che da come valore iniziale 0.000000.
    Per quanto riguarda \n dentro la scanf, non serve a niente. \n &#232; semplicemente un carattere di 'a capo' quando stampi a schermo, non ha alcuna influenza sulla scanf.
    ~Pray, saviour\Dream, Child of Prayer\Forever and ever\Bring us peace~



  9. #9
    A morte i camperoni! L'avatar di Darkito
    Data Registrazione
    Sat May 2006
    Località
    Catania
    Messaggi
    4,083

    Predefinito

    Citazione Originariamente Scritto da Naked Visualizza Messaggio
    Intanto è sbagliato non inizializzare le variabili. Il programma sostanzialmente sembra che funzionai perchè i valori che spara dentro le variabili all'inizio sono altissimi (a me 4200240). Se provi a dare come input 9999999 il programma produce come massimo 9999999 e minimo 4200240, anche se io non l'ho digitato.
    Per quanto riguarda le float il discorso parte da qua: tu non inizializzi le variabili, ed è il programma che da come valore iniziale 0.000000.
    Per quanto riguarda \n dentro la scanf, non serve a niente. \n è semplicemente un carattere di 'a capo' quando stampi a schermo, non ha alcuna influenza sulla scanf.
    Il valore di default varia da compilatore a compilatore.Però l'esempio dovrebbe funzionare senza problemi perchè mette in max un valore negativo mentre in min un valore positivo e finchè si inseriscono entrambi i numeri non si hanno problemi. Per essere più preciso ed evitare errori il codice dovrebbe essere così:

    #include <stdio.h>
    #include <iostream>
    int main () {

    char fine;
    int val=0, max=0, min=0;

    printf("Inserire i numeri da confrontare e premere q per terminare.\n");
    scanf("%d", &val);
    max=val;
    min=val;
    do {
    if (val>=max) max=val;
    if (val<=min) min=val;
    scanf("%d",&val);
    scanf("%c", &fine);
    }while(fine!='q');


    printf("Massimo: %d\n", max);
    printf("Minino: %d\n", min);


    system ("pause");
    return 0;
    }


    Max Pezzali Mania
    ---> http://www.maxpezzalimania.it

  10. #10
    Senior Member L'avatar di Vaan920
    Data Registrazione
    Mon Dec 2008
    Messaggi
    3,628

    Predefinito

    Ma non usate java a scuola??
    Vaan9200
    Gioco preferito per PS2: Final Fantasy XII
    Gioco preferito per PS3: Valkyria Chronicles

Permessi di Scrittura

  • Tu non puoi inviare nuove discussioni
  • Tu non puoi inviare risposte
  • Tu non puoi inviare allegati
  • Tu non puoi modificare i tuoi messaggi
  •