¿Es correcto este diagrama de flujo?

Iniciado por jamatbar, 8 Enero 2014, 21:56 PM

0 Miembros y 1 Visitante están viendo este tema.

jamatbar

Buenas, me piden hacer el diagrama de flujo de este programa:

/* Includes del sistema */
#include <stdio.h>

/* Includes de la aplicacion */
/* Constantes del fichero */
#define RESPUESTANOPRIMO " %d no es primo\n"
#define RESPUESTAPRIMO   " %d es primo\n"

/* Tipos definidos por el usuario para el fichero */

/* Prototipo de funciones locales */
int main()
{
  /* Almacenara el numero leido por teclado */
  int valor;
  /* Servira como indice del bucle for que vamos a utilizar. */
  int i;
  /* Solicitamos el numero que queremos saber si es primo */
  printf("Introduzca un valor: ");
  scanf(" %d", &valor);

  /* El bucle lo comenzamos en 2: todo numero es divisible por 1
   * y lo terminamos antes de valor: todo numero es divisible por si mismo */

  for ( i = 2; i < valor; i++ )
    if (0 == (valor % i))

      /* Si el resto es cero, es porque i divide
       * No es primo. */
      printf(RESPUESTANOPRIMO, valor);

  return 0;
}


Y lo he hecho así:



¿Modificaríais algo?

Gracias de antemano y un saludo!

dmacias

Me pongo en modo observatorio, que justo estoy leyendo sobre diagramas de flujo y pseudocodigos  :o

xiruko

leer valor --> i=2 --> (valor%i == 0) --> Sí --> Fin (No es primo)
                                                        --> No --> (i++) --> (i < valor) --> Sí --> Volver a (valor%i == 0)
                                                                                                        --> No --> Fin (Sí es primo)

Yo lo haría así. Aunque la condición de (i < valor) puedes reducirla a (i <= valor/2) para ahorrarte ciclos en el for.

Saludos.

jamatbar

Cita de: xiruko en  8 Enero 2014, 23:40 PM
leer valor --> i=2 --> (valor%i == 0) --> Sí --> Fin (No es primo)
                                                        --> No --> (i++) --> (i < valor) --> Sí --> Volver a (valor%i == 0)
                                                                                                        --> No --> Fin (Sí es primo)

Yo lo haría así. Aunque la condición de (i < valor) puedes reducirla a (i <= valor/2) para ahorrarte ciclos en el for.

Saludos.

Buenas, antes que nada gracias por mirarlo aunque he de decirte que por ahora no tengo que cambiar el código, ya que según lo que me pidan tendré que modificarlo de una forma u otra. Por ahora lo que tengo que hacer es hacer el diagrama de flujo de dicho código, aunque sé de antemano que es bastante pobre como programa xD

dato000

Ahhh el llamado pseudocódigo, esos diagramas de flujo son excelentes para confundir a las personas y venderles una buena idea o una completa basura con una lógica y cáracter argumentado con un encanto sin igual...

:silbar: :silbar:

En fin, viejos recuerdos, mira, una cosa que se me hace raro en las instituciones es que no enseñan a realizar el ciclo for, extraño, pero así pasa, lo hicieron en el mio, lo hicieron en muchos, hay muchas cosas que no se enseñan, y que estan en los libros amigo mio, internet no siempre es la respuesta.


No es tan dificil, solo es cuestión de leer un poco, si quieres saber más, que bien te haría, te sugiero estos sitios, hablan también de C# que también es muy util, pero digamos que te dejo estos links para que uses la referencia que tienen sobre los diagramas.

Codificación del diagrama de flujo
Estructura repetitiva for
Estructura repetitiva while
Estructura repetitiva do while

Aquí el curso, muy recomendable.
Curso introduccion a CSharp/C# - CSharpYa

Saludos :silbar: :silbar:



leosansan

#5
Cita de: xiruko en  8 Enero 2014, 23:40 PM
l
Yo lo haría así. Aunque la condición de (i < =valor) puedes reducirla a (i <= valor/2) para ahorrarte ciclos en el for.


Yo lo haría así. Aunque la condición de (i < valor) puedes reducirla a (i*i<valor) para ahorrarte muchísimos ciclos en el for. Además el incremento de i lo haría como i+=2, con en valor inicial de 3, ya que sabemos que los primos, con excepción del 2, son impares.

Saluditos! ..... !!!!        



xiruko

Cita de: leosansan en  9 Enero 2014, 07:01 AM
Yo lo haría así. Aunque la condición de (i < valor) puedes reducirla a (i*i<valor) para ahorrarte muchísimos ciclos en el for. Además el incremento de i lo haría como i+=2, con en valor inicial de 3, ya que sabemos que los primos, con excepción del 2, son impares.

Pues sí, con esa condición aun te ahorras más ciclos en el for, pero yo creo que te dejaste el '=' en ella: (i*i <= valor)

Saludos.

leosansan

Cita de: xiruko en  9 Enero 2014, 11:36 AM
Pues sí, con esa condición aun te ahorras más ciclos en el for, pero yo creo que te dejaste el '=' en ella: (i*i <= valor)

Saludos.

:P :P :P :P :P


Ya está  reeditado. Thanks !!! ;) ;) ;)

Saluditos! ..... !!!!   

do-while

#8
¡Buenas!

¿Ninguno os habéis dado cuenta de que aunque el valor tenga resto cero al dividirlo por i el bucle continua? La única condición del algoritmo inicial para salir del bucle es que i >= valor

Todos los diagramas de flujo que habeis hecho están mal. Ninguno de ellos representa el algoritmo que se plantea, que es el objetivo del ejercicio y no decidir si el algoritmo está bien o si se puede optimizar o lo que sea, el enunciado es simple, a partir del código escribir el diagrama de flujo.

¡Saludos!
- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!

leosansan

Cita de: do-while en  9 Enero 2014, 12:49 PM
¡Buenas!

¿Ninguno os habéis dado cuenta de que aunque el valor tenga resto cero al dividirlo por i el bucle continua? La única condición del algoritmo inicial para salir del bucle es que i >= valor

Todos los diagramas de flujo que habeis hecho están mal. Ninguno de ellos representa el algoritmo que se plantea, que es el objetivo del ejercicio y no decidir si el algoritmo está bien o si se puede optimizar o lo que sea, el enunciado es simple, a partir del código escribir el diagrama de flujo.

¡Saludos!

Yo sólo hacía referencia a una proposición de xiruko ya que creo que en su respuesta está el algoritmo y con ella la solución al diagrama. Ya todo es pasarlo a diagrama de flujos, que tampoco es plan de ponernos a dibujar. ;) ;) ;)

Saluditos! ..... !!!!