Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Pinkfloyero en 27 Enero 2018, 20:40 pm



Título: EJERCICIO programacion en C. FICHEROS
Publicado por: Pinkfloyero en 27 Enero 2018, 20:40 pm
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);
}




Título: Re: EJERCICIO programacion en C. FICHEROS
Publicado por: MAFUS en 27 Enero 2018, 23:05 pm
No entiendo qué pretendes con esa condición del if.


Título: Re: EJERCICIO programacion en C. FICHEROS
Publicado por: Pinkfloyero en 27 Enero 2018, 23:46 pm
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  :-[


Título: Re: EJERCICIO programacion en C. FICHEROS
Publicado por: dijsktra en 2 Febrero 2018, 13:21 pm
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
Código
  1. #include <stdio.h>
  2. #include <errno.h>
  3. #include <stdlib.h>
  4.  
  5. // P : n >= 0
  6. // Q : p = n > 1 and \not (\exits i : 2<= i , 2 <= 2i <= n : n%i = 0)
  7. // O(n)
  8. int prime(const int n)
  9. {
  10.  int d;
  11.  for(d=2 ; (2*d<=n) && (n%d); d++);
  12.  return (n>1)*(2*d > n) ;
  13. }
  14.  
  15. int main (void){
  16.  FILE *f;
  17.  int n;
  18.  if (!(f = fopen("datos.txt","r")))
  19.    {
  20.      perror("fopen");
  21.      exit(EXIT_FAILURE);
  22.    };
  23.  while(!feof(f)){
  24.    fscanf(f, "%d\n", &n);
  25.    if (prime(n)) printf("%d\n", n);
  26.  }
  27.  fclose(f);
  28. }
  29.  

Esto es el fichero datos.txt

Código:
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
Código:
2
3
5
7
11
13
17
19
23
29
31
37
41
43
47