Отчёт по лабораторной работе, Методы программирования. Отчёт_ЛР1_6102_Хасанова (3). Лабораторная работа 1 Знакомство с ide ms visual Studio и программа "Hello World!" по курсу Методы программирования Группа 6102
Скачать 279.5 Kb.
|
МИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ федеральное государственное автономное образовательное учреждение высшего образования «Самарский национальный исследовательский университет имени академика С.П. Королева» (Самарский университет) Институт информатики, математики и электроники Факультет информатики Кафедра технической кибернетики ЛАБОРАТОРНАЯ РАБОТА № 1 Знакомство с IDE MS Visual Studio и программа “Hello World!” по курсу Методы программирования Группа 6102 Студент Э.Т. Хасанова (подпись) Преподаватель, к.ф.-м.н. Е.С. Козлова (подпись) Самара 2021 ЗаданиеЗадание на лабораторную работу приведено в таблице 1. Таблица 1 – Задание на ЛР № 1
Вариант для второго пункта основного задания приведен в таблице 2. Таблица 2 – Вариант второго пункта основного задания на ЛР № 1
Вариант для дополнительного задания приведен в таблице 3. Таблица 3 – Вариант дополнительного задания на ЛР № 1
Ход выполнения работыВ основном задание Лабораторной работы №1 использовались: библиотека ввода-вывода (iostream); пространство имён std; функция cout из библиотеки iostream; оператор вывода. Функция cout используется для вывода данных на экран (в консольное окно). Снимок экрана с результатами выполнения программы “Hello, World” приведен на рисунке 1. Рисунок 1 – Снимок экрана с результатами выполнения программы «Hello World!»В процессе написания кода для основного задания на Лабораторной работе №1 возникла ошибка – «Необъявлённый индефикатор». Снимок экрана с окном ошибок программы “Hello World!” приведён на рисунке 2. Рисунок 2 – Снимок экрана с ошибками программы «Hello World!» Для исправления данной ошибки я использовала пространство имён std. “using namespace std” сообщает компилятору, что мы хотим использовать всё, что находится в пространстве имён std, так что если компилятор найдёт имя, которое не сможет распознать, он будет проверять его наличие в пространстве имён std. Перейдём к 10 арианту второго пункта основного задания на ЛР № 1. В данном задании я использовала функции, операторы ввода и вывода, арифметические, логические операторы, операторы сравнения, итерации и выбора. Опишу три блока кода подробнее. В функции int main(){} выполняются операторы ввода(>>) и вывода(<<), операторы выбора (if-else), операторы итерации (while, for), функция, извлекающая одну строку и записывающая её в переменную (getline). Применяя iterator и remove, я указываю элемент, который я хочу удалить, затем, применяя метод erase класса string, я сокращаю длину строки. В этом же блоке я обращаюсь к функции “void isContinue()”, чтобы пользователь мог продолжить или завершить работу программы. В блоке кода isContinue также используются операторы ввода и вывода, и выбора. В данном блоке осуществляется запрос на продолжение использования программы. Проверка вводимых данных на число осуществляется в блоке кода NumText. Данный блок является особенностью программы. В этой функции я проверяла через код символов из ASCII таблицы является ли вводимый символ числом, пробелом или минусом. Снимок экрана с результатами выполнения программы 10 варианта второго пункта основного задания на ЛР № 1 приведен на рисунке 3.Рисунок 3 – Снимок экрана с результатами выполнения программы 10 варианта второго пункта основного задания на ЛР № 1Перейдём к 6 варианту дополнительного задания на ЛР № 1. В данном задании я использовала функции, операторы ввода и вывода, арифметические, логические операторы, операторы сравнения, итерации и выбора, обработку исключений. Опишу блоки кода подробнее. В блоке main создаётся массив по вводимым данным, высчитывается среднее значение массива и количество элементов больше среднего значения. В конце данного блока я обращаюсь к функции isContinue. В блоке кода isContinue также используются операторы ввода и вывода, и выбора. В данном блоке осуществляется запрос на продолжение. В двух оставшихся блоках осуществляется проверка вводимых данных. В функции outTheRange используются операторы try-catch. Данный блок проверяет строку на выход за диапазон. В блоке isNumber осуществляется проверка символа на цифру, как для ввода размера массива, так и для ввода элементов массива. Снимок экрана с результатами выполнения программы 6 варианта дополнительного задания на ЛР № 1 приведен на рисунке 4.Рисунок 4 – Снимок экрана с результатами выполнения программы 6 варианта дополнительного задания на ЛР № 1 ЗаключениеЦель задания на лабораторную работу № 1 – написать программу, которая выводит на экран предложение: “Hello, World!”, достигнута. Цель программы 10 варианта второго пункта основного задания на ЛР № 1 – вывести количество отрицательных и положительных элементов, введённых пользователем, достигнута. Цель программы 6 варианта дополнительного задания на ЛР № 1 – вывести число элементов, больших среднего значения всех элементов массива, достигнута. В ходе выполнения лабораторной работы я изучила операторы try-catch, создание массива, удаление выбранного символа строки с помощью итератора, изучила операцию инкремента и типы данных, приобрела навыки по организации проверки вводимого символа на число и выхода за диапазон, созданию пользовательского интерфейса в виде запроса о продолжении программы. В ходе выполнения работы наибольшие затруднения вызвали дополнительные проверки на корректный ввод данных, то есть проверка символа на число и выхода за диапазон. Вся работа для меня была интересна и полезна, так как я получила новые знания и опыт. ЛитератураБезус, Е.А. Лабораторные работы по курсу «Методы программирования» (язык программирования C++): Методические указания [Текст] / Сост. Е.А. Безус, Е.С. Козлова, С.С. Стафеев Самара, 2019. – 56 с. Страуструп, Б. Язык программирования С++ / Б. Страуструп. – М:Бином, 2011 –1136 с. Шилдт. Г. С++. Полное руководство / Г. Шилдт. – М: "ООО И.Д. Вильямс", 2019 – 800 с. Страуструп, Б. Программирование: принципы и практика использования С++, испр. изд.: Пер. с англ. / Б. Страуструп. – М: "ООО И.Д. Вильямс", 2011 –1244 с. Прата, С. Язык программирования С++. Лекции и упражения , 6-е изд.: Пер. с англ. / С. Прата. – Киев: "Диалектика", 2018 –1248 с. Библиографическое описание документа. Общие требования и правила составления [Электронный ресурс] / сост.: В.С. Крылова, С.М. Григорьевская, Е.Ю. Кичигина // Официальный интернет-сайт научной библиотеки Томского государственного университета. – Электрон. дан. – Томск, [2010]. – http://www.lib.tsu.ru/win/produkzija/metodichka/metodich.html (дата обращения: 10.09.2019). ПриложениеОсновное задание на ЛР № 1: #include using namespace std; int main() { cout << "Hello, World\n"; // Вывод строки на экран return 0; } 10 вариант второго пункта основного задания на ЛР № 1: #include #include using namespace std; string sequence; bool Active = true; void isContinue() // Функция, отвечающая за продолжение программы. { string answer; cout << "Continue? (Y/N) > "; // Запрос на повтор cin >> answer; if (answer == "y" || answer == "Y") { //Если запрос прошёл, то просто продолжаем программу } else if (answer == "n" || answer == "N") { //Если запрос не прошел, завершаем программу cout << "Thanks for using!" << endl; Active = false; } else { // Если запрос введён не верно - повторить cout << "Somthing is wrong! Please enter (Y/N)" << endl; isContinue(); } } bool NumText(string NumberText) // Функция для проверки вводимых символов(ASCII) { for (int a = 0; a < NumberText.length(); a++) { if (NumberText[a] != 32 && NumberText[a] != 45) // Проверяем, что элемент строки не пробел, и не минус { if ((NumberText[a] < 48) || (NumberText[a] > 57)) // Условие, что символ является числом { cout << "Somthing is wrong! Enter the correct sequence." << endl; return false; } } } return true; } int main() { cout << "Laboratory work 10. Counting the elements of a sequence of numbers." << endl; // Вывод строки с переносом на следующую строку while (Active) { cout << "Enter a sequence of integers (complete sequence '0'): "; getline(cin, sequence,'0'); // Функция, извлекающая одну строку и записывающая её в переменную string::iterator pend = remove(sequence.begin(), sequence.end(), '\n'); sequence.erase(pend, sequence.end()); if (NumText(sequence)) { int negative = 0; int positive = 0; string Temp; for (int i = 0; i < sequence.length(); i++) { if (sequence[i] != 32) { Temp += sequence[i]; } else { if (Temp != "") { if (Temp[0] == 45) { negative++; } else { positive++; } } Temp = ""; } } cout << "Positive elements: " << positive << ". Negative elements: " << negative << "."<< endl; } isContinue(); // Запрос на повтор программы } return 0; } 6 вариант дополнительного задания на ЛР № 1: #include #include using namespace std; bool isActive = true; string NumberText; int countNumber; int* mass; void isContinue() { string answer; //Делаем запрос на повтор cout << "Try Again?[y/n]: "; getline(cin, answer); if (answer == "y" || answer == "Y") { //Если запрос прошёл, то просто продолжаем программу } else if (answer == "n" || answer == "N") { //Если запрос не прошел, завершаем программу cout << "Thanks for using!" << endl; isActive = false; } else { //Если запрос введен не верно - повторить cout << "Something wrong! Plese enter [y/n]" << endl; isContinue(); } } bool outTheRange(string NumberText) { try { int Number = stoi(NumberText); return true; } catch (const std::exception&) { cout << "This number is too large..." << endl; return false; } } bool isNumber(string NumberText, int mode) { for (int a = 0; a < NumberText.length(); a++) { if (mode == 0) { // Проверка символа на цифру (ASCII) if ((NumberText[a] < 48) || (NumberText[a] > 57)) { cout << "Something is wrong, it's not a number or negative." << endl; return false; } if (outTheRange(NumberText)) return true; else return false; } else if (mode == 1) { if (NumberText[a] != 32 && NumberText[a] != 45) // Проверка на пробел и на минус { // Проверка символа на цифру (ASCII) if ((NumberText[a] < 48) || (NumberText[a] > 57)) { cout << "Something is wrong, it's not a number..." << endl; return false; } } } } if (mode == 1) return true; } int main() { while (isActive) { cout << "Enter the size of the array: "; getline(cin, NumberText); //Получаем строку if (isNumber(NumberText, 0)) //Проверяем ее, является ли она числом { int sizeArray = stoi(NumberText); mass = new int[sizeArray]; cout << "Enter the array: "; getline(cin, NumberText); //Получаем строку NumberText += " "; if (isNumber(NumberText, 1)) { countNumber = 0; for (int i = 0; i < NumberText.length(); i++) { if (NumberText[i] == 32) { countNumber++; if (i == 0 && NumberText[i] == 32) countNumber--; else if (NumberText[i - 1] == 32) countNumber--; } } if (countNumber == sizeArray) { string Temp; int arrayIndex = 0; for (int i = 0; i < NumberText.length(); i++) { if (NumberText[i] != 32) { Temp += NumberText[i]; } else { if (outTheRange(Temp)) { mass[arrayIndex] = stoi(Temp); arrayIndex++; } Temp = ""; } } float medium = 0; for (int i = 0; i < arrayIndex; i++) { medium += mass[i]; } medium /= arrayIndex; cout << "Arithmetic mean: " << medium << endl; int countMedium = 0; for (int i = 0; i < arrayIndex; i++) { if (mass[i] > medium) countMedium++; } cout << "The number of numbers that are greater than the average: " << countMedium << endl; } else { cout << "Error! >> Out the range of the array! <<" << endl; } } } //Запрос на повтор программы isContinue(); } return 0; } |