I don't know why it doesn't work

It douesn't give any error, but I need to know why when I execute it, it doesen't order the numbers that I introduce there, and only give's the bigger one.

I think that the mistake could be in the line 61, because it doesen't put any 0 in the array data.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#include <iostream> 
using namespace std; 
int max (int* data,int longitud);

void main() 
{ 
	//INIAZILACIÓN
	int longitud;
	int *data; 
	int *datatwo; 
 
	cout <<"Cuántos números quieres introducir?";
	cin >> longitud;
	data = new int [longitud];
	if (data == NULL) {cout << "Error"; return;} 

	datatwo = new int [longitud];
	if (datatwo == NULL) {cout << "Error"; return;}

	//PEDIR DATOS
 
	for (int i = 0 ; i < longitud ; i++)
	{ 
		cout << "El " << i+1 << " :";
		cin >> data [i]; 
	}

	//ASIGNAR AL ARRAY AUXILIAR ORDENADAMENTE LOS MÁXIMOS DEL VECTOR PEDIDO AL USUARIO
	
	for (int k=0; k<longitud ; k++)
	{
		datatwo[k] = max(data,longitud); // en la posición que estaba el máximo se transforma en el minimo
	}

	//VOLVER A PASAR LOS DATOS AL ARRAY ORIGINAL
	//NO ES NECESARIO, PERO LO HAGO PARA HACERME EL CHULO

	for ( int y = 0; y < longitud ; y++)
	{
		data[y]=datatwo[y];
	}

	//MOSTRAMOS POR PANTALLA

	for (int p = 0; p<longitud ; p++) {cout <<p << " : " << data[p] << endl;}

	//HACEMOS /DILIT/ A LA VARIABLE DATA
 
	delete[] data;
}

int max (int* data,int longitud)
{
	int maximo = data[0];
	int posicion = 0;
	for (int j = 1; j < longitud ; j++)
	{
		if (data[j] > maximo){maximo = data[j];posicion = j;}
		return maximo;
	}
	data[posicion] = 0;
}
Last edited on
No, max() doesn't change the elements of data hence no ordering takes place.

All it does is finding the number that is greater than the first one (due to line 59)
If no greater value is found the result is undefined because there's no return after the loop
The only incorrect thing whas the return maximo that it wasen't in the correct place

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#include <iostream> 
using namespace std; 
int max (int* data,int longitud);

void main() 
{ 
	//INIAZILACIÓN
	int longitud;
	int *data; 
	int *datatwo; 
 
	cout <<"Cuántos números quieres introducir?";
	cin >> longitud;
	data = new int [longitud];
	if (data == NULL) {cout << "Error"; return;} 

	datatwo = new int [longitud];
	if (datatwo == NULL) {cout << "Error"; return;}

	//PEDIR DATOS
 
	for (int i = 0 ; i < longitud ; i++)
	{ 
		cout << "El " << i+1 << " :";
		cin >> data [i]; 
	}

	//ASIGNAR AL ARRAY AUXILIAR ORDENADAMENTE LOS MÁXIMOS DEL VECTOR PEDIDO AL USUARIO
	
	for (int k=0; k<longitud ; k++)
	{
		datatwo[k] = max(data,longitud); // en la posición que estaba el máximo se transforma en el minimo
	}

	//VOLVER A PASAR LOS DATOS AL ARRAY ORIGINAL
	//NO ES NECESARIO, PERO LO HAGO PARA HACERME EL CHULO

	for ( int y = 0; y < longitud ; y++)
	{
		data[y]=datatwo[y];
	}

	//MOSTRAMOS POR PANTALLA

	for (int p = 0; p<longitud ; p++) {cout <<p << " : " << data[p] << endl;}

	//HACEMOS /DILIT/ A LA VARIABLE DATA
 
	delete[] data;
}

int max (int* data,int longitud)
{
	int maximo = data[0];
	int posicion = 0;
	for (int j = 1; j < longitud ; j++)
	{
		if (data[j] > maximo){maximo = data[j];posicion = j;}
	}
	data[posicion] = 0;
	return maximo;
}
Topic archived. No new replies allowed.