68650

Использование функций для работы с массивами

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

Информатика, кибернетика и программирование

Ведь элементов в массиве могут быть сотни и представляется нереальным хотя и теоретически возможным описать при передаче в функцию каждый элемент массива. Здесь необходимо вспомнить что имя массива является указателем на нулевой элемент массива. А так как элементы массива расположены непосредственно...

Русский

2014-09-24

77 KB

2 чел.

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

Тема: Использование функций для работы с массивами

Цель занятия:

  •  Совершенствование навыков разработки программ в среде программирования MS Visual C++
  •  Совершенствование навыков описания и использования функций в программах
  •  Получение начальных навыков в использовании функций для работы с массивами

Время на выполнение работы: 2 часа

Учебные вопросы:

  1.  Изучение процедуры передачи массива в функцию
  2.  Изучение процедуры возвращения массива из функции

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

  1.  Изучить рекомендованную литературу (базовые конструкции структурного программирования, массивы и указатели, функции).
  2.  Изучить материал настоящего руководства.

Материалы для подготовки к занятию:

  1.  Конспект лекций
  2.  [1] стр. 78-80.


ОСНОВНЫЕ ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ

На прошедших занятиях подробно рассматривались вопросы использования массивов для решения прикладных задач. Было отмечено, что массивы являются первым шагом к группировке данных. Массивы группируют однотипные данные. На лекции по функциям было показано, что использование механизма функций позволяет сделать программы более эффективными и читаемыми. Так же известно, что в функцию можно передать множество параметров, но, при этом, каждый параметр должен быть объявлен самостоятельно. Здесь возникает одна из кажущихся, на первый  взгляд, трудностей. Ведь элементов в массиве могут быть сотни, и представляется нереальным (хотя и теоретически возможным) описать при передаче в функцию каждый элемент массива.

Здесь необходимо вспомнить, что имя массива является указателем на нулевой элемент массива. А, так как элементы массива расположены непосредственно друг за другом, то можно в функцию передать не сам массив с множеством элементов, а только указатель на нулевой элемент, что будет равносильным передачи всего массива в функцию.

Рассмотрим пример. Пусть заданы два массива чисел. Необходимо определить, в каком из массивов сумма положительных элементов больше. Очевидно, что для решения этой задачи целесообразно использовать отдельную функцию, вычисляющую эту сумму.

int PositivSum(int *a, int n);

int main(int argc, char* argv[])

{

const int N=10;

int Arr1[N], Arr2[N];

int sum1=0,sum2=0;

randomize();

cout<<”\nПервый массив:\n”;

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

       {

       Arr1[i]=rand()%100-50;

       cout<<Arr1[i]<<"  ";

       }

cout<<”\nВторой массив:\n”;

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

       {

       Arr2[i]=rand()%100-50;

       cout<<Arr2[i]<<"  ";

       }

sum1=PositivSum(Arr1,N);

sum2=PositivSum(Arr2,N);

cout<<"\nСумма положительных элементов

                     первого массива: "<<sum1;

cout<<"\nСумма положительных элементов второго массива: "<<sum2;

if (sum1==sum2) cout<<"\nСуммы равны!";

   else if (sum1>sum2) cout<<"\nПервая сумма больше";

        else cout<<"\nВторая сумма больше";

return 0;

}

//-----------------------------------------------------

int PositivSum(int *a, int n)

{

int sum=0;

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

       if (a[i]>0) sum+=a[i];

return sum;

}  

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

int PositivSum(int *a, int n);

можно записать:

int PositivSum(int a[], int n);

что тоже говорит о том, что в качестве параметра передается имя массива, то есть адрес начала массива.

Если попытаться сделать эту программу более эффективной, то можно увидеть, что процедуру инициализации массива данными можно реализовать в виде отдельной функции, а из функции возвращать адрес созданного массива:

...

int PositivSum(int *a, int n);

int* InputData(const int n);

int main(int argc, char* argv[])

{

const int N=10;

int sum1=0,sum2=0;

int *Arr1, *Arr2;

Arr1=InputData();

Arr2=InputData();

...

_getch();

return 0;

}

//-----------------------------------------------------

int* InputData(const int n)

{

int a[n];

cout<<”\nМассив:\n”;

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

       {

       a[i]=rand()%100-50;

       cout<<a[i]<<"  ";

       }

_getch();

return a;

}

