
- •090900.62 Информационная безопасность
- •Введение
- •Теоретическая часть
- •Постановка задачи
- •1.3 Порядок выполнения работы
- •1.4 Контрольные вопросы
- •2 Лабораторная работа № 2. Массивы
- •2.1 Теоретическая часть
- •2.2 Постановка задачи
- •2.3 Порядок выполнения работы
- •2.4 Контрольные вопросы
- •3 Лабораторная работа № 3. Указатели
- •3.1 Теоретическая часть
- •3.2 Постановка задачи
- •3.3 Контрольные вопросы
- •4 Лабораторная работа № 4. Классы
- •4.1 Теоретическая часть
- •4.2 Задание
- •5 Лабораторная работа № 5. Программирование с использованием библиотеки mfc. Создание пунктов меню
- •6 Лабораторная работа № 6. Программирование с использованием библиотеки mfc. Панель инструментов
- •7 Лабораторная работа № 7. Программирование с использованием библиотеки mfc. Основы рисования
- •Список литературы
Постановка задачи
Разработать консольную программу, которая подсчитывает сумму проданных товаров. Программа спрашивает у пользователя количество и цену товара. После ввода цены и количества товара задается вопрос о продолжении ввода новых данных или вывода суммы. Ввод символа «1» означает продолжение ввода новых данных.
Программа перед расчетом суммы должна предусмотреть проверку на не корректные значения (отрицательные значения количества или цены). Если входные данные не корректны, то об этом сообщается пользователю.
1.3 Порядок выполнения работы
Запустите visual C++. Создайте консольный проект;
Наберите код, который выполняет действия, описанные в пункте 1.2;
Выполните программу, убедитесь в её корректности;
Сделайте выводы по работе и составьте отчет по работе.
1.4 Контрольные вопросы
Какие типы программ можно разрабатывать в среде Visual C++ 2010?
Какими характеристиками обладают консольные приложения?
Какой оператор используется для ввода данных в консольном режиме?
Назначение библиотеки iostream?
Какая функция обязательно должна присутствовать в программе?
2 Лабораторная работа № 2. Массивы
Цель: получить навыки обработки массивов на языке С++
2.1 Теоретическая часть
Массив представляет собой коллекции данных одного типа, сохраненные в памяти компьютера. Каждая единица данных называется элементом массива.
Массив определяется именем, типом данных и размером. Пример объявления массив приведен ниже:
float Salary[20];
где float – тип данных;
Salary – имя массива;
[20] – количество элементов массива.
Встретив подобную запись, компилятор зарезервирует в памяти место размером 20x6=120 байт (6- размер переменной типа float).
Адресация элементов массива производится по сдвигу относительно первого элемента, сохраненного в имени массива. Так к первому элементу можно обратиться следующим образом: Salary[0], ко второму – Salary[1], и.т.д.
Если объявлен массив размера N, то к его элементам можно обращаться, указывая индекс в диапазоне от 0 до (N-1).
Пример программы, работающей с массивом данных, приведен ниже:
#include "stdafx.h"
#include "iostream"
using namespace std;
int main(int argc, char* argv[])
{
int a[4];
for (int i=0;i<4;i++ )
{
cout<<"Value["<<i+1<<"]:";
cin>>a[i];
}
for (int i=0;i<4;i++ )
cout<<i<<":"<<a[i]<<"\n";
return 0;
}
Результат работы программы представлен на рисунке 2.1.
Рисунок 2.1 –Результат работы программы
Компилятор не контролирует выход за пределы массива при обращении к элементам массива. Если в предыдущем примере, мы вставим в конце программы выражение cout<<a[4], компилятор при построении проекта не выдаст ошибки. При выполнении программы в лучшем случае произойдет критическая ошибка и программа завершит свое выполнение, в худшем будут выдаваться не правильные результаты.
Пример программы с подобной ошибкой представлен ниже:
#include "stdafx.h"
#include "iostream"
using namespace std;
int main(int argc, char* argv[])
{
int a[4];
for (int i=0;i<4;i++ )
a[i]=i;
int summa=0;
for (int i=0;i<=4;i++ )
summa+=a[i];
cout<<"summa="<<summa<<"\n";
return 0;
}
Результат выполнения программы представлен на рисунке 2.2.
Рисунок 2.2 – Результат работы программы
Объясните, почему получился такой результат.
Инициализация массива базового типа можно производить одновременно с его объявлением:
float Salary [3]={20000, (15750,35), 7500};
int A []={1, 3, 4, 5};
Обратите внимание, что во втором случае компилятор сам определит размер массива.
Язык С++ позволяет создавать многомерные массивы, например, двухмерные:
short int Board [8][8];
Если нужно узнать, находится ли шахматная фигура в позиции А2, то нужно будет обратиться к элементу двумерного массива:
Board [0][1];
Ниже приведены примеры инициализации двумерных массивов:
int A[3][3]={1,2,3,4,5,6,7,8,9};
int A[3][3]={{1,2,3},
{4,5,6},
{7,8,9}};
Строка текста представляет собой набор символов. В С++ строку можно представить как массив символов, заканчивающийся концевым нулевым символов строки, например:
char str[]={‘H’, ‘e’, ‘l’, ‘l’,’o’,’ ‘, ‘ W‘, ‘o’,’l’,’d’,’\0’};
или то же самое:
char str[]=”Hello World”;
Во втором случае нет необходимости добавлять в конце нулевой символ, компилятор это сделает сам. Инициализацию строкового массива можно оставить на потом, но при этом также необходимо следить, чтобы в массив не было записано больше символов, чем под него отведено.
На следующем листинге представлен пример использования строкового массива.
Листинг 2.3.- Работа со строковыми массивами
#include "stdafx.h"
#include "iostream"
using namespace std;
int main(int argc, char* argv[])
{
char buffer[20];
cout<<"Enter the string:";
cin>>buffer;
cout<<"Here the string:\""<<buffer<<"\"\n";
return 0;
}
Результат выполнения программы представлен на рисунке 2.3.
Рисунок 2.3 –Результат выполнения программы
Как видно, при выполнении программы возникает ряд проблем:
- если пользователь введет строку, содержащую более 19 символов, то оператор cin введет их за пределы массивы;
- оператор cin воспринимает пробел, как окончание строки.
Эти проблемы позволяет решить метод get(), применяемый вместе с оператором cin: cin.get(). Для выполнения данного метода необходимо задать: буфер ввода, максимальное число символов, разделительный символ прерывания ввода.
Листинг 2.4.- Работа со строковыми массивами
#include "stdafx.h"
#include "iostream"
using namespace std;
int main(int argc, char* argv[])
{
char buffer[20];
cout<<"Enter the string:";
cin.get(buffer,19);
cout<<"Here the string:\""<<buffer<<"\"\n";
return 0;
}
Для хранения списка строковых данных можно воспользоваться двухмерным строковым массивом.
#include "stdafx.h"
#include "iostream"
using namespace std;
int main(int argc, char* argv[])
{
char names[20][80];
char ch='y';
int ind=0;
while ((ch=='y'||ch=='Y')&&ind<20)
{
cout<<"Enter name:";
cin.get(names[ind],19);
ind++;
cout<<"Continue?:";
cin>>ch;
cin.ignore();//убираем из потока символ «возврата строки»
}
for (int j=0;j<ind;j++)
cout<<names[j]<<"\n";
return 0;
}