- •Н. А. Аленский основы программирования
- •§ 1. Структура простой программы. Ввод, вывод
- •1.1. Пример первой программы
- •1.2. Директива препроцессора #include
- •1.3. Структура программы
- •1.4. Комментарии
- •1.5. Ключевые слова и идентификаторы
- •1.6. Простой ввод, вывод
- •§ 2. Оператор if
- •2.1. Полная форма
- •2.2. Сокращённая форма
- •2.3. Особенности оператора
- •Задачи и упражнения
- •§ 3. Выражения
- •3.1. Константы
- •Непосредственно записать в выражении;
- •3.2. Операции и их приоритет
- •3.3. Операции отношения и логические операции
- •3.4. Особенности операции присваивания
- •3.5. Тернарная операция (?)
- •Задачи и упражнения
- •§ 4. Оператор выбора switch
- •Задачи и упражнения
- •§ 5. Операторы цикла
- •5.1. Оператор while c предусловием
- •Правила использования и особенности оператора while
- •5.2. Оператор цикла do … while c постусловием
- •5.3. Оператор for
- •5.4. Операторы continue и break
- •Задачи и упражнения
- •§ 6. Введение в одномерные массивы
- •6.1. Что такое массив. Объявление одномерного массива
- •6.2. Способы определения массивов
- •6.3. Вывод одномерного массива. Функции printf и сprintf
- •6.4. Некоторые типы простых задач при работе с массивами
- •Задачи и упражнения
- •§ 1. Функции без результатов. Передача параметров по значению
- •1.1. Примеры. Правила оформления и вызова функций
- •Void line2(int Len, y, char ch) // ошибка,
- •1.2. Формальные и фактические параметры
- •1.3. Передача параметров по значению
- •§ 2. Функции типа void с несколькими результатами
- •2.1. Пример
- •2.2. Что такое ссылочный тип
- •2.3. Возврат значений из функции с помощью ссылочного типа
- •Задачи и упражнения
- •§ 3. Функции с одним результатом. Оператор return
- •Задачи и упражнения
- •§ 4. Одномерные массивы в функциях. Сортировка массива
- •Задачи и упражнения.
- •§ 5. Область действия имён. Локальные и глобальные имена
- •§ 6. Дополнительные возможности функций
- •Встраиваемые функции (inlineфункции)
- •6.2. Параметры по умолчанию
- •6.3. Перегрузка функций
- •§ 1. Примеры
- •§ 2. Класс. Поля и методы класса
- •§ 3. Создание объектов. Конструктор
- •Задачи и упражнения.
- •Глава 4 простые типы данных § 1. Целый тип
- •1.1. Битовые операции
- •1.2. Использование битовых операций
- •1.3. Упаковка и распаковка информации
- •Задачи и упражнения.
- •§ 2. Логический тип
- •§ 3. Символьный тип
- •Глава 5 матрицы (двухмерные массивы) § 1. Объявление, способы определения
- •§ 2. Вывод матриц
- •§ 3. Типы алгоритмов на обработку матриц
- •3.1. Построчная обработка
- •3.2. Обработка матрицы по столбцам
- •3.3. Обработка всей матрицы
- •3.4. Обработка части матрицы
- •3.5. Преобразование матрицы
- •Упражнения.
- •3.6. Построение матриц
- •§ 4. Передача матрицы в качестве параметра функции
- •Задачи и упражнения.
- •Б. Обработка матрицы по столбцам.
- •Даны две матрицы a и b одинаковой размерности. Построить матрицу с, каждый элемент которой определяется по правилу:
- •Список рекомендуемой литературы
- •Сборники задач по программированию
- •Оглавление
- •Задачи и упражнения …….……………………………………...12
- •3.1. Константы ………………………………………………...…14
Задачи и упражнения.
1. Задан массив точек плоскости, т. е. два одномерных массива одинаковой фиксированной размерности X[n] и Y[n], где (Xi, Yi) — координаты iй точки. Составить следующие функции:
-
логическую функцию Test для определения, принадлежит ли точка с координатами (x, y) kй четверти;
-
функцию Num, которая с помощью первой функции в массиве точек определяет их количество в kй четверти;
-
функцию 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.
-
Ввести два одномерных массива. В каждом из них найти наибольшее количество одинаковых подряд идущих элементов и этот элемент.
-
Ввести три одномерных массива — a[n], b[n], c[n]. Получить массив d[n] по формуле d=(a+b) ∙ (b+c), где сложение и умножение выполняются поэлементно. Составить и использовать следующие функции: для ввода массива, поэлементного сложения двух массивов, их поэлементного умножения, функцию main.
-
Рассортировать массив по возрастанию первых двух цифр числа. Составить и использовать следующие функции: для ввода массива, нахождения первой и второй цифры для одного целого числа, построения массива первых и вторых цифр, сортировки массивов, вывода массивов в виде таблицы, функцию main.
Замечание. В следующих задачах, как и в предыдущих, проект разбить на несколько функций.
-
Рассортировать массив следующим образом: сначала должны размещаться палиндромы по возрастанию их значений, а затем не палиндромы тоже по возрастанию их значений. Палиндром – это целое симметричное число, которое одинаково читается слева направо и справа налево.
-
Рассортировать целочисленный массив по убыванию следующих параметров числа:
a) количества единиц в двоичном представлении числа;
б) общего количества пар соседних различных цифр в двоичном представлении числа. Например, 2510 = 110012 имеет две такие пары, а число 7410 = 10010102 содержит пять таких пар;
в) количества букв в шестнадцатеричном представлении числа.
-
Массив точек плоскости рассортировать по убыванию первой координаты.
-
Даны массивы a[5], b[5], c[5]. Вычислить
-
Даны два массива x[10] и y[10]. Построить третий массив z[10]:
Составить и использовать следующие функции: вычисление наименьшего из двух чисел r = min(u, v); вычисление r = max(u, v); построение массива; функцию main().