Вы находитесь на странице: 1из 4

I.1. УПРАЖНЕНИЕ 1.

Определите (без компиляции и выполнения на


компьютере), какие значения будут выведены в результате выполнения каждой из
приведенных ниже программ:

#include "stdafx.h"
#include<iostream>
using namespace std;

int abc(const char*);


//объявление функции "abc"

int _tmain(int argc, _TCHAR*argv{})


{
int i;
//объявить переменную "i" типа int
char* s;
//объявление и определение переменной-указателя "s"
int a[5];
//объявить массив "а"
s = "abrakadabra";
//указатель s получает адрес строковой константы

for (i = 0; i < 5; i++)


//создать цикл (5 раз)
{
a[i] = abc(s); cout << a[i] << " ";
//a[i] получить возвращаемое значение функции abc
}

}
int abc(char* s)
//определение функции abc
{
s++;
return strlen(s);
//перемещает указатель s, затем возвращает длину строки (11-1=10)
}
//результат на экране будет "10 10 10 10 10"
#include "stdafx.h"
#include<iostream>
using namespace std;

int abc(const char**);


//объявление функции "abc"

int _tmain(int argc, _TCHAR* argv{})


{
int i;
//объявить переменную "i" типа int
char* s;
//объявление и определение переменной-указателя "s"
int a[5];
//объявить массив "а"
s = "abrakadabra";
//указатель s получает адрес строковой константы

for (i = 0; i < 5; i++)


//создать цикл (5 раз)
{
a[i] = abc(&s); cout << a[i] << " ";
//a[i] получить возвращаемое значение функции abc. в данном случае параметром является
адрес, на который указывает указатель "s", поэтому после каждой итерации он будет сдвигаться 1 раз
}

}
int abc(char** s)
//определение функции abc
{
(*s)++;
return strlen(*s);
////перемещает указатель s, затем возвращает длину строки
}
//результат на экране будет "10 9 8 7 6"
I.1. УПРАЖНЕНИЕ 2 («Гармошка»). Задан упорядоченный целочисленный
массив длины N>>1000. Значения элементов массива находятся в числовом
интервале [0, 17].

А. Напишите функцию с параметрами, которая «упаковывает» данные, т.е.


размещает информацию о числах из массива, используя как можно меньше памяти.
Б. Напишите функцию с параметрами, которая «распаковывает» данные, т.е. по
информации, полученной при выполнении задания А, восстанавливает исходное
состояние массива.

#include <iostream>
using namespace std;

void Sort(int* A, int n)


{
int Mid;
for (int i = 0; i < n; i++)
for (int j = 0; j <= i; j++) {
if (A[j] > A[i]) {
Mid = A[i];
A[i] = A[j];
A[j] = Mid;
}
}
}

int* Pack(int* A, int n)


{
cout<<endl<< endl;
cout<< "Pack: ";
int i, j;
int* B = new int[17];
for (i = 0; i < 18; i++) { B[i] = 0; }
for (j = 0; j < n; j++)
{
B[A[j]]++;
}
cout<< endl;
for (i = 0; i < 18; i++)
{
cout<< "["<< i<< "]: "<< B[i]<< "\n";
}
return B;
};

void Unpack(int* B, int n)


{
cout<<endl<< "Unpack: "<< endl;
int i, j;
int* C = new int[n];
n = 0;
for (i = 0; i < 18; i++)
{
for (j = 0; j < B[i]; j++)
{

C[n] = i;
cout<< C[n]<< "\t";
n++;

}
}
};

int main()
{
int n, i;
srand(time(NULL));
cout<< "Input n: ";
cin>> n;
int* A = new int[n];
for (i = 0; i < n; i++)
{
A[i] = rand() % (17 + 1);
}

Sort(A, n);
cout<< endl<< endl<< "Sort:"<< endl;
for (i = 0; i < n; i++)
{
cout<< A[i]<< "\t";
}

int* B = Pack(A, n);

Unpack(B, n);

Вам также может понравиться