Dev - C++ - CONJUNTO DE NUMEROS ENTEROS

 
Vista:
sin imagen de perfil

CONJUNTO DE NUMEROS ENTEROS

Publicado por Nadia (6 intervenciones) el 29/09/2015 01:01:06
Hola chic@s, podrian porfavor ayudarme a hacer que funcione la opcion 1 de este programa, porfavor me URGE y no se mucho de esto, no me permite agregar el valor en la primera opcion.
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
#include <conio.h>
#include <stdlib.h>
#include <stdio.h>
#include <iostream>
 
int entero;
struct nodo{
	int dato;
	struct nodo *siguiente;
};
 
 
 struct nodo *primero=NULL, *ultimo=NULL;
 nodo *siguiente;
 
void nuevo (){
	int numnodo=0;
	struct nodo *nuevo;
	printf("ingresar numero\n");
scanf("%d",numnodo);
 
	if(nuevo==NULL){
		nuevo=siguiente;
	}
		else{
	nuevo ->siguiente=nuevo;
	}
	numnodo++;
	system ("pause");
}
 void mostrar_menu() {
      system("cls");
      printf("====== CONJUNTO DE NUMEROS ENTEROS =======\n\n");
      printf("1.- Agregar elemento al conjunto\n");
      printf("2.- Cardinalidad del conjunto\n");
      printf("3.- Pertenencia al conjunto\n");
      printf("4.- Mostrar el conjunto\n");
      printf("5.- Salir\n\n");
      printf("Escoge una opcion: ");
 
 }
 void elemento(){
 	system ("cls");
 
 	if(siguiente == NULL){
 		nuevo == elemento;
	 }
 
 	 }
 
void mostrar(){
	struct nodo *auxiliar;
	int i;
	i=0;
	auxiliar = primero;
	printf ("\n Mostrando el conjunto d los enteros");
 
   while(auxiliar!=NULL){
   	i++;
   	printf( "elementos %d: %d \n",i,auxiliar->dato);
   	auxiliar = auxiliar -> siguiente;
	   }
 
if (i==0) printf("\n Esta vacio");
system ("pause");
 
}
void pertenece() {
      struct nodo *auxiliar;
      int i,numero,encontrado;
      i=0;
      auxiliar = primero;
      printf("\n\n\nPertenencia al conjunto de los numeros enteros\n\n");
      printf( "Elemento a verificar: ");
      scanf("%d",&numero);
      while (auxiliar!=NULL) {
          i++;
          if (auxiliar->dato == numero){
             encontrado=1;
             break;
          }
         auxiliar = auxiliar->siguiente;
      }
      if (i==0) printf( "\nEL CONJUNTO ESTA VACIO !!!\n" );
      if(encontrado==1)
        printf( "El Elemento SI pertenece al conjunto. Elemento %d\n",i);
      else
        printf( "El Elemento NO pertenece al conjunto.\n");
      printf("\n\n");
      system ("pause");
 }
void cardinalidad() {
      struct nodo *auxiliar;
      int i;
      i=0;
      auxiliar = primero;
      while (auxiliar!=NULL) {
        auxiliar = auxiliar->siguiente;
        i++;
      }
      if (i==0) printf( "\nEL CONJUNTO ESTA VACIO !!!\n" );
 
      printf("\n\nLa cardinalidad (numero de elementos) del conjunto es: %d ",i);
      printf("\n\n");
      system ("pause");
 }
 
 int main() {
 
	 char opcion;
     primero = (struct nodo *) NULL;
     ultimo  = (struct nodo *) NULL;
     do {
         mostrar_menu();
         opcion = getch();
             switch ( opcion ) {
                case '1': nuevo();
                          break;
                case '2': cardinalidad();
                          break;
                case '3': pertenece();
                          break;
                case '4': mostrar();
				break;
                case '5':exit( 1 );
                default: printf( "Opción no válida\n" );
                         break;
             }
      } while (opcion!='5');
 getch();
 system("pause");
 
 return 0;
 }
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
sin imagen de perfil

CONJUNTO DE NUMEROS ENTEROS

Publicado por Hector (45 intervenciones) el 29/09/2015 02:17:58
Hola, como dijiste, el problema recae en la primera opción, cuando debes agregar el nuevo nodo a la cola.

- Uno de los problemas fue la del scanf que no le colocaste el símbolo que da la dirección de memoria del entero

scanf("%d", &numnodo);

- También olvidaste lo mas importante al crear nodos que es la de alojar memoria, veras el struct nodo* nuevo que declaraste no es nada mas que un apuntador, no puedes asignarle ni obtener datos de el por si solo, tienes que utilizar malloc para poder asignarle espacio de memoria y así convertirlo en un nodo, de lo contrario al intentar acceder a sus datos te generara un error.

nuevo = (struct nodo*)malloc(sizeof(struct nodo));

- Ademas, estas haciendo mal las conexiones, debes de hacer que el nuevo nodo sea el ultimo de la cola, cosa que no haces ya que ni estas relacionándolo con los apuntadores primero ni ultimo.

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
void nuevo ()
{
	int numnodo;
	struct nodo *nuevo;
 
	printf("ingresar numero\n");
	// numnodo requiere ser desreferenciado "&"
	scanf("%d", &numnodo);
 
    // Aloja memoria al puntero nuevo
    nuevo = (struct nodo*)malloc(sizeof(struct nodo));
 
    // Esta verificacion quiere decir "si no se pudo asignar la memoria al puntero entonces..."
    if(nuevo==NULL)
    {
        printf("Error, no se pudo alojar memoria en el apuntador"); // Notificamos el error y salimos 
        return;    // de la funcion
    }
    else // "De haber alojado memoria"
    {
        nuevo -> dato = numnodo; // Asigna el numero que ingreso el usuario al nodo
        nuevo -> siguiente = NULL; // Y asigna el puntero siguiente de este nodo a NULL
    }
 
    // Ahora, ya asignado la memoria, pasamos a hacer los enlaces, primero verificamos la condición de la cola
    if(ultimo == NULL) // Si el valor que apunta ultimo es nulo, es decir, si la cola esta VACIA 
    {
        primero = nuevo; // Logicamente el nuevo nodo sera tanto el primero como el ultimo de la cola,
        ultimo = nuevo;  // por ello, haremos que el apuntador "primero" y "ultimo" apunte a nuevo
 
    }
    else // De haber otros nodos cargados en la cola
    {
        ultimo -> siguiente = nuevo; // El que antes era ultimo, va a apuntar a "nuevo", que sera 
                                     // el actual ultimo
        ultimo = nuevo;  // Y ahora, el nodo "nuevo" estara al final de la cola, por lo que hay que 
                         // que actualizar el puntero ultimo de la cola
    }
 
    // Esta linea no influye en el codigo asi que se elimina
    // numnodo++;
    printf("Nodo agregado");
	system ("pause");
}

No olvides liberar la memoria de la cola al finalizar el programa

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

CONJUNTO DE NUMEROS ENTEROS

Publicado por Nadia (6 intervenciones) el 29/09/2015 02:45:39
Muchas gracias... Ya corre mi programa
Oye solo una duda mas si me pudieras ayudar, me sigue marcando un error a la hora de mostrar, ya logro agregar los valores pero no me los muestra en la opcion 4, que puedo hacer?
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
sin imagen de perfil

CONJUNTO DE NUMEROS ENTEROS

Publicado por Nadia (6 intervenciones) el 29/09/2015 03:15:33
Ya lo solucione, muchisimas gracias Hector fuiste de gran ayuda! :)
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