Основы Алгоритм.и Програм. 5 вариант
.docxЗадание 1
Составить блок-схему алгоритма и программу вычисления значения выражения при заданных исходных данных. Сравнить полученное значение с указанным правильным результатом.
|
При x = -15,246, y = 4,642*10-2, z = 21 s= -182,038. |
|
|
Блок-схема алгоритма:
Код программы:
#include<iostream.h>
#include<math.h>
int main() //Начало главной функции
{double x,y,z,h; //Объявление переменных
cout<<"Vvedite x:"; //Ввод значений x, y, z
cin >>x;
cout<<"Vvedite y:";
cin >>y;
cout<<"Vvedite z:";
cin >>z;
h=log(pow(y,-sqrt(fabs(x)))); //Вычисление выражения
h*=x-y/2;
h+=pow(sin(atan(z)),2);
cout<<"Rezult h="<<h<<endl; //Вывод результата
return 0; //Завершение выполнения программы
} //Конец главной функции
Результат выполнения программы:
Задание 2
Составить блок-схему алгоритма и программу вычисления выражения. Предусмотреть вывод информации о выбранной ветви вычисления.
s =
Блок-схема алгоритма:
1
2
3
нет
да
4
5
нет
да
6
7
8
9
10
11
12
Код программы:
#include<iostream.h>
#include<math.h>
int main()
{double x,y,s;
cout<<"Vvedite x:";
cin>>x;
cout<<"Vvedite y:";
cin>>y;
if(x>y) { // x>y
s=y*sqrt(fabs(x))+3*sin(x);
cout<<"\nVetv 1\n";
}
else if
(x<y) { //x<y
s=x*sqrt(fabs(x));
cout<<"\nVetv 2\n";
}
else { // иначе
s=pow(fabs(x),1/3.)+pow(x,3)/y;
cout<<"\nVetv 3\n";
}
cout<<"\nRezult="<<s<<endl;
return 0;
}
Результат выполнения программы:
1-е условие
2-е условие
3-е условие
Задание 3
Составить блок-схему алгоритма и программу вывода на экран таблицы значений функции y(x) для x, изменяющегося от a=0,1 до b=1,2 с шагом h=0,1. Вычисление y(x) оформить в виде функции. Предусмотреть передачу параметров в функцию разными способами.
Блок-схема алгоритма:
1
1
s=0
2
2
2
Ввод a,b,h,n
3
3
3
x =a
4
5
5
Вывод x,s
6
6
5
x =x+h
7
да
7
8
нет
Код программы:
#include <iostream.h>
#include <math.h>
#include <iomanip.h>
// Прототипы функций
double Summa(double,int); // Передача параметров по значению
void Summa(double*,int*,double*); // Передача параметров по указателю
void Summa(double&,int&,double&); // Передача параметров по ссылке
int main()
{
double s, x, a, b, h;
int n;
cout<<"Vvedite a, b, h, n:"<<endl;
cin>>a>>b>>h>>n; //Ввод значений: 0.1 1.2 0.1 20
// Вывод строки заголовка таблицы
cout<<"\n Value"<<setw(25)<<"Pointer"<<setw(32)<<"Reference\n";
x=a;
do //Начало цикла по x
{ // Вывод таблицы
// Передача параметров по значению
cout<<setw(5)<<x<<setw(13)<<Summa(x,n);
Summa(&x,&n,&s); // Передача параметров по указателю
cout<<setw(13)<<x<<setw(13)<<s ;
Summa(x,n,s); // Передача параметров по ссылке
cout<<setw(13)<<x<<setw(13)<<s<<endl;
x+=h; // Изменение значения x на величину шага h
}
while (x<=b+h/2); // Проверка условия продолжение цикла по x
cout<<endl; // Переход на новую строку
return 0;
}
double Summa(double x,int n) // Передача параметров по значению
{
double s;
const double pi=3.14;
int i;
s=0; // Начальное значение
for(i=1;i<=n;i++) //Вычисление суммы
s+=cos(i*pi/4)/(i+1)*pow(x,i);
return s; // Передача результатов в главную функцию
}
// Передача параметров по указателю
void Summa(double *x,int *n,double *s)
{
int i;
const double pi=3.14;
*s=0; // Начальное значение
for(i=1;i<=*n;i++) // Вычисление суммы
*s +=cos(i*pi/4)/(i+1)*pow(*x,i);
}
// Передача параметров по ссылке
void Summa (double &x, int &n, double &s)
{
int i;
const double pi=3.14;
s=0; // Начальное значение
for(i=1;i<=n;i++) // Вычисление суммы
s+=cos(i*pi/4)/(i+1)*pow(x,i);
}
Продолжение screenshot программы:
Результат выполнения программы:
Задача 4
Ввести одномерный статический массив из k чисел. Выполнить в соответствии с номером варианта индивидуальное задание и вывести на экран исходные данные и полученный результат. Предусмотреть использование функции пользователя.
Найти произведение и количество элементов массива, расположенных до первого отрицательного элемента.
Код программы:
#include <iostream.h>
#include <iomanip.h>
#include <math.h>
void PrKol(int a[],int,int*,int*); // Прототип функции
int main()
{
int a[10],i,n,pr,kol,otr,poz=-1;
cout<<"Vvedite razmer massiva:"; // Ввод размерности массива
cin>>n;
cout<<"\nVvedite massiv:\n"; // Ввод одномерного массива
for (i=0;i<n;i++)
{
cout<<"Vvedite a["<<i<<"]=";
cin>>a[i];
}
cout<<"\nMassiv a:\n"; // Вывод одномерного массива
for (i=0;i<n;i++)
cout<<setw(7)<<a[i];
cout<<endl;
for(i=0;i<n;i++)
if (a[i]<0) {otr=a[i];poz=i; break;}
if (poz==-1) cout<<"\nV massive net otric. elementov"<<endl;
else {
PrKol(a,poz,&pr,&kol); // Вызов функции
cout<<"\nPervyi otric. element="<<otr<<endl;
cout<<"\nProizvedenie elementov do pervogo otric. elementa="<<pr<<endl;
cout<<"\nKolichestvo elementov do pervogo otric. elementa="<<kol<<endl;
}
return 0;
}
// Функция нахождения произведения и количества элементов массива,
//расположенных до первого отрицательного элемента.
void PrKol(int a[],int poz,int *pr,int *kol)
{ int i;
*pr=1;*kol=0; // Инициализация значений
for(i=0;i<poz;i++){
*pr*=a[i];(*kol)++;} // Нахождение произведения и количества элементов
}
Продолжение screenshot программы:
Результат выполнения программы:
Задача 5
Ввести матрицу размером NxM. Память для массива выделить динамически. Выполнить в соответствии с номером варианта индивидуальное задание и вывести на экран исходные данные и полученный результат. Предусмотреть в программе функцию пользователя.
Определить сумму элементов, расположенных на главной диагонали матрицы, и произведение элементов, расположенных на побочной диагонали матрицы.
Код программы:
#include <iostream.h>
#include <iomanip.h>
#include <math.h>
// Прототип функции вычисления суммы элементов, расположенных на главной диагонали и произведения элементов, расположенных на побочной диагонали
void SumPr(int**,int,double*,double*);
int main()
{
double sum,pr;
int **a,i,j,n;
cout<<"Vvedite razmer massiva A:\n";
cout<<" n=m=";
cin>>n;
a = new int *[n]; // Выделение памяти под массив указателей
for(i=0; i<n; i++) //Выделение памяти под соответствующие этим указателям строки матрицы
a[i] = new int [n];
cout<<"\nVvedite massiv A:\n"; // Ввод элементов двумерного массива for(i=0; i<n; i++)
for(j=0; j<n; j++){
cout<<"Vvedite a["<<i<<"]["<<j<<"]:";
cin>>a[i][j];
}
cout<<"\nMassiv A:\n"; //Вывод элементов двумерного массива
for(i=0; i<n; i++) {
for(j=0; j<n; j++)
cout<<setw(9)<<a[i][j];
cout<<endl;
}
SumPr(a,n,&sum,&pr); //Вызов функции
//Вывод результата
cout<<"\nSumma elementov na glav. diagonali="<<sum<<endl;
cout<<"\nProizvedenie elementov na poboch. diagonali="<<pr<<endl;
for(i=0; i<n; i++) //Освобождение выделенной памяти
delete []a[i];
delete []a;
a=NULL;
return 0;
}
// Функция вычисления суммы элементов, расположенных на главной диагонали и произведения элементов, расположенных на побочной диагонали
void SumPr(int **a,int n,double *sum, double *pr)
{
int i;
*sum=0;*pr=1;
for(i=0;i<n;i++) {
*sum+=a[i][i]; //Вычисление суммы
*pr*=a[i][n-i-1]; //Вычисление произведения
}
}
Продолжение screenshot программы:
Результат выполнения программы:
ЛИТЕРАТУРА
1. Батура М.П., Бусько В.Л., Корбит А.Г., Кривоносова Т.М. Основы алгоритмизации и программирования. Язык Си : учеб. пособие. – Минск : БГУИР, 2007.
2. Бусько В.Л., Корбит А.Г., Кривоносова Т.М. Конспект лекций по курсу «Основы алгоритмизации и программирования» для студентов всех специальностей и всех форм обучения. - Мн.: БГУИР, 2004.
3. Демидович, Е. М. Основы алгоритмизации и программирования. Язык СИ / Е. М. Демидович. – Минск : Бестпринт, 2001.
4. Шилд, Г. Программирование на Borland С++ / Г. Шилд. – Минск : ПОПУРРИ, 1999.