Advertisement
Guest User

Untitled

a guest
Nov 19th, 2017
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.99 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define NULA -1
  4. typedef unsigned long long Ull;
  5.  
  6. typedef struct cancion {
  7. Ull codigo;
  8. Ull reproduccion;
  9. } Cancion;
  10.  
  11. long long buscar(Cancion *,Ull,Ull);
  12. int comparar (const void *,const void *);
  13. void mostrar (Cancion *,Ull);
  14.  
  15. int main () {
  16.  
  17. Ull cod,rep;
  18. Ull totalCanciones = 0;
  19. Cancion *canciones = NULL; //se inicia en NULL para que realloc funcione como malloc
  20. long long pos;
  21.  
  22. do {
  23. scanf("%llu",&cod);
  24. if (cod == 0) break;
  25. scanf("%llu",&rep);
  26. pos = buscar(canciones,totalCanciones,cod);
  27. if(pos == NULA) {
  28. // se inserta la posicion
  29. canciones = (Cancion *) realloc (canciones,sizeof(Cancion)*(totalCanciones+1));
  30. if(canciones == NULL) return 0; //si no hay memoria para reservar, se termina el programa
  31. canciones[totalCanciones].codigo = cod;
  32. canciones[totalCanciones].reproduccion = rep;
  33. totalCanciones++;
  34.  
  35. }
  36. else {
  37. //se aumenta el total de reproducciones
  38. canciones[pos].reproduccion += rep;
  39. }
  40. }while (cod != 0);
  41.  
  42. if (totalCanciones > 0) {
  43. qsort(canciones,totalCanciones,sizeof(Cancion),comparar);
  44. mostrar(canciones,totalCanciones);
  45. }
  46. return 0;
  47. }
  48. long long buscar(Cancion *vector ,Ull n ,Ull clave){
  49. long long i;
  50. for(i = 0 ;i < n;i++) {
  51. if (vector[i].codigo == clave) return i;
  52.  
  53. }
  54. return NULA;
  55. }
  56. int comparar (const void *a,const void *b) {
  57. Cancion *ptrA = (Cancion *) a;
  58. Cancion *ptrB = (Cancion *) b;
  59. if (ptrA->reproduccion < ptrB->reproduccion) return 1;
  60. else return 0;
  61. }
  62. void mostrar(Cancion *vector,Ull n) {
  63. Ull i;
  64. printf(" _______________________ ________________________\n");
  65. printf("| CODIGO CANCION | TOTAL REPRODUCCIONES |\n");
  66. printf("|_______________________|________________________|\n");
  67. printf("| | |\n");
  68. for(i=0;i < n;i++) {
  69. printf("| %21llu | %21llu |\n",vector[i].codigo,vector[i].reproduccion);
  70. }
  71. printf("|_______________________|________________________|\n");
  72. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement