Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* Задан упорядоченный целочисленный массив длины N>>1000.
- Значения элементов массива находятся в числовом интервале [0, 17].
- А. Напишите функцию, которая «упаковывает» данные,
- т.е. размещает информацию о числах из массива, используя как можно меньше памяти.
- Б. Напишите функцию, которая «распаковывает» данные,
- т.е. по информации, полученной при выполнении задания А, восстанавливает исходное состояние массива.
- */
- #include <stdlib.h>
- #include <stdio.h>
- #include <time.h>
- void insert (int n, int *a) //сортировка
- {
- int c,i,j;
- for (i=0;i<n;i++)
- {
- c=a[i];
- for (j=i-1;(j>=0)&&(c<a[j]);j--)
- a[j+1]=a[j];
- a[j+1]=c;
- }
- }
- void pack (int *a, int N, int n) //упаковка, макс кол-во эл
- {
- int z=0, j=0, b[17];
- for (int i=0; i<n; i++) b[i]=0;
- for (int i=0; i<N; i++)
- {
- if (a[i]==a[i+1])
- {
- a[i]=a[i+1];
- z++;
- }
- else
- {
- b[a[i]]=z+1;
- z=0;
- }
- }
- for (int i=0; i<n; i++) a[i]=b[i];
- }
- void unpack (int *a, int *b, int n, int N)
- {
- int z, j=0;
- for( int i=0; i<N; i++)
- {
- z=a[i];
- for ( ; j<N, z!=0; j++, z--)
- {
- b[j]=i;
- }
- }
- for (int i=0; i<N; i++)
- {
- a[i]=b[i];
- }
- }
- void main()
- {
- const int n=17;
- int N, *a, *b;
- printf("Enter the value of N>>1000: ");
- scanf("%d",&N);
- a=new int [N];
- b=new int [N];
- fflush(stdin);
- putchar('\n');
- printf("random ");
- for (int i=0; i<N; ++i)
- {
- a[i]=rand()%17;
- printf(" %d ",a[i]);
- }
- putchar('\n');
- printf("insert ");
- putchar('\n');
- insert(N,a);
- for (int i=0; i<N; ++i)
- {
- printf(" %d ",a[i]);
- }
- putchar('\n');
- printf("pack ");
- putchar('\n');
- pack(a,N,n);
- for (int i=0; i<n; ++i)
- {
- printf(" %d ",a[i]);
- }
- putchar('\n');
- printf("unpack ");
- putchar('\n');
- unpack(a,b,N,n);
- for (int i=0; i<N; ++i)
- {
- printf(" %d ",a[i]);
- }
- putchar('\n');
- system("pause");
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement