Bienvenido(a), Visitante. Favor de ingresar o registrarse.
Enero 07, 2009, 12:55:44
Inicio Ayuda Buscar Ingresar Registrarse
Noticias: Foro de Java, C++ y más.

Empieza una nueva comunidad de programación: Oneble ... es lo que tu quieras que sea

+  Foros Java y C/Linux
|-+  Programación
| |-+  C/C++ linux
| | |-+  Duda nueva sobre bucles 2
« anterior próximo »
Páginas: [1] Enviar tema Imprimir
Autor Tema: Duda nueva sobre bucles 2  (Leído 318 veces)
lem
Full Member
***
Mensajes: 105


Ver Perfil


« en: Abril 20, 2007, 09:15:56 »

Hola otra vez

Estoy haciendo un código fuente que calcule todos los numeros comprendidos entre dos dados incluyendo éstos.El programa no debe suponer que el primero sea mayor que el segundo ni viceversa,pero sí que deberá tenerlo en cuenta para mostrar los números en orden creciente o decreciente según corresponda.
#include<stdio.h>
#include<conio.h>
int main(){
int n1,n2,i,c,d;
printf("\nIntroduzca primer numero: ");
scanf("%d",&n1);
printf("\nIntroduzca segundo numero: ");
scanf("%d",&n2);
c=n1;
d=n2;
printf("\nLos numeros comprendidos entre %d y %d son: ",c,d);
if(n1-n2<0){/*Los numeros del intervalo van creciendo*/
for(i=0;i<=(n2-n1)-1;i++){
n1=n1+i;
printf("\t\n%d",n1);
}
}
else{/*Los numeros del intervalo van decreciendo*/
for(i=0;i<=(n1-n2)-1;i++){
n1=n1-i;
printf("\t\n%d",n1);
}
}
getch();
return 0;
}

Este es el resultado:


Introduzca primer numero: 1

Introduzca segundo numero: 10

Los numeros comprendidos entre 1 y 10 son:
1
2
4
7

¿Por qué no van creciendo de 1 en 1 sino que lo van haciendo en la forma 1 2 3 ?

Gracias por vuestra ayuda.
P.d.Supongo que será una tontería pero llevo un buen rato y no doy con el error.
En línea
lem
Full Member
***
Mensajes: 105


Ver Perfil
« Respuesta #1 en: Abril 21, 2007, 02:27:01 »

OK

Gracias encontrado el error.Para quien le interesr el código correcto sería el siguiente:

#include<stdio.h>
#include<conio.h>
int main(){
int n1,n2,i,c,d;
printf("\nIntroduzca primer numero: ");
scanf("%d",&n1);
printf("\nIntroduzca segundo numero: ");
scanf("%d",&n2);
c=n1;
d=n2;
printf("\nLos numeros comprendidos entre %d y %d son: ",c,d);
if(n1-n2<0){/*Los numeros del intervalo van creciendo*/
for(i=0;i<=(n2-n1);i++){
printf("\t\n%d",n1+i);
}
}
else{/*Los numeros del intervalo van decreciendo*/
for(i=0;i<=(n1-n2);i++){
printf("\t\n%d",n1-i);
}
}
getch();
return 0;
}
En línea
chuidiang
Administrator
Hero Member
*****
Mensajes: 2022



Ver Perfil WWW Email
« Respuesta #2 en: Abril 21, 2007, 02:32:32 »

Hola:

Me alegro. Simplemente como posible mejora para que tengas en cuenta.

Puedes calcular el incremento si es 1 o -1 en funcion de cual de ellos sea más grande

Código:
int incremento;
if (n2-n1>0) incremeto=1
else incremento=-1

Luego, te quedaría todo más fácil en un solo bucle así

Código:
int i;
for (i=n1;i<=n2;i=i+incremento)
printf ("%d\n", i);

Se bueno.
En línea

lem
Full Member
***
Mensajes: 105


Ver Perfil
« Respuesta #3 en: Abril 22, 2007, 02:21:17 »

Hola Chuidiang

Tu mejora es de experto  Impresionado yo me doy por satisfecho,por ahora,con saber aplicar las estructuras de control
y saber solucionar los enunciados dados en clase,es decir,coger ciertas soltura.
En cualquier caso,tu mejora la he tomado como mía y he rehecho el código.

Gracias por tu amabilidad.
En línea
Páginas: [1] Enviar tema Imprimir 
« anterior próximo »
Ir a:  


Ingresar con nombre de usuario, contraseña y duración de la sesión

Powered by MySQL Powered by PHP Powered by SMF 1.1.5 | SMF © 2006-2007, Simple Machines LLC XHTML 1.0 válido! CSS válido!