bsuir.info
БГУИР: Дистанционное и заочное обучение
(файловый архив)
Вход (быстрый)
Регистрация
Категории каталога
Другое [157]
АВС [6]
КПиЯП [80]
ОАиП [305]
ОКТ [79]
СиСПО [8]
Форма входа
Поиск
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Файловый архив
Файлы » ПОИТ » ОАиП

ОАиП КР №1 вар.10
Подробности о скачивании 12.06.2013, 23:20
Задание 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 =

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



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

#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) оформить в виде функции. Предусмотреть передачу параметров в функцию разными способами.


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

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

#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.
Категория: ОАиП | Добавил: ignator
Просмотров: 1620 | Загрузок: 19
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]