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

Hola Soy nuevo el foro y aprendiendo C, me ha surgido una duda

Estas en el tema de Hola Soy nuevo el foro y aprendiendo C, me ha surgido una duda en el foro de C/C++ en Foros del Web. Hola foro, estoy aprendiendo C un libro antiguo que tenía en casa y que por fín he decidido ponerme con el. Está un poco desfasado ...
  #1 (permalink)  
Antiguo 22/04/2016, 16:55
Avatar de YamboKalinka  
Fecha de Ingreso: abril-2016
Mensajes: 3
Antigüedad: 8 años
Puntos: 0
Hola Soy nuevo el foro y aprendiendo C, me ha surgido una duda

Hola foro, estoy aprendiendo C un libro antiguo que tenía en casa y que por fín he decidido ponerme con el. Está un poco desfasado es de 1992, pero imagino que no está demás aprender con el. Voy por el tema 5 y bueno me está costando un poquito. Estoy con while y me gustaría preguntar al foro si alguien podría ayudarme si no es mucho pedir claro.
El ejercicio debe solicitar una nueva cantidad para repetir el proceso y cuando se ponga 0 el programa se cierre. Es una modificación de este que es un ejercicio anterior.
[JSFIDDLE="base"]
#include<stdio.h>
#include<stdlib.h>
/* Este programa suma todos los números desde 1 hasta el numero TOPE introducido */
main()
{
int cont, suma;
int tope;

cont = 0;
suma = 0;

printf("Introduzca el numero tope que quiere que se sume\n");
scanf("%d", &tope);
while (cont++ < tope)
suma = suma + cont;

printf("suma = %d\n", suma);
printf("Pulse una tecla para cerrar el programa.\n");
system("pause>nul");

}[/JSFIDDLE]

yo le hago esta modificación que es parecida a un ejercicio del tema que estoy estudiando pero no funciona correctamente, no suma los numeros desde 1 hasta el numero introducido en tope, por ejemplo si pongo tope 5, debería sumar 1+2+3+4+5= 15 y volverme a pedir otro numero, pero no hace la suma y no entiendo. Este es mi programa:
[JSFIDDLE="duda"]
#include<stdio.h>
#include<stdlib.h>

main()
{
int cont, suma;
int tope;

cont = 0;
suma = 0;

printf("Introduzca el numero tope que quiere que se sume\n");
scanf("%d", &tope);
while (cont++ < tope)
{
suma = suma + cont;
printf("suma = %d\n", suma);
printf("Vuelve a introducir un numero\n");
scanf("%d", &tope);
}
printf("Pulse una tecla para cerrar el programa.\n");
system("pause>nul");
}[/JSFIDDLE]

Y me estoy liando con este otro programa que si que me funciona que si que me pide repetidas veces el numero hasta que le pongo Cero:
[JSFIDDLE="ejemplo"]
#include<stdio.h>
#include<stdlib.h>
#define SM 60
/* Convierte segundos en minutos y segundos */
main()

{
int seg, min, resto;


printf("Este programa convierte segundos\n");
printf("en minutos y segundos.\n");
printf("Introduzca el numero de segundos.\n");
scanf("%d", &seg);
while (seg > 0)
{

min=seg/SM;
resto= seg%SM;
printf("%d seg son %d min, %d seg.\n", seg, min, resto);
printf("Siguiente?\n");
scanf("%d", &seg);
}
printf("Adios\n");
printf("Pulse una tecla para cerrar el programa.\n");
system("pause>nul");

}[/JSFIDDLE]

Y mi duda es ¿por qué en este sí que el programa pide continuamente que le introduzcas los segundos lo calcula y vuelve a pedir continuamente sin parar hasta que le pones el 0 y el programa duda el del medio de los 3 aquí expuestos no lo hace?

Muchas gracias de antemano a quien lea mi post seguro que daré un poco por culillo.

Gracias de nuevo, ¿alguien podría echarme un cable?
Un saludo

P.D. Espero que me entendais la duda quizás es un poco lioso
  #2 (permalink)  
Antiguo 23/04/2016, 03:27
Avatar de xKuZz  
Fecha de Ingreso: febrero-2015
Ubicación: nullptr
Mensajes: 183
Antigüedad: 9 años, 2 meses
Puntos: 27
Respuesta: Hola Soy nuevo el foro y aprendiendo C, me ha surgido una duda

Para resaltar el código utiliza la etiqueta HIGHLIGHT del lenguaje correspondiente.

La diferencia radica en que en el último ejemplo el while es exclusivo para esperar la nueva entrada y en el tuyo necesitas un while que realice la operación y otra while que una vez la operación esté realizada te solicite de nuevo una entrada. Ejemplo:

Aquí tienes otro ejemplo sobre el que basarte que calcula el factorial de un número dado

