Пример программы на обработку одномерного массива
//Массивы динамические
//Найти и вывести номер элемента введенного с клавиатуры массива целых чисел,
//для которого сумма разностей значений с соседними элементами максимальна.
//Для крайних элементов использовать циклическое замыкание.
#include<iostream.h>
#include<math.h>
#include <locale.h>
//using namespace std ;
typedef int telem ; //объявление типа элемента массива
typedef telem *tmas ; //объявление типа "указатель на telem"
int nomer(tmas a, telem &max, int n) ;
void inputmas(tmas a, int n) ;
int main()
{int i, n ;
setlocale(LC_ALL,"Russian") ;
cout << "\n В массиве целых чисел найти номер элемента, для которого" << endl ;
cout << " сумма разностей с соседними элементами максимальна" << endl ;
//Ввод исходных данных
cout << "\nВведите количество элементов массива: " ;
cin >> n ;
tmas a = new telem [n] ; //создание переменной-указателя на telem,
//выделение динамической памяти под массив
//адрес начала области заносится в a
int nom ; //номер искомого элемента
telem max ; //значение максимальной разности
inputmas(a, n) ;
//Поиск номера элемента
nom = nomer(a, max, n) ;
cout << " Искомый номер элемента массива: " << nom << endl ;
cout << " Значение элемента:" << *(a+nom) << " , сумма разностей=" << max ;
delete [] a; //освобождение динамической памяти
return 0 ;
}
int nomer(tmas a, telem &max, int n)
{telem pr ; //текущее значение разности
int imax = 0 ; //за максимум принимаем первый по счету элемент
|
|
max = fabs(*(a + n - 1) - *a) + fabs(*(a + 1) - *a) ;
for(int i = 1 ; i < n - 1 ; i++)
if(max < (pr = fabs(*(a+i-1) - *(a + i))+fabs(*(a + i + 1) - *(a+i))))
{imax = i ;
max = pr ;
}
if(max < (pr = fabs(*a - *(a+n-1)) + fabs(*(a+n-2) - *(a+n-1))))
{imax = n - 1 ;
max = pr ;
}
return imax ;
}
void inputmas(tmas a, int n)
{cout << endl <<" Введите в одной строке элементы массива, состоящего из";
cout << endl << " " << n << " целых чисел, и нажмите <Enter>" << endl;
for(int i = 0 ; i < n ; i++)
cin >> *(a +i) ;
}
Пример программы на обработку двумерного массива (матрицы)
//Массивы динамические двумерные
//Программа находит строку введенного с клавиатуры
//двумерного массива целых чисел, содержащую максимальную
//сумму значений элементов
#include<iostream.h>
#include <locale.h>
//using namespace std;
typedef int telem ; //определение типа элементов массива
typedef telem *tstr ; //определение типа "указатель на telem"
typedef tstr *tmatr; //определение типа "указатель на указатель на telem"
void inputmatr(tmatr a, int str, int sto) ;
void outputmatr(tmatr a, int str, int sto) ;
telem poisk_str(tmatr a, int str, int sto, int &imax) ;
int main()
{ int i, j ;
int imax; //номер строки с максимальной суммой значений элементов
int n ; //число строк матрицы
int m ; //число столбцов матрицы
tmatr a ; //объявляется переменная-указатель на указатель на telem
|
|
telem max ; //максимальная сумма значений элементов
setlocale(LC_ALL,"Russian") ;
cout << "\nВведите количество строк и столбцов матрицы: " ;
cin >> n >> m;
a = new tstr [n] ; //выделение динамической памяти под массив
//указателей на строки массива
for(i = 0; i < n; i++) //цикл выделения памяти под каждую строку
*(a + i) = new telem [m] ; //каждому элементу массива указателей
//на строки присваивается адрес начала
//области памяти, выделяемой под строку
inputmatr(a, n, m) ;
cout << "Исходная матрица:\n" ;
outputmatr(a, n, m) ;
max = poisk_str(a, n, m, imax) ;
cout << "Максимальная сумма=" << max << " элементов строки содержится" ;
cout << endl << "в " << imax << "-й строке исходного массива " << endl ;
cout << endl << "Для завершения нажмите <Enter>" ;
//Освобождение динамической памяти
for(i = 0; i < n; i++)
delete a[i] ;
delete a ;
return 0 ;
}
void inputmatr(tmatr a, int str, int sto)
{ cout << "Введите построчно через пробел элементы" << endl ;
cout << "двумерного массива размера " << str << "x" << sto << endl ;
cout << "После ввода строки нажимайте <Enter>" << endl ;
for(int i = 0 ; i < str ; i++)
for(int j = 0 ; j < sto ; j++)
|
|
cin >> *(*(a + i) + j) ;
}
telem poisk_str(tmatr a, int str, int sto, int &imax)
{telem max, //максимальная сумма значений элементов
pr ; //текущая сумма
imax = 0 ; //предполагаем, что максимальная сумма значений в 0-ой строке
max = 0 ;
for(int j = 0 ; j < sto ; j++)
max += *(*(a + 0) + j) ;
for(int i = 1 ; i < str ; i++)
{pr = 0 ;
for(j = 0 ; j < sto ; j++)
pr += *(*(a + i) + j) ;
if(max < pr)
{imax = i ;
max = pr ;
}
}
return max ;
}
void outputmatr(tmatr a, int str, int sto)
{ int i, j ;
for(i = 0; i < str; i++)
{for(j = 0; j < sto; j++)
cout << *(*(a + i) + j) << ' ' ;
cout << '\n';
}
}
Лабораторная работа №10
Методы сортировки
Цель лабораторной работы: изучение методов сортировки структур данных; совершенствование навыков процедурного программирования на языке C/C++ при решении задач обработки статических и динамических массивов.
Задание на программирование: используя технологию процедурного программирования реализовать заданный метод сортировки и применить его для указанных фрагментов числовой матрицы в соответствии с индивидуальным заданием.
Порядок выполнения работы:
1) Получить у преподавателя индивидуальное задание: метод сортировки и вид сортируемых фрагментов матрицы. Исходная матрица, содержащая 2*n строк и 2*n столбцов, не должна содержать элементов с одинаковыми и нулевыми значениями. Значения элементов матрицы необходимо формировать программно (с клавиатуры не вводить) с помощью формул.
|
|
2) Разработать математическую модель: описать с помощью формул и рисунков структуру массива и процесс его преобразования. У результирующей матрицы должны быть отсортированы заданные фрагменты, а значения элементов не сортируемых фрагментов должны быть обнулены.
3) Построить схему алгоритма решения задачи.
4) Составить программу на языке C/C++.
5) Входные данные на этапах тестирования и демонстрации работы преподавателю должны задаваться либо с использованием специально подобранных арифметических формул, либо вводиться с клавиатуры по запросу. Датчики псевдослучайных чисел использовать запрещается.
Выходные данные должны выводиться на экран с пояснениями.
6) Проверить и продемонстрировать преподавателю работу программы на полном наборе тестов, в том числе с ошибочными входными данными. Входные и выходные массивы должны выводиться в одном и том же формате.
7) Использовать стандартные потоковые объекты ввода/вывода cin и cout.
8) Оформить отчет о лабораторной работе в составе: постановка задачи, математическая модель, схема алгоритма решения, текст программы, контрольные примеры.
Дата добавления: 2018-04-05; просмотров: 632; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!