1. Задан массив точек плоскости, т. е. два одномерных массива одинаковой фиксированной размерности X[n] и Y[n], где (Xi, Yi) — координаты i-й точки. Составить следующие функции:
1) логическую функцию Test для определения, принадлежит ли точка с координатами (x, y) k-й четверти;
2) функцию Num, которая с помощью первой функции в массиве точек определяет их количество в k-й четверти;
3) функцию main, которая с помощью второй функции находит количество точек в каждой четверти.
const n = 10;
bool Test (float , float , unsigned );
unsigned Num (float x[], float y[],unsigned k);
main()
{ float X[n]={1.1, 2.2, 3, 44, 0.5, -6.6, -0.7, -88, -9, -10},
Y[n]={11, 0.2, 33, 0.4,-5.5, 66, 77, -8.8,-9.9,-10};
cout<<" Number of points in\n";
for(unsigned K=1; K<=4;K++)
cout<<" "<<K<<" quarter "<<Num(X,Y,K)<<endl;
getch(); return 0;
}
bool Test (float u, float v, unsigned k)
{ switch (k)
{ case 1: return u>0 && v>0;
case 2: return u<0 && v>0;
case 3: return u<0 && v<0;
case 4: return u>0 && v<0;
}
}
unsigned Num (float x[], float y[], unsigned k)
{ unsigned number=0;
for (int i=0; i<n; i++)
if (Test (x[i], y[i], k)) number++;
return number;
}
2. В одномерном вещественном массиве найти среднее значение. Числа из отрезка [a, b] увеличить в 10 раз, а остальные оставить без изменения. Составить и использовать следующие функции: ввод массива; вывод массива; вычисление среднего значения элементов массива; изменение массива; функцию main для проверки названных функций.
void INP(float x[], int n);
void OU1(float x[], int n);
float AVER(float x[], int n);
void CHANGE(float a, float b, float x[], int n);
int main()
{ const N=5; float arr[N], a, b; INP(arr, N);
cout<<"Исходный массив"<<endl; OU1(arr, N);
cout<<"Среднее значение \t"<<AVER(arr, N)<<endl;
cout<<"a="; cin>>a; cout<<"b="; cin>>b;
CHANGE(a, b, arr, N);
cout<<"Измененный массив"<<endl; OU1(arr, N);
getch(); return 0;
}
void INP(float x[], int n)
{ for (int i=0; i<n; i++)
{ cout<<"enter "<<(i+1)<<" element of array -\t";
cin>>x[i]; clrscr();
}
}
void OU1(float x[], int n)
{ for (int i=0; i<n; i++)
cout<<(i+1)<<" element of array \t"<<x[i]<<endl;
}
float AVER(float x[], int n)
{ float s=0;
for (int i=0; i<n; i++, s+=x[i]);
s=s/n; return s; }
void CHANGE(float a,float b, float x[], int n)
{ for (int i=0; i<n; i++)
if(a<=x[i] && x[i]<=b)
x[i]*=10;
}
3. В одномерном целочисленном массиве найти, сколько раз повторяется наибольшее число, сколько раз повторяется наименьшее и вывести жёлтым цветом то из них, которое повторяется чаще. Например, в массиве {99, 8, 99, 99, 2} наибольшее число 99 повторяется чаще (три раза), чем наименьшее 2, которое встречается только один раз. Поэтому число 99 выделяем жёлтым цветом. Для другого массива {99, 7, 99, 7, 7} жёлтым цветом выделим число 7.
Составим и используем следующие функции: ввод массива (ReadArr); обычный, не “цветной” вывод массива (WriteArr); функцию ColorWriteArr, которая выводит число w массива цветом color1, остальные числа массива — цветом color2; поиск наибольшего и наименьшего элементов массива (MaxMin); функцию Num, которая определяет, сколько раз число w повторяется в массиве; main, проверяющую перечисленные выше функции.
void ReadArr(int [], int );
void WriteArr(int [], int );
void ColorWriteArr(int a[], int , int , int , int );
void MaxMin(int [], int , int &mx, int &mn);
int Num(int [], int , int );
main()
{ const n = 5; int a[5], MyMax, MyMin, num1, num2;
clrscr(); ReadArr(a, n);
WriteArr(a, n); MaxMin(a, n, MyMax, MyMin);
num1 = Num(a, n, MyMax); num2 = Num(a, n, MyMin);
cout<<"\nMyMax "<<MyMax<<" MyMin "<<MyMin<<endl;
cout<<"\nNumMax "<<num1<<" NumMin "<<num2<<endl;
if (num1>num2) ColorWriteArr(a, n, MyMax, 14, 11);
else if (num1<num2) ColorWriteArr(a, n, MyMin, 14, 11);
else cout<<" Number of max = number of min ";
getch(); return 0;
}
void ReadArr(int x[], int size)
{ for (int i=0; i<size; i++)
{ cout<<"a["<<i<<"]="; cin>>x[i];
}
}
void WriteArr(int x[], int size)
{ for (int i=0; i<size; i++) cout<<x[i]<<" ";
printf("\n");
}
void MaxMin(int x[], int size, int& mx, int& mn)
{ mx=x[0]; mn=x[0];
for (int i=0; i<size; i++)
if (x[i]<mn) mn = x[i];
else if (x[i]>mx) mx = x[i];
}
int Num(int x[], int size, int w)
{ int k=0;
for (int i=0; i<size; i++)
if (x[i] == w) k++;
return k;
}
void ColorWriteArr(int x[], int size, int w, int color1, int color2)
{ for (int i=0; i<size; i++)
{ if (x[i] == w) textcolor(color1);
else textcolor(color2);
cprintf("%5d ", x[i]);
}
printf("\n");
}
4. Запрограммировать в виде функции следующий алгоритм сортировки по убыванию. На первом шаге находим наибольший элемент всего массива, его номер k и переставляем x[0] c x[k]. На втором шаге находим наибольший элемент, начиная со второго элемента (с x[1]), его номер k и переставляем x[1] c x[k]. На третьем шаге находим наибольший элемент, начиная с третьего элемента (с x[2]), его номер k и переставляем x[2] c x[k]. Так продолжаем до конца массива.
5. Дан одномерный вещественный массив a[n]. Вычислить
Вариант 1) Составить одну функцию типа void с тремя результатами, которая вычисляет наибольшее число массива, сумму всех его элементов и их произведение.
Вариант 2) Составить следующие три вещественные функции, каждая из которых имеет один результат: 1) вычисление наибольшего числа массива, 2) вычисление суммы всех его элементов, 3) нахождение их произведения.
В головной функции определить массив и с помощью одной или трех функций вычислить f.
6.Ввести два одномерных массива. В каждом из них найти наибольшее количество одинаковых подряд идущих элементов и этот элемент.
7.Ввести три одномерных массива — a[n],b[n],c[n]. Получить массив d[n] по формуле d=(a+b) ∙ (b+c), где сложение и умножение выполняются поэлементно. Составить и использовать следующие функции: для ввода массива, поэлементного сложения двух массивов, их поэлементного умножения, функцию main.
8.Рассортировать массив по возрастанию первых двух цифр числа. Составить и использовать следующие функции: для ввода массива, нахождения первой и второй цифры для одного целого числа, построения массива первых и вторых цифр, сортировки массивов, вывода массивов в виде таблицы, функцию main.
Замечание. В следующих задачах, как и в предыдущих, проект разбить на несколько функций.
9.Рассортировать массив следующим образом: сначала должны размещаться палиндромы по возрастанию их значений, а затем не палиндромы тоже по возрастанию их значений. Палиндром – это целое симметричное число, которое одинаково читается слева направо и справа налево.
10.Рассортировать целочисленный массив по убыванию следующих параметров числа:
a) количества единиц в двоичном представлении числа;
б) общего количества пар соседних различных цифр в двоичном представлении числа. Например, 2510 = 110012 имеет две такие пары, а число 7410 = 10010102 содержит пять таких пар;
в) количества букв в шестнадцатеричном представлении числа.
11.Массив точек плоскости рассортировать по убыванию первой координаты.
12.Даны массивы a[5], b[5], c[5]. Вычислить
13.Даны два массива x[10] и y[10]. Построить третий массив z[10]:
Составить и использовать следующие функции: вычисление наименьшего из двух чисел r = min(u, v); вычисление r = max(u, v); построение массива; функцию main().