Buenas tardes. Expongo una posible solución del ejercicio CU00548F del tutorial de programación C lenguajeC desde cero.
EJERCICIO
Estudia el código que se muestra más abajo y responde a las preguntas:
#include <stdio.h>
#include <stdlib.h>
int check_prime(int num);
int main(){
int n1,n2,i,flag;
printf("Enter two numbers(intervals): ");
scanf("%d %d",&n1, &n2);
printf("Prime numbers between %d and %d are: ", n1, n2);
for(i=n1+1;i<n2;++i)
{
flag=check_prime(i);
if(flag==0)
printf("%d ",i);
}
return 0;
}
int check_prime(int num) {
int j,flag=0;
for(j=2;j<=num/2;++j){
if(num%j==0){
flag=1;
break;
}
}
return flag; // Ejercicios aprenderaprogramar.com
}
a) Sin ejecutar el código (sólo pensando) responde: ¿para qué sirve la función check_prime? ¿Qué resultado devolverá si le pasamos el número 4? ¿Por qué?
Sirve para verificar si el número siguiente al primer entrado por el usuario es divisible por 2. Si le pasaramos 4 devolverá flag=1 y saldrá del bucle debido a la instrucción "break;" porque cumplirá la condición "if(num%j==0)".
b) En dicha función se usa la siguiente definición de bucle: for(j=2;j<=num/2;++j) ¿Por qué crees que el bucle tiene un valor inicial 2? ¿Por qué crees que el bucle tiene un valor final num/2?
El bucle empieza con un valor inicial 2, porque cada número es divisible por 1 y no tendría sentido, siempre se saldría del bucle entrando en el condicional: "if(num%j==0)". Además los números primos son divisibles por 1, así que dividiendo el número por 1 no comprobaríamos si es primo o no.
También tiene otra razón, comprobamos si el número es divisible por 2 para comprobar primero si es un número par. Todos los números par (menos el 2) no son números primos.
El bucle tiene un valor final num/2 porque si hemos comprobado dividir el num por todos los números hasta su mitad y hemos comprobado que hasta ese momento no tiene un división exacta su otra mitad tampoco lo será. Es decir, si una "cosa" no es exactamente divisible si le añadimos exactamente la misma cantidad de esa "cosa" es como dejarla igual. Nos podemos valer del ejemplo: "2/4=1/2".
c) ¿La variable flag que se usa en el main es la misma que se usa en la función check_prime? ¿Es posible declarar y usar dos variables con el mismo nombre en la función main? ¿Y declarar y usar dos variables con el mismo nombre en la función main y otra función? ¿Por qué?.
No es la misma variable "flag" que se usa en el "main" que en la función "chek_prime". Son dos variables locales diferentes.
No es posible usar dos variables con el mismo nombre en una misma función.
Es posible declarar y usar dos variables con el mismo nombre en la función "main" y en otra función. Serán dos variables locales diferentes.
d) Crea una tabla de variables del programa que conste de las siguientes columnas: nombre de variable, ámbito, utilidad. Por ejemplo la variable i tiene nombre de variable i, ámbito la función main, y utilidad servir como índice en el bucle for del main.

e) Si se introducen como números 11 y 30 ¿Son evaluados 11 y 30? ¿Qué resultado se obtiene? ¿Por qué?
No se evalúa el 11 porque el valor inicial del bucle for de la función "main" ya empieza en: "i=n1+1", con lo cual quiere decir que empezará a partir del 12 y ese valor será el primer parámetro pasado a la función "chech_prime". El 30 tampoco será comprobado porque el bucle de la función "main" sólo se ejecutará hasta que el índice del mismo sea menor que el segundo número entrado por el usuario.
Se optien el resultado: "13 17 19 23 29" porque son los número primos entre 11 y 30 (ambos excluidos de comprobación).
Gracias.