Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

variant_10

.docx
Скачиваний:
26
Добавлен:
19.03.2017
Размер:
292.9 Кб
Скачать

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

Кафедра автоматизированных информационных систем органов внутренних дел

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

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

Вариант № 10

Выполнил

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

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

Е.С. Иванов

Проверил

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

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

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

С.А. Мишин

Воронеж − 2015

Задание на домашнюю контрольную работу по дисциплине «Информатика»

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

10.

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

arccos () –x2

10.

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

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

10.

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 не принадлежит области определения функции».

10.

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

Листинг П. 1

#include "stdafx.h"

#include <iostream>

#include "math.h"

#include <conio.h>

int main()

{

using namespace std;

float y, x;

cout << "Vvedite x=";

cin >> x;

y = (exp(x)*(pow(x, 3) - 2 * x + 1)) / (1 + 3 * fabs((double)cos(x))) + sqrt(5 * fabs((double)x) + 8);

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 <iostream>

#define _USE_MATH_DEFINES

#include "math.h"

#include <conio.h>

int main()

{

using namespace std;

float y, x;

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

{

cout << "Vvedite x=";

cin >> x;

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

{

y = x/2+1;

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

}

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

{

y = -x+4;

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

}

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

{

y = exp(x-3);

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 и с помощью разработанной Вами программы. Сравнить полученные значения. Результаты представить в отчете по работе.

10.

Листинг П.3

#include "stdafx.h"

#include <iostream>

#include "math.h"

#include <conio.h>

double my_sum(int);

using namespace std;

int main()

{

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

_getch();

return 0;

}

double my_sum(int n)

{

double sum = 0;

int i;

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

sum += 1/(sqrt(pow(i,3)-i+4));

return sum;

}

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

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

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

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

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

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

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

10.

Листинг П.4

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

#include "stdafx.h"

#include <iostream>

#define _USE_MATH_DEFINES

#include "math.h"

#include <iomanip>

#include <conio.h>

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 = (pow(3,*n)+2*sin(*n*0.01*0.01-M_PI))/(pow(3,*n)*(*n*sqrt(*n+3)-1));

sum += an;

} ;

return sum;

}

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

Листинг П.5

#include "stdafx.h"

#include <iostream>

#define _USE_MATH_DEFINES

#include "math.h"

#include <iomanip>

#include <conio.h>

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 = (pow(3,*n)+2*sin(*n*0.01*0.01-M_PI))/(pow(3,*n)*(*n*sqrt(*n+3)-1));

sum += an;

}

while (fabs(an) >= eps);

return sum;

}

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

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

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

Задание 8. В соответствии с Вашим вариантом составить схему алгоритма и программу на языке C++ для решения следующей задачи обработки одномерных массивов:

Перенести в начало одномерного массива все нечетные элементы.

#include<iostream>

using namespace std;

#include <cstdlib>

#include <conio.h>

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 j = 0;

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

{

if (A[i] % 2 != 0 && i>0) // если элемент нечетный – переносим в начало

{

j = i - 1;

while (j >= 0 && A[j] >= 0)

{

int temp = A[j];

A[j] = A[j + 1];

A[j + 1] = temp;

j--;

}

}

}

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

{

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

}

cout << endl;

_getch();

delete[] A;

return 0;

}

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

Задание 9. В соответствии с Вашим вариантом составить схему алгоритма и программу на языке C++ для решения задачи обработки двумерных массивов:

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

#include "stdafx.h"

#include <iostream>

#include <iomanip>

#include <conio.h>

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 *B = new int[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 y = 0;

cout << endl << "Vvedite Y: ";

cin >> y;

float S = 0;

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

{

S = 0;

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

{

if (A[count_row][count_column] < y) //если элемент меньше Y, то добавляем к количеству

S += 1;

}

B[count_column] = S;

}

cout << "B:" << endl;

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

{

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

}

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

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

delete[]A[count];

//удаление массива B

delete[] B;

_getch();

return 0;

}

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

Задание 10. В соответствии с Вашим вариантом составить схему алгоритма и программу на языке C++ для решения задачи обработки двумерных массивов:

Дана матрица А(n,n). Вычислить сумму элементов, лежащих на побочной и главной диагонали матрицы, и ответить какая сумма больше.

