Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Error al compilar codigo en C

Estas en el tema de Error al compilar codigo en C en el foro de C/C++ en Foros del Web. Hola a todos. Vereis, estaba realizando un ejercicio en C, para averiguar si un numero es primo o que (ya luego lo ampliaria para sacar ...
  #1 (permalink)  
Antiguo 28/07/2011, 08:48
Avatar de spyker1925  
Fecha de Ingreso: febrero-2011
Mensajes: 37
Antigüedad: 13 años, 2 meses
Puntos: 0
Error al compilar codigo en C

Hola a todos.
Vereis, estaba realizando un ejercicio en C, para averiguar si un numero es primo o que (ya luego lo ampliaria para sacar los X primeros numeros).
El problema está, que cuando voy a compilar el programa, me da un error: "error: lvalue required as left operand of assignment"
No se porque esta mal, pero gcc me indica que el error esta en la siguiente linea:
Código PHP:
#include <stdio.h>
#include <math.h>

int main(){
    
int numeroraizcomprobari;
    
printf("Da un numero: ");
    
scanf("%i", &numero);
    
sqrt(numero)=raiz/* Aqui dice que esta el problema*/
    
for (i=0i<=raizi++){
    
comprobar=raiz i;
    if (
comprobar == 0){
        
printf("No es primo\r\n");
    }
    }
    
printf("Es primo\r\n");
    return 
0;

Pero anteriormente, me daba otro error en la parte de "comprobar=raiz%i;", pero se ve que al ir cambiando el codigo, y tocarlo, ahora ya no da (?).
La verdad esque no se porque no me compila, el programa lo veo bien :S.
PD: Utilizo Debian (GNU/Linux) y compilo mediante la linea: gcc numeros_primos.c -lm -o numeros_primos, creo que ese no sera el problema no?
Espero que me resolvais la duda, un saludo y gracias ^^
  #2 (permalink)  
Antiguo 28/07/2011, 09:32
Avatar de ArkangelGammar  
Fecha de Ingreso: enero-2011
Ubicación: <?php $persona->ubicacion('ArkangelGammar'); ?>
Mensajes: 179
Antigüedad: 13 años, 4 meses
Puntos: 19
Respuesta: Error al compilar codigo en C

Cita:
Iniciado por spyker1925 Ver Mensaje
Hola a todos.
Vereis, estaba realizando un ejercicio en C, para averiguar si un numero es primo o que (ya luego lo ampliaria para sacar los X primeros numeros).
El problema está, que cuando voy a compilar el programa, me da un error: "error: lvalue required as left operand of assignment"
No se porque esta mal, pero gcc me indica que el error esta en la siguiente linea:
Código PHP:
#include <stdio.h>
#include <math.h>

int main(){
    
int numeroraizcomprobari;
    
printf("Da un numero: ");
    
scanf("%i", &numero);
    
sqrt(numero)=raiz/* Aqui dice que esta el problema*/
    
for (i=0i<=raizi++){
         
comprobar=raiz i;
         if (
comprobar == 0){
                
printf("No es primo\r\n");
          }
    }
    
printf("Es primo\r\n");
    return 
0;

Pero anteriormente, me daba otro error en la parte de "comprobar=raiz%i;", pero se ve que al ir cambiando el codigo, y tocarlo, ahora ya no da (?).
La verdad esque no se porque no me compila, el programa lo veo bien :S.
PD: Utilizo Debian (GNU/Linux) y compilo mediante la linea: gcc numeros_primos.c -lm -o numeros_primos, creo que ese no sera el problema no?
Espero que me resolvais la duda, un saludo y gracias ^^
Efectivamente el problema lo tenes en esa linea. No podes realizar operaciones del lado izquierdo de la asignacion.

Reemplazala por esta linea

Código:
     raiz = sqrt(numero);
Espero haber ayudado,

Saludos
__________________
"No entiendes algo al menos que seas capaz de explicarselo a tu abuela.
Cada dia sabemos mas....y entendemos menos...."

A. Einstein - Genio mas alla de la razon.
  #3 (permalink)  
Antiguo 28/07/2011, 09:32
 
Fecha de Ingreso: junio-2008
Ubicación: Seattle, USA
Mensajes: 733
Antigüedad: 15 años, 10 meses
Puntos: 61
Respuesta: Error al compilar codigo en C

haz la asignacion al reves

raiz = sqrt(numero)
  #4 (permalink)  
Antiguo 28/07/2011, 12:16
 
Fecha de Ingreso: febrero-2003
Ubicación: D.F.
Mensajes: 163
Antigüedad: 21 años, 2 meses
Puntos: 22
Respuesta: Error al compilar codigo en C

Otra observación:
Código C++:
Ver original
  1. comprobar=raiz %i;
Debería ser:
Código C++:
Ver original
  1. comprobar = numero % i;
Además ten cuidado cuando i = 0.
  #5 (permalink)  
Antiguo 28/07/2011, 16:08
Avatar de spyker1925  
Fecha de Ingreso: febrero-2011
Mensajes: 37
Antigüedad: 13 años, 2 meses
Puntos: 0
Respuesta: Error al compilar codigo en C

Hola de nuevo.
Gracias, el compilador ya no me da error alguno, pero cuando lo ejecuto pasa lo siguiente:
El programa me pide un numero, yo se lo doy, y cuando le doy al enter me pone
Excepcion de coma flotante :S
Que puede ser?, tengo entendido que la funcion sqrt no se puede usar con float no? o eso no tiene nada que ver?.
También, porque deberia ser el programa comprobar = numero % i; envez de como esta así? es decir, el programa lo que hace es la raiz cuadrada de dicho numero, y apartir de ahi, divide todos los numeros desde el 0 hasta la raiz, y si no es divisible es primo, y si es divisible, no lo es (almenos eso creo yo ).
Bueno espero que me resolvais esa duda, asi poco a poco lo entendere mejor xD.
Un saludo!!
  #6 (permalink)  
Antiguo 28/07/2011, 16:22
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años
Puntos: 228
Respuesta: Error al compilar codigo en C

Primero ten en cuenta lo que te dijieron antes. Cuidado con i = 0. La division por cero no existe. Eso proboca la exepcion de coma flotante.

Luego ten en cuenta vos estas chequeando si un numero es primo y no si su raiz es primo.

Ejemplo 49. 49 = 7 x 7. Si chequeamos si 49 es primo chequeando si 7 es primo es un grave error.
Por eso deberias usar el comprobar = numero % i y no como lo tenias vos.
Se calcula la raiz porque es la cota maxima de un posible divisor. Hay teoremas que lo demuetran.
Espero que entiendas.
  #7 (permalink)  
Antiguo 29/07/2011, 13:24
Avatar de spyker1925  
Fecha de Ingreso: febrero-2011
Mensajes: 37
Antigüedad: 13 años, 2 meses
Puntos: 0
Respuesta: Error al compilar codigo en C

Vale muchas gracias!,en sí el programa esta bien, me falta pensar y razonar mas las cosas xD (me cuesta bastante , pero con el tiempo se solventará xD)
Teniais razon con lo de
for (i=2; i<=raiz; i++)
comprobar = numero % i;
Porque tiene que hacer bucle hasta raíz, pero comprobar en verdad el numero xD.
Ahora tengo otro problemilla,(creo que es con los if) ahora si al programa se le da un numero un pelin grande (un 32 o por ahi) te da varios resultados (No es primo, No es primo, Es primo)
Y donde puede estar el fallo? (me gustaria que me lo explicarais en vez de poner el codigo, asi voy aprendiendo poco a poco)
Código C:
Ver original
  1. int main(){
  2.     int numero, raiz, comprobar, i;
  3.     printf("Da un numero: ");
  4.     scanf("%i", &numero);
  5.     raiz=sqrt(numero);
  6.     for (i=2; i<=raiz; i++){
  7.          comprobar = numero % i;
  8.          if (comprobar == 0){
  9.              printf("No es primo\r\n");
  10.          }
  11.     }
  12.     if (comprobar != 0){
  13.         printf("Es primo\r\n");
  14.     }
  15.     return 0;
  16. }
Muchas gracias!!
  #8 (permalink)  
Antiguo 29/07/2011, 13:31
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años
Puntos: 228
Respuesta: Error al compilar codigo en C

Tu problema esta que una vez que detecta que no es primo sigue calculando...y entonces va aseguir dando resultado. Ademas cuando termine el for sigue la ejecucion y te dice que no es primo!

Saludos
  #9 (permalink)  
Antiguo 29/07/2011, 13:35
Avatar de spyker1925  
Fecha de Ingreso: febrero-2011
Mensajes: 37
Antigüedad: 13 años, 2 meses
Puntos: 0
Respuesta: Error al compilar codigo en C

DIos jajaja, mil perdones, me olvide del break, ahora va bien ya el programita ^^ (lo quite cuando tenia problemas con lo de la raiz, y no lo he vuelto a poner, despistes asi tengo siempre xDDDDD)MUchas gracias por hacerme dar cuenta !!!

Etiquetas: compilar, programa
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:42.