
- •210700 Инфокоммуникационные технологии и системы связи
- •220700 Автоматизация технологических процессов и производств
- •230400 Информационные системы и технологии
- •1. Цели и задачи дисциплины
- •2. Место дисциплины в структуре основной образовательной программы
- •3. Требования к уровню освоения содержания дисциплины
- •Для специальности 210700 Инфокоммуникационные технологии и системы связи
- •4. Объем дисциплины и виды учебной работы
- •5. Содержание дисциплины
- •Для специальности 210700 Инфокоммуникационные технологии и системы связи
- •6. Лабораторный практикум
- •7. Библиографический список
- •8. Материально-техническое обеспечение дисциплины
- •9. Опорный конспект
- •1. Основы алгоритмизации
- •1.1 Этапы решения задач на эвм.
- •1.2. Алгоритм. Свойства алгоритмов
- •1.3. Формы представления алгоритмов
- •1.4. Алгоритмическая конструкция ветвления
- •1.5. Алгоритмическая конструкция цикла
- •2.1. Разработка консольного проекта
- •2.3. Комментарий
- •2.4. Организация ввода и вывода информации
- •Вывод данных
- •Ввод данных
- •2.5. Разработка проекта типа Windows Forms Application
- •3. Основные элементы языка
- •3.1. Алфавит
- •3.2. Идентификаторы
- •3.3. Переменные и константы
- •3.4. Символьные типы данных
- •3.5. Данные типа int
- •3.6. Данные с плавающей точкой
- •3.7. Логический тип данных
- •3.8. Операции и выражения
- •Арифметические операции
- •Операции инкремента и декремента
- •Операции отношения и логические операции
- •Оператор присваивания
- •Составные операторы присваивания
- •Оператор условия ? :
- •Операция sizeof
- •4. Программирование разветвляющих и циклических алгоритмов
- •4.1. Общие сведения
- •4.2. Оператор if
- •4.3. Оператор switch
- •4.4. Оператор цикла for
- •4.5. Оператор цикла while
- •4.6. Оператор цикла do while
- •4.7. Применение оператора continue
- •4.8. Оператор goto
- •5. Массивы и строки
- •5.1. Массивы
- •5.2. Строки
- •6. Функции
- •6.1. Общие сведения
- •6.2. Описание функции и ее тип
- •6.3. Вызов функции
- •6.4. Область действия переменной
- •6.5. Классы памяти
- •Глоссарий
- •10. Задания на лабораторные работы и методические указания к их выполнению
- •11. Задания на контрольную работу и методические указания к их выполнению
- •Оглавление
5. Массивы и строки
5.1. Массивы
Массив – это расположенные вплотную друг за другом в памяти элементы одного и того же типа. Каждый массив имеет имя. Доступ к отдельным элементам массива осуществляется по имени массива и индексу (порядковому номеру) элемента.
Основные свойства массива:
все элементы массива имеют один и тот же тип;
все элементы массива расположены в памяти друг за другом; индекс первого элемента равен 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