elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: AIO elhacker.NET 2021 Compilación herramientas análisis y desinfección malware


  Mostrar Temas
Páginas: [1]
1  Programación / Programación C/C++ / Ayuda con lista enlazada en: 24 Diciembre 2017, 10:30 am
Hola!. Hice una lista simplemente enlazada y no me funciona en algunas partes.
No logro ver donde están los errores
Cuando ingreso un nodo al final de la lista (líneas 89 a 93), el programa se cuelga.
Cuando ingreso un dato que no existe para verlo (lineas 122 a 125), en lugar de mostrar el mensaje de que el dato no se encontró, también se cuelga.
Idem anterior cuando quiero eliminar un dato e ingreso uno que no existe (lineas 186 a 190)
Aquí está el código
Gracias!!

Código
  1. / Lista simplemente enlazada que permite ingresar el nombre y la edad de personas
  2. // Va ingresando los datos ordenados de menor a mayor según la edad de la persona
  3. // Ademas el programa permite mostrar los datos de todas las personas o de una en particular,
  4. // eliminar una determinada persona o a todas
  5.  
  6. #include <stdio.h>
  7. #include <conio.h>
  8. #include <stdlib.h>
  9.  
  10. struct nodo{
  11.        char nombre[40];
  12.        int edad;
  13. struct nodo *siguiente;
  14.           };
  15.  
  16. void IngresarUno(struct nodo **);
  17. void MostrarUno(struct nodo**);
  18. void MostrarTodos(struct nodo **);
  19. void EliminarUno(struct nodo **);
  20. void EliminarTodos(struct nodo **);
  21.  
  22. int main()
  23. {
  24. int opcion;
  25. struct nodo *p;
  26. p=NULL;
  27. do{
  28. system("cls");
  29. printf("Ingrese la opcion\n\n1:Ingresar datos de una persona\n\n2:Ver datos de una persona\n\n");
  30. printf("3:Mostrar todas las personas\n\n4:Borrar una persona\n\n5:Eliminar todas las personas\n\n6:Salir del programa\n\n");
  31. scanf("%d",&opcion);
  32. switch(opcion)
  33. {
  34. case 1:IngresarUno(&p);
  35.    break;
  36. case 2:MostrarUno(&p);
  37.    break;
  38. case 3:MostrarTodos(&p);
  39.    break;
  40. case 4:EliminarUno(&p);
  41.        break;
  42. case 5:EliminarTodos(&p);
  43.    break;  
  44. case 6:system("cls");
  45.    exit(0);
  46. }
  47.   }while((opcion>=1)&&(opcion<=6));
  48. system("cls");  
  49. printf("Opcion incorrecta\n\nEl programa terminara\n\n\n");
  50. return 0;
  51. }
  52.  
  53. void IngresarUno(struct nodo **principio)
  54. {
  55. system("cls");
  56. struct nodo *anterior,*actual,*nuevo;
  57. nuevo=(struct nodo *)malloc(sizeof(struct nodo));
  58. if(!nuevo)
  59. {
  60.  printf("Error al reservar memoria\n\n");
  61.  printf("Presione una tecla para salir\n\n");
  62.  getch();
  63.  exit(1);
  64.  }
  65. printf("Ingrese el nombre: ");
  66. fflush(stdin);
  67. gets(nuevo->nombre);
  68. printf("\n\nIngrese la edad: ");
  69. scanf("%d",&(nuevo->edad));
  70. if(!(*principio)) // Si no hay ningún nodo en la lista, creo el primero
  71. {
  72.  (*principio)=nuevo;
  73.  nuevo->siguiente=NULL;
  74. }
  75. else
  76. {
  77.  anterior=(*principio);
  78.  actual=(*principio);
  79.  while(((nuevo->edad)>(actual->edad))&&(actual)) //Mientras la edad del nodo nuevo sea mayor que la del nodo actual y mientras
  80.  {                                                //no haya llegado al final de la lista, me voy desplazando por la lista
  81.   anterior=actual;                                //actualizando los punteros para evaluar el siguiente nodo
  82.   actual=(actual->siguiente);                     //Cuando salga del while tendre el lugar donde tengo que ubicar el nuevo nodo, y
  83.  }                                                //puede ser al principio de la lista, al final, o entre dos nodos          
  84.  if(anterior==actual)  //Si el nuevo nodo va al principio de la lista, los punteros son iguales
  85.  {
  86.   (*principio)=nuevo;
  87.   (nuevo->siguiente)=actual;
  88.  }
  89.  else if(!actual) //Si llegue al final de la lista(el puntero actual apunta a NULL), entonces el elemento nuevo sera
  90.  {                //el último elemento de la lista
  91.   (anterior->siguiente)=nuevo;
  92.   (nuevo->siguiente)=NULL;
  93.  }
  94.  else //Si no es ninguno de los casos anteriores, entonces el nuevo elemento va entre otros dos
  95.  {  
  96.   (anterior->siguiente)=nuevo;
  97.   (nuevo->siguiente)=actual;
  98.  }
  99. }
  100. printf("\n\n\nPresione una tecla para salir\n\n\n");
  101. getch();
  102. return;
  103. }
  104.  
  105. void MostrarUno(struct nodo **principio)
  106. {
  107. struct nodo *actual;
  108. int a;
  109. actual=(*principio);
  110. system("cls");
  111. if(!(*principio))
  112. {
  113.  printf("Lista vacia\n\nPresione una tecla para salir\n\n\n");
  114.  getch();
  115. }
  116. else
  117. {
  118.  printf("Ingrese la edad a buscar: ");
  119.  scanf("%d",&a);
  120.  while((a!=(actual->edad))&&actual) //Mientras no coincida la edad que busco con la del nodo, actualizo el puntero para leer el siguiente
  121.   actual=actual->siguiente;
  122.  if(!actual) //Si llegué al final de la lista, entonces no encontré la edad buscada
  123.  {
  124.   printf("\nNo se encontró la edad buscada\n\nPresione una tecla para salir\n\n\n");
  125.   getch();
  126.  }
  127.  else
  128.  {
  129.   printf("\n\nLos datos son:\n\n\n");
  130.   printf("Nombre: ");
  131.   puts(actual->nombre);
  132.   printf("\nEdad: %d\n\n",actual->edad);
  133.   printf("Presione una tecla para salir\n\n\n");
  134.   getch();
  135.  }
  136. }
  137. return;
  138. }
  139.  
  140. void MostrarTodos(struct nodo **principio)
  141. {
  142. struct nodo *actual;
  143. actual=(*principio);
  144. system("cls");
  145. if(!(*principio))
  146. {
  147.  printf("Lista vacia\n\nPresione una tecla para salir\n\n\n");
  148.  getch();
  149. }
  150. else
  151. {
  152.  while(actual)
  153.  {
  154.   printf("Nombre: ");
  155.   puts(actual->nombre);
  156.   printf("\nEdad: %d\n\n\n",actual->edad);
  157.   actual=actual->siguiente;
  158.  }
  159.  printf("Presione una tecla para salir\n\n\n");
  160.  getch();
  161. }
  162. return;
  163. }
  164.  
  165. void EliminarUno(struct nodo **principio)
  166. {
  167. struct nodo *actual,*anterior;
  168. int a;
  169. system("cls");
  170. if(!(*principio))
  171. {
  172.  printf("Lista vacia\n\nPresione una tecla para salir\n\n\n");
  173.  getch();
  174. }
  175. else
  176. {
  177.  actual=(*principio);
  178.  anterior=(*principio);
  179.  printf("Ingrese la edad a eliminar: ");
  180.  scanf("%d",&a);
  181.  while((a!=(actual->edad))&&actual) //Mientras no coincida la edad que busco con la del nodo, actualizo el puntero para leer el siguiente
  182.  {
  183.   anterior=actual;
  184.   actual=actual->siguiente;
  185.  }
  186.  if(!actual) //Si llegué al final de la lista, entonces no encontré la edad buscada
  187.  {
  188.   printf("\nNo se encontró la edad buscada\n\nPresione una tecla para salir\n\n\n");
  189.   getch();
  190.  }
  191.  else if(anterior==actual)  //Si los punteros son iguales, entonces el nodo a eliminar es el primero
  192.  {
  193.   (*principio)=((*principio)->siguiente);
  194.   free(actual);
  195.   actual=NULL;
  196.   printf("\n\nPresione una tecla para salir\n\n\n");
  197.   getch();
  198.  }
  199.  else  // Si no es el primero, entonces es cualquiera de los demás
  200.  {
  201.   (anterior->siguiente)=(actual->siguiente);
  202.   free(actual);
  203.   actual=NULL;
  204.  }
  205. }
  206. return;
  207. }
  208.  
  209. void EliminarTodos(struct nodo **principio)
  210. {
  211. struct nodo *actual;
  212. system("cls");
  213. if(!(*principio))
  214. {
  215.  printf("Lista vacia\n\nPresione una tecla para salir\n\n\n");
  216.  getch();
  217. }
  218. else
  219. {
  220.  actual=(*principio);
  221.  while(actual)
  222.  {
  223.   (*principio)=((*principio)->siguiente);
  224.   free(actual);
  225.   actual=(*principio);
  226.  }
  227.  printf("La lista fue eliminada\n\n\nPresione una tecla para salir\n\n\n");
  228.  getch();
  229.  return;
  230. }
  231. }
  232.  
  233.  
