Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Аленский. лекции по проге.doc
Скачиваний:
19
Добавлен:
11.11.2018
Размер:
1.35 Mб
Скачать

Задачи и упражнения.

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.

  1. Ввести два одномерных массива. В каждом из них найти наибольшее количество одинаковых подряд идущих элементов и этот элемент.

  2. Ввести три одномерных массива — a[n], b[n], c[n]. Получить массив d[n] по формуле d=(a+b) ∙ (b+c), где сложение и умножение выполняются поэлементно. Составить и использовать следующие функции: для ввода массива, поэлементного сложения двух массивов, их поэлементного умножения, функцию main.

  3. Рассортировать массив по возрастанию первых двух цифр числа. Составить и использовать следующие функции: для ввода массива, нахождения первой и второй цифры для одного целого числа, построения массива первых и вторых цифр, сортировки массивов, вывода массивов в виде таблицы, функцию main.

Замечание. В следующих задачах, как и в предыдущих, проект разбить на несколько функций.

  1. Рассортировать массив следующим образом: сначала должны размещаться палиндромы по возрастанию их значений, а затем не палиндромы тоже по возрастанию их значений. Палиндром – это целое симметричное число, которое одинаково читается слева направо и справа налево.

  2. Рассортировать целочисленный массив по убыванию следующих параметров числа:

a) количества единиц в двоичном представлении числа;

б) общего количества пар соседних различных цифр в двоичном представлении числа. Например, 2510 = 110012 имеет две такие пары, а число 7410 = 10010102 содержит пять таких пар;

в) количества букв в шестнадцатеричном представлении числа.

  1. Массив точек плоскости рассортировать по убыванию первой координаты.

  2. Даны массивы a[5], b[5], c[5]. Вычислить

  3. Даны два массива x[10] и y[10]. Построить третий массив z[10]:

Составить и использовать следующие функции: вычисление наименьшего из двух чисел r = min(u, v); вычисление r = max(u, v); построение массива; функцию main().