Programación C++ max y min de un vector

Hola a todos, tengo un problema con este código, no entiendo que está sucediendo después de que aplico el primer for. Muchas gracias de antemano por la ayuda que puedan brindarme.

#include <iostream>
#include <stdlib.h>

using namespace std;

int main (int argc, char * const argv[]) {

int M,i,z;
float *datos;

cout << "Digite la cantidad de datos que requiere "<<endl;
cin >> M;

datos = new float [M];

cout << "Ahora ingrese "<<M<<" datos"<<endl;

for (i=0; i<M; i++) {
cin >> datos[i];
}

cout << "Este es el cuarto dato antes "<< datos[3]<<endl;

// Hallemos el máximo

for (i=0; i<M-1; i++) {
if (datos[i]>datos[i+1]) {
z=datos[i];
datos[i]=datos[i+i];
datos[i+1]=z;
}}
cout << "El máximo valor de la lista de números es "<< datos[M-1]<<endl;

cout <<"Este es el cuarto dato después "<< datos[3]<<endl; // Aqui ya no funciona

//Hallemos el mínimo

for (i=0; i<M-1; i++) {
if (datos[i]<datos[i+1]) {
z=datos[i];
datos[i]=datos[i+1];
datos[i+1]=z;
}
}

cout << "El mínimo valor de la lista de números es "<<datos[M-1]<<endl;

return 0;
}


Esto es lo que me arroja después de correrlo, todo va bien justo después de aplicar el primer for.

Digite la cantidad de datos que requiere
6
Ahora ingrese 6 datos
12
11
6
7
1
9
Este es el cuarto dato antes 7
El máximo valor de la lista de números es 12
Este es el cuarto dato después 0
El mínimo valor de la lista de números es 0
No entiendo porque te pones a ordenar el vector:

int max = v[0];

for (int i = 1; i < tamanyo;i++)
{
    if (v[i] > max) max = v[i];
}

cout<<max<<endl;


Sea v un array cualquiera.
Muchas gracias Amchacon, ya todo funcionó [beer]
Hola Vilovar85,

Estoy viendo que recorres 2 veces el vector (una para el máximo y otra para el mínimo). Reducirías tu tiempo a la mitad si obtuvieras ambos datos en el mismo bucle. Siguiendo el código de ejemplo que te propone Amchachon :

int max = v[0];
int min = v[0];

for (int i = 1; i < tamanyo;i++)
{
    if (v[i] > max)
       max = v[i];
    if(v[i]<min)
       min = v[i];
}

cout<<"Máximo: "<<max<<endl;
cout<<"Mínimo: "<<min<<endl;


EDITO: Por cierto acuerdate de liberar memoria si utilizas memoria dinámica como es el caso (antes de finalizar el programa):

delete[] datos;

Saludos!
No es delete sino delete[] (esta usando un array).
amchacon escribió:No es delete sino delete[] (esta usando un array).


Me he colado en la contestación, gracias por la corrección :).

Saludos!
Si se acepta una sugerencia... Yo no haría una asignación con los valores máximos o mínimos, sino con el índice del vector que contiene esos valores máximos o mínimos. De ese modo, no solo accedes al valor (con V[max] y V[min]) sino que sabes qué componente del vector los contiene, que puede ser más útil llegado el caso.
6 respuestas