ОАиП Вариант №8 (ФЗО) 1 курс
.docxЗАДАНИЕ 1
Написать программу вычисления значения выражения при заданных исходных данных. Сравнить полученное значение с указанным правильным результатом.
Алгоритм решения для данного математического выражения на языке программирования С++ выглядит следующим образом:
#include <iostream.h> //Подключение необходимых библиотек
#include <math.h>
int main ()
{ //Начало главной функции программы
double a, b, c, s, x, y, z; //Объявление переменных
cout<<"Enter x: "; //Ввод значений переменных по заданию
cin>>x;
cout<<"Enter y: ";
cin>>y;
cout<<"Enter z: ";
cin>>z;
a=exp(fabs(x-y))*pow(fabs(x-y),(x+y)); //Вычисления
b=atan(x)+atan(z);
c=pow(pow(x,6)+pow(log(y),2),1/3.);
s=a/b+c;
cout<<"Result s= " << s << endl; //Вывод результата на экран
return 0; //Завершение выполнения программы
} //Конец главной функции
ЗАДАНИЕ 2
Составить программу вычисления выражения согласно указанному варианту. Предусмотреть вывод информации о выбранной ветви вычислений.
Листинг программы выглядит так:
#include <iostream.h> //Подключение необходимых библиотек
#include <math.h>
int main ()
{ //Начало главной функции программы
double s, x, y; //Объявление переменных
cout<<"Enter x: "; //Ввод значений переменных по заданию
cin>>x;
cout<<"Enter y: ";
cin>>y;
double f_xy=x/y;
if (f_xy<0) { //Срабатывает при x/y<0
s=pow(pow(x,2)+y,3);
cout<<"1'st Result offset= "<<s<<endl;
}
else if (f_xy>0) { //Срабатывает при x/y>0
s=log(fabs(f_xy)+f_xy);
cout<<"2'nd Result offset= "<<s<<endl;
}
else { //Срабатывает в любых других случаях
s=pow(fabs(sin(y)),1/3.);
cout<<"3'rd Result offset= "<<s<<endl;
}
return 0; //Завершение выполнения программы
} //Конец главной функции
ЗАДАНИЕ 3
Вывести на экран таблицу значений функции y(x) для x, изменяющегося от a = 0,1 до b = 1,2 с шагом h = 0,1.
Листинг программы выглядит следующим образом:
#include <iostream.h> //Подключение необходимых библиотек
#include <math.h>
#include <iomanip.h>
int main()
{ //Начало главной функции программы
double s, x, a, b, h;
int n, i;
cout<<"Enter a, b, h, n:"<<endl;
cin>>a>>b>>h>>n; //Ввод значений 0,1 1,2 0,1 20
x=a;
do //Начало цикла по х
{
s=1; //Значение суммы при n=1
for(i=1;i<=n;i++); //Цикл вычисления суммы s
s+=(2*pow(n,2)+1)/2*n*pow(x,2*n-2);
cout<<setw(15)<<x<<setw(15)<<s<<endl; //Вывод таблицы
x+=h; //Увеличение х на значение шага h
}
while(x<=b+h/2); //Проверка условия продолжения цикла по х
cout<<endl;
return 0;
}
ЗАДАНИЕ 4
Ввести одномерный статический массив из k чисел. Выполнить в соответствии с номером варианта индивидуальное задание и вывести на экран исходные данные и полученный результат.
8. Удалить минимальный и максимальный элементы массива.
Поставленная задача решается с помощью такой программы:
#include <iostream.h>
#include <math.h>
int main()
{
int a[10], i, j, n, min, imin, max, imax;
cout << "Enter size: "; //Ввод одномерного массива
cin >> n;
for (i=0; i<n; i++)
{
cout << "Enter a[" << i << "]= " ;
cin >> a[i];
}
cout << "Massiv a:" << endl; //Вывод одномерного массива
for (i=0; i<n; i++)
cout << a[i] << " " ;
cout << endl;
min=max=a[0]; //Определение min и max
imin=imax=0; //элементов массива и их индексы
for (i=1; i<n; i++)
if (a[i]<min)
{
min=a[i];
imin = i;
}
else
if (a[i]>max)
{
max=a[i];
imax = i;
}
for (i=0; i<n; i++)
{
if (a[i]==min) //Если минимальный, то
{
for (j=i+1; j<n; j++) //сдвинуть все элементы, стоящие
a[j-1]=a[j]; //после удаляемого на одну позицию
n--; //Уменьшение размера массива
i--; //Возврат к предыдущему индексу
}
if (a[i]==max) //То же, но для максимального элемента
{
for (j=i+1; j<n; j++)
a[j-1]=a[j];
n--;
i--;
}
}
cout << "Max = " << max << " i=" << imax << endl; //Вывод min, max
cout << "Min = " << min << " i=" << imin << endl; //и их индексов
cout << "Massiv a:" << endl; //Вывод результирующего массива
for (i=0; i<n; i++)
cout << a[i] << " " ;
cout << endl;
return 0;
}
ЗАДАНИЕ 5
Ввести матрицу размером NxM. Память для массива выделить динамически. Выполнить в соответствии с номером варианта индивидуальное задание и вывести на экран исходные данные и полученный результат.
8. Найти минимальный среди элементов, лежащих выше главной диагонали.
Алгоритм поставленной задачи на языке С++ выглядит так:
#include <iostream.h>
#include <iomanip.h>
#include <math.h>
int main()
{
double **a;
int i, j, n, m, min;
cout << "Enter size: 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 << "Enter a[" << i << "][" << j << "]: " ;
cin >> a[i][j];
}
cout << "Array A:" << endl; //Вывод двумерного массива
for (i=0; i<n; i++)
{
for (j=0; j<m; j++)
cout << setw (9) << a[i][j] << " ";
cout << endl;
}
min=a[0][1]; //Поиск минимального элемента выше диагонали
for (i=0; i<n-1; i++)
for (j=1; j<m-i; j++)
if (a[i][i+j]<min)
min=a[i][i+j];
cout <<"Min element = "<< min << endl; //Вывод результата
for(i=0; i<n; i++) //Освобождение выделенной памяти
delete [] a[i];
delete []a;
a = NULL;
cout << endl;
cin >>i;
return 0;
}
ИСПОЛЬЗОВАННАЯ ЛИТЕРАТУРА
1. А. А. Навроцкий, И. Н. Коренская, В. Л. Бусько
«Основы алгоритмизации и программирования в среде visual c++»
БГУИР, Минск 2009
2. В.Л.Бусько, А.Г.Корбит, Т.М.Кривоносова
«Основы алгоритмизации и программирования. Конспект лекций»
Минск 2006
3. Различные источники Интернета подобной тематики.