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

  • ВОРОНЕЖСКИЙ ИНСТИТУТ МВД РОССИИ

  • Домашняя контрольная работа

  • Abiturient

  • Abiturient Amount

  • Priem .Затем вызываем функцию, которая позволит внести данные в структуру. setData(Priem, AbiturientAmount);После внесения данных, переменная Abiturient Amount

  • AddStruct() .Надо помнить, что указатель Priem

  • Задание 12

  • шпаргалка. Контрольная работа по учебной дисциплине Информатика Вариант 5 Выполнил курсант 11 взвода ртф рядовой полиции


    Скачать 342.93 Kb.
    НазваниеКонтрольная работа по учебной дисциплине Информатика Вариант 5 Выполнил курсант 11 взвода ртф рядовой полиции
    Анкоршпаргалка
    Дата23.06.2022
    Размер342.93 Kb.
    Формат файлаdocx
    Имя файлаvariant_5.docx
    ТипКонтрольная работа
    #611255


    ВОРОНЕЖСКИЙ ИНСТИТУТ МВД РОССИИ
    Кафедра автоматизированных информационных систем органов внутренних дел


    Домашняя контрольная работа

    по учебной дисциплине «Информатика»
    Вариант № 5

    Выполнил

    курсант 11 взвода РТФ

    рядовой полиции

    Е.С. Иванов
    Проверил

    Доцент кафедры АИС ОВД

    к.т.н., доцент

    подполковник полиции

    С.А. Мишин

    Воронеж − 2015

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











    Задание 2. Построить график функции f(x)(таблица 1) и приблизительно определить на нём один из корней уравнения. Решить уравнение f(x)= 0с помощью вычислительного блока Given/Find и встроенной функции MathCAD root(), интервал поиска корня определить самостоятельно из графика функции.


    5.








    - начальное приближение











    Задача 3. Найти решение системы нелинейных уравнений из таблицы 2. Построить их графики и определить начальное приближение решения. Решить систему нелинейных уравнений с помощью вычислительного блока Given/Find.


    5.




    privedennay k standartnomu vidu (y=f(x), x=f(y)) systema yravneniy

















    Проверка






    Задание 4. Даны матрица А и вектор (таблица 3). Считая вектор вектором неизвестных, выписать систему уравнений .

    а) Вычислить определитель матрицы А и убедиться, что матрица А не вырождена, т.е. det(A)0. Найти обратную матрицу А-1. Решить неоднородную систему и проверить правильность решения системы уравнений.

    б) Найти вектор-решение с помощью вычислительного блока MathCAD Given/Find.

    в) Найти вектор-решение с помощью функции MathCAD lsolve. Сравнить полученные результаты.




    А












    а)








    - определитель матрицы







    - решение системы уравнений



    - Проверка


    б)












    система линейных уравнений







    решение системы уравнений


    в)








    решение системы уравнений

    Задание 5. а) Составить схему алгоритма, используя разветвляющуюся структуру, и программу на языке C++ для расчёта значения функции у=у(x) в соответствии со своим вариантом, где значение x – вводится с клавиатуры. Если x не входит в область определения функции y(x), предусмотреть вывод сообщения на экран «Введенное значение x не принадлежит ОДЗ».

    б) Рассчитать значение функции у(x) при x=3 в MathCAD и с помощью разработанной Вами программы. Сравнить полученные значения. Результаты представить в отчете по работе.

    в) Составить программу на языке C++ для расчёта значения функции у=у(x) в соответствии со своим вариантом, где значение x – вводится с клавиатуры. Если x не входит в область определения функции y(x), предусмотреть вывод сообщения на экран «Введенное значение x не принадлежит области определения функции».




    5.



    Приведем листинг программы на языке С++, рассчитывающей значение функции y(x) с учетом области её определения .
    Листинг П. 1
    #include "stdafx.h"

    #include

    #define _USE_MATH_DEFINES

    #include "math.h"

    #include
    int main()

    {

    using namespace std;

    float y, x;

    cout << "Vvedite x=";

    cin >> x;

    y = exp(3 - 2 * x) + log(2 * fabs((double)x) + 1) / (sin(2 * x + M_PI)*sin(2 * x + M_PI)-2);

    cout << "Pri x=" << x << " y=" << y << endl;

    _getch(); //ожидаем нажатия любой клавиши

    return 0;

    }
    Тестирование программы.
    Рассчитываем значение функции при x = 3

    Рассчитаем значение функции в MathCAD










    Полученное значение совпадает со значением, рассчитанным с помощью программы.
    в) Составим программу на языке C++ для расчёта значения функции у=у(x), где значение x – вводится с клавиатуры. Если x не входит в область определения функции y(x), предусмотрим вывод сообщения на экран «Введенное значение x не принадлежит области определения функции».


    Листинг П.2
    #include "stdafx.h"

    #include

    #include "math.h"

    #include
    int main()

    {

    using namespace std;

    float y, x;

    while ((_kbhit() == 0) && (_getch() != 27))

    {

    cout << "Vvedite x=";

    cin >> x;

    if (x >= 0 && x <= 1)

    {

    y = sqrt(x);

    cout << "Pri x=" << x << " y=" << y << endl;

    }

    else if (x > 1 && x <= 2)

    {

    y = 2*x-1;

    cout << "Pri x=" << x << " y=" << y << endl;

    }

    else if (x > 2 && x <= 3)

    {

    y = x*x-1;

    cout << "Pri x=" << x << " y=" << y << endl;

    }

    else

    {

    cout << "x=" << x << " ne vhodit v OOF funkcii y(x)\n";

    }

    }

    return 0;

    }
    Результат выполнения программы



    Задание 6. а) Составить схему алгоритма, используя циклическую структуру, и программу (с оператором for) на языке C++ с использованием собственной функцииsumma () для расчёта суммы ряда в соответствии со своим вариантом задания.

    б) Рассчитать значение суммы ряда в MathCAD и с помощью разработанной Вами программы. Сравнить полученные значения. Результаты представить в отчете по работе.

    5 .

    Листинг П.3
    #include "stdafx.h"

    #include

    #include "math.h"

    #include

    double my_sum(int);

    using namespace std;

    int main()

    {

    cout << "Summa S=" << my_sum(20) << endl;

    _getch();

    return 0;

    }

    double my_sum(int n)

    {

    double sum = 0;

    int i;

    for (i = 1; i <= n; i++)

    sum += pow(log(i),3) / (i*sqrt(5*i+1));

    return sum;

    }
    Результат выполнения программы

    Вычислим значение ряда в MathCAD




    Значение, вычисленное с помощью разработанной программы, совпадает со значением, вычисленным с помощью MathCAD.


    Задание 7. а) Составить схему алгоритма и программу на языке C++ с использованием собственной функции summa () для расчёта суммы бесконечного ряда. В качестве параметра функции использовать точность . В теле функции summa () предусмотреть не только расчет значения суммы бесконечного ряда с заданной точностью1, но и подсчет количества членов ряда n, участвовавших в суммировании.

    1) напишите программу, используя цикл while;

    2) напишите программу, используя цикл do while.

    б) Рассчитать значение суммы ряда в MathCAD и с помощью разработанной Вами программы. Сравнить полученные значения. Результаты представить в отчете по работе.


    5 .

    Листинг П.4
    используя цикл while
    #include "stdafx.h"

    #include

    #include "math.h"

    #include

    #include

    double my_summa(const double, int *kol);

    using namespace std;

    int main()

    {

    int n = 0;

    cout.setf(ios::fixed); cout << "Summa S=" << setprecision(3) << my_summa(0.01, &n) << " fiksir. format" << endl;

    cout << endl;

    cout << "Kol-vo chlenov rayda n=" << n << endl;

    _getch();

    return 0;

    }

    double my_summa(const double eps, int *n)

    {

    double sum = 0, an;

    an = 10;

    while (fabs(an) >= eps)

    {

    (*n)++;

    an = (4-fabs(sin(*n*0.01)))/(*n*pow(log(*n+3),2));

    sum += an;

    } ;

    return sum;

    }
    используя цикл do while

    Листинг П.5
    #include "stdafx.h"

    #include

    #include "math.h"

    #include

    #include

    double my_summa(const double, int *kol);

    using namespace std;

    int main()

    {

    int n = 0;

    cout.setf(ios::fixed); cout << "Summa S=" << setprecision(3) << my_summa(0.01, &n) << " fiksir. format" << endl;

    cout << endl;

    cout << "Kol-vo chlenov rayda n=" << n << endl;

    _getch();

    return 0;

    }

    double my_summa(const double eps, int *n)

    {

    double sum = 0, an;

    do

    {

    (*n)++;

    an = (4-fabs(sin(*n*0.01)))/(*n*pow(log(*n+3),2));

    sum += an;

    }

    while (fabs(an) >= eps);

    return sum;

    }
    Результат выполнения программы

    Рассчитаем значение суммы ряда в MathCAD








    Значения практически совпадают.


    Задание 8. В соответствии с Вашим вариантом составить схему алгоритма и программу на языке C++ для решения следующей задачи обработки одномерных массивов: Даны целые числа А1..AN.Определить количество целых чисел, входящих в последовательность А1..AN по одному разу.
    Алгоритм: выполняем двойной вложенный цикл по массиву – сравниваем текущий элемент с оставшимися. Если найден похожий элемент, то выходим из цикла. Если такого элемента не найдено – наращиваем количество неповторяющихся уникальных элементов.
    Листинг П.6.
    #include

    using namespace std;

    #include

    #include
    int double_num(int *arr, const size_t N);
    int main()

    {

    int length_array;

    cout << "Vvedite kolichestvo elementov massiva: ";

    cin >> length_array;

    int *A = new int[length_array]; // одномерный динамический массив
    // заполняем одномерный массив

    cout << "Vvedite elementy massiva: ";

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

    {

    cin >> A[i];

    }

    cout << endl;

    int n = double_num(A, length_array);

    cout << "Kolichestvo elementov po odnomy = " << n << endl;

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

    {

    cout << A[i] << " "; // вывод полученного массива

    }
    cout << endl;

    _getch();

    delete[] A;

    return 0;

    }
    // функция определяет количество чисел, входящих в массив по одному разу

    int double_num(int *arr, const size_t N){
    int tmp = 0, flag;
    for (int i = 0; i < N; ++i)

    {

    flag = 1;
    for (int k = 0; k < N; ++k)

    if ((arr[i] == arr[k]) & (i != k))

    {

    flag = 0;

    break;

    }
    if (flag)

    ++tmp;

    }

    return tmp;

    }
    Результат работы программы




    Задание 9. В соответствии с Вашим вариантом составить схему алгоритма и программу на языке C++ для решения задачи обработки двумерных массивов: Дана матрица А(n,m). Сформировать массив В(n), каждый элемент которого есть среднее арифметическое значение соответствующей строки матрицы А.

    Листинг П.7
    #include "stdafx.h"

    #include

    #include

    #include

    using namespace std;
    int main(int argc, char* argv[])

    {

    int rows=0, cols=0;

    cout << "Vvedite kolichestvo strok massiva: ";

    cin >> rows;

    cout << endl << "Vvedite kolichestvo stolbcov massiva: ";

    cin >> cols;

    float *B = new float[rows]; // одномерный динамический массив

    // динамическое создание двумерного массива

    int **A = new int*[rows]; // строки в массиве

    for (int count = 0; count < rows; count++)

    A[count] = new int[cols]; // столбцы

    // заполнение массива

    for (int count_row = 0; count_row < rows; count_row++)

    {

    cout << "Stroka " << count_row << ": " << endl;

    for (int count_column = 0; count_column < cols; count_column++)

    {

    cin >> A[count_row][count_column] ; //заполнение массива введенными числами

    }

    }

    // вывод массива

    cout << "A:" << endl;

    for (int count_row = 0; count_row < rows; count_row++)

    {

    for (int count_column = 0; count_column < cols; count_column++)

    cout << setw(4) << setprecision(2) << A[count_row][count_column] << " ";

    cout << endl;

    }


    float S = 0;

    for (int count_row = 0; count_row < rows; count_row++)

    {

    S = 0;

    for (int count_column = 0; count_column < cols; count_column++)

    {

    S += A[count_row][count_column]; //суммируем элементы строки

    }

    B[count_row] = S/cols ; //среднее арифметическое

    }

    cout << "B:" << endl;

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

    {

    cout << B[i] << " "; // вывод полученного массива

    }

    // удаление двумерного динамического массива

    for (int count = 0; count < rows; count++)

    delete[]A[count];
    //удаление массива B

    delete[] B;

    _getch();

    return 0;

    }
    Результат работы программы:



    Задание 10. В соответствии с Вашим вариантом составить схему алгоритма и программу на языке C++ для решения задачи обработки двумерных массивов: Дана матрица А(n,n). Найти минимум среди диагональных элементов.

    Условие i = j
    Листинг П.8.
    #include "stdafx.h"

    #include

    #include

    #include

    using namespace std;
    int main(int argc, char* argv[])

    {

    int rows = 0, cols = 0;

    cout << "Vvedite kolichestvo strok massiva: ";

    cin >> rows;

    cout << endl << "Vvedite kolichestvo stolbcov massiva: ";

    cin >> cols;
    int **A = new int*[rows]; // строки в массиве

    for (int count = 0; count < rows; count++)

    A[count] = new int[cols]; // столбцы

    // заполнение массива

    for (int count_row = 0; count_row < rows; count_row++)

    {

    cout << "Stroka " << count_row << ": " << endl;

    for (int count_column = 0; count_column < cols; count_column++)

    {

    cin >> A[count_row][count_column]; //заполнение массива введенными числами

    }

    }

    // вывод массива

    cout << "A:" << endl;

    for (int count_row = 0; count_row < rows; count_row++)

    {

    for (int count_column = 0; count_column < cols; count_column++)

    cout << setw(4) << setprecision(2) << A[count_row][count_column] << " ";

    cout << endl;

    }
    int Min = 10000;
    for (int count_row = 0; count_row < rows; count_row++)

    {

    if (A[count_row][count_row]
    Min = A[count_row][count_row];


    }

    cout << "Min:" << Min << endl;
    // удаление двумерного динамического массива

    for (int count = 0; count < rows; count++)

    delete[]A[count];
    _getch();

    return 0;

    }
    Результат работы программы



    Задание 11. В соответствии с Вашим вариантом составьте схему алгоритма, выполняющего требуемые в задании функции обработки массива структур, и реализуйте его код на С++.

    а) Создать массив структур (Vedomost), содержащий сведения о зарплате преподавателей Вуза. Структура prep имеет следующие поля: фамилия и инициалы преподавателя (Fio), название кафедры (Kafedra), зарплата (Zarplata), ученая степень (Uch_st), ученое звание (Uc_zv), педагогический стаж (ped_stag). Размер массива не более 25 элементов.

    б) Вывести на экран информацию о преподавателях, имеющих зарплату выше 35000 рублей. Информацию представить в виде таблицы, имеющей следующие столбцы: фамилия и инициалы преподавателя, ученая степень, зарплата, налог с физического лица (13% от зарплаты).
    Листинг П.9.
    #include

    #include

    #include

    using namespace std;
    struct prep

    {

    char Fio[32]; // фамилия и инициалы преподавателя

    char Kafedra[32]; // Название кафедры

    char Uch_st[32]; // Ученая степень

    char Uch_zv[32]; // Ученое звание

    int Zarplata; // зарплата

    int ped_stag; // педагогический стаж

    };
    prep* AddStruct(prep* Obj, const int amount);

    void setData(prep* Obj, const int amount);

    void showData(const prep* Obj, const int amount);
    int main()

    {

    setlocale(LC_ALL, "rus");
    prep* Vedomost = 0;

    int Amount = 0;

    int YesOrNot = 0; // продолжить или остановить ввод данных
    do

    {

    Vedomost = AddStruct(Vedomost, Amount);

    setData(Vedomost, Amount);
    Amount++;
    cout << "Продолжить ввод данных (1 - да, 0 - нет): ";

    cin >> YesOrNot;

    cin.get();

    } while (YesOrNot != 0);
    showData(Vedomost, Amount);
    delete[] Vedomost;

    return 0;

    }
    prep* AddStruct(prep* Obj, const int amount)

    {

    if (amount == 0)

    {

    Obj = new prep[amount + 1]; // выделение памяти для первой структуры

    }

    else

    {

    prep* tempObj = new prep[amount + 1];
    for (int i = 0; i < amount; i++)

    {

    tempObj[i] = Obj[i]; // копируем во временный объект

    }

    delete[] Obj;
    Obj = tempObj;

    }

    return Obj;

    }

    //



    void setData(prep* Obj, const int amount)

    {

    cout << "ФИО: ";

    cin.getline(Obj[amount].Fio, 32);

    cout << "Кафедра: ";

    cin.getline(Obj[amount].Kafedra, 32);
    cout << "Ученая степень: ";

    cin.getline(Obj[amount].Uch_st,32);
    cout << "Ученое звание: ";

    cin.getline(Obj[amount].Uch_zv, 32);

    cout << "Стаж: ";

    cin >> Obj[amount].ped_stag;
    cout << "Зарплата: ";

    cin >> Obj[amount].Zarplata;
    cin.get();

    cout << endl;

    }

    //

    void showData(const prep* Obj, const int amount)

    {

    cout << "№ " << "ФИО\t" << "Уч. степень\t" << "Зарплата\t" << "Налог" << endl;

    cout << "===============================================" << endl;

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

    {

    //если зарплата выше 35 тысяч рублей

    if (Obj[i].Zarplata > 35000)

    cout << i + 1 << " " << Obj[i].Fio << '\t' << Obj[i].Uch_st << '\t' << Obj[i].Zarplata << '\t' << Obj[i].Zarplata*0.13 << endl;

    }

    _getch();

    }
    Результат работы программы:


    Описание работы программы:
    После каждого ввода данных программа задает вопрос: продолжить ввод или нет.  Каждый раз, когда пользователь выбирает “продолжить” – надо выделяется участок памяти еще под одну структуру. Таким образом динамический массив структур будет расти, пока пользователь не приостановит ввод.

    Определение структуры

    struct Abiturient'>Abiturient

    {

    char Imya[32]; //Имя

    char Fam[32]; //Фамилия

    char Otch[32]; //Отчество

    char God_rogd[32]; //Год рождения

    char Nomer_at[32]; //Номер аттестата

    int Sr_ball; //средний балл

    int Rus; //оценка по русскому

    int Math; //оценка по математике

    int Inf; // оценка по информатике

    char Phone[32]; //Контактный телефон

    };
    Ниже объявлены прототипы функций, необходимых для решения задачи. Первая функция  
    Abiturient* AddStruct(Abiturient* Obj, const int amount);
    будет выделять память для элементов массива структур.

    Вторая  
    void setData(Abiturient* Obj, const int amount);
    отвечает за ввод данных в структуру.

    Третья 
    void showData(const Abiturient* Obj, const int amount);
    выводит на экран все данные в виде таблицы.

    Чтобы создать динамический массив структур, надо объявить указатель. Только  вместо встроенного типа указать дескриптор структуры
    Abiturient* Priem = 0;
    Этот указатель пока ни на что не указывает. Можно было бы выделить память под массив структур сразу. Например:
    Abiturient* Priem = new Abiturient [10];
    Но мы организуем более гибкое выделение памяти под этот динамический массив структур – она будет выделяться по необходимости. Есть один абитуриент – выделится память под одну структуру. Есть 3 абитуриента – память выделится сначала под одну структуру, потом под вторую и далее под третью.  Все будет зависеть от того – решит ли пользователь продолжить ввод.

    Также объявлены переменные abiturientAmount - счетчик количества абитуриентов и YesOrNot - выбор пользователя (продолжить или прервать ввод).

    Далее расположен цикл do while. Он выполняется до тех пор, пока пользователю необходимо вводить данные. Затем вызываем функцию, которая выделяет память под структуру 
    Priem = AddStruct(Priem, AbiturientAmount);
    Опустимся к ее определению. Тут видно, что данная функция будет возвращать указатель на структуру Abiturient.  Она принимает два параметра – указатель на структуру и количество структур. Когда она вызывается в первый раз – в нее будет передан объявленный в main указатель Priemи переменная AbiturientAmount, которая равна нулю. В функции выполнится блок if – выделится память для одной структуры. Потом функция вернет адрес (указатель) на этот участок памяти, и он будет записан в  Priem.

    Затем вызываем функцию, которая позволит внести данные в структуру.
    setData(Priem, AbiturientAmount);
    После внесения данных, переменная AbiturientAmount увеличивается на единицу. Пользователю предлагаем сделать выбор – продолжить ввод или завершить работу.

    Если продолжаем – снова вызывается функция AddStruct().

    Надо помнить, что указатель Priem уже ссылается на участок памяти с записанными данными. Поэтому не получится просто перевыделить память. Сначала необходимо позаботиться о сохранении данных. В блоке else создаем временный указатель. Под него выделяем память для amount + 1 структур (т.е. на одну структуру больше, чем приняла функция). Далее копируем данные из принятого объекта. Последний объект массива структур tempObj останется незаполненным. Когда данные скопированы, освобождаем память Obj и записываем в этот указатель новый адрес. Теперь он будет указывать на память, в которой есть сохраненные данные и дополнительный выделенный участок памяти для заполнения новыми данными.

    И снова вызывается функция  setData(), которая позволит внести данные в новый выделенный участок памяти – в последний элемент массива структур.

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


    Задание 12*. Составить схему алгоритма и программу на языке C++, позволяющую решить предложенную в Вашем варианте задачу с использованием рекурсии.

    Вариант 5. Напишите программу, которая определяет сумму цифр в натуральном числе.


    Листинг П.10.
    #include

    #include

    #include

    using namespace std;

    int digits_sum(int n)

    {

    return n < 10 ? n : ((n % 10) + digits_sum(n / 10));

    }
    int main()

    {

    int a;

    setlocale(LC_ALL, "rus");
    cout << "Введите натуральное число: " ;

    cin >> a;

    cout << "Сумма цифр: " << digits_sum(a);

    _getch();

    return 0;

    }

    Результат работы программы:



    1 Будем считать, что заданная точность достигнута, если абсолютное значение члена ряда anстанет меньше , т.е. .


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