Dev - C++ - Ayuda con ejercicios de listas de registros

 
Vista:
Imágen de perfil de Juan Manuel
Val: 38
Ha disminuido su posición en 3 puestos en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Ayuda con ejercicios de listas de registros

Publicado por Juan Manuel (21 intervenciones) el 22/09/2019 02:34:16
Saludos , tengo unos problemas con unos ejercicios de listas, mas especificamente con un algoritmo de seleccion y uno de suma.

El modulo de seleccion recibe una lista con un unico puntero llamado tabla y mediante i y j recorre la lista pero siempre deja el ultimo sin ordenar . siendo el criterio de orden un valor entero llamado tamano .

1
2
3
4
5
6
7
8
void ordenar_seleccion (pnodo &tabla){
	pnodo i,j;
	for(i=tabla; i->sig->sig != NULL; i=i->sig)
		for(j=tabla->sig; j->sig != NULL ; j=j->sig)
 
			if(i->dato.tamano > j ->dato.tamano )
				cambio (i->dato,j ->dato);
}

el siguiente modulo es el de suma el cual unicamente suma uno de los valores tantas veces como nodos tenga la lista

1
2
3
4
5
6
7
8
int sumatamano (pnodo tabla){ //preguntar
	pnodo i;
	int c=0;
	for (i=tabla; i !=NULL ; i=i->sig){
		c=c+tabla->dato.tamano;
	}
	return c;
}

Abajo dejo el codigo para que puedan probarlo, muchas gracias de antemano

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
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
#include <stdlib.h>
#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
//TIPOS
typedef char tcad [50];
typedef struct telemento {tcad id,tipo, valor; int tamano ; char ambito; };
typedef struct tnodo *pnodo;
typedef struct tnodo {telemento dato; pnodo sig;};
//MODULOS
void inicio (pnodo &tabla);
void crear_nodo (pnodo &nuevo);
void cargar (telemento & a);
bool validar_id (tcad a);
void agregar_i (pnodo &tabla);
void mostrar (pnodo tabla);
void contar (pnodo tabla, int &x);
int sumatamano (pnodo tabla);
void cambio (telemento &a, telemento &b);
void ordenar_seleccion (pnodo &tabla);
void mostrar2 (pnodo tabla);
//PRINCIPAL
main (){
	pnodo tabla;
	telemento t;
	int x,c;
 
	inicio (tabla);
	agregar_i (tabla);
	cout << "**********************" <<endl;
	mostrar (tabla);
	cout << "**********************" <<endl;
	cout << "La suma en bytes es " << sumatamano (tabla) << endl;
	contar ( tabla, x);
	ordenar_seleccion (tabla);
	cout << "**********************" <<endl;
	mostrar2 (tabla);
	cout << "**********************" <<endl;
	system("pause");
}
 
void inicio (pnodo &tabla){
	tabla=NULL;
}
 
void crear_nodo (pnodo &nuevo){
	telemento x;
	nuevo = new tnodo;
	if(nuevo ==NULL)
	cout << "MEMORIA LLENA";
	else{
	cargar (x);
	nuevo->dato=x;
	nuevo->sig=NULL;
	}
 
}
 
void cargar (telemento & a){
	tcad var;
	do{
	cout << "Ingrese nombre de variable"<<endl;
	fflush(stdin);
	gets(var);
	}while(validar_id (var)==false);
	strcpy(a.id,var);
	cout << "TAMANO EN BYTES" <<endl;
	cin >> a.tamano;
 
 
}
 
bool validar_id (tcad a){
	int i,l;
	l=strlen(a);
	bool band=true;
	if (a[0] < 'A' || a[0] > 'z')
	band=false;
	return band;
}
 
void agregar_i (pnodo &tabla){
	pnodo nuevo;
	int opc;
	do{
	if(tabla ==NULL){
	crear_nodo (nuevo);
	tabla=nuevo;
	}
	else{
		crear_nodo (nuevo);
		nuevo->sig=tabla;
		tabla=nuevo;
	}
	cout << "quiere ingresar otro dato? " <<endl;
	cout << "ingrese '0' para finalizar el proceso de carga" <<endl;
	cin >> opc;
	}while(opc != 0);
}
 
void mostrar (pnodo tabla){
	pnodo i;
	if(tabla ==NULL)
	cout << "tabla vacia" <<endl;
	else
	for (i=tabla; i!=NULL; i=i->sig){
	cout << i->dato.id << endl;
	cout << i->dato.tamano <<endl;
	}
 
}
 
void contar (pnodo tabla, int &x){
	pnodo i;
	int c=0;
	for (i=tabla; i!=NULL; i=i->sig){
		c=c+1;
	}
	x=c;
	cout << "El total de variables es " << c << endl;
}
 
int sumatamano (pnodo tabla){ //preguntar
	pnodo i;
	int c=0;
	for (i=tabla; i !=NULL ; i=i->sig){
		c=c+tabla->dato.tamano;
	}
	return c;
}
 
void ordenar_seleccion (pnodo &tabla){
	pnodo i,j;
	for(i=tabla; i->sig->sig != NULL; i=i->sig)
		for(j=tabla->sig; j->sig != NULL ; j=j->sig)
 
			if(i->dato.tamano > j ->dato.tamano )
				cambio (i->dato,j ->dato);
}
 
 
 
void cambio (telemento &a, telemento &b){
	telemento aux;
	aux=a;
	a=b;
	b=aux;
}
 
void mostrar2 (pnodo tabla){
	pnodo i;
	if(tabla ==NULL)
	cout << "tabla vacia" <<endl;
	else
	for (i=tabla; i!=NULL; i=i->sig){
	cout << i->dato.tamano <<endl;
	}
 
}
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