русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Массивы


Дата добавления: 2015-07-09; просмотров: 901; Нарушение авторских прав


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

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

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

Строки

 

Строка является упорядоченной коллекцией символов Юникода, используемой для представления текста. Для работы со строками в CLR-проекте используется класс String.

String ^str = “Работа со строками в С++”; // здесь объявлена ссылочная

// переменная str и ей присвоен текст

 

Символ ‘^’ – это признак ссылки.

 

Пример 5_4. Использование строк.

#include "stdafx.h"

using namespace System;

int main()

{

String ^st1="ИЗУЧАЕМ ";

String ^st2, ^st3;

st2 = "работу со строками в C++";

st3 = st1 + st2;

Console::WriteLine("{0}", st3);

st2 = st3;

Console::WriteLine("В слове {0} 3-я буква \'{1}\'", st1, st1[2]);

Console::ReadLine();

return 0;

}

Результат работы со строками:

ИЗУЧАЕМ работу со строка в C++

В слове ИЗУЧАЕМ 3-я буква 'У'

 

 

Функции работы со строками

Compare(String ^s1, String ^s2); - сравнивает s1 и s2 и возвращает целое число, которое показывает их относительное положение в порядке сортировки:

меньше нуля - значение параметра s1 меньше значения параметра s2.

0 - значения параметров s1 и s2 равны.

больше нуля - значение strA больше значения strB.

 

Пример 5_5. Сравнение строк

#include "stdafx.h"

using namespace System;

int main()

{

String ^s1="ABC", ^s2="ADC";

int k;

k=String::Compare(s1,s2);

Console::WriteLine("k="+k);

Console::ReadLine();

return 0;

}

Результат работы со строками:

k=-1

IndexOf(String ^s1, int); - Возвращает индекс с отсчетом от нуля первого вхождения значения указанной строки s1 в данном экземпляре. Поиск начинается с указанной позиции знака (если позиция не указана, то отсчет начинается с нуля).

 

LastIndexOf(String ^s1, int); - Возвращает индекс с отсчетом от нуля последнего вхождения значения указанной строки s1 в данном экземпляре. Поиск начинается с указанной позиции знака (если позиция не указана, то отсчет начинается с нуля).

 

 

Пример 5_6. Поиск подстроки в строке.

#include "stdafx.h"

using namespace System;

int main()

{

String ^s1="Программирование";

int first, last, x;

first=s1->String::IndexOf("р");

last=s1->String::LastIndexOf("р");

Console::WriteLine("Определение позиций буквы \'р\'в слове " +

"\"программирование\" ");

Console::WriteLine("Позия первой буквы \'р\' = " + first);

Console::WriteLine("Позия последней буквы \'р\' = " + last);

x=s1->String::IndexOf("р",(first+1));

Console::WriteLine("Позиция 2-й буквы \'р' = " + x);

Console::ReadLine();

return 0;

}

Результат работы со строками:

Определение позиции буквы 'р' в слове "программирование"

Позиция первой буквы 'р' = 1

Позиция последней буквы 'р'= 9

Позиция 2-й буквы 'р' = 4

 

Тестовые задания

ЗАДАНИЕ 1

Определите результат работы программы

int main()

{

int x[] = { 1, 2 , -100, 200, 4};

int sum;

sum = x[1] + x[2] + x[3];

Console::WriteLine("sum={0}", sum);

return 0;

}

 

Варианты ответов

1. sum=101

2. sum=-97

3. sum=302

4. sum=102

ЗАДАНИЕ 2

Определите результат работы программы

int main()

{

int m[] = {1, 20, 30, 40, 50 };

int i, sum = 0;

for (i = 1; i< 4; i += 2)

sum += m[i];

Console::WriteLine("sum={0}", sum);

return 0;

}

 

Варианты ответов

1. sum=90

2. sum=60

3. sum=81

4. sum=141

 

 

ЗАДАНИЕ 3

int main()

{

int d[] = { 10, 20, 1, 2, 3, 4 };

int i, sum = 0;

for (i = 1; i< 4; i++)

sum += d[i];

Console::WriteLine("sum={0}", sum);

return 0;

}

 

Варианты ответов

1. sum=31

2. sum=21

3. sum=30

4. sum=23

ЗАДАНИЕ 4

Определите результат работы программы

int main()

{

int x[2][3] = { { 10, 4, 5 }, { 100, 1, 20 } };

int sum = 0;

sum += x[1][0] + x[1][1];

Console::WriteLine("sum={0}", sum);

return 0;

}

 

Варианты ответов

1. sum=101

2. sum=104

3. sum=5

4. sum=110

 



<== предыдущая лекция | следующая лекция ==>
Оператор goto | Общие сведения


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 2.914 сек.