Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Алгоритмизация и программирование .doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1.35 Mб
Скачать

5. Массивы и строки

5.1. Массивы

Массив – это расположенные вплотную друг за другом в памяти элементы одного и того же типа. Каждый массив имеет имя. Доступ к отдельным элементам массива осуществляется по имени массива и индексу (порядковому номеру) элемента.

Основные свойства массива:

  1. все элементы массива имеют один и тот же тип;

  2. все элементы массива расположены в памяти друг за другом; индекс первого элемента равен 0.

Признаком массива при описании является наличие парных квадратных скобок [ ]. Константа или константное выражение в квадратных скобках задает число элементов массива.

Например:

int x[10]; // определяет массив типа int из 10 элементов x[0], x[1], //…, x[9]

float a[5]; // определяет массив типа float из 5 элементов a[0], a[1], //…, a[4]

Пример 5_1. В целочисленный массив m из 7 элементов ввести значения с клавиатуры, вычислить сумму всех элементов массива и вывести на экран исходный массив и результат расчета

#include "stdafx.h"

using namespace System;

int main()

{

int m[7];

int i, sum;

Console::WriteLine("Вводим данные в массив m:");

for (i = 0; i < 7; i++)

{

Console::Write("m[{0}]=", i);

m[i] = Convert::ToInt32(Console::ReadLine());

}

// расчет суммы всех элементов

sum = 0;

for (i = 0; i < 7; i++)

sum += m[i];

//вывод исходного массива и результата

Console::WriteLine("\n\nИсходный массив m");

for (i = 0; i < 7; i++)

Console::Write("{0,6}", m[i]);

Console::WriteLine("\nСумма элементов равна " + sum);

Console::ReadLine();

return 0;

}

Результаты работы программы:

m[0] = 100

m[1] = 1

m[2] = 2

m[3] = 3

m[4] = 10

m[5] = 20

m[6] = 300

<здесь одна пустая строка>

Исходный массив m

100 1 2 3 10 20 300

Сумма элементов равна 436

Вариант решения предыдущего примера в виде приложения Windows Forms

Создайте проект типа приложения Windows Forms и спроектируйте форму, представленную на рис.12 (все используемые компоненты подписаны)[2]

Рис. 12. Вид формы для решения задачи

Вид формы показывает, как работает программа. Очевидно, что пользователь должен ввести в поля редактирования значения элементов массива и сделать щелчок на кнопке «Сумма элементов». Для выхода из программы следует сделать щелчок на кнопке «Выход». Щелчок на изображении командной кнопки – это пример того, что называется событием.

Событие (Events) – это то, что происходит во время работы программы. Например, щелчок кнопкой мыши – это событие Click, двойной щелчок мышью – событие DbClick.

Реакцией на событие должно быть какое-либо действие. В Visual C++ реакция на событие реализуется как функция обработки события. Таким образом, для того чтобы программа в ответ на действия пользователя выполняла некоторую работу, программист должен написать функцию обработки соответствующего события.

Чтобы создать функцию обработки события, сначала надо выбрать компонент, для которого создается функция обработки события, затем в окне Свойств (Properties) щелчком на кнопке События (Events) , нужно открыть вкладку События. Далее на открывшейся вкладке выбрать нужное событие (сделать щелчок мышью на имени события).

Определите событие Click (щелчок кнопкой мышки) для кнопок «Сумма элементов» и «Выход». В результате этих действий в модуль формы (h-файл) будут добавлены функции обработки события:

private: System::Void button1_Click(System::Object^ sender,

System::EventArgs^ e)

{

}

private: System::Void button2_Click(System::Object^ sender, System::EventArgs^ e)

{

}

Также станет доступным окно редактора кода, в котором можно набирать инструкции, реализующие функцию обработки события.

Реализуем функции обработки события:

private: System::Void button1_Click(System::Object^ sender,

System::EventArgs^ e)

{

int m[7];

int i,sum=0;

// заполнение элементов массива значениями из компонентов TextBox

m[0]=System::Convert::ToInt32(textBox1->Text);

m[1]=System::Convert::ToInt32(textBox2->Text);

m[2]=System::Convert::ToInt32(textBox3->Text);

m[3]=System::Convert::ToInt32(textBox4->Text);

m[4]=System::Convert::ToInt32(textBox5->Text);

m[5]=System::Convert::ToInt32(textBox6->Text);

m[6]=System::Convert::ToInt32(textBox7->Text);

// цикл для вычисления суммы

for(i=0; i<7; i++)

sum+=m[i];

// перенос вычисленной суммы в TextBox

textBox8->Text=System::Convert::ToString(sum);

}private: System::Void button2_Click(System::Object^ sender, System::EventArgs^ e)

