Пример программы на обработку одномерного массива



 

//Массивы динамические

//Найти и вывести номер элемента введенного с клавиатуры массива целых чисел,

//для которого сумма разностей значений с соседними элементами максимальна.

//Для крайних элементов использовать циклическое замыкание.

#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; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!