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