Dev - C++ - Mi programa sólo funciona con positivos, pero no negativos.

 
Vista:

Mi programa sólo funciona con positivos, pero no negativos.

Publicado por Santiago (3 intervenciones) el 07/03/2020 02:35:44
Muy buenas, estoy iniciando el curso de programación, me dejaron realizar un programa que: "El número ingresado por el usuario (positivo o negativo), sea el número que detenga el ciclo (for). Si el número es positivo, la serie tiene que ir de 2 en 2, pero si es negativo, debe de ir de -3 en -3. Cuando ingreso un número negativo, no muestra nada, sólo una página en negro.

Esto es lo que tengo:
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>
main ()
{
int numero,x;
printf ("Ingrese un numero entero \n");
scanf ("%d",&numero);
if (numero>0){
for (x=0;x<=numero;x=x+2){
	printf("Su numero %d es positivo \n",x);}}
else{
    for (x=0;x<=numero;x=x-3){
        printf("Su numero %d es negativo \n",x);
}}}
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
sin imagen de perfil
Val: 160
Ha aumentado 1 puesto en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Mi programa sólo funciona con positivos, pero no negativos.

Publicado por Andrés (53 intervenciones) el 07/03/2020 03:48:14
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
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
 
bool cmp_positivo(int, int);
bool cmp_negativo(int, int);
void imprime_serie(int, int, bool (*)(int, int));
 
int main(void) {
 
  int numero;
  printf("Ingrese un número entero: ");
  scanf("%d", &numero);
 
  int incremento = 2;
  bool (*cmp)(int, int) = cmp_positivo;
 
  if(numero < 0 ) {
    incremento = -3;
    cmp = cmp_negativo;
  }
 
  imprime_serie(numero, incremento, cmp);
 
  return EXIT_SUCCESS;
 
}
 
bool cmp_positivo(int i, int numero) {
  return i < numero;
}
 
bool cmp_negativo(int i, int numero) {
  return i > numero;
}
 
void imprime_serie(int numero, int incremento, bool (*cmp)(int, int)) {
  for(register int i = 0; cmp(i, numero) ; i += incremento) {
     printf("%d ", i);
  }
}
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

Mi programa sólo funciona con positivos, pero no negativos.

Publicado por Santiago (3 intervenciones) el 07/03/2020 04:05:56
Bro, estás haciendo mucho para un programa que hace poco. El docente nos dijo que a lo mucho tendríamos dos if. No hacer tanta vuelta.
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
sin imagen de perfil
Val: 1.440
Bronce
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Mi programa sólo funciona con positivos, pero no negativos.

Publicado por dario (718 intervenciones) el 07/03/2020 03:53:23
Hola, una pregunta y que pasa si el numero es par o impar.
Salu2.
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

Mi programa sólo funciona con positivos, pero no negativos.

Publicado por Santiago (3 intervenciones) el 07/03/2020 04:02:55
En realidad eso no importa, sólo debe de ser entre positivos y negativos. Salu2.
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 Rodrigo
Val: 1.755
Plata
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Mi programa sólo funciona con positivos, pero no negativos.

Publicado por Rodrigo (539 intervenciones) el 07/03/2020 04:14:47
Si El numero que se ingresa es negativo x parte en 0 y la condicion x <= numero es falsa inmediatamenre, haciendo q El ciclo nunca entre.

Cambiala por >=
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
sin imagen de perfil
Val: 417
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Mi programa sólo funciona con positivos, pero no negativos.

Publicado por Thanatos (199 intervenciones) el 07/03/2020 04:12:38
El problema está en la condición del segundo for. El valor inicial de x es cero, si numero es negativo, la condición nunca se cumple y por esto las instrucciones que están dentro del for nunca se ejecutan. Dicho de otra manera: el cero nunca va a ser menor o igual a un número negativo.

La condición de la sentencia if que escribiste, hace que el programa considere al cero como un número negativo. El enunciado no indica que muestres un mensaje en caso de que el usuario ingrese un cero, pero podrías hacerlo así:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <stdio.h>
 
int main(void) {
    int numero;
 
    printf ("Ingrese un numero entero: ");
    scanf ("%d", &numero);
 
    if (numero > 0) {
        printf("\nEl numero %d es positivo.\n", numero);
        for (int cont = 0; cont <= numero; cont += 2) {
            printf("%d\n", cont);
        }
    } else if (numero < 0) {
        printf("\nEl numero %d es negativo.\n", numero);
        for (int cont = 0; cont >= numero; cont -= 3) {
            printf("%d\n", cont);
        }
    } else {
        printf("\nUsted ingreso un cero.\n");
    }
 
    return 0;
}
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
sin imagen de perfil
Val: 1.440
Bronce
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Mi programa sólo funciona con positivos, pero no negativos.

Publicado por dario (718 intervenciones) el 07/03/2020 04:41:59
Aca otra forma.
Salu2.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>
 
int main ()
{
  int numero,x;
 
  printf ("Ingrese un numero entero \n");
  scanf ("%d",&numero);
 
  if (numero > 0)
    for (x=0; x<=numero; x=x+2)
      printf("%d ",x);
  else
    for(x=numero; x<0; x=x+3)
      printf("%d ",x);
 
  return 0;
}
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