EJERCICIO programacion en C. FICHEROS

Iniciado por Pinkfloyero, 27 Enero 2018, 20:40 PM

0 Miembros y 1 Visitante están viendo este tema.

Pinkfloyero

Muy Buenas, tengo una duda que esperaba que me pudierais resolver. Solo tengo hecha una parte, me llega a compilar pero no hace lo que se espera del programa.

El ejercicio en cuestion es el siguiente:

/*Crear un programa que lea un fichero llamado
datos.txt que tendra unos numeros (uno por linea)
y muestre por pantalla cual de ellos es primo*/

//ESTA ES LA PARTE QUE TENGO HECHA//

#include <stdio.h>

FILE *fichero;
int numero;

int main (void){
   fichero = fopen("datos.txt", "r");
   if (fichero == NULL)
      printf("ERROR DE APERTURA\n");
   else
      while(!feof(fichero)){
            fscanf(fichero, "%d", &numero);
            if((numero % numero == 0) && (numero % 1 == 0))
            printf("%d\n", numero);
      }
fclose(fichero);
}



MAFUS

No entiendo qué pretendes con esa condición del if.

Pinkfloyero

Intentaba recrear la condicion de que si el numero fuera primo, se imprimiera por pantalla, pero viendolo por segunda vez y detenidamente no tiene sentido  :-[

dijsktra

#3
A ver, no es un problema de C, es de aritmetica.
La condición que impones la cumplen todos, no solo los primos. (Todos los numeros son divisibles por 1 y por si mismos).
El matiz es: Solo  los numeros primos  tienen unicamente como divisores a 1 y a si mismos...

Repasa el libro de mates. Hay muchas maneras de computar si un numero es primo: Yo pongo una de las más sencillas:
"Si un número mayor que 1 no tiene divisores otros que el 1 antes hasta la mitad, entonces es primo. En otro caso, o si es 1 o 0 no es primo "

Va una posible solucion

#include <stdio.h>
#include <errno.h>
#include <stdlib.h>

// P : n >= 0
// Q : p = n > 1 and \not (\exits i : 2<= i , 2 <= 2i <= n : n%i = 0)
// O(n)
int prime(const int n)
{
 int d;
 for(d=2 ; (2*d<=n) && (n%d); d++);
 return (n>1)*(2*d > n) ;
}

int main (void){
 FILE *f;
 int n;
 if (!(f = fopen("datos.txt","r")))
   {
     perror("fopen");
     exit(EXIT_FAILURE);
   };
 while(!feof(f)){
   fscanf(f, "%d\n", &n);
   if (prime(n)) printf("%d\n", n);
 }
 fclose(f);
}


Esto es el fichero datos.txt

0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50


Y esto la salida por pantalla

2
3
5
7
11
13
17
19
23
29
31
37
41
43
47
Si la depuración es el proceso de eliminar fallos en el software, entonces programar debe ser el proceso de ponerlos dentro. (Edsger Dijsktra)