{

Close();

}

Рис.13. Вид форма с заполненными исходными данными

Рис.14. Вид формы с вычисленным результатом

В соответствии с синтаксисом С++ в языке существуют только одномерные массивы, однако элементами одномерного массива, в свою очередь, могут быть массивы [3]. Поэтому двумерный массив определяется как массив массивов.

Например: float d[4][3];

В данном примере объявлен массив d из 4 элементов-массивов, каждый из которых, в свою очередь, состоит из 3 элементов типа.

При определении массивов возможна их инициализация [3], т.е. присваивание начальных значений их элементам. По существу (точнее, по результату), инициализация – это объединение определения объекта с одновременным присваиванием ему конкретного значения. Использование инициализации позволяет изменить формат определения массива. Например, можно явно не указывать количество элементов одномерного массива, а только перечислить их начальные значения в списке инициализации:

float f[ ] = { 1.0, 2.3, 2.7, -6.2, 9.3};

В данном примере длину массива компилятор вычисляет по количеству начальных значений, перечисленных в фигурных скобках. После такого объявления элемент f[0] равен 1.0, f[1] равен 2.3, f[2] равен 2.7 и т.д.

Если в определении массива явно указан его размер, то количество начальных значений не может быть больше количества элементов в массиве. Если количество начальных значений меньше, чем объявленная длина массива, то начальные значения получат только первые элементы массива (с меньшими значениями индекса):

int m[10] = { 8, 1, -2, 4};

В данном примере определены значения только элементов m[0], m[1], m[2] и m[3], равных соответственно 8, 1, -2 и 4. Элементы m[4], …, m[9] не инициализируются.

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

Например:

int m[3][3] = { { 0, 1, 2 }, { 10, 11, 12 }, { 20, 21, 22 } };

Элементы многомерных массивов хранятся в памяти в порядке возрастания самого правого индекса (или, как иногда говорят, по строкам). Список начальных значений, задаваемых при описании массива, соответствует порядку элементов в памяти.

Например, int x[3][4]; // объявили массив х целого типа, в котором 3 строки и 4 столбца:

Для обращения к элементу двумерного массива используются номера строки и столбца. В представленном массиве элементу x[1][2] присвоено число 15.

Пример 5_2. В целочисленный массив с размерностью 3 на 5 ввести значения с клавиатуры, вычислить сумму всех элементов массива и вывести на экран исходный массив и результат расчета using System;

#include "stdafx.h"

using namespace System;

int main()

{

int c [3][5];

int i, j;

int sum = 0;

Console::WriteLine("Вводим данные в массив c:");

for (i = 0; i < 3; i++)

for (j = 0; j < 5; j++)

{ Console::Write("c[{0}][{1}]=", i, j);

c[i][j] = Convert::ToInt32(Console::ReadLine());

}

// расчет суммы всех элементов

sum = 0;

for (i = 0; i < 3; i++)

for (j = 0; j < 5; j++)

sum += c[i][j];

//вывод исходного массива и результата

Console::WriteLine("\n\nИсходный массив c");

for (i = 0; i < 3; i++)

{

for (j = 0; j < 5; j++)

Console::Write("{0,8}", c[i][j]);

Console::WriteLine();

}

Console::WriteLine("\nСумма элементов равна " + sum);

Console::ReadLine();

return 0;

}

Результат работы программы:

Вводим данные в массив с:

c[0,0]= 1

c[2,4]= 2

Исходный массив с

1 1 100 1 1

20 30 1 1 1

100 200 1 1 2

Сумма элементов равна 461

Для инициализации многомерного массива достаточно заключить в фигурные скобки список инициализаторов каждого его размера.

Пример 5_3. Демонстрация инициализации двумерного массива при создании.

#include "stdafx.h"

using namespace System;

int main()

{

int x[2][3] = { {100, 2, 30} , { 4, 50, 6 } };

int i, j, sum=0;

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

for(j=0; j < 3; j++)

sum += x[i][j];

Console::WriteLine("Исходный массив x");

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

{

for (j = 0; j < 3; j++)

Console::Write("{0,6}", x[i][j]);

Console::WriteLine();

}

Console::WriteLine("\nСумма элементов равна {0}", sum);

Console::ReadLine();

return 0;

}

Результат работы программы:

Исходный массив x

100 2 30

4 50 6

Сумма элементов массива равна 192