контрольная 5 1 семестр
.docСОДЕРЖАНИЕ
СОДЕРЖАНИЕ 1
Задание №1. Программирование линейных алгоритмов 2
Задание №2. Программирование разветвляющихся алгоритмов 3
Задание №3. Программирование циклических алгоритмов 6
Задание №4. Программирование с использованием одномерных массивов 7
Задание №5. Указатели. Программирование с использованием динамических двумерных массивов 9
При решении задач использовалась среда разработки Microsoft Visual Studio 2010 Ultimate.
Задание №1. Программирование линейных алгоритмов
Постановка задачи.
Написать программу вычисления значения выражения при заданных исходных данных. Сравнить полученное значение с указанным правильным результатом.
при x = –15,246; y = 4,642210−⋅; z = 21. Ответ s =–182,038.
Решение.
Код программы
// task1.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "math.h"
int _tmain(int argc, _TCHAR* argv[])
{
double x=-15.246,y=0.04642,z=21,a,b,c,result;
a=1/pow(y,sqrt(fabs(x)));
b=x-y/2;
c=pow(sin(atan(z)),2);
result=b*log(a)+c;
printf("S=%.3lf\n",result);
return 0;
}
Демонстрация
Задание №2. Программирование разветвляющихся алгоритмов
Постановка задачи.
Составить программу вычисления выражения согласно указанному варианту. Предусмотреть вывод информации о выбранной ветви вычислений.
Решение.
Код программы
// task2.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <iostream>
#include <math.h>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
double x, y, s;
cout << "Vvedite x: ";
cin >> x;
cout << "Vvedite y: ";
cin >> y;
if (x>y)
{
s = y*sqrt(fabs(x))+3*sin(x);
cout << "1 vetv. Result = " << s << endl;
}
else if (x<y)
{
s = x*sqrt(fabs(x));
cout << "2 vetv. Result = " << s << endl;
}
else { // иначе
s = pow(fabs(x),1./3)+pow(x,3)/y;
cout << "3 vetv. Result = " << s << endl;
}
return 0;
}
Демонстрация
-
X>Y
-
X<Y
-
Иначе
Задание №3. Программирование циклических алгоритмов
Постановка задачи.
Вывести на экран таблицу значений функции y(x) для x, изменяющегося от a = 0,1 до b = 1,2 с шагом h = 0,1.
Решение.
Код программы
// task3.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <iostream>
#include <math.h>
#include <iomanip>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
double s=0,pi=3.14159265,x, a, b, h;
int n, i;
cout << "Vvedite a, b, h, n:" << endl;
cin >> a >> b >> h >> n; // Ввод значений: 0.1 1.2 0.1 20
x = a;
do
{
for (i = 1; i <= n; i++) // Вычисление суммы
s += cos(i*pi/4)*pow(x,i)/(i+1);
cout << setw(15) << x << setw(15) << s << endl; // Вывод таблицы
x += h; // Изменение значения x на величину шага h
}while (x <= b); // Проверка условия продолжения цикла по x
cout << endl; // Переход на новую строку
return 0;
}
Демонстрация
Задание №4. Программирование с использованием одномерных массивов
Постановка задачи.
Ввести одномерный статический массив из k чисел. Выполнить в соответствии с номером варианта индивидуальное задание и вывести на экран исходные данные и полученный результат.
5. Вывести все неповторяющиеся элементы массива.
Решение.
Код программы
// task4.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
int a[5],i;
cout<<"Enter massive:"<<endl;
for(i=0;i<5;i++)
cin>>a[i];
cout<<"An array of nonrepeating elements"<<endl;
int counter=0; //Переменная счетчик, указывает текущий элемент для сравнения
while(counter < 5)
{
int re = 0; //переменная, показывающая есть ли совпадения
for (i=0;i<5;i++){ //Количество элементов массива
if(a[counter]==a[i]&&counter!=i) re=1; //совпало
}
if(re==0) cout<<a[counter]<<endl; //выводим только если не совпало.
counter++; //переходим к следующему элементу
}
return 0;
}
Демонстрация
Задание №5. Указатели. Программирование с использованием динамических двумерных массивов
Постановка задачи.
Ввести матрицу размером NxM. Память для массива выделить динамически. Выполнить в соответствии с номером варианта индивидуальное задание и вывести на экран исходные данные и полученный результат.
5. Определить сумму элементов, расположенных на главной диагонали матрицы, и произведение элементов, расположенных на побочной диагонали матрицы.
Решение.
Код программы
// task5.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <iostream>
#include <iomanip>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
double **a;
int i, j, n, m,sum=0,proizv=1;
cout << "Vvedite razmer: n, m" << endl;
cin >> n >> m;
a = new double*[n]; // Выделение памяти под массив указателей
for(i=0; i<n; i++) // Выделение памяти под соответствующие
a[i] = new double[m]; // этим указателям строки матрицы
for (i=0; i<n; i++) // Ввод двумерного массива
for (j=0; j<m; j++)
{
cout << "Vvedite a[" << i << "][" << j << "]: " ;
cin >> a[i][j];
}
cout << "Massiv A:" << endl; // Вывод двумерного массива
for (i=0; i<n; i++)
{
for (j=0; j<m; j++)
cout << setw (9) << a[i][j] << " ";
cout << endl;
}
cout << "Summa el-tov na glavnoi diagonali" << endl;
for (i=0; i<n; i++)
for (j=0; j<m; j++)
if(i==j)
sum+=a[i][j];
cout << sum << endl;
cout << "Proizvedenie el-tov na pobochnoi diagonali" << endl;
for (i=0; i<n; i++)
proizv*=a[n-1-i][i];
cout << proizv << endl;
return 0;
}
Демонстрация