...

 Если откомпилировать эту программу, то возникнет ряд ошибок. С чем они могут быть связаны? Ответ на этот вопрос очень простой. Мы в функции InputData()  создаем локальный массив с именем a, а затем пытаемся вернуть его адрес в вызывающую функцию. Но ничего не получится, так как локальный массив создается в стеке, и при выходе из функции он разрушается, а, следовательно, теряется не только его адрес начала, но и сами значения.

Разрешить эту проблему можно путем создания в функции не локального массива, а выделения динамической памяти под массив, то есть созданием динамического массива.

Вместо 

int a[n] 

требуется 

int *a=new int[n];.

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

 delete []Arr1;

 delete []Arr2;

 

ПРОГРАММА  РАБОТЫ

 Реализовать с использованием механизма функций в соответствии с номером по журналу и номером варианта:

Вариант 1

В одномерном массиве, состоящем из n вещественных элементов, вычислить:

  •  сумму отрицательных элементов массива;
  •  произведение элементов массива, расположенных между максимальным и минимальным элементами.

Вариант 2

В одномерном массиве, состоящем из n вещественных элементов, вычислить:

  •  сумму положительных элементов массива;
  •  произведение элементов массива, расположенных между максимальным по модулю и минимальным по модулю элементами.

Вариант 3

В одномерном массиве, состоящем из n целых элементов, вычислить:

  •  сумму элементов массива, расположенных между первым и последним нулевыми элементами.
  •  Преобразовать массив таким образом, чтобы сначала располагались все положительные элементы, а потом – все отрицательные (элементы, равные 0, считать положительными).

Вариант 4

В одномерном массиве, состоящем из n вещественных элементов, вычислить:

  •  сумму элементов массива с нечетными номерами;
  •  Сжать массив, удалив из него все элементы, модуль которых не превышает 1. Освободившиеся в конце массива элементы заполнить нулями.


Вариант 5

В одномерном массиве, состоящем из n вещественных элементов, вычислить:

  •  максимальный элемент массива;
  •  сумму элементов массива, расположенных до последнего положительного элемента.

Вариант 6

В одномерном массиве, состоящем из n вещественных элементов, вычислить:

  •  минимальный элемент массива;
  •  сумму элементов массива, расположенных между первым и последним положительными элементами.

Вариант 7

В одномерном массиве, состоящем из n целых элементов, вычислить:

  •  номер максимального элемента массива;
  •  Преобразовать массив таким образом, чтобы в первой его половине располагались элементы, стоявшие в нечетных позициях, а во второй половине – элементы, стоявшие в четных позициях.

Вариант 8

В одномерном массиве, состоящем из n вещественных элементов, вычислить:

  •  сумму элементов массива, расположенных между первым и вторым отрицательными элементами.
  •  Преобразовать массив таким образом, чтобы сначала располагались все элементы, модуль которых не превышает 1, а потом – все остальные.

Вариант 9

В одномерном массиве, состоящем из n вещественных элементов, вычислить:

  •  максимальный по модулю элемент массива;
  •  Преобразовать массив таким образом, чтобы элементы, равные нулю, располагались после всех остальных.

Вариант 10

В одномерном массиве, состоящем из n целых элементов, вычислить:

  •  минимальный по модулю элемент массива;
  •  сумму модулей элементов массива, расположенных после первого элемента, равного нулю.

Вариант 11

В одномерном массиве, состоящем из n вещественных элементов, вычислить:

  •  номер минимального по модулю элемента массива;
  •  сумму модулей элементов массива, расположенных после первого отрицательного элемента.

Вариант 12

В одномерном массиве, состоящем из n вещественных элементов, вычислить:

  •  номер максимального по модулю элемента массива;
  •  сумму элементов массива, расположенных после первого положительного элемента.

Вариант 13

В одномерном массиве, состоящем из n вещественных элементов, вычислить:

  •  количество элементов массива, лежащих в диапазоне от А до В;
  •  сумму элементов массива, расположенных после максимального элемента.

Вариант 14

В одномерном массиве, состоящем из n вещественных элементов, вычислить:

  •  количество элементов массива, равных 0;
  •  сумму элементов массива, расположенных после минимального элемента.

Вариант 15

В одномерном массиве, состоящем из n вещественных элементов, вычислить:

  •  количество элементов массива, больших С;
  •  Преобразовать массив таким образом, чтобы сначала располагались все отрицательные элементы, а потом — все положительные (элементы, равные 0, считать положительными).


 

А также другие работы, которые могут Вас заинтересовать

