Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

1 9ЛР инфа

.docx
Скачиваний:
22
Добавлен:
16.04.2021
Размер:
618.15 Кб
Скачать

Лабораторная работа №9

Динамические массивы

Цель лабораторной работы: изучение структурной организации динамических массивов и способов доступа к их элементам с использованием указателей; совершенствование навыков процедурного программирования на языке C/C++ при решении задач обработки динамических массивов.

Задание на программирование: используя технологию процедурного программирования, разработать программу обработки одномерных и двумерных (матриц) динамических массивов в соответствии с индивидуальным заданием.

Порядок выполнения работы:

1) Получить у преподавателя индивидуальное задание и выполнить постановку задачи: сформулировать условие, определить входные и выходные данные, их ограничения.

2) Разработать математическую модель: описать с помощью формул и рисунков структуру массивов и процесс их преобразования.

3) Построить схему алгоритма решения задачи.

4) Составить программу на языке C/C++.

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

Выходные данные должны выводиться на экран с пояснениями.

6) Проверить и продемонстрировать преподавателю работу программы на полном наборе тестов, в том числе с ошибочными входными данными. Входные и выходные массивы должны выводиться в одном и том же формате.

7) Использовать стандартные потоковые объекты ввода/вывода cin и cout.

8) Оформить отчет о лабораторной работе в составе: постановка задачи, математическая модель, схема алгоритма решения, текст программы, контрольные примеры.

Формулировка задания:

(вариант №22)

1) Дан массив c0, c1, c2,…, cn-1. Определить количество и сумму абсолютных значений элементов массива с чётными номерами, лежащих между минимальным элементом среди элементов с положительным значением и первым элементом с отрицательным значением, имеющим номер больше, чем n/2.

2) В заданной квадратной матрице размера 2n*2n поменять местами значения элементов строк области 6 и элементов столбцов области 4 (см. рисунок) с одинаковыми номерами.

Текст программы:

1)

#include<iostream>

#include<math.h>

#include <locale.h>

using std::cout;

using std::cin;

using std::endl;

typedef int telem ;

typedef int *tmas ;

int nomer(tmas a, int &chet, int n, telem &sum) ;

void inputmas(tmas a, int n) ;

int main()

{int i, n ;

setlocale(LC_ALL,"Russian") ;

cout << "\nВведите количество элементов массива: " ;

cin >> n ;

tmas a = new telem [n] ;

telem sum ;

int chet ;

inputmas(a, n) ;

chet = nomer(a, chet, n, sum) ;

cout << "\nКолличество чётных номеров: " << chet << endl ;

cout << "Сумма чётных элементов: " << sum ;

delete [] a;

return 0 ;

}

int nomer(tmas a, int &chet, int n, telem &sum)

{telem min = a[0] ;

int otr = 0 ;

int b,c;

for(int i = 1 ; i < n ; i++)

if((min > *(a +i)) && (*(a +i) > 0 ))

{min = i ;

}

for(int i = n/2 ; i < n ; i++)

if (*(a +i)<0)

{otr = i;

i = n;

}

if (otr > min)

{c = otr;

b = min;

}

else

{b = otr;

c = min;

}

sum = 0;

for(int i = (b+1) ; i < c ; i++)

if((i % 2) == 0 && (i != c))

{ chet++;

sum = sum + *(a +i);

}

return chet ;

}

void inputmas(tmas a, int n)

{cout << endl <<"Введите в одной строке элементы массива, состоящего из";

cout << endl << n << " чисел (положительных и отрицательных), и нажмите <Enter>" << endl;

for(int i = 0 ; i < n ; i++)

cin >> *(a +i) ;

}

Скриншот контрольного примера выполнения программы

Текст программы:

2)

#include<iostream>

using std::cin;

using std::cout;

using std::endl;

typedef int telem;

typedef telem *tstr;

typedef tstr *tmatr;

void input(tmatr, int, int);

void change(tmatr, int, int);

void output(tmatr, int, int);

int main() {

int i, j;

int n;

tmatr a;

cout << "\nВведите размер матрицы 2n*2n: n = ";

cin >> n;

a = new tstr[2 * n];

for (i = 0; i < 2 * n; i++)

*(a + i) = new telem[2 * n];

input(a, 2 * n, 2 * n);

change(a, n, n);

output(a, 2 * n, 2 * n);

for (i = 0; i < 2 * n; i++)

delete a[i];

delete a;

return 0;

}

void input(tmatr a, int str, int n) {

cout << "Введите построчно через пробел элементы";

cout << "\nдвумерного массива размера " << str << "x" << str << endl;

cout << "После ввода строки нажимайте <Enter>" << endl;

for (int i = 0; i < str; i++)

for (int j = 0; j < str; j++)

cin >> *(*(a + i) + j);

}

void output(tmatr a, int str, int n) {

cout << "\nПреобразованная матрица:" << endl;

for (int i = 0; i < str; i++) {

for (int j = 0; j < str; j++)

cout << *(*(a + i) + j) << ' ';

cout << endl;

}

}

void change(tmatr a, int str, int n) {

int i, j, k, l;

tmatr b;

b = new tstr[2 * str];

for (int z = 0; z < 2 * str; z++)

*(b + z) = new telem[2 * str];

l = 0;

for (i = 0; i < str; i++) {

for (j = 0; j <= i; j++) {

*(*(b + i) + j) = *(*(a + j+n) + i+n);

}

j = 0;

for (k = (2 * str - 1); k >= (2 * str - 1) - l; k--) {

*(*(a + j+n) + i+n) = *(*(a + k) + l);

*(*(a + k) + l) = *(*(b + i) + j);

j++;

}

l++;

}

for (int z = 0; z < 2 * str; z++)

delete b[z];

delete b;

}

Скриншот контрольного примера выполнения программы

7

Соседние файлы в предмете Основы программирования