Hola!

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

Regístrame ya!

ayuda con otro vector

celio

Bovino maduro
Desde
11 Ago 2007
Mensajes
239
Bueno a trancasos como dicen en colombia estoy solito aprendiendo vectores
y tengo este ejercicio

tengo que ingresar numeros y capturarlos en un vector y mostar la posicion del menor dijito el programa es el siguiente:

#include <stdio.h>
#include <conio.h>
#include <iostream.h>
void main()
{
int i,n,a[50],min;
printf("datos del arreglo");
scanf("%d",&n);
/*for(i=0;i<n;i++)
{
a=0;
}
*/
for(i=0;i<n;i++)
{
printf("digite valores");
scanf("%d",&a);


}
for(i=0;i<n;i++)
{
printf("%d",a);


}

for(i=0;i<n;i++)
{

if(a<a[i+1])
{
min=a;
}
else
{
a=a[i+1];
}
}


printf(" el minimo es %d\n",min);

getch();




}


Pero siempre me muestra la ultima posicion osea que si ingreso 91386 me muestra la posicion del numero 6 y no la del 1 y no hallo el error.

Muchas gracias a todos los que me han ayudado, estoy aprendiendo solo y por lo que algunos usuarios me han ayudado.

Gracias..
 
bueno en si, no es que tengas un error, sino que siempre estas comparando lo que tiene a con lo que tiene a[i+1].por ejemplo:
:::::::::::::.vector ::::::::::::::
posiciion valor
0------------>5
1------------>10
2------------->4

al empezar el ciclo compara la posicion 0 con la posicion 1::::::5<10 al resultar cierto asigna a minimo el valor de 5 e incrementa el ciclo.
ahora evalua la posicion 1 con la posicion 2 ::::::::::::10<4 al resultar falso le asigna a minimo el valor de 4. y asi sucesivamente.
por lo tanto esta mal, ya que lo qe buscas es obtener el minimo, por lo tanto lo que debes ir evaluado siempre es el valor min:::::::min<a

el codigo correcto seria mas o menos asi:

min=a[0];//asignamos el primer valor del arreglo para evaluarlo con los demas elementos
for(i=1;i<5;i++){
if(a<min){min=a}
}

espero aclarar tus dudas, y haberme sabido explicar un saludo....y animo ay la llevas =D
Saludos desde México!!!
 
bueno en si, no es que tengas un error, sino que siempre estas comparando lo que tiene a con lo que tiene a[i+1].por ejemplo:
:::::::::::::.vector ::::::::::::::
posiciion valor
0------------>5
1------------>10
2------------->4

al empezar el ciclo compara la posicion 0 con la posicion 1::::::5<10 al resultar cierto asigna a minimo el valor de 5 e incrementa el ciclo.
ahora evalua la posicion 1 con la posicion 2 ::::::::::::10<4 al resultar falso le asigna a minimo el valor de 4. y asi sucesivamente.
por lo tanto esta mal, ya que lo qe buscas es obtener el minimo, por lo tanto lo que debes ir evaluado siempre es el valor min:::::::min<a

el codigo correcto seria mas o menos asi:

min=a[0];//asignamos el primer valor del arreglo para evaluarlo con los demas elementos
for(i=1;i<;in++){
if(a<min){min=a}
}

espero aclarar tus dudas, y haberme sabido explicar un saludo....y animo ay la llevas =D
Saludos desde México!!!


:vientos::vientos::vientos:
 
min=a[0];//asignamos el primer valor del arreglo para evaluarlo con los demas elementos
for(i=1;i<n;i++){
if(a<min){min=a}
}
jejej me habia equivocado en el for te avia puesto i<5; jajaj y era asta n

Saludos nuevamente =P
 
Bueno:

1. Inicializa siempre todas tus variables.
2. En el for donde buscas al mínimo:

