PDA

Visualizza la versione completa : Programma in C


FrankViolence
21-02-2010, 20:54
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 :]

antotan
21-02-2010, 21:09
non ho visto la correttezza dell'algoritmo, ma la scanf va usata così:



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

FrankViolence
21-02-2010, 21:15
Originariamente inviato da antotan
non ho visto la correttezza dell'algoritmo, ma la scanf va usata così:



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


Cavolo è vero, che errore stupido xD Grazie mille :]

antotan
21-02-2010, 21:17
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



if (r==0) printf("%d\n", d);


non mi torna. Dovrebbe essere



if (r==0) printf("%d\n", c);


se vuoi stampare i divisori. Tu invece stampi il valore della divisione (d).


:ciauz:

FrankViolence
21-02-2010, 21:20
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



if (r==0) printf("%d\n", d);


non mi torna. Dovrebbe essere



if (r==0) printf("%d\n", c);


se vuoi stampare i divisori. Tu invece stampi il valore della divisione (d).


:ciauz:

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 :]

Alex'87
21-02-2010, 21:50
Originariamente inviato da antotan


scanf("%d", &a) // passaggio per riferimento
Piccolo OT: in C il passaggio "per riferimento" non esiste: attraverso i puntatori viene solo "simulato". :spy:

FrankViolence
21-02-2010, 21:53
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);
}

antotan
21-02-2010, 22:05
c=!a vuol dire c = not a.
Tu vuoi fare c!=a o ancor meglio c < a.

FrankViolence
21-02-2010, 22:09
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! :]

Loading