2  Foros Generales / Sugerencias y dudas sobre el Foro / Ayuda para editar un mensaje en: 16 Diciembre 2017, 17:21 pm
Hola
Tengo un par de dudas cuando edito un mensaje.
Cuando copio un código de programa y lo pego aquí, no se me agrega la numeración de
cada línea del código. Tengo puesta la opción de código GeSHi
Y cuando quiero insertar una imagen, voy al icono de insertar imagen pero solo me
aparece [jmg][/jmg]
¿Cómo se hace?
Gracias
3  Programación / Programación C/C++ / Matriz dinámica en: 15 Diciembre 2017, 18:19 pm
Hola, Hice un programa que reserva memoria dinamicamente para una matriz, funciona bien hasta el final, ahí da error. Alguien sabe donde está el problema?
¿Está bien hecha la liberación de memoria al final del programa??
Gracias!!



#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

int main()
{
int **punmem,i,j,k,filas,columnas;
printf("Ingrese la cantidad de filas: ");
scanf("%d",&filas);
punmem=(int **)malloc(filas*sizeof(int*));
if(punmem==NULL)
{
printf("Error al reservar memoria\n\n");
printf("Presione una tecla para salir\n\n");
getch();
exit(1);
}
for(i=0;i<filas;i++)
{
printf("\n\nCantidad de elementos de la fila %d: ",i+1);
scanf("%d",&columnas);
*(punmem+i)=(int *)malloc(columnas*sizeof(int));
if(*(punmem+i)==NULL)
{
printf("Error al reservar memoria\n\n");
printf("Presione una tecla para salir\n\n");
getch();
exit(1);
}
for(j=0;j<columnas;j++)   
{
printf("Elemento[%d][%d]: ",i+1,j+1);
scanf("%d",((*punmem)+i*columnas+j)); // Se puede poner &punmem[j]
}
printf("\nElementos de la fila %d:\n",i+1);
for(k=0;k<columnas;k++)
printf("%d ",(*((*punmem)+i*columnas+k)));
}
printf("\n\n\n");
for(i=0;i<filas;i++)
free(*(punmem+i));
for(i=0;i<filas;i++)
(*(punmem+i))=NULL;
free(punmem);
punmem=NULL;
return 0;
}
4  Programación / Programación C/C++ / Ayuda al reservar memoria con calloc en: 13 Diciembre 2017, 08:06 am
Hola!
Quiero reservar memoria para un entero con calloc y me da error
¿Que está mal?

