Главная страница
Навигация по странице:

  • Схемы

  • Исходный код программы со статическим массивом

  • Исходный код программы с динамическим массивом

  • Результаты

  • ЯП. ЯП 1. Задача 03 "Массивы в языке C, разработка структурированных программ" по дисциплине "Языки программирования"


    Скачать 143.67 Kb.
    НазваниеЗадача 03 "Массивы в языке C, разработка структурированных программ" по дисциплине "Языки программирования"
    Дата03.03.2022
    Размер143.67 Kb.
    Формат файлаdocx
    Имя файлаЯП 1.docx
    ТипЗадача
    #381806

    Федеральное агентство связи ордена Трудового Красного Знамени федеральное государственное бюджетное образовательное учреждение высшего образования


    Московский Технический Университет Связи и Информатики



    Кафедра “Информатика”


    Лабораторная работа №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 Результаты тестирования программы


    Исходный массив

    Размер массива

    Измененный массив

    1 , 2 ,14 , -1 , 45

    5

    1 , 2 ,14 , 45

    1 , -1 , 1 , 1 , 1 , 1 1 , 1

    8

    1 , 1 , 1 , 1 , 1 , 1 , 1

    1 , 2 ,14

    3

    «Массив не сформирован»

    -21 , 42 , -114

    4

    -21 , 42


    В следующих скриншотах представлена исправная работа программы с различными входными данными в двух вариантах (рис. 6, рис. 7).
    Рисунок 6 – Результат работы с динамическим массивом



    Рисунок 5 – Результат работы со статическим массивом

    Вывод

    Я научился разрабатывать программы циклической структуры с использованием массивов и указателей. Научился работать с одномерными статическими и динамическими массивами.




    написать администратору сайта