Test Foro de elhacker.net SMF 2.1

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

#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