РЕШЕНИЕ ЗАДАЧ C ИСПОЛЬЗОВАНИЕМ ОДНОМЕРНЫХ И ДВУМЕРНЫХ МАССИВОВ
В отличие от задач, рассмотренных ранее, аргумент функции может быть задан и другим способом — в виде произвольного набора значений.
Пример 2.1 Вычислить функцию y = axi2 – sin xi, где x1=-1, x2=-0,93, x3=-0,49, x4=0, x5=1,13, x6=0,96, x7=1,75.
При решении такой задачи каждое из перечисленных значений надо ввести в память компьютера, для чего потребуется соответствующее количество ячеек. Такой произвольный ряд однотипных значений, которым присвоено одно общее символическое имя (идентификатор), называется массивом. Отдельное значение массива называется его элементом, а место расположения элементов в массиве определяется с помощью его индекса. В памяти компьютера массив занимает столько ячеек памяти, сколько в нем элементов. В схеме алгоритма решения задачи сначала предусматривается ввод значений всех элементов обрабатываемого массива x[n] (n =7 ). Число, заключенное в скобки, определяет количество элементов массива. Нумерация элементов массива начинается с 0 изаканчивается n –1 . Далее введенные элементы используются при вычислении функции, путем указания индекса соответствующего элемента. Схема алгоритма решения этой задачи и программа выглядят следующим обазом:
//P2_1.CPP —вычисление значений функции // использование одномерного массива #include <iostream.h>
#include <math.h> main( ) { const int n =7; float x[n]; int i; float a, y; // Ввод массива cout<< "Введите значения массива:" <<endl; for ( i=0; i < n; i++) { cout << "x [" << i << "] = "; cin >> x [ i ] ; cout << x [ i ] << endl; } a = 10.5; // Вычисление функции for ( i = 0; i < n; i++) { y = a*x [ i ] * x [ i ] – sin ( x [ i ] ) . cout << "При значении=" << x[i] << " y = " << y << endl; } } При записи этого алгоритма в виде программы сначала надо описать массив с помощью оператора float x [n], ввести его значения в память компьютера, а затем производить необходимые вычисления. В программе, реализующей данный алгоритм, для ввода элементов массива используется оператор cin >> x [i] ;, перед этим оператором имеется подсказка cout << "x [" << i << "] = "; и указан номер элемента x[i], значение которого надо ввести. Особенность выполнения оператора ввода cin >> x[i] ; состоит в том, что, встретив его в программе, компьютер приостановит ее выполнение пока не будет введено значение элемента x[i] и нажата клавиша Enter, после чего обработка программы будет продолжена. Указанный оператор включен в цикл, реализуемый оператором For, и повторяемый n раз, для обеспечения ввода всех элементов массива. Поскольку в языке С++ индексацияэлементов массива начинается с нуля, то массив float x[7] (n =7 ) из семи элементов включает индексированные элементы x[0], x[1], x[2] … x[6] и при этом x[0] — обращение к первому элементу, x[1] — обращение ко второму элементу массива и т.д. Предлагаемая программа использует два цикла: один — для ввода массива, другой — для вычисления функции. Эти операции можно выполнить и в одном цикле, тогда программа будет иметь вид:
// Р2_2.CPP — ввод элементов одномерного массива // и вычисление функции осуществляется в одном цикле #include < iostream.h> #include < math.h> float a, y ; Void main ( ) { const int n =7; float mas [ n ]; int i; float a, y ; a = 10.5; for ( i = 0; i < n ; i++) { cout << "x [ " << i << "] = "; cin >> x [ i ] ; y = a * x[ i ]*x[ i ] - sin( x[ i ] ); cout << "При значении =" << x[i] << " y= " << y << endl; } } Такая программа короче предыдущей, а значит, предпочтительнее. Часто в задачах, решаемых на компьютерах, массивы используются не как аргументы некоторой функции, а сами являются объектами обработки.
Пример 2.2 Обработать ведомость успеваемости группы студентов из 10 человек по программированию, подсчитав средний балл группы и количество отличников.
Список оценок представим массивом МAS[i] (i=0..9), и программа, реализующая такую задачу, выглядит следующим образом :
// Р2_3.CPP — использование одномерных массивов // Определение среднего балла группы и количества отличников #include < iostream.h > #include < math.h > void main ( ) { const int n = 10; // размерность массива float mas[n]; // описание одномерного массива int i, k; float s; s = 0 ; // s - переменная для суммирования оценок группы k = 0 ; // к - переменная для подсчета количества отличников for ( i=0; i < n; i++ ) { cout << " mas [ " << i << "] = "; cin >> mas [ i ] ; cout << mas [ i ] << endl; s = s + mas [ i ]; if ( mas[ i ] = = 5) k =k+1; } cout << "Средний балл = " << s / float(n ) << endl; cout << "Количество отличников =" << endl; }
В этой программе переменная s служит для вычисления суммы оценок группы, а переменная k — для подсчета количества отличников. Перед вычислением надо задать этим переменным начальные нулевые значения. Оператор cout << " mas [ " << i << "] = "; внутри цикла выполняет роль подсказки о необходимости ввода очередной оценки, а в конце используется для вывода результатов вычисления ( cout << "Средний балл"<< s / float (n) << endl; cout << "Количество отличников =" << endl;) . Кроме одномерных массивов. т.е. таких, где положение элемента определяется с помощью одного индекса, в практике решения задач часто применяются многомерные массивы. В них положение элемента определяется путем записи нескольких индексов. Наиболее широкое распространение получили двумерные массивы, называемые матрицами. Матрицы представляют собой построчную запись нескольких одномерных массивов, например:
Местоположение каждого элемента определяется с помощью двух индексов — номера строки и номера столбца, т.е. порядкового номера в строке. Индексы таких массивов записываются в квадратных скобках. Например, запись М[1] [2] указывает на элемент, находящийся во второй строке и третьем столбце, т.е. имеющий значение -20.5 (cчет индексов начинается с 0). Для перебора всех элементов матрицы при их вводе-выводе, а также при обработке в программе следует предусматривать организацию двух циклов: один — для задания значений индекса строк, другой —индекса столбцов.
Пример 2.3 К каждому элементу вышеприведенной матрицы M прибавить число 10.
// Р2_4.CPP — использование двумерных массивов // К каждому элементу матрицы прибавить число 10.
#include < iostream.h > void main ( ) { const int n = 3; // количество строк матрицы const int m = 5; // количество столбцов матрицы float M [ n] [m]; int i, k; Float s; s = 10 ; cout << " Введите значения массива:" << endl; // Ввод значений двумерного массива for ( i = 0; i < n; i++) for ( k = 0; k < m; k ++) { cout << " M [ " << i << "] = " << "[ " << k << ]" ; cin >> M [ i ] [ k ]; cout << M [ i ] [ k ] << endl; M [ i ] [ k ] = M [ i ] [ k ] + s ; // Можно M [ i ] [ k ] + = s ; }
cout << "Новое значение матрицы :" << endl; // Вывод матрицы в естественном виде for ( i = 0; i < n; i++) { cout << endl; for ( k = 0; k < m; k++) cout << M [ i ] [ k ] << " "; } } В программе при описании матрицы в операторе float M[n][m]; указывается диапазон изменения двух индексов, первый из которых предназначен для индексирования строк, второй — столбцов. При вводе, обработке и выводе матрицы для перебора всех ее элементов используется два цикла, один из которых является вложенным в другой. Это позволяет при каждом значении переменной i перебирать все значения k. Рассматриваемая программа может быть сокращена путем объединения всех трех блоков цикла в один, но в таком случае она будет менее наглядной.
Популярное: Почему человек чувствует себя несчастным?: Для начала определим, что такое несчастье. Несчастьем мы будем считать психологическое состояние... Организация как механизм и форма жизни коллектива: Организация не сможет достичь поставленных целей без соответствующей внутренней... Генезис конфликтологии как науки в древней Греции: Для уяснения предыстории конфликтологии существенное значение имеет обращение к античной... Как распознать напряжение: Говоря о мышечном напряжении, мы в первую очередь имеем в виду мускулы, прикрепленные к костям ... ©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (343)
|
Почему 1285321 студент выбрали МегаОбучалку... Система поиска информации Мобильная версия сайта Удобная навигация Нет шокирующей рекламы |