SHARE
TWEET

Untitled

a guest Feb 19th, 2019 63 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. //  Arturo Lecuona Andara C.I: 27.588.221
  2. /* 1 Menu para manejo dinamico de listas en C */
  3.  
  4. #include <stdio.h>
  5. #include <stdlib.h>
  6. struct lista{
  7. int valor;
  8. lista *sig;
  9. };
  10.  
  11. void insertar( lista **cab, int x){
  12. /* inserta x por el comienzo de la lista p */
  13. lista *t = new lista;
  14. t->valor = x;
  15. t->sig = *cab;
  16. *cab = t;
  17. }
  18. void mostrar ( lista *cab, lista* cab2){
  19. /* muestra por pantalla la lista enlazada */
  20. lista *t = cab;
  21. system("cls");
  22. printf( "\n\nMostrar lista A\n\n Cab ");
  23. while ( t){
  24. printf("->[%i]", t->valor);
  25. t= t->sig;
  26. }
  27. printf("->NULL\n\n");
  28.  
  29. t= cab2;
  30.  
  31. printf( "\n\nMostrar lista B\n\n Cab ");
  32. while ( t){
  33. printf("->[%i]", t->valor);
  34. t= t->sig;
  35. }
  36. printf("->NULL\n\n");
  37. }
  38. void eliminar ( lista **p, int x){
  39. /* elimina la primera ocurrencia del valor x en la lista p */
  40. lista *t=*p;
  41. if (t)
  42. if (t->valor==x){
  43. *p=(*p)->sig;
  44. delete( t);
  45. }
  46. else {
  47. while ((t->sig)&&(t->sig->valor != x)) t=t->sig;
  48. if (t->sig){
  49. lista *aux= t->sig;
  50. t->sig = t->sig->sig;
  51. delete( aux );
  52. }
  53. }
  54. }
  55.  
  56. int potencia10(int n){
  57. int i=0,fact=1;
  58. if (n<1)
  59. return 1;
  60. while(i<n){
  61. fact*= 10;
  62. i++;
  63. }
  64. return fact;
  65. }
  66. int digilen(int n){
  67. int len=1;
  68. if (n == 0)
  69. return 1;
  70. while(n/potencia10(len))
  71. len++;
  72. return len;
  73. }
  74.  
  75. int separar(int numA,int p){
  76. int lenA,numP=0,d,numI=0,ip=0,ii=0;
  77. lenA= digilen(numA);
  78. for(int i=1; i<=digilen(numA); i++){
  79. int ayuda = numA%potencia10(i);
  80. int ayuda2 = potencia10(i-1);
  81. d = (numA%potencia10(i))/potencia10(i-1);
  82. if (d%2){
  83. ii++;
  84. numI += d*potencia10(ii-1);
  85. }
  86. else{
  87. ip++;
  88. numP += d*potencia10(ip-1);
  89. }
  90.  
  91. }
  92. if (p == 1)
  93. return numI;
  94. if (p == 0)
  95. return numP;
  96. return 0;
  97. }
  98.  
  99. int unirdigitos(int x, int y){
  100. int len,df;
  101. len = digilen(x) + digilen(y);
  102. df = (x*potencia10(digilen(y))+y);
  103. return df;
  104.  
  105. }
  106.  
  107. void separarParImpar (lista *p, lista* q){
  108. int paresA,imparesA,paresB,imparesB;
  109. lista *cab= p, *cab2 = q;
  110. while(p && q){
  111. paresA = separar(p->valor,0);
  112. imparesA = separar(p->valor,1);
  113. paresB = separar(q->valor,0);
  114. imparesB = separar(q->valor,1);
  115. p->valor = unirdigitos(paresA,paresB);
  116. q->valor = unirdigitos(imparesB,imparesA);
  117. p=p->sig;
  118. q=q->sig;
  119. }
  120. while (p){
  121. p->valor = separar(p->valor,0);
  122. p=p->sig;
  123. }
  124. while (q){
  125. q->valor = separar(q->valor,1);
  126. q=q->sig;
  127. }
  128.  
  129. }
  130.  
  131. void main() {
  132. int op = -1, x=0,xi=-1;
  133. lista *p=NULL, *q=NULL;
  134. while ( op ){
  135. system("cls"); 
  136. printf( "\n\n\t\tMENU DE MANEJO DE LISTAS n\n ");
  137. printf( "1.\tInsertar por comienzo de lista A\n ");
  138. printf( "2.\tInsertar por comienzo de lista B\n ");
  139. printf( "3.\tMostrar lista\n ");
  140. printf( "4.\tEliminar dato\n ");
  141. printf(" 5.\tCombinar digitos pares en A e Impares en B\n\n ");
  142. printf( "0.\tSALIR del sistema\n\n ");
  143.  
  144. scanf("%i", &op);
  145.  
  146. switch (op){
  147. case 1: printf("\n\nIndique dato a Insertar en A ");
  148. scanf( "%i", &x);
  149. insertar (&p, x);
  150. break;
  151. case 2: printf("\n\nIndique dato a Insertar en B ");
  152. scanf( "%i", &x);
  153. insertar (&q, x);
  154. break;
  155. case 3: mostrar(p,q);
  156. break;
  157.  
  158. case 4: printf("\n\nIndique dato a Eliminar ");
  159. scanf( "%i", &x);
  160. system("cls");
  161. while (xi){
  162. printf("\n\t 1. En la lista A");
  163. printf("\n\t 2. En la lista B ");
  164. scanf("%i",&xi);
  165. switch (xi){
  166. case 1: eliminar(&p,x);
  167. break;
  168. case 2: eliminar(&q,x);
  169. break;
  170. }
  171. }
  172.  
  173. break;
  174.  
  175. case 5: separarParImpar(p,q);
  176. break;
  177.  
  178.  
  179. }
  180.  
  181. system("pause");
  182. };
  183.  
  184.  
  185. }
  186.  
  187. /* FIN de Menu para manejo dinamico de listas en C */
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top