
variant_10
.docxВОРОНЕЖСКИЙ ИНСТИТУТ МВД РОССИИ
Кафедра автоматизированных информационных систем органов внутренних дел
Домашняя контрольная работа
по учебной дисциплине «Информатика»
Вариант № 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 станет меньше, т.е. .