Linux/Unix Shell Scripting - AYUDA "El problema esta en mi comando for"

   
Vista:

AYUDA "El problema esta en mi comando for"

Publicado por CARLOS (3 intervenciones) el 19/10/2014 00:18:23
Hola Amigos
Beuno el problema que tengo es este

Imprimir (la salida estándar) todos los números primos entre 60.000 y 63000.

Beno yo estoy aprendiendo soy nuevo, poreso disculpen si tengo mas errores delos que pienso y te agradeceria mucho que me ayudaras a componerlos. Si te tomaste el tiempo para tratar de ayudarme y no pudiste tampoco de antemano gracias. y gracias tanbien a los que me ayudarran jeje si lo hacen.

Esto es lo que yo hice y esta mal

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
#!/bin/bash
echo
read -p "Ingrese un numero entre el 60000 y el 63000" num
 
if [ "$num" -le 60000 ]
then
   echo "Tu numero es menor que 60000"
   else
      if [ "$num" -gt 63000 ]
      then
      echo "Tu numero es mayor que 63000"
      fi
while [ "$num" -le 63000 -a -gt 63000] do
     while [ [!["$num" -ge 6300]] do
     divisores=0
     c= 2
       for [ $c=2 $c<=$num/2 $c++ ] do
         if [ $num%$c=0 ] then
         $diisores+1
         fi
         if [ $divisores>=1] then
         echo "$num no es primo"
         else
         echo "$num es primo"
         fi
         done
    done
done
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de xve

AYUDA "El problema esta en mi comando for"

Publicado por xve (254 intervenciones) el 19/10/2014 19:53:55
Hola Carlos, creo que lo tienes bastante liado... creo que te sobran bucles, y hay varios errores...

Aquí te adjunto el archivo que creo que hace lo que quieres que haga...

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
#!/bin/bash
echo
read -p "Ingrese un numero entre el 60000 y el 63000 " num
 
if [ "$num" -le 60000 ]
then
   echo "Tu numero es menor que 60000"
else
   if [ "$num" -gt 63000 ]
   then
      echo "Tu numero es mayor que 63000"
   fi
fi
 
if [ "$num" -ge 60000 -a "$num" -le 63000 ]
then
    for (( c=60000; c<=$num; c++ ))
    do
        resto=$(( $c % 2 ))
 
        if [ $resto -eq 0 ];then
            echo "$c es primo"
        else
            echo "$c no es primo"
        fi
    done
fi

Coméntanos, si te sirve, ok?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

AYUDA "El problema esta en mi comando for"

Publicado por CARLOS (3 intervenciones) el 19/10/2014 21:45:59
Hola xve, gracias por tu tiempo
mm pasa que a la hora de correr el programa imprime todos los numeros hasta el que le indicas, hasta ese punto esta perfecto, cuando calcula si es primo o no falla, mira

Ingrese un numero entre el 60000 y el 63000: 60009
60000 es primo
60001 no es primo
60002 es primo
60003 no es primo
60004 es primo
60005 no es primo
60006 es primo
60007 no es primo
60008 es primo
60009 no es primo
los numeros a la derecha de por si no son primos por que son divisibles entre 2, cuando solo se puede entre 1 y si mismo. los otros no se no los calcule, pero desde ese punto ya no cumplio mi objetivo.
De cualquier forma agradesco tu tiempo y trabajo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve

AYUDA "El problema esta en mi comando for"

Publicado por xve (254 intervenciones) el 20/10/2014 08:45:47
Hola Carlos, tienes toda la razón, simplemente te indicaba el que era par o impar...;( mil perdones...

Aquí lo tienes solucionado:

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
#!/bin/bash
echo
read -p "Ingrese un numero entre el 60000 y el 63000 " num
 
if [ "$num" -le 60000 ]
then
   echo "Tu numero es menor que 60000"
else
   if [ "$num" -gt 63000 ]
   then
      echo "Tu numero es mayor que 63000"
   fi
fi
 
if [ "$num" -ge 60000 -a "$num" -le 63000 ]
then
    for (( c=60000; c<=$num; c++ ))
    do
 
        divisores=0
        for i in `seq $c`
        do
            if [ `expr $c % $i` -eq 0 ]
            then
                echo $i
                let divisores+=1
                if [ $divisores -gt 2 ];then
                    break
                fi
            fi
        done
        if [ $divisores -eq 2 ]
        then
            echo $c, "numero primo."
        else
            echo $c, "numero NO primo."
        fi
 
    done
fi

Coméntanos, ok?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

AYUDA "El problema esta en mi comando for"

Publicado por Carlos (3 intervenciones) el 08/11/2014 00:35:53
Perdona que te conteste hasta ahora, gracias por tu ayuda.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar