Advertisement
Val_Kir

2lab_102

Feb 27th, 2018
188
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.25 KB | None | 0 0
  1. /*  Задан упорядоченный целочисленный массив длины N>>1000.
  2.     Значения элементов массива находятся в числовом интервале [0, 17].
  3.  
  4.     А. Напишите функцию, которая «упаковывает» данные,
  5.       т.е. размещает информацию о числах из массива, используя как можно меньше памяти.
  6.     Б. Напишите функцию, которая «распаковывает» данные,
  7.       т.е. по информации, полученной при выполнении задания А, восстанавливает исходное состояние массива.
  8. */
  9.  
  10. #include <stdlib.h>
  11. #include <stdio.h>
  12. #include <time.h>
  13.  
  14. void insert (int n, int *a)  //сортировка
  15. {
  16.     int c,i,j;
  17.     for (i=0;i<n;i++)
  18.     {
  19.         c=a[i];
  20.         for (j=i-1;(j>=0)&&(c<a[j]);j--)
  21.             a[j+1]=a[j];
  22.         a[j+1]=c;
  23.     }
  24. }
  25.  
  26. void pack (int *a, int N, int n) //упаковка, макс кол-во эл
  27. {
  28.     int z=0, j=0, b[17];
  29.  
  30.     for (int i=0; i<n; i++) b[i]=0;
  31.  
  32.     for (int i=0; i<N; i++)
  33.     {
  34.         if (a[i]==a[i+1])
  35.         {
  36.             a[i]=a[i+1];
  37.             z++;
  38.         }
  39.         else
  40.         {
  41.             b[a[i]]=z+1;
  42.             z=0;
  43.         }
  44.     }
  45.     for (int i=0; i<n; i++) a[i]=b[i];
  46. }
  47.  
  48. void unpack (int *a, int *b, int n, int N)
  49. {
  50.     int z, j=0;
  51.  
  52.     for( int i=0; i<N; i++)
  53.     {
  54.         z=a[i];
  55.         for ( ; j<N, z!=0; j++, z--)
  56.         {
  57.             b[j]=i;
  58.         }
  59.     }
  60.  
  61.     for (int i=0; i<N; i++)
  62.     {
  63.         a[i]=b[i];
  64.     }
  65. }
  66.  
  67. void main()
  68. {
  69.     const int n=17;
  70.     int N, *a, *b;
  71.  
  72.     printf("Enter the value of N>>1000: ");
  73.     scanf("%d",&N);
  74.  
  75.     a=new int [N];
  76.     b=new int [N];
  77.  
  78.     fflush(stdin);
  79.     putchar('\n');
  80.  
  81.     printf("random ");
  82.     for (int i=0; i<N; ++i)
  83.     {
  84.         a[i]=rand()%17;
  85.         printf(" %d ",a[i]);
  86.     }
  87.     putchar('\n');
  88.  
  89.     printf("insert ");
  90.     putchar('\n');
  91.     insert(N,a);
  92.     for (int i=0; i<N; ++i)
  93.     {
  94.         printf(" %d ",a[i]);
  95.     }
  96.     putchar('\n');
  97.  
  98.     printf("pack ");
  99.     putchar('\n');
  100.     pack(a,N,n);
  101.     for (int i=0; i<n; ++i)
  102.     {
  103.         printf(" %d ",a[i]);
  104.     }
  105.     putchar('\n');
  106.    
  107.     printf("unpack ");
  108.     putchar('\n');
  109.     unpack(a,b,N,n);
  110.     for (int i=0; i<N; ++i)
  111.     {
  112.         printf(" %d ",a[i]);
  113.     }
  114.     putchar('\n');
  115.  
  116.     system("pause");
  117. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement