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

    Numero combinazioni posti a sedere

    Ciao,
    devo trovare il numero delle possibili combinazioni della disposizione degli studenti in una classe.
    ho fatto questo codice:

    #include <stdio.h>
    main()
    {
    int num, i, comb;
    comb=1;
    printf("Inserisci il numero degli studenti della classe:");
    scanf("%d",&num);
    for (i=1; i<=num; i++)
    comb=comb*i;
    printf("Le combinazioni per i posti di %d studenti sono %ld\n", num, comb);
    system("pause");

    }
    il problema sorge quando si inserisce num maggiore di 14, perchè inizia a ripetere lo stesso numero oppure stampa a schermo un numero negativo.
    Come posso risolvere il problema?
    ciao e grazie anticipatamente
    Your time is limited, so don't waste it living someone else's life. Stay hungry, stay foolish. (Steve Jobs)

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    In realtà già a 13 avrai un risultato non corretto.

    Questo perché il 13! è maggiore del più grande numero che puoi esprimere con la tua variabile a 32 bit (int).

    Devi usare una variabile con maggiore capacità ... ad esempio un long long (ovvero un __int64) ma il problema si sposta solo un po' più in là ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    ciao

    quindi devo fare int long long num

    ???
    Your time is limited, so don't waste it living someone else's life. Stay hungry, stay foolish. (Steve Jobs)

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    long long comb

    e utilizzare lo switch

    %I64d

    per la scanf e la printf
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Ho sistemato il programma e ho scritto così, potreste dirmi se è giusto?
    #include <stdio.h>
    main()
    {
    int num, i;
    long long comb;
    comb=1;
    printf("Inserisci il numero degli studenti della classe:");
    scanf("%I64d",&num);
    for (i=1; i<=num; i++)
    comb=comb*i;
    // end for
    printf("Le combinazioni per i posti di %d studenti sono %I64d \n", num, comb);
    system("pause");

    }
    Your time is limited, so don't waste it living someone else's life. Stay hungry, stay foolish. (Steve Jobs)

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Dato che num è int (e non long long) allora puoi lasciare

    scanf("%d",&num);

    Il resto va bene. Tieni conto che avrai comunque problemi dopo un certo valore (da 21)

    Dovresti utilizzare librerie apposite come questa

    GMP
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Scusami
    non essendo ancora pratico di C (come avrai già capito) non so come utilizare la libreria gmp.
    se potresti riscrivermi il codice con la gmp tene sarei molto grato

    ciao e grazie mille x le dritte
    Your time is limited, so don't waste it living someone else's life. Stay hungry, stay foolish. (Steve Jobs)

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Originariamente inviato da 21Edoardo96
    ... potessi ...
    Purtroppo non ne ho il tempo e comunque andrebbe scaricata e linkata al tuo ambiente (cosa che dovresti fare da solo).

    In ogni caso, qui c'è un esempio d'uso

    http://en.wikipedia.org/wiki/GNU_Mul...hmetic_Library

    (non è esattamente quello che ti serve, ma puoi prendere spunto ...)
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    grazie mille oregon e scusa molto per il disturbo
    Your time is limited, so don't waste it living someone else's life. Stay hungry, stay foolish. (Steve Jobs)

  10. #10
    risolto grazie
    Your time is limited, so don't waste it living someone else's life. Stay hungry, stay foolish. (Steve Jobs)

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.