- •Методические указания по выполнению контрольной работы по курсу «Основы алгоритмизации и программирования» (оАиП)
- •Содержание
- •Общие требования к оформлению контрольной работы
- •Задание №1. Линейный вычислительный процесс
- •1.1. Теоретические сведения
- •Декларация объектов
- •Директивы препроцессора
- •Стандартные функции вывода информации
- •Стандартные функции ввода информации
- •1.2. Пример выполнения задания
- •1.3. Индивидуальные задания
- •Задание №2. Реализация разветвляющихся алгоритмов
- •2.1. Теоретические сведения Оператор условной передачи управления if
- •Оператор выбора switch
- •2.2. Пример выполнения задания
- •2.3. Индивидуальные задания
- •Задание №3. Реализация циклических алгоритмов
- •3.1. Теоретические сведения
- •3.2. Пример выполнения задания
- •3.3. Индивидуальные задания
- •Задание №4. Обработка одномерных массивов
- •4.1. Теоретические сведения
- •4.2. Пример выполнения задания
- •4.3. Индивидуальные задания
- •Задание №5. Обработка двухмерных динамических массивов. Функции пользователя
- •5.1. Теоретические сведения Особенности применения указателей
- •Связь указателей с массивами
- •Декларация многомерного массива:
- •Указатели на указатели
- •Динамическое размещение данных
- •Минимальный набор действий, необходимых для динамического размещения одномерного массива действительных чисел размером n:
- •Минимальный набор действий, необходимых для динамического размещения двухмерного массива действительных чисел размером nm:
- •5.2. Пример выполнения задания
- •5.3. Индивидуальные задания
- •Дополнительное задание №6. Обработка структур с использованием файлов
- •6.1. Теоретические сведения
- •Работа с файлами
- •6.2. Пример выполнения задания
- •6.3. Индивидуальные задания
- •Основная литература
- •Дополнительная литература
5.2. Пример выполнения задания
В целочисленном двухмерном динамическом массиве (матрице) размером NМ найти сумму четных элементов и их количество. Ввод исходных данных (размеры массива и его элементы) и вывод результатов выполнить в основной функции. Решение поставленной задачи оформить в фунции пользователя.
Текст программы может иметь следующий вид:
#include <iostream.h>
#include <conio.h>
int Fun_Sum_Kol(int, int, int**, int*); // Описание прототипа функции
void main()
{
int **a, i, j, n, m, sum, kol;
cout << "\t Input N, M : ";
cin >> n >> m;
a = new int*[n]; // Захват памяти под указатели
for(i=0; i<n;i++)
a[i] = new int[m]; // Захват памяти под элементы
cout <<"\n Input A" << endl;
for(i=0; i<n; i++)
for(j=0; j<m; j++){
cout << "\t a[" << i+1 << "][" << j+1 << "] = ";
cin >> a[i][j];
}
cout <<"\n Matrix A:" << endl;
for(i=0; i<n; i++) {
for(j=0; j<m; j++)
cout << "\t" << a[i][j];
cout << endl;
}
// Обращение к функции с указанием фактических аргументов
sum = Fun_Sum_Kol(n, m, a, &kol);
cout << "\n Kol-vo = " << kol << "\t Summa = " << sum << endl;
delete []a; // Освобождение памяти
cout << "\n\t Delete !" << endl;
cout << " Press any key ... " << endl;
getch();
}
/* Реализация описанной выше функции, в заголовке которой указаны формальные параметры, идентификаторы которых обрабатываются в ее коде */
int Fun_Sum_Kol(int a, int b, int **x, int *k)
{
int i, j, s = 0;
*k = 0;
for(i=0; i<a;i++)
for(j=0; j<b;j++)
if(x[i][j] % 2 ==0){
(*k)++; // Скобки обязательны
s += x[i][j];
}
return s;
}
Обратите внимание на то, что из функции мы должны получить два скалярных результата – посчитанные сумму и количество четных чисел. С помощью оператора return мы возвращаем первое значение (сумму), а второе значение мы передаем в точку вызова с помощью указателя (адреса): при обращении к функции в качестве четвертого параметра передаем адрес &kol, а в функции используем «содержимое, находящееся по указанному адресу» *k ( * – операция разадресации).
При вводе значений элементов массивов в одной строке через пробелы должен получиться следующий результат:
5.3. Индивидуальные задания
В двухмерном целочисленном массиве (размеры массива N, M и значения его элементов вводить с клавиатуры) найти указанное значение.
Массив в памяти разместить динамически (с использованием операций new и delete), ввод исходных данных и вывод полученных результатов выполнить в основной функции, а решение задачи оформить в виде отдельной функции пользователя. Не использовать глобальных переменных.
1. Найти сумму элементов, расположенных на главной диагонали.
2. Найти произведение элементов, расположенных на главной диагонали.
3. Найти максимальный элемент и поменять его с первым элементом.
4. Найти минимальный элемент и поменять его с первым элементом.
5. Найти максимальный элемент и поменять его с последним элементом.
6. Найти минимальный элемент и поменять его с последним элементом.
7. Найти количество отрицательных и положительных элементов массива.
8. Найти количество 0-й и 1-ц в массиве, а также сумму единиц.
9. Найти число элементов массива, больших T (вводится с клавиатуры) и просуммировать эти элементы.
10. Найти число элементов массива > T и их произведение.
11. Найти число элементов массива < T* и их сумму.
12. Найти число элементов массива < T* и перемножить эти элементы.
13. Найти число элементов массива = T* и сложить эти элементы.
14. Найти число элементов массива = T* и перемножить эти элементы.
15. Найти максимальный элемент среди лежащих ниже главной диагонали.
16. Найти минимальный элемент среди лежащих выше главной диагонали.