#include <stdio.h>
#include <stdlib.h>

int main()
{
 int *punmem;
 punmem=(int *)calloc(1,sizeof(int));
 if(*punmem==NULL)
  printf("Error al reservar memoria");
 else
 {
  *punmem=5;
  printf("%d",*punmem);
 }
 free(punmem);
 return 0;
}
5  Programación / Programación C/C++ / Ayuda con mi programa en: 9 Diciembre 2017, 15:34 pm
Buenos días, a ver si me pueden ayudar con este simple programita
Quiero inicializar una matriz usando aritmética de punteros pero me da error en esta linea   (*(*(p+i)+j))=k;

¿Que está mal?

Gracias!!


#include <stdio.h>
#define FILAS 2
#define COLUMNAS 2

int main()
{

int m[FILAS][COLUMNAS];
int *p,i,j,k=1;
p=*m;
printf("%d   %d",&m[0][0],p);

for(i=0;i<FILAS;i++)
  for(j=0;j<COLUMNAS;j++)
  {
   (*(*(p+i)+j))=k;
   k++; 
  }
for(i=0;i<FILAS;i++)
  for(j=0;j<COLUMNAS;j++)
   printf("%d ",m[j]);    
 return 0;
}
6  Programación / Programación C/C++ / Ayuda con mi programa en: 15 Noviembre 2017, 15:59 pm
Hola, alguien me puede decir que está mal en este programa?
Gracias!!

/* Programa que calcula 2^1+2^2+2^3+...+2^n */

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <math.h>
  4.  
  5. int main()
  6. {
  7. double num,resultado=0;
  8. int i;
  9. printf("Ingrese el valor de \"n\"\n\n");
  10. scanf("%d",&num);
  11. for(i=1;i<=num;i++)
  12.  resultado+=pow(2,(double)i);
  13. system("cls");
  14. printf("El resultado es:  %f\n\n",resultado);
  15. return 0;
  16. }
  17.  

MOD: Etiqueta GeSHi
Páginas: [1]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines