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

ОАиП КР №1 вар.10

.docx
Скачиваний:
9
Добавлен:
01.04.2014
Размер:
165.53 Кб
Скачать

Задание 1

Составить блок-схему алгоритма и программу вычисления значения выражения при заданных исходных данных. Сравнить полученное значение с указанным правильным результатом.

При x = 3,981*10-2, y = -1,625*103, z = 0,512  =1,26185.

Блок-схема алгоритма:

Код программы:

#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=pow(2,-x); //Вычисление выражения

h*=sqrt(x+pow(fabs(y),1/4.));

h*=pow(exp(x-1/sin(z)),1/3.);

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;

double f_xy=fabs(x*y); //для удобства вычислений заменяем |xy| на переменную f_xy

if(f_xy>10) { //первое условие: |xy|>10

s=log(fabs(x)+fabs(y)); //вычисление функции

cout<<"\nVetv 1\n"; //вывод на экран номер ветви, которая выполняется

}

else if

(f_xy<10) { //второе условие: |xy|<10

s=exp(x+y);

cout<<"\nVetv 2\n";

}

else { //третье условие: иначе

s=pow(fabs(x),1/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;

int i;

s=0; // Начальное значение

for(i=0;i<=n;i++) //Вычисление суммы

s+=pow(cos(x),i)/(2*i+1);

return s; // Передача результатов в главную функцию

}

// Передача параметров по указателю

void Summa(double *x,int *n,double *s)

{

int i;

*s=0; // Начальное значение

for(i=0;i<=*n;i++) // Вычисление суммы

*s +=pow(cos(*x),i)/(2*i+1);

}

// Передача параметров по ссылке

void Summa (double &x, int &n, double &s)

{

int i;

s=0; // Начальное значение

for(i=0;i<=n;i++) // Вычисление суммы

s+=pow(cos(x),i)/(2*i+1); }

Результат выполнения программы:

Задача 4

Ввести одномерный статический массив из k чисел. Выполнить в соответствии с номером варианта индивидуальное задание и вывести на экран исходные данные и полученный результат. Предусмотреть использование функции пользователя.

Найти среднее арифметическое модулей кратных пяти элементов массива, расположенных после максимального элемента.

Код программы:

#include <iostream.h>

#include <iomanip.h>

#include <math.h>

void SredAr(int a[],int,int,double*); // Прототип функции

int main()

{

int a[10],i,n,poz,max;

double sr;

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;

max=a[0]; poz=0; //Нахождение максимального элемента

for(i=0;i<n;i++)

if (a[i]>max) {max=a[i];poz=i;}

SredAr(a,n,poz,&sr); // Вызов функции

cout<<"\nMaksimalnyi element="<<max<<endl;

cout<<"\nSrednee arifmeticheskoe elementov="<<sr<<endl;

return 0;

}

// Функция нахождения среднего арифметического модулей, кратных пяти элементов массива, расположенных после максимального элемента.

void SredAr(int a[],int n,int poz,double *sr)

{

int i,k=0; double sum=0; // Инициализация значений

for(i=poz+1;i<n;i++)

if (fmod(a[i],5)==0){

sum+=fabs(a[i]);k++; }

*sr=sum/k; // Нахождение среднего арифметического элементов

}

Результат выполнения программы:

Задача 5

Ввести матрицу размером NxM. Память для массива выделить динамически. Выполнить в соответствии с номером варианта индивидуальное задание и вывести на экран исходные данные и полученный результат. Предусмотреть в программе функцию пользователя.

Найти минимальный среди элементов, лежащих ниже главной диагонали.

Код программы:

#include <stdio.h>

#include <conio.h>

int MyFunction (int , int **); // Прототип функции

int main()

{

int **a, i, n, j, minim ;

puts ("Vvedite razmer massiva A (N=M):");

printf (" n=m=");

scanf("%d", &n);

a = new int *[n]; // Выделение памяти под массив указателей

for(i=0; i<n; i++) //Выделение памяти под соответствующие этим указателям строки матрицы

a[i] = new int [n];

printf ("Vvedite massiv A:\n"); // Ввод элементов двумерного массива for(i=0; i<n; i++)

for(j=0; j<n; j++){

printf(" Vvedite a[ %d ][ %d ] = ",i,j);

scanf("%d", &a[i][j]);}

printf("\n Massiv A:"); //Вывод элементов двумерного массива

for(i=0; i<n; i++) {

for(j=0; j<n; j++)

printf("\t %d" ,a[i][j]);

printf ("\n \t");

}

minim = MyFunction(n,a); //Вызов функции

printf("\n Minimal'nyi element sredi elementov nije gl. diagonali = %d \n", minim); //Вывод результата

for(i=0; i<n; i++) //Освобождение выделенной памяти

delete []a[i];

delete []a;

getch();

return 0;

}

// Функция нахождения минимального элемента среди элементов,

// расположенных ниже главной диагонали матрицы

int MyFunction (int a, int **x)

{

int i,j,min;

min=x[1][0];

for(i=1;i<a;i++)

for (j=0; j<i; j++) {

if (x[i][j]<min) // Поиск минимального элемента

min=x[i][j];}

return min;}

Результат выполнения программы:

Литература

1. Батура М.П., Бусько В.Л., Корбит А.Г., Кривоносова Т.М. Основы алгоритмизации и программирования. Язык Си : учеб. пособие. – Минск : БГУИР, 2007.

2. Бусько В.Л., Корбит А.Г., Кривоносова Т.М. Конспект лекций по курсу «Основы алгоритмизации и программирования» для студентов всех специальностей и всех форм обучения. - Мн.: БГУИР, 2004.

3. Демидович, Е. М. Основы алгоритмизации и программирования. Язык СИ / Е. М. Демидович. – Минск : Бест­принт, 2001.

4. Шилд, Г. Программирование на Borland С++ / Г. Шилд. – Минск : ПОПУРРИ, 1999.

16