Практическое задание 1.
Массивы. Обработка массивов данных.
Цель работы: получить навык работы с массивами в
среде Visual C++.
Теоретическая часть
В терминах разработки .NET приложение с
графическим интерфейсом пользователя Windows называется
приложением Windows Forms (или Winforms). Разработка проекта Windows Forms с помощью Visual
C++ в общих чертах не отличается от разработки на других языках .NET, таких как Visual Basic или C#.
Приложения Windows Forms в Visual C++ используют классы .NET Framework и иные
функциональные возможности .NET с новым синтаксисом Visual
C++.
Библиотека iostream
Библиотека iostream подключается в разделе
объявлений файла исходного кода:
#include <iostream>
Библиотека iostream интересна как прекрасный
пример объектно-ориентированного проектирования, так как содержит многие
характерные приемы и конструкции.
В основе ООП подхода, реализуемого средствами iostream, лежит
предположение о том, что объекты обладают знанием того, какие действия следует
предпринимать при вводе и выводе.
При пользовании библиотекой iostream ошибки, связанные с
"перепутыванием" типов данных, исключены. Если вы используете в
операции ввода-вывода переменную типа unsigned long, то вызывается
подпрограмма, ответственная именно за этот тип.
Библиотека stdio поддерживает средства языка С, позволяющее
использовать переменное число параметров. Но такая гибкость дается недаром – на
этапе компиляции проверка соответствия между спецификацией формата, как в
функциях printf() и scanf(), не выполняется.
В библиотеке iostream применен другой подход. Операторы
ввода-вывода оформляются в виде выражений с применением переопределяемых
функций-операторов для каждого из типов данных, встречающихся в выражении. Если
вам необходимо использовать новый тип данных в операциях ввода-вывода, вы
можете расширить библиотеку iostream своими функциями-операторами.
Библиотека iostream более медленная, чем stdio, но это
небольшая плата за надежность и расширяемость, базирующиеся на возможностях
объектно-ориентированных средств вывода.
Массивы.
В Си++ определены и многомерные массивы. Двумерный массив (матрицу)
можно объявить так:
тип имя_переменной [n][m];
где n – количество строк в матрице(строки нумеруются от 0 до n-1),
m – количество столбцов (столбцы нумеруются от 0 до m-1).
Например, int A [10][15];
Описана матрица A, состоящая из 10 строк и 15 столбцов (строки нумеруются от 0 до 9,
столбцы от 0 до 14).
Для обращения к
элементу матрицы необходимо указать ее имя, и в квадратных скобках номер
строки, а затем в квадратных скобках – номер столбца. Например, A[2][4] –
элемент матрицы A, находящийся в
третьей строке и пятом столбце.
В Си++ можно описать
многомерные массивы, которые можно объявить с помощью оператора следующей
структуры: тип имя_переменной [n1][n2]…[nk];
Пример.
#include "stdafx.h"
#include <iostream>
using namespace std;
int main()
{
setlocale(0,"");
int size;
int a[100];
cout << "\nВведите
размер массива:";
cin >> size;
for (int i=0;i<size;i++)
{a[i]=rand()%10; cout << a[i]<<" ";}
system ("pause");
return 0;
}
Блок-схемы основных алгоритмов обработки матриц
Блок-схема
ввода матрицы
Блок-схема
вывода матрицы
Пример.
Найти сумму
элементов матрицы, лежащих выше главной диагонали
Для начала,
необходимо продумать алгоритм решения и можно составить блок-схему:
Код:
Замечание: отобразите окно свойств для элементов (Вид→Другие окна→Окно свойств или Alt+Enter).
Замечание: знакомьтесь с назначением элементов формы,
просматривая всплывающие подсказки:
Ход работы
Задание 1.
Создайте программу, генерирующую массив
заданной размерности.
1.
Создайте новый проект С++ (Файл→Создать→Проект→ВыбратьCLR+“Приложение Windows Forms”).
2.
Разместите на форме:
-
четыре надписи:
label1, label2, label3, label4;
-
три текстовых поля: TextBox1
и TextBox2, TextBox3;
-
кнопку button1;
-
панель для группировки элементов panel1.
Примерный вид формы с необходимыми элементами:
Замечание: общее свойство можно изменить для нескольких объектов одновременно,
а не поочерёдно для каждого, просто захватите их с помощью мышки или сделайте
выборку через Ctrl.
3. Измените свойства для следующих
элементов (картинки в папке “Для П.р.№1”):
-
для элементов типа label
– Text, AutoSize=False, BackColor =Transparent
(на вкладке Интернет), Font;
-
для Form1 – Text, BackgroundImage, Icon;
-
для panel1 – BackgroundImage;
-
для button1 – Text, Font.
Примерный вид формы:
4.
Дважды кликните по кнопке Генерация
и введите код в обработчик событий (Form1.h):
5.
Опишите операции,
производимые в строках 201, 202, 203 (см. примет ниже)
Пример описания из предыдущей лабораторной работы:
|
описываем переменные a и b вещественного типа double, значения заносим с помощью конверта из текстовых полей с именами
num1 и num2
– инициализирум переменную sum типа double
– преобразуем полученную сумму в строку и присваиваем её третьему текстовому
полю num3
|
6.
Подключите библиотеку iostream в файле исходного кода вашего проекта для работы функции rand() . Для этого в Обозревателе решений дважды
кликните по файлу prakt1.cpp (название_проекта.cpp) и допишите строку #include <iostream>
(после #include “stdafx.h”!!!)
#include "stdafx.h"
#include <iostream>
#include "Form1.h"
7.
Выполните отладку (F5) и проверьте её работоспособность.
Примерный
результат работы вашей программы:
Задание 2.
Попробуйте самостоятельно написать код
сортировки массива.
Замечание: введите переменную b для временного хранения
значения элементов массива во время замены. Например, for ( i=0;i<size;i++) for (int k=i+1;k<size; k++)if
(a[i]>a[k]) { b=a[i];a[i]=a[k]; a[k]=b; };
Задание 3.
Попробуйте написать программу подобной
обработки для двумерного массива, изменив размерность массива, добавив ещё один
цикл по j и переход на новую строку с помощью
спецификаций \r\n.
Замечание: для того, чтобы
увеличить размер элемента формы textbox, на панели свойств задайте multiline=true или
нажмите на “стрелочку” над ним:
Вывод двумерного массива: Элементы отсортированы по строкам:
Задание 4.
Измените
код программы так, чтобы массив содержал положительные и отрицательные числа.
8.
Покажите выполненную работу
преподавателю и получите дополнительное задание.
9.
Ответьте на контрольные
вопросы.
Контрольные вопросы:
1.
Как отправить содержимое TextBox в целочисленную
переменную?
2.
Что позволяет выполнить запись label1->Text = System::Convert::ToString(s)?
3.
Каково назначение функции rand()%3?
4.
Расшифруйте аббревиатуру ООП.
Оставьте свой комментарий
Авторизуйтесь, чтобы задавать вопросы.