#include "stdafx.h"

#include <iostream>

#include <iomanip>

#include <conio.h>

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 Max = 0;

int S1 = 0; //сумма элементов главной диагонали

int S2 = 0; //сумма элементов побочной диагонали

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

{

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

{

// i+j < N-1

if (count_row == count_column) S1 += A[count_row][count_column];

if (count_row + count_column == rows - 1) S2 += A[count_row][count_column];

}

}

cout << "S1:" << S1 << endl;

cout << "S2:" << S2 << endl;

if (S1 > S2) cout << "Summa elementov glavnoi diagonali bolshe" << endl;

if (S1 < S2) cout << "Summa elementov pobochnoi diagonali bolshe" << endl;

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

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

delete[]A[count];

_getch();

return 0;

}

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

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

а) Создать массив структур (Konkurs), содержащий сведения о научных и практических работах, представленных студентами на конкурс. Структура rabota имеет следующие поля: фамилия и инициалы студента (Fio), курс обучения (Kurs), название работы (Nazvanie), область знаний (napravlenie), название Вуза (Vuz), фамилия и инициалы научного руководителя (Fio_Rukovodielayt), количество набранных баллов (Bally), сумма денежной премии (Premiay). Размер массива не более 25 элементов.

б) Вывести на экран информацию обо всех работах, поступивших на конкурс и набравших более 50 баллов. Информацию представить в виде таблицы, имеющей следующие столбцы: фамилия и инициалы студента, название работы, набранные баллы.

#include<iostream>

#include<windows.h>

#include<conio.h>

using namespace std;

struct rabota

{

char Fio[32]; // фио студента

char Nazvanie[32]; // название работы

char Napravlenie[32]; // область знаний

char Vuz[32]; // название вуза

char Fio_Rukovoditelya[32]; // фио руководителя

int Bally; // количество набранных баллов

int Premiya; // сумма денежной премии

int Kurs; //курс обучения

};

rabota* AddStruct(rabota* Obj, const int amount);

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

void showData(const rabota* Obj, const int amount);

int main()

{

setlocale(LC_ALL, "rus");

rabota* Konkurs = 0;

int Amount = 0;

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

do

{

Konkurs = AddStruct(Konkurs,Amount);

setData(Konkurs, Amount);

Amount++;

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

cin >> YesOrNot;

cin.get();

} while (YesOrNot != 0);

showData(Konkurs, Amount);

delete[] Konkurs;

return 0;

}

rabota* AddStruct(rabota* Obj, const int amount)

{

if (amount == 0)

{

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

}

else

{

rabota* tempObj = new rabota[amount + 1];

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

{

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

}

delete[] Obj;

Obj = tempObj;

}

return Obj;

}

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

void setData(rabota* Obj, const int amount)

{

cout << "Студент: ";

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

cout << "Название работы: ";

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

cout << "Область знаний: ";

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

cout << "Руководитель: ";

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

cout << "ВУЗ: ";

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

cout << "Курс: ";

cin >> Obj[amount].Kurs;

cout << "Баллы: ";

cin >> Obj[amount].Bally;

cout << "Премия: ";

cin >> Obj[amount].Premiya;

cin.get();

cout << endl;

}

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

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

{

cout << "№ " << "Студент\t" << "Название\t" << "Баллы\t" << endl;

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

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

{

//если работа набрала более 50 баллов

if (Obj[i].Bally > 50)

cout << i + 1 << " " << Obj[i].Fio << '\t' << Obj[i].Nazvanie << '\t' << Obj[i].Bally << '\t' << endl;

}

_getch();

}

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

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

Напишите программу, которая определяет является ли заданное натуральное число n простым, т.е. оно не делится ни на одно число, большее или равное m, но меньшее n. При этом .

#include<iostream>

#include<windows.h>

#include<conio.h>

using namespace std;

bool fun(int num, int del = 2){

if (del > num / 2)

return true;

return num%del ? fun(num, ++del) : false;

}

int main()

{

setlocale(LC_ALL, "rus");

int n;

cout << "Введите натуральное число n: ";

cin >> n;

if (fun(n, 2))

cout << "Число является простым. ";

else

cout << "Число не является простым. ";

_getch();

return 0;

}

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

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

Соседние файлы в предмете Информатика