Visual C++ .NET - problema con recursividad

 
Vista:
sin imagen de perfil
Val: 1
Ha disminuido su posición en 6 puestos en Visual C++ .NET (en relación al último mes)
Gráfica de Visual C++ .NET

problema con recursividad

Publicado por marco (1 intervención) el 08/10/2018 04:19:25
bueno dias tardes o noches, tengo un problema aca con mi codigo quiero que compare el inven[n-1].unouno con el siguiente arreglo y que luego me diga cual valor se repite , aqui lo eh intentando de varios modos pero me sale entre error o 0 y sinceramente no se que hacer

pd= se que hay otras cosas en este codigo que deben pulirse pero me quiero concentrar en el problema que puse arriba,

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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
#include<iostream>
#include<conio.h>
using namespace std;
struct inventario{
	char nombreitem[100];
	double unid, precio,unouno;
	int cod;
};
double totalfinal(inventario inven[],int n,double acumulador){
	if(n==0)
		return acumulador;
	else{
		inven[n-1].unouno=inven[n-1].unid*inven[n-1].precio+(inven[n-1].unid*inven[n-1].precio*0.18);
		acumulador +=inven[n-1].unouno;
		return totalfinal(inven, n-1 ,acumulador);
	}
}
//mostra el monto total que mas se repite con recursivdad
double mostrar(inventario inven[],int n,int c){
	if(n==0)
		return c;
	else{
		if (inven[n].unouno=inven[n-1].unouno)
			double res=inven[n-1].unouno
	}
}
 
int egresar(inventario inven[],int n){
	if(n==0)
	    return 0;
	else{
	cout<<"Ingrese el nombre del producto "<<endl;
	cin>>inven[n-1].nombreitem;
	cout<<"codigo del producto"<<endl;
	cin>>inven[n-1].cod;
	cout<<"ingrese las unidades "<<endl;
	cin>>inven[n-1].unid;
	cout<<"ingrese el precio unitario "<<endl;
	cin>>inven[n-1].precio;
 
	cout<<"-----------------------"<<endl;
	return egresar(inven, n-1);
	}
}
/*
void ingresar(inventario inven[],int n){
	for(int i=0;i<n;i++){
	cout<<"Ingrese el nombre del producto "<<endl;
	cin>>inven[i].nombreitem;
	cout<<"codigo del producto"<<endl;
	cin>>inven[i].cod;
	cout<<"ingrese las unidades "<<endl;
	cin>>inven[i].unid;
	cout<<"ingrese el precio unitario "<<endl;
	cin>>inven[i].precio;
	cout<<"-----------------------"<<endl;
	}
}*/
 
/*
void mostrar(inventario inven[],int n){
	for(int i=0;i<n;i++){
	cout<<"nombre "<<inven[i].nombreitem<<endl;
	cout<<"codigo del producto "<<inven[i].nombreitem<<endl;
	cout<<"num de unidades "<<inven[i].unid<<endl;
	cout<<"precio "<<inven[i].precio<<endl;
	cout<<"------------------"<<endl;
	}
}*/
int mostrarles(inventario inven[],int n){
	double res;
	res=inven[n-1].unid*inven[n-1].precio+(inven[n-1].unid*inven[n-1].precio*0.18);
	if(n==0)
		return 0;
	else{
	cout<<endl;
	cout<<"nombre "<<inven[n-1].nombreitem<<endl;
	cout<<"codigo del producto "<<inven[n-1].nombreitem<<endl;
	cout<<"num de unidades "<<inven[n-1].unid<<endl;
	cout<<"precio "<<inven[n-1].precio<<endl;
	cout<<"uni x precio"<<res<<endl;
	cout<<"------------------"<<endl;
	return mostrarles (inven,n-1);
	}
}
void main(){
	inventario inven[5];
	int n,cont;
	double acumulador=0,t1=0;
	cout<<"Cuantos productos se va a ingresar? ";
	cin>>n;
 
	cout<<egresar(inven,n);
	cout<<mostrarles(inven,n);
	cout<<endl;
	cout<<mostrar(inven,n);
	cout<<" el precio total es: "<<totalfinal(inven,n,acumulador);
	_getch();
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Problema al comparar y encontrar valor repetido en arreglo

Publicado por Alejandro (265 intervenciones) el 14/02/2024 22:57:43
Marco, veo algunos problemas en tu código, especialmente en la función `mostrar` que estás intentando implementar para encontrar el valor que se repite en `unouno`. Aquí tienes una versión corregida de esa función:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
double mostrar(inventario inven[], int n) {
    if (n <= 1)
        return 0; // No hay suficientes elementos para comparar
 
    double repetido = inven[n - 1].unouno;
 
    for (int i = n - 2; i >= 0; i--) {
        if (inven[i].unouno == repetido) {
            cout << "Valor repetido: " << repetido << endl;
            return repetido;
        }
    }
 
    return mostrar(inven, n - 1); // Llamada recursiva con un elemento menos
}

Cambios realizados:

1. Ajusté la condición `if (n == 0)` a `if (n <= 1)`. Si tienes menos de dos elementos, no hay suficientes para comparar.

2. Modifiqué la comparación en `if (inven[n].unouno = inven[n - 1].unouno)` a `if (inven[i].unouno == repetido)`.

3. Cambié el tipo de retorno de la función `mostrar` a `double`. Si encuentras un valor repetido, puedes devolver ese valor.

4. Añadí una llamada recursiva para reducir el número de elementos a comparar en cada iteración.

Recuerda que esta función solo imprimirá el primer valor repetido que encuentre. Si hay más de un valor repetido, necesitarías ajustar la lógica para manejar esos casos.

Además, ten en cuenta que este código asume que estás usando la función `totalfinal` para calcular `unouno` y que los valores se han inicializado correctamente antes de llamar a `mostrar`. Asegúrate de que la lógica de tu programa cumple con estas condiciones.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar