ЯП. ЯП 1. Задача 03 "Массивы в языке C, разработка структурированных программ" по дисциплине "Языки программирования"
Скачать 143.67 Kb.
|
Федеральное агентство связи ордена Трудового Красного Знамени федеральное государственное бюджетное образовательное учреждение высшего образованияМосковский Технический Университет Связи и ИнформатикиКафедра “Информатика”Лабораторная работа №1 Задача 1.03“Массивы в языке C++, разработка структурированных программ” по дисциплине“Языки программирования”Выполнил студент группы БИБ 2003 Абдиев Н.Б. ПроверилаЗагвоздкина А.В.Москва 2021Задание Составить функцию, которая получив массив действительных чисел размером N. Если в данной последовательности чисел есть хотя бы одно положительное число, которое следует после отрицательного числа, то создает новый массив, записав в него все элементы исходного массива исключая его минимальный элемент. Составить функции ввода и вывода n элементов массива. Составить функцию main, которая организует работу по вводу информации с клавиатуры, вызову функции обработки массива (массивов) и организует вывод на экран исходного массива (массивов), нового массива. В функции main предусмотреть возможность многократного решения задачи с различными исходными данными. Программа должна быть разработана в двух вариантах: с использованием статической и динамической памяти. Схемы функций Функция ввода (рис. 1), функция вывода (рис.2) функция, перезаписывающая массив (рис. 3). Рисунок 1 – main Рисунок 2 – Функция ввода Рисунок 3 – Функция вывода Рисунок 4 – Функция поиска Рисунок 5 – Функция удаления минимального элемента Исходный код программы со статическим массивом #include using namespace std; void input(float mas[], int n); void output1(float mas[], int n); void output2(float res[]); int min(float mas[], int n); int deletemin(float mas[], float res[], int n); int j = 0;//размер нового массива int main() { setlocale(LC_ALL, "rus"); int answear; do { int n; float mas[100], res[100];//создание двух массивов do { cout << "enter array size: "; cin >> n;//ввод размера массива } while (n < 1 || n > 100); cout << "enter array elements:" << endl; input(mas, n); output1(mas, n); int j = deletemin(mas, res, n); if (j > 0) { output2(res); } else { cout << "Массив не сформирован " << endl; } cout << "Повторить?(1/0) "; cin >> answear; } while (answear == 1); return 0; } void input(float mas[], int n)//ввод элементов массива { for (int i = 0; i < n; i++) cin >> mas[i]; } void output1(float mas[], int n)//вывод элементов массива { //вывод старого массива cout << "old array " << '\n' << "["; for (int r = 0; r < n; r++) { cout << mas[r] << " "; } cout << "]" << endl; } int min(float mas[], int n) { //поиск полож-го эл-та , идущего после отриц-го int l = 0;//переменная , куда мы и записываем условие for (int k = 0; k < n - 1; k++) { if (mas[k] < 0 && mas[k + 1] > 0) { l++; /*return 1;*/ } } return l; } int deletemin(float mas[], float res[], int n) { //удаление минимального эл-та if (min(mas, n) == 0) return 0; //поиск мин эл-та //переменная для записи нового массива float min1 = mas[0]; for (int i = 1; i < n; i++) { if (mas[i] < min1) min1 = mas[i]; } //удаление мин эл-та из массива for (int i = 0; i < n; i++) { if (mas[i] != min1) { res[j] = mas[i]; j++; } } return j; } void output2(float res[])//вывод элементов массива { //вывод нового массива cout << "new array " << '\n' << "["; for (int i = 0; i < j; i++) { cout << res[i] << " "; } cout << "]"; } Исходный код программы с динамическим массивом #include using namespace std; float* input(int N); void output(float* mas, float* res, int N); int min(float* mas , int N); float deleteMin(float* mas, float* res, int N); int j = 0; int main() { setlocale(LC_ALL, "rus"); int answer; do { int N ; float* mas,* res; cout << "Dynamic\n\n"; cout << "Enter array size: "; cin >> N;//ввод размера массива if (N > 0) { res = new float[N]; cout << "Enter array elements:" << endl; mas = input(N); float l = deleteMin(mas, res, N);//поиск полож-го эл-та , идущего после отриц-го if (l > 0) { output(mas, res, N); j = 0; } else { cout << "Массив не сформирован " << endl; } } else { cout << "Размер должен быть больше 0!" << endl; } cout << "Повторить? (1/0)" << endl; cin >> answer; } while (answer == 1); system("pause"); return 0; } float* input(int N)//ввод эл-тов массива { float* mas = new float[N]; for (int i = 0; i < N; i++) cin >> *(mas + i); return mas; } void output(float* mas, float* res, int N)//вывод эл-тов массива { cout << " Old array " << endl; cout << " [ "; for (int i = 0; i < N; i++){ cout << mas[i] << " "; } cout << "]" << endl; cout << endl; cout << " New array " << endl; cout << " [ "; for (int i = 0; i < j; i++) { cout << res[i]/**(res + i)*/ << " "; } cout << "] "; } int min(float* mas, int N) { //поиск полож-го эл-та , идущего после отриц-го for (int k = 0; k < N; k++) { if (mas[k] < 0 && mas[k + 1] > 0) { return 1; } } return 0; } float deleteMin(float* mas, float* res, int N)//удаление минимального эл-та { if (min(mas, N) == 0) return 0; //поиск мин эл-та float min = *mas; for (int i = 1; i < N; i++) { if (*(mas + i) < min) min = *(mas + i); } //удаление мин эл-та из массива for (int i = 0; i < N; i++) { if (*(mas + i) != min) { *(res + j) = *(mas + i); j++; } } return 1; } Результаты тестирования программы Результаты тестирования программы с различными исходными данными представлены в таблице 1. Таблица 1 – Результаты тестирования программы
В следующих скриншотах представлена исправная работа программы с различными входными данными в двух вариантах (рис. 6, рис. 7). Рисунок 6 – Результат работы с динамическим массивом Рисунок 5 – Результат работы со статическим массивом Вывод Я научился разрабатывать программы циклической структуры с использованием массивов и указателей. Научился работать с одномерными статическими и динамическими массивами. |