27400. Методика обучения сочинениям 88.5 KB
  Сочинения устные и письменные. Школьники любят писать сочинения и рассказывать устно эта деятельность связывает учение с жизнью. Напомним что сочинения ради разностороннего развития школьников должны быть разнообразными и по источникам материала и по типам текста стилю и жанрам и по тематике по степени самостоятельности и творческого вклада по применяемым методам и приемам.
27401. Совершенствование у младших школьников культуры речевого поведения 60 KB
  Чтобы это общение протекало успешно не вызывая дискомфорта у коголибо из его участников необходимо соблюдение каждым из них определенных норм принятых в обществе норм речевого поведения. К числу вопросов связанных с культурой речевого поведения можно отнести: 1. Соблюдение правил: а поведения в аудитории в том числе на уроке в общественных местах и т.
27402. Внеклассная работа по русскому языку в начальной школе 46 KB
  Это игры утренники викторины походы и экскурсии выпуск газет и журналов радиопередачи съемка телефильмов конкурсы на лучшее сочинение или стихотворение самостоятельное внеклассное чтение книг журналов газет. Лингвистические языковые игры. Как известно игры широко используются и на уроках в более строгой системе познавательного труда детей но внеклассная внеурочная работа дает в этом отношении намного больший простор. Языковые игры обычно развлекательны но всегда содержат дидактический элемент достигающий подчас...
27403. Общая характеристика предмета «Литературное чтение», изучаемого в начальной школе 57 KB
  Назвать основные цели изучения литературного чтения в 14 класса: формирование читательских умений; литературное образование; развитие читательских интересов учащихся. Успешность изучения курса литературного чтения обеспечивает результативность обучения по другим предметам начальной школы. Курс литературного чтения призван продолжить обучение детей чтению ввести в мир художественной литературы и помочь осмыслять образность словесного искусства посредством которой художественное произведение раскрывается во всей своей полноте и...
27404. Развитие учащихся в процессе изучения художественного литературного произведения 51 KB
  Охарактеризовать психологические особенности восприятия художественного литературного произведения младшими школьниками: воображение эмоции мышление наивный реалист и наивный критик. Уровни развития восприятия художественного литературного произведения младшими школьниками. В методике преподавания литературы под процессом чтения понимают процесс восприятия словесного произведения который может быть представлен в виде схемы: зрительное восприятие текста как набора буквенных символов перекодировка символов букв в звуки и произнесение...
27405. Организация обучения младших школьников на уроках литературного чтения 73 KB
  Виды уроков литературного чтения: урок чтения одногодвух произведений чтение крупнообъемного произведения урок внеклассного чтения. Уроки чтения могут различаться по многим параметрам: по учебной задаче; по ведущей деятельности учащихся; по типу учебного материала. Современный урок чтения обладает с одной стороны обязательными компонентами так как он строится на определенном учебном материале воплощает собой конкретный замысел учителя учитывает психологические особенности детей с другой стороны ему присущи гибкость и подвижность...
27406. Проблема содержания обучения чтению в истории русской начальной школы 57.5 KB
  Основные принципы построения программы по чтению; содержание и тематика чтения на каждом году обучения; требования к знаниям умениям и навыкам учащихся. Особенности современных учебников литературного чтения их соответствие требованиям ФГОС начального общего образования. В основе УМК лежит технология формирования типа правильной читательской деятельности продуктивного чтения. У детей развиваются умения самостоятельно осваивать текст до начала чтения во время чтения и после чтения.
27407. Процесс работы над художественным произведением 105 KB
  Первичное знакомство и анализ содержания произведения в единстве с его художественными особенностями. Во время чтения учителя книги у детей закрыты их внимание полностью направлено на слушание произведения и сопереживание учителючтецу. В этом случае учитель для своего чтения выбирает: диалоги; описательные отрывки; начало произведения; заключительные строки произведения концовку. Однако прибегая к этому приему учитель должен иметь в виду ряд обстоятельств: не следует использовать грамзапись если произведение совершенно...
27408. Методика изучения сезонных изменений в природе 23.5 KB
  важны уроки обобщения – ставят всё по местам = проведение сложных сравнений обощающего характера углубляет расширяет кругозор восприятие природы как целого Помогают: дидактич схемы – наглядно показывают связи таблицы эстетика – рассматривание художественных произведений: картин стихов музыкальных произведений Чайковский – времена года Пример – урок Осенние явления природы: беседа о состоянии неживой природы высота Солнца световой день t небо влажность почему произошли изменения – анализ содержания установление...