Hola!

Registrándote como bakuno podrás publicar, compartir y comunicarte en privado con otros bakuos :D

Regístrame ya!

ayuda con arreglos

celio

Bovino maduro
Desde
11 Ago 2007
Mensajes
239
Siguiendo con problemas propuestos que encuentro en la red esta este
"Ingresar un numero de cuatro cifras y colocar cada de sus digitos en un vector
ademas mostra la posicion del menor digito "
Primero supuse los siguiente:

Hay que separar los numeros que capture:

num = num / 1000;
printf("%d",num);
num2= (num % 1000)/100;
printf("%d",num2);
num3= ((num % 1000)%100)/10;
printf("%d",num3);




Pero asi lo unico que me separa es el 7 y me da es puros ceros o sea no se por que me separa el programa

#include <stdio.h>
#include <conio.h>
void main()
{
fflush(stdin);
int num,i,num2,num3,num4;
int a[4];
int menor;
printf("ingresar numero");
scanf("%d",&num);
num = num / 1000;
printf("%d",num);
num2= (num % 1000)/100;
printf("%d",num2);
num3= ((num % 1000)%100)/10;
printf("%d",num3);

for(i=0;i<4;i++){
a[0]=num;
a[1]=num2;
a[2]=num3;
a[3]=num4;
}

printf("%d",a);
menor=a[0];
for(i=0;i<4;i++){
if(a < menor){
menor==a;
}
}
printf("el menor es % y esta en la posicion a[%d]",%menor,a);
}

Y tras del hehco no me quiere compilar colocando el resto de codigo

A ustedes gracias
 
Bueno, supongamos que ingresamos el valor: 2715. Aquí el valor más pequeño es 1 y esta en la 3ra posición.

Empezamos con esta instrucción:
num=num/1000;

Bien, num=2715/1000 = 2

Observa que num = 2

¿Y luego?

num2= (num % 1000)/100;

Pero esto es igual a (2 % 1000)/100 = (2) / 100 = 0

Lo mismo para num3, etc, es decir, el problema está desde que modificas num en su valor original desde el principio, con esta instrucción:

num=num/1000;

Propongamos un cambio, y ya que estas utilizando un vector, aprovechemoslo
y evitemos el uso de variables innecesarias:

a[0]= num/1000;
a[1]= (num % 1000)/ 100;
a[2]= ((num % 1000)% 100)/10;
a[3]= (((num % 1000)% 100)% 10);

Las demás instrucciones están bien. Como te decía, el problema fue ese num=num/1000, ya que se perdió el valor original y luego se trataba de usar en las demás operaciones.

Saludos
 
Perdón, no había leído que no te compilaba.

Aquí hay un error (aunque no sintáctico, sino semántico):

for(i=0;i<4;i++){
if(a < menor){
menor==a; // == es operador de igualdad, no de asignación =
}
}

Y en esta línea:

printf("el menor es % y esta en la posicion a[%d]",%menor,a);

Ponelo así:

printf("el menor es %d y esta en la posicion %d",menor,a);

Pero a siempre te va a lanzar la posición 4. Te falta una variable que almacene la posición, supongamos que se llama así, posicion:

int posicion=0;
.
.
.

for(i=0;i<4;i++){
if(a < menor){
menor==a;
posicion=i;
}
}

.
.
.

printf("el menor es %d y esta en la posicion %d",menor,posicion);

Eso debería resolver tu problema con la compilación. Por cierto, si queres mostrar valores de vectores con printf, si son digitos es %d, etc. Aquí no importa si es un tipo de dato primitivo o definido por el usuario, sino el tipo de valor que almacena: digitos, caracteres, etc. De acuerdo a ellos usas %d, %c, etc.

Saludos
 
Bueno, supongamos que ingresamos el valor: 2715. Aquí el valor más pequeño es 1 y esta en la 3ra posición.

Lo que no me queda claro es si necesita saber la posiciòn de entrada o la posiciòn decimal, si es la primera, entonces el 1 sì estarìa en la tercera posiciòn, si por el contrario fuese la segunda, estarìa en la posiciòn 2 (la de las decenas).
 
ok entendido

A SalAndrews como te agradesco , no la habia mirado hace rato , pero le hice prueba de escritorio y salio , muchas gracias
 
ok

Lo que no me queda claro es si necesita saber la posiciòn de entrada o la posiciòn decimal, si es la primera, entonces el 1 sì estarìa en la tercera posiciòn, si por el contrario fuese la segunda, estarìa en la posiciòn 2 (la de las decenas).

No es que en estos casos se arranca siempre desde la primera
 
Volver
Arriba