Visualizzazione dei risultati da 1 a 9 su 9

Discussione: Programma in C

  1. #1

    Programma in C

    Salve a tutti, vorrei che mi spiegaste dov'è che sbaglio in questo programma scritto in C per trovare i divisori di un numero intero.
    Quando lo compilo succede questo:

    Inserisci un numero: 8
    Program received signal: “EXC_BAD_ACCESS”.
    sharedlibrary apply-load-rules all
    (gdb)

    il codice è il seguente:

    #include <stdio.h>
    #include <math.h>

    main()
    {
    int a,c,d,r,f;
    c=0;
    f=(a/2)+1;
    printf("Inserisci un numero: ");
    scanf("%d", a);

    printf("I divisori sono: ");
    do
    {
    ++c;
    r=a%c;
    d=a/c;

    if (r==0) printf("%d\n", d);
    }
    while (c=!f);
    }


    Grazie a chi saprà darmi una mano :]

  2. #2
    non ho visto la correttezza dell'algoritmo, ma la scanf va usata così:

    codice:
    scanf("%d", &a) // passaggio per riferimento

  3. #3
    Originariamente inviato da antotan
    non ho visto la correttezza dell'algoritmo, ma la scanf va usata così:

    codice:
    scanf("%d", &a) // passaggio per riferimento
    Cavolo è vero, che errore stupido xD Grazie mille :]

  4. #4
    ho visto l'algoritmo e c'è un problema quando inizializzi f. Lo fai prima che dai in input a, e il valore è indefinito dunque.
    Inoltre

    codice:
    if (r==0) printf("%d\n", d);
    non mi torna. Dovrebbe essere

    codice:
    if (r==0) printf("%d\n", c);
    se vuoi stampare i divisori. Tu invece stampi il valore della divisione (d).



  5. #5
    Originariamente inviato da antotan
    ho visto l'algoritmo e c'è un problema quando inizializzi f. Lo fai prima che dai in input a, e il valore è indefinito dunque.
    Inoltre

    codice:
    if (r==0) printf("%d\n", d);
    non mi torna. Dovrebbe essere

    codice:
    if (r==0) printf("%d\n", c);
    se vuoi stampare i divisori. Tu invece stampi il valore della divisione (d).


    Grazie infinite sei stato veramente d'aiuto!! Scusa per l'ignoranza ma ho appena iniziato a studiarlo a scuola quindi sono ancora inesperto xD Grazie ancora :]

  6. #6
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Originariamente inviato da antotan
    codice:
    scanf("%d", &a) // passaggio per riferimento
    Piccolo OT: in C il passaggio "per riferimento" non esiste: attraverso i puntatori viene solo "simulato".
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  7. #7
    Ho modificato così il programma però il problema è che non viene ripetuto il cilo do while e non capisco perchè, sapreste darmi un consiglio?

    #include <stdio.h>
    #include <math.h>

    main()
    {
    int a,c,d,r;

    printf("Inserisci un numero: ");
    scanf("%d", &a);

    c=0;

    printf("I divisori sono: ");
    do
    {
    c=c+1;
    r=a%c;
    d=a/c;

    if (r==0) printf("%d", d);
    }
    while (c=!a);
    }

  8. #8
    c=!a vuol dire c = not a.
    Tu vuoi fare c!=a o ancor meglio c < a.

  9. #9
    Originariamente inviato da antotan
    c=!a vuol dire c = not a.
    Tu vuoi fare c!=a o ancor meglio c < a.
    Oddio grazie mille, adesso funziona! questa cosa non la sapevo, il nostro professore non ce l'aveva spiegato, ci aveva solo detto che =! significava not, non he il ! era il not.

    Ringrazio tutti vivamente per l'aiuto! :]

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.