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

  • 1.Как производится определение пользовательских функций в языке С++

  • 2. Каков синтаксис вызова функции Переменная = ИмяФункции(СписокФактическихАргументов); 3. Как происходит передача параметров в функцию по значению

  • 4. Как происходит передача параметров в функцию по ссылке

  • 5. Как происходит передача параметров в функцию по указателю

  • 6.Какого типа значения может возвращать функция Как вернуть из функции несколько значений

  • 7.Как описываются структуры

  • 9.Как обратиться к элементам структуры по указателю

  • 10.Передача структуры в функцию.

  • 11.Как организуется доступ к файлам Какие виды доступа вы знаете В программах на C++ при работе с текстовыми файлами необходимо подключать библиотеки iostream

  • fstream . для того чтобы начать работать с текстовым файлом, необходимо описать переменную типа ofstream

  • Работа с динамическими массивами структур. Отчёт. Лаб. № 1. Лабораторная работа 1. Работа с динамическими массивами структур. Руководитель подпись, дата инициалы, фамилия


    Скачать 321.6 Kb.
    НазваниеЛабораторная работа 1. Работа с динамическими массивами структур. Руководитель подпись, дата инициалы, фамилия
    АнкорРабота с динамическими массивами структур
    Дата09.03.2023
    Размер321.6 Kb.
    Формат файлаdocx
    Имя файлаОтчёт. Лаб. № 1.docx
    ТипЛабораторная работа
    #976414


    МИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ

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

    «»

    Институт
    Кафедра

    ОТЧЕТ ПО ЛАБОРАТОРНОЙ РАБОТЕ

    Языки программирования


    Лабораторная работа №1. Работа с динамическими массивами структур.

    Руководитель .. 

    подпись, дата инициалы, фамилия

    Обучающийся -, ..

    номер группы, зачетной книжки подпись, дата инициалы, фамилия

    2020 г.

    ЦЕЛЬ РАБОТЫ


    Цель работы:

    Получение практических навыков разработки и отладки программ с использованием динамических массивов структур.
    Необходимо разработать программу, формирующую и обрабатывающую массив структур (согласно варианту задания). Для каждого действия, выполняемого над массивом структур, необходимо разработать отдельную функцию. В main продемонстрировать работу функций. В зависимости от оценки, на которую вы претендуете, необходимо выполнить следующие задания (для каждой следующей оценки нужно выполнить ВСЕ предыдущие задания)

    ЗАДАНИЕ НА ЛАБОРАТОРНУЮ РАБОТУ


    Порядок выполнения работы:

    1.Ознакомиться с общей постановкой задачи.

    2.Ознакомится с вариантом задания – соответствует вашему номеру в списке группы (при нехватке заданий вариант задания вычисляется как нoмер_в_списке_группы -количество_заданий).

    3.Разработать блок-схему алгоритма решения поставленной задачи.

    4.Написать и отладить программу на подготовленных наборах тестовых данных.

    5.Подготовить отчет по лабораторной работе. Отчет должен включать в себя:

     титульный лист;

     цель лабораторной работы;

     постановку задачи;

     блок-схему алгоритма решения поставленной задачи;

     текст программы с комментариями;

     наборы тестовых исходных данных с соответствующими результатами работы программы (5 и более тестовых наборов);

     краткие ответы на контрольные вопросы;

     выводы по лабораторной работе.

    6.Защитить лабораторную работу перед преподавателем.

    Оценка

    Общее задание

    Удовлетворительно

    1. Определить структуру (согласно варианту задания)

    1. Написать функцию заполнения массива структур данными с клавиатуры. Из функции нужно вернуть указатель на массив и количество элементов в массиве.

    1. Написать функцию вывода на экран данных из массива структур.

    1. Написать функцию расчёта/обработки данных (согласно варианту задания). Их функции нужно вернуть результат вычислений (если их несколько, то казать на массив и количество значащих элементов в нём).

    1. Написать функцию вывода на экран результата работы функции 4.

    Хорошо

    1. Написать функцию заполнения массива структур данными из файла (первой строчкой в файле указанно количество записей). В функцию подаётся имя файла (его указывает пользователь программы), нужно вернуть указатель на массив и количество элементов в массиве

    1. Написать функцию вывода в файл результата обработки данных, полученных о функции 4. В функцию передаётся имя файла (его указывает пользователь программы).

    Отлично

    1. Написать функцию сортировки массива структур по указанному полю (согласно варианту задания).

    1. Написать функцию вывода в файл отсортированного массива структур. В функцию передаётся имя файла (его указывает пользователь программы).

    1. Добавить в функции 3, 5, 7, 9 форматированный вывод данных с помощью манипуляторов форматирования. При выводе необходимо задать фиксированную ширину для каждого столбца, и, при наличии в столбце вещественных значений, количество знаков после запятой.



    Вариант 18. Создайте структуру Расписание с элементами Номер электрички, Направление, Длина состава (1). Заполните массив элементов Расписание (2, 6). Написать функцию по нахождению всех электричек, двигающихся в определенном направлении (направление задаёт пользователь) (4). Провести сортировку массива по длине состава (8).

    ХОД РАБОТЫ


    Содержимое файла с данными для массива структуры:



    Содержимое программы:

    #include

    #include

    #include

    #include

    #include

    #include

    #include

    using namespace std;
    struct Schedule //1. Объявление структуры

    {

    char path[20];

    int number;

    int lenght;

    };
    int In(Schedule*& sch) //2. Функция заполнения массива структуры данными с клавиатуры

    {

    int n;

    cout << "Enter the number of trains: "; cin >> n; cout << "\n";

    sch = new Schedule[n];

    for (int i = 0; i < n; i++)

    {

    cout << "Train" << i + 1 << ": \n";

    cout << "Enter path: "; cin >> sch[i].path;

    cout << "Enter number: "; cin >> sch[i].number;

    cout << "Enter lenght: "; cin >> sch[i].lenght;

    cout << endl;

    }

    return n;

    }
    void Out(int n, Schedule* sch) //3. Функция вывода данных из массива структуры в консоль

    {

    cout << "List of all Paths: \n";

    for (int i = 0; i < n; i++)

    {

    cout << "Path: " << sch[i].path << ";";

    cout << setw(15) << "Number: " << sch[i].number << ";";

    cout << setw(15) << "Lenght: " << sch[i].lenght << ";";

    cout << endl;

    }

    cout << endl;

    }
    void Sort(int n, Schedule* sch) //8. Функция сортировки данных массива структуры(по убыванию)

    {

    for (int i = 0; i < n; i++)

    {

    for (int j = 0; j < n - 1; j++)

    {

    if (sch[j].lenght < sch[j + 1].lenght)

    {

    swap(sch[j], sch[j + 1]);

    }

    }

    }

    }
    int Choice(int n, Schedule* sch, Schedule* ss, const char* s) //4. Функция обработки данных массива структуры(Выбор электричек с заданным путем)

    {

    int j = 0;

    for (int i = 0; i < n; i++)

    {

    if (strcmp(sch[i].path, s) == 0)

    {

    strcpy_s(ss[j].path, 20, sch[i].path);

    ss[j].number = sch[i].number;

    ss[j].lenght = sch[i].lenght;

    j++;

    }

    }

    return j;

    }
    void SortOut(int j, Schedule* ss, const char* s) //5. Функция вывода обработанных данных массива структуры

    {

    cout << "List (sorting by decending of lenght) of all train going on your (" << s << ") path: \n";

    for (int i = 0; i < j; i++)

    {

    cout << "Path: " << ss[i].path << ";";

    cout << setw(15) << "Number: " << ss[i].number << ";";

    cout << setw(15) << "Lenhgt: " << ss[i].lenght << ";";

    cout << endl;
    }

    cout << endl;

    }
    int TxtIn(Schedule*& sch, char name[10]) //6. Функция заполнения массива структуры данными из файла

    {

    int n;

    ifstream inf(name);

    if (!inf)

    {

    cerr << "Error" << endl;

    exit(1);

    }

    inf >> n;

    sch = new Schedule[n];

    for (int i = 0; i < n; i++)

    {

    inf >> sch[i].path;

    inf >> sch[i].number;

    inf >> sch[i].lenght;

    }

    inf.close();

    return n;

    }
    void TxtOut(int n, Schedule* sch) // Функция вывода данных массива структуры в файл

    {

    ofstream outf("Out.txt");

    if (!outf)

    {

    cerr << "ERROR" << endl;

    exit(1);

    }

    outf << "List of all Paths: \n";

    for (int i = 0; i < n; i++)

    {

    outf << "Path: " << sch[i].path << ";";

    outf << setw(15) << "Number: " << sch[i].number << ";";

    outf << setw(15) << "Lenght: " << sch[i].lenght << ";";

    outf << endl;

    }

    cout << endl;

    }
    void TxtSortOut(int j, Schedule* ss, const char* s) //7.9. Функция вывода в файл отсортированного массива структур

    {

    ofstream outf("Search.txt");

    if (!outf)

    {

    cerr << "ERROR" << endl;

    exit(1);

    }
    outf << "List (sorting by decending of lenght) of all train going on your (" << s << ") path: \n";

    for (int i = 0; i < j; i++)

    {

    outf << "Path: " << ss[i].path << ";";

    outf << setw(15) << "Number: " << ss[i].number << ";"; //10. форматированный вывод данных с помощью манипуляторов форматирования

    outf << setw(15) << "Lenhgt: " << ss[i].lenght << ";";

    outf << endl;

    }

    outf << endl;

    }
    int main()

    {

    int n, j;

    char path[20], name[10] = "In.txt"; char o[4];

    cout << "Enter your path: ";

    gets_s(path);

    Schedule* sch = 0;

    cout << "How do you want enter data? Enter 'txt' or 'key': ";

    cin >> o;

    if (strcmp(o, "txt") == 0)

    {

    cout << "Enter file name: ";

    cin >> name;

    n = TxtIn(sch, name);

    Schedule* ss = new Schedule[n];

    TxtOut(n, sch); Sort(n, sch);

    j = Choice(n, sch, ss, path);

    TxtSortOut(j, ss, path);

    delete[] sch;

    }

    else if (strcmp(o, "key") == 0)

    {

    n = In(sch);

    Schedule* ss = new Schedule[n];

    Out(n, sch);

    Sort(n, sch);

    j = Choice(n, sch, ss, path);

    SortOut(j, ss, path);

    delete[] sch;

    system("pause");

    }

    else

    cout << "Wrong answer";

    return 0;

    }
    Содержимое файла для вывода информации после обработки:



    1. Объявление структуры:




    1. Функция заполнения массива структуры данными с клавиатуры:




    Пример работы:



    1. Функция вывода данных из массива структуры:




    Пример работы:



    1. Функция обработки данных массива структуры:



    1. Функция вывода обработанных данных массива структуры:



    Пример работы:



    1. Функция заполнения массива структуры данными из файла:



    1. Функция вывода данных массива структуры в файл:



    1. Функция сортировки данных массива структуры



    9. функция вывода в файл отсортированного массива структур:



    10. форматированный вывод данных с помощью манипуляторов форматирования:



    Пример работы:


    ОТВЕТЫ НА КОНТРОЛЬНЫЕ ВОПРОСЫ


    1.Как производится определение пользовательских функций в языке С++?
    Определение функции имеет следующий синтаксис:
    ТипВозвращаемогоЗначения ИмяФункции(СписокФормальныхАргументов)
    {
       ТелоФункции;
      ...
      return(ВозвращаемоеЗначение);
    }
    2. Каков синтаксис вызова функции?

    Переменная = ИмяФункции(СписокФактическихАргументов);
    3. Как происходит передача параметров в функцию по значению?

     При передаче аргументов по значению внешний объект, который передается в качестве аргумента в функцию, не может быть изменен в этой функции. В функцию передается само значение этого объекта. Например:

    ТипВозвращаемогоЗначения ИмяФункции(тип Аргумент)

    {
    Аргумент = Значение;

    }
    4. Как происходит передача параметров в функцию по ссылке?

    ТипВозвращаемогоЗначения ИмяФункции(тип &Аргумент)

    {

    Аргумент = Значение;

    }
    int main()

    {

    ИмяФункции(переменная);

    }
    5. Как происходит передача параметров в функцию по указателю?

    ТипВозвращаемогоЗначения ИмяФункции(тип *Аргумент)

    {

    *Аргумент = Значение;

    }
    int main()

    {

    ИмяФункции(&ИмяПеременной);

    }
    6.Какого типа значения может возвращать функция? Как вернуть из функции несколько значений?
    Все функции, кроме функций типа void, возвращают значения.

    Либо ссылки, либо указатели, либо описать структуру, представляющую весь набор желаемых значений и возвращать её экземпляр

    7.Как описываются структуры?
    struct имя_структуры
    {
    тип имя_элемента_1;
    ...

    Тип имя_элемента_N;

    }список_переменных; //! список_переменных необязателен
    8. Способы объявления структурных переменных. Динамическое выделение памяти для массива структур.
    Объявление cтруктурной переменной аналогично объявлению обычной переменной встроенного типа, но в качестве названия типа служит имя структуры.


    имя_структуры имя_переменной;

    В случае, когда нужно прочитать массив структур, например, из файла, то можно написать отдельную функцию

    9.Как обратиться к элементам структуры по указателю?

    Для получения адреса структурной переменной следует поместить оператор & перед именем структуры.

    Для доступа к элементам структуры используются конструкции:

    Имя_переменной.имя_поля указ_на_структуру->имя_поля

    10.Передача структуры в функцию.

    Непосредственный доступ к компонентам структуры – плохой стиль программирования. Все операции, которые разрешены применительно к структуре, должны быть при этом реализованы в виде отдельных функций.



    11.Как организуется доступ к файлам? Какие виды доступа вы знаете?

    В программах на C++ при работе с текстовыми файлами необходимо подключать библиотеки iostream и fstream.
    для того чтобы начать работать с текстовым файлом, необходимо описать переменную типа ofstream
    12.Каким образом можно считать/записать данные из текстового файла?

    1. описать переменную типа ofstream.

    2. открыть файл с помощью функции open.

    3. вывести информацию в файл.

    4. обязательно закрыть файл.

    Для считывания данных из текстового файла, необходимо:

    1. описать переменную типа ifstream.

    2. открыть файл с помощью функции open.

    3. считать информацию из файла, при считывании каждой порции данных необходимо проверять, достигнут ли конец файла.

    4. закрыть файл.

    ВЫВОДЫ


    В результате выполнения лабораторной работы мою были изучены динамические массивы структур, разработана программа, формирующая и обрабатывающая массив структур.


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