#include <stdlib.h>
#include <stdio.h>
#include <limits.h>
#define NUM "c:\\numeri.txt"
#define MOD_R "r"
#define MOD_W "w"
#define MSG "non riesco ad aprire il file\n"
/*
Name: numeri_primi
Author:zax
Description:ho usato 1 file per memorizzare i divisori
poiche il loro numero nn è noto a priori
Date:
Copyright:
*/
typedef enum{fal,tru}boolean;
typedef FILE* file;
typedef char* string;/*ho definito il tipo stringa*/
void open_(string);
file fp;
int main(void)
{
boolean state=fal;
int i=0;
int state1,div,j;
unsigned int num;
char s1[80];
printf("Calcolo dei numeri primi\n");
printf("1 unsigned occupa %d byte,valore max %u\n",sizeof(unsigned int),UINT_MAX);
do
{
if(i&&(state))
{
printf("numero:");
state1=scanf("%*c%u",&num);/*il carattere viene soppresso*/
state=fal;
}
if((!state)&&(!i))
{
printf("Inserire un numero dispari:");
state1=scanf("%u",&num);
printf("\n");
}
if((num%2!=0)&&(num>0)&&(state1))
;/*ha letto correttamente*/
else
state=tru;
i++;
}while(state);/*esce con state==fal*/
div=num/2;
for(i=3,j=0;i<div;i++)
{
if(!(num%i))
{
printf("%d\n",i);
if(!j)
{
open_(MOD_W);
j++;
fprintf(fp,"NUMERO %u divisori\n",num);
}
fprintf(fp,"%d\n",i);/*scrivo su file i divisori*/
state=tru; /*ha divisori*/
}
}
if(state)
{
fclose(fp);
open_(MOD_R);
}
printf((state)?"%u numero non primo,seguono i divisori:\n":"%u numero primo\n",num);
i=0;
if(state)
{
fgets(s1,80,fp);
while(fscanf(fp,"%u",&num)!=EOF)
{
i++;
printf("%d)divisore=%u\n",i,num);
}
fclose(fp);
}
printf("%s\n",s1);
system("PAUSE");
return 0;
}
void open_(string s)
{
if((fp=fopen(NUM,s))==NULL)
{
printf(MSG);
system("pause");
exit(1);
}
}