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

Основы Алгоритм.и Програм. 5 вариант

.docx
Скачиваний:
16
Добавлен:
01.04.2014
Размер:
1.59 Mб
Скачать

Задание 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.

22