for(i=0;i<n;i++)
{

Cuando n=50 (vector de 50 posiciones) vas de 0 a 49, bien. Pero luego tenes i+1. Y tu vector es de 0 a 49, ahí falla:

if(a<a[i+1]) /*eso va a fallar cuando se elija n=50, ya que en la ultima iteracion, i = 49 (por i<n) y luego i+1=50, estas intentando acceder a la posicion 51 del vector, que no existe*/
{
min=a;
}
else
{
a=a[i+1];
}
}

¿La solución? i<n-1

Como apunto el bakuno anterior, solo estas comparando dos posiciones sin tomar en cuenta la posición anterior (que es lo que querías hacer con ese else, pero que falla). La solución:

int menor=0;
int posicion=0;


.
.
.

menor=a[0];
posicion=0;

for (int i=0;i<n-1;i++)
{
if (minimo>a[i+1])
{
minimo=a[i+1];
posicion=i+1;
}
}

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

Saludos
 
Bueno:

1. Inicializa siempre todas tus variables.
2. En el for donde buscas al mínimo:

for(i=0;i<n;i++)
{

Cuando n=50 (vector de 50 posiciones) vas de 0 a 49, bien. Pero luego tenes i+1. Y tu vector es de 0 a 49, ahí falla:

if(a<a[i+1]) /*eso va a fallar cuando se elija n=50, ya que en la ultima iteracion, i = 49 (por i<n) y luego i+1=50, estas intentando acceder a la posicion 51 del vector, que no existe*/
{
min=a;
}
else
{
a=a[i+1];
}
}

¿La solución? i<n-1

Como apunto el bakuno anterior, solo estas comparando dos posiciones sin tomar en cuenta la posición anterior (que es lo que querías hacer con ese else, pero que falla). La solución:

int menor=0;
int posicion=0;


.
.
.

menor=a[0];
posicion=0;

for (int i=0;i<n-1;i++)
{
if (minimo>a[i+1])
{
minimo=a[i+1];
posicion=i+1;
}
}

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

Saludos
 
jaja no se para que pongo esto ya que muchos ya contestaron pero da =
HTML:
#include <iostream>
using namespace std;
int main()
{
int i,n,a[50],min,b=0;

cout<<"numero de datos"<<endl;
cin>>n;
for(i=0;i<n;i++)
{
            cout<<"introduce dato"<<endl;
            cin>>a[b];
            b++;          
}
b=0;
min= a[b];
for(i=0;i<n;i++)
{

       if (a[i]<min)   
       {
                    
                        min=a[i];
                       
       }    
       
}
cout<<"el numero menor es:"<<min<<endl;
system("pause");
}
 
i n a min
0 5 8 8

1 2 - - ->2<----


2 4


3 5


4 6



5

Osea que no es el menor

Primera pasada:

min = a[0]; osea que va a[8]
for i=1;i<5; osea que entra al ciclo
Si a[0] osea 8 < min osea 8 8 no es menor que 8 por lo tanto sale del If

i se inrementa en uno


Segunda pasada :

i=1,i<5 entra al ciclo
Si a osea 2 < min osea 8 pues es cierto 2 es menor que 8
min= a osea que min va en 2

se incremnta i en 1 o sea en 2

tercera pasada:
i=2;i<5 entra al siclo
Si a osea 4 es menor que min osea 2 eso es falso y se sale del ciclo

i se incrementa en 1 osea en tres

Cuarta pasada

i=3;i<5 entra al ciclo
Si a osea 5 es menor que min osea 2 falso y se sale de ciclo


y asi sucesicvamente o sea que la minima es 2 al imprimir min


Muchachos como les agradezco a trino tec y a salandrews de verdad muchas gracias por aclar mis dudas eso si seguite tenindo mas pues a trancasos como les digo estoy aprendioendo arreglos pero me con la ayuda de ustedes lo lograre estimados bakunos muchas gracias
 
ahh se me olvido agradecer a animatrix jejejeje que pena
 
Volver
Arriba