Código C:
Ver original
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. main() {
  5.     int entrada, factorial;
  6.  
  7.     printf("Introduzca el numero del que quiere obtener factorial\n");
  8.     scanf("%d",&entrada);
  9.     while (entrada >= 0) { // Este while determina si el valor introducido
  10.                            // debe hacer que continue el programa
  11.         factorial = entrada;
  12.         if (factorial == 0) // Por definición el factorial de 0 es 1
  13.             factorial = 1;
  14.         while (--entrada > 1) {// Este while realiza la operación matemática
  15.                                // que requiere del mismo
  16.                                // n! = n * n-1 * n-2 ... 2
  17.             factorial = factorial *entrada;
  18.         }
  19.         // Mostramos por pantalla el resultado
  20.         printf("El factorial es %d\n",factorial);
  21.         printf("Introduzca otro numero. Negativo para finalizar el programa\n");
  22.         scanf("%d", &entrada);
  23.     }
  24.  
  25. }
  #3 (permalink)  
Antiguo 25/04/2016, 06:18
Avatar de YamboKalinka  
Fecha de Ingreso: abril-2016
Mensajes: 3
Antigüedad: 8 años
Puntos: 0
Respuesta: Hola Soy nuevo el foro y aprendiendo C, me ha surgido una duda

Cita:
Iniciado por xKuZz Ver Mensaje
Para resaltar el código utiliza la etiqueta HIGHLIGHT del lenguaje correspondiente.

La diferencia radica en que en el último ejemplo el while es exclusivo para esperar la nueva entrada y en el tuyo necesitas un while que realice la operación y otra while que una vez la operación esté realizada te solicite de nuevo una entrada. Ejemplo:

Aquí tienes otro ejemplo sobre el que basarte que calcula el factorial de un número dado

Código C:
Ver original
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. main() {
  5.     int entrada, factorial;
  6.  
  7.     printf("Introduzca el numero del que quiere obtener factorial\n");
  8.     scanf("%d",&entrada);
  9.     while (entrada >= 0) { // Este while determina si el valor introducido
  10.                            // debe hacer que continue el programa
  11.         factorial = entrada;
  12.         if (factorial == 0) // Por definición el factorial de 0 es 1
  13.             factorial = 1;
  14.         while (--entrada > 1) {// Este while realiza la operación matemática
  15.                                // que requiere del mismo
  16.                                // n! = n * n-1 * n-2 ... 2
  17.             factorial = factorial *entrada;
  18.         }
  19.         // Mostramos por pantalla el resultado
  20.         printf("El factorial es %d\n",factorial);
  21.         printf("Introduzca otro numero. Negativo para finalizar el programa\n");
  22.         scanf("%d", &entrada);
  23.     }
  24.  
  25. }
Hola xKuZz, gracias por tu respuesta, creía que había puesto el texto en highlight pero no se como hacerlo bien entonces, disculpa.
Entiendo lo que me quieres decir compañero, pero el problema es que aún no he llegado al if, claro yo también pensé digo necesito un if while o algo así pero aú nno he llegado al tema, entonces no se como solucionarlo, de todas maneras seguiré con el libro y no me pararé aquí y mas adelante intentaré volver a hacer el ejercicio.
Muchas gracias compañero por tu ayuda.
  #4 (permalink)  
Antiguo 25/04/2016, 06:24
Avatar de xKuZz  
Fecha de Ingreso: febrero-2015
Ubicación: nullptr
Mensajes: 183
Antigüedad: 9 años, 2 meses
Puntos: 27
Respuesta: Hola Soy nuevo el foro y aprendiendo C, me ha surgido una duda

Para tu caso no necesitas ningún if. Sólo necesitas uh while interior(que realiza la suma hasta el tope) y otro while exterior (que pide números hasta que se introduza el 0). La única razón por la que aparece el if en el ejemplo es que el factorial de 0 por definición es 1 y no proviene de la misma cuenta matemática que el resto. Supón que eso no existe y que no vale introducir el 0 y tienes un caso similar sobre el que basarte.

PD: La etiqueta de Highlight es el menú desplegable, en ese menú seleccionas el lenguaje
  #5 (permalink)  
Antiguo 25/04/2016, 06:28
Avatar de YamboKalinka  
Fecha de Ingreso: abril-2016
Mensajes: 3
Antigüedad: 8 años
Puntos: 0
Respuesta: Hola Soy nuevo el foro y aprendiendo C, me ha surgido una duda

Cita:
Iniciado por xKuZz Ver Mensaje
Para tu caso no necesitas ningún if. Sólo necesitas uh while interior(que realiza la suma hasta el tope) y otro while exterior (que pide números hasta que se introduza el 0). La única razón por la que aparece el if en el ejemplo es que el factorial de 0 por definición es 1 y no proviene de la misma cuenta matemática que el resto. Supón que eso no existe y que no vale introducir el 0 y tienes un caso similar sobre el que basarte.

PD: La etiqueta de Highlight es el menú desplegable, en ese menú seleccionas el lenguaje
Hola Gracias por tu rápida respuesta compañero, creo que lo intenté hacer algo así pero no debí hacerlo bien, me fijaré en tu ejemplo y en lo que me dices en tu comentario y te digo algo, muchísimas gracias de verdad por tu ayuda.

Si ahora fijandome en tu ejemplo me he dado cuenta que hay que seleccionar en el deplegable el lenguaje, no lo sabía disculpa, yo dejé en Highlight y pinché la nube que hay justo a su derecha pensaba que así lo hacía en Highlight, disculpa de nuevo y gracias te comento como voy con el ejercicio.
Graciaaaas

Etiquetas: char, ejercicio, foro, funcion, int, numero, 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 18:59.