Отчет по лабораторной работе №3
Постановка задачи
Для х изменяющегося от a до b с шагом (b-a)/k, где (k=10), вычислить функцию f(x), используя ее разложение в степенной ряд в двух случаях:
а) для заданного n;
б) для заданной точности e (e=0.0001).
Для сравнения найти точное значение функции.
Вариант задания
10 |
Программа решения
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include <iostream.h>
#include <math.h>
#include <conio.h>
#include <iomanip.h>
#include <stdio.h>
#include <windows.h>
//---------------------------------------------------------------------------
#pragma argsused
float Y(float,float,int);
double SN(float,float,int);
double SE(float,float,int,double);
int main(int argc, char* argv[])
{
char* rus(const char* text);
cout << rus(" Вычисление функции \n\n");
float a = 0.1;
int b = 1;
int k = 10;
float x = 0.1;
double e = 0.001;
float step = (b-a)/k;
int n = 0;
while (x+step*n <= 1.09)
{
/*cout << setw(0) << "x=" << x+step*n << setw(10) << "Y=" << Y(x,step,n)
<< setw(10) << "SN=" << SN(x,step,n)<< setw(10) << "SE=" << SE(x,step,n,e)
<<endl; */
printf(" x=%f ", x+step*n );
printf(" Y=%f ", Y(x,step,n) );
printf(" SN=%f ", SN(x,step,n) );
printf(" SE=%f\n ", SE(x,step,n,e) );
n++;
}
getch();
return 0;
|
|
}
char bufrus[256]; //создать после тела программы
char* rus(const char* text)
{
CharToOem(text,bufrus);
return bufrus;
}
double SE(float x, float step, int n, double e)
{
double sum,an,anext;
double zam = x + step*n;
an = 1; // первый член ряда
sum = an; // в сумму записываем первый член
for (int i = 1; ; i++)
{
if (an < e)
{
return sum;
}
else
{
anext = (-1)*an*(zam)/(2*i+1);
sum = anext + sum;
an = anext;
}
}
}
float Y(float x, float step, int n)
{
double y = cos(x+step*n);
return y;
}
double SN(float x, float step,int n)
{
double zam = x + step*n;
double sum = 1;
double an,ann;
an = 1;
for (int i = 1; i < 11; i++)
{
ann = -an*zam/(2*i+1);
|
|
sum = ann + sum;
an = ann;
}
return sum;
}
//---------------------------------------------------------------------------
Результат работы программы
Отчет по лабораторной работе №4
Постановка задачи
1)Сформировать одномерный массив целых чисел, используя датчик случайных чисел.
2)Распечатать полученный массив.
3)Удалить последний элемент равный 0.
4)Добавить после элемента массива с заданным индексом элемент со значением 100.
5)Распечатать полученный массив.
Текст программы
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include <conio.h>
#include <iostream.h>
#include <windows.h>
#include <stdlib.h>
#include <stdio.h>
#include <iomanip.h>
//---------------------------------------------------------------------------
#pragma argsused
char* rus(const char* text); //создать вначале прграммы
int one(int *,int&); // прототип функции
int three(int *, int&);
int four(int *, int&,int);
void show(int *, int&);
int main()
{
const int N = 100;
int chislo;
int mas[N]; // создаем массив с заданным количеством элементов N
printf (rus(" 1) Сформировать одномерный массив целых чисел,\n"));
printf (rus(" используя датчик случайных чисел.\n"));
printf (rus(" 2) Распечатать полученный массив.\n\n"));
|
|
printf(rus(" Укажите длину массива = "));
cin >> chislo; // указываем количество элементов в массиве
one(mas,chislo); // в функцию посылаем массив и число
show(mas,chislo); // вывод результата
cout << endl << endl;
printf(rus(" 3) Удалить последний элемент равный 0.\n\n"));
three(mas,chislo); // третья функция
show(mas,chislo);
cout << endl << endl;
printf(rus(" 4) Добавить после элемента массива с заданным индексом\n"));
printf(rus(" элемент со значением 100.\n"));
printf(rus(" 5) Распечатать полученный массив\n\n"));
int pos;
printf(rus(" ВВедите индекс элемента массива = "));
cin >> pos; // вводим номер позиции массива
four(mas,chislo,pos);
show(mas,chislo);
getch();
return 0;
}
char bufrus[256]; //создать после тела программы
char* rus(const char* text)
{
CharToOem(text,bufrus);
return bufrus;
|
|
}
int one(int *mas, int& chislo1)
{
randomize(); // создаем рандомные числа
cout << endl;
for (int i = 0; i < chislo1; i++) // запись в массив
{
mas[i] = random(10);
}
//return *mas;
}
int three(int *mas, int& chislo2)
{
int copy[100]; // создаем массив копия
int pos;
for (int i = 0; i < chislo2; i++)
{ // в for определяем позицию последнего 0 в массиве
if (mas[i] == 0)
{
pos = i;
}
}
for (int i = 0; i < chislo2-1; i++)
{ // записываем в массив copy
if (i >= pos)
{
copy[i+1] = mas[i+1];
}
}
for (int i = 0; i < chislo2; i++)
{
if (mas[i] == 0)
{ // уменьшаем длину массива
chislo2--;
}
}
for (int i = 0; i < chislo2; i++)
{
if (i >= pos)
{ // запись в массив из массива copy
mas[i] = copy[i+1];
}
}
//return *mas;
}
int four(int *mas, int& chislo3,int pos)
{
int copy[100]; // создаем массив copy
/*if (pos == chislo3)
{
printf(rus("\n\tНельзя вводить число, совпадающее с размерностью массива\n"));
}
else
{ */
for (int i = 0; i < chislo3; i++)
{
if (i >= pos)
{ // запись чисел после числа с определенной позицией
copy[i] = mas[i];
}
}
for (int i = 0; i < chislo3; i++)
{
if (i == pos)
{
mas[i] = 100; // запись в массив числа 100
}
}
chislo3++; // увеличиваем массив
for (int i = 0; i < chislo3; i++)
{
if (i >= pos + 1)
{
mas[i] = copy[i-1]; // заполняем массив
}
}
//}
//return *mas;
}
void show(int *mas, int&chislo4)
{
for (int i = 0; i < chislo4; i++)
{
//cout << *(mas + i) << setw(5);
printf(" %d", *(mas+i));
}
}
//---------------------------------------------------------------------------
Результат работы программы
Отчет по лабораторной работе №5
Постановка задачи
Используя функции, решить указанную в варианте задачу. Массив должен передаваться в функцию как параметр.
Вариант задания
Написать процедуру обмена столбца и строки двухмерного массива. С ее помощью поменять местами те строки и столбцы, первые элементы которых совпадают.
Текст программы
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include <iostream.h>
#include <conio.h>
#include <windows.h>
#include <stdlib.h>
#include <iomanip.h>
//---------------------------------------------------------------------------
#pragma argsused
char* rus(const char* text);
int** create(int **, int , int);
int** change(int **, int *, int* , int);
int** show(int **, int n);
int counter1(int **, int);
class Error
{
};
int main(int argc, char* argv[])
{
/*
7.Написать процедуру обмена столбца и строки двухмерного массива.
С ее помощью поменять местами те строки и столбцы,
первые элементы которых совпадают.
*/
int n; // размерность массива
int choice; // наш выбор работы программы
int *str = new int [n]; // создаем массивы под строки и столбцы
int *temp2 = new int [n];
int **mas = new int *[n]; // создаем указатель на указателе
printf(rus(" Введите размерность массива: "));
cin >> n; // размерность массива
randomize();
printf(rus(" Вы хотите сами ввести массив или чтобы он состоял\n"));
printf(rus(" из случайных чисел?\n"));
printf(rus(" 1 = Сам\n\t0 = Случайно\n "));
printf(rus(" Вы вводите: "));
cin >> choice; // делаем выбор
create(mas,n,choice); // ф-ия по созданию массива, в зависимости от выбора
printf(rus(" Ваш массив:\n"));//выводим массив
show(mas,n); // ф-ия по выводу массива
counter1(mas,n); // подсчитаем кол-во строк и столбцов,
// которые необходимо транспонировать
printf(rus("\tКоличество транспонированных строк и столбцов = %d\n"),counter1(mas,n));
change(mas,str,temp2,n); // ф-ия по замене строк и столбцов
printf(rus("\tОбработанный массив:\n"));
show(mas,n); // выводим массив
// p.s. транспонирование выполняется сразу и последовательно
// сначала меняем столбец, потом строку. *Замечание:
// возможны случаи когда некоторые элементы перезаписываются.
delete []str;
delete []temp2;
delete []mas;
getch();
return 0;
}
int **create(int **mas, int n, int choice)
{
try
{
if (choice == 1)
{
for (int i = 0; i < n; i++)
{
int *temp = new int [n];
for (int j = 0; j < n; j++)
{
cout <<"["<< i+1 << ","<< j+1 << "] = ";
cin >> temp[j];
}
mas[i] = temp;
}
}
else if(choice == 0)
{
for (int i = 0; i < n; i++)
{
int *temp = new int [n];
for (int j = 0; j < n; j++)
{
temp[j] = random(5);
}
mas[i] = temp;
}
}
else
throw Error();
}
catch (Error)
{
printf(rus(" Некорректный ввод данных, следуйте инструкциям"));
}
return mas;
}
int **show(int **mas, int n)
{
for (int i = 0; i < n; i++)
{
cout << "\t";
for (int j = 0; j < n; j++)
{
cout << mas[i][j] << " ";
}
cout << endl;
}
return mas;
}
int **change(int **mas, int *str, int *temp2, int n)
{
// шагаем по матрице и ищем совпадения первых элементов
for (int i = 0; i < n; i++)
{
for (int j = 1; j < n; j++)
{
if (mas[i][0] == mas[0][j]) // если нашли, то
{
for (int s = 0; s < n; s++)
{
str[s] = mas[i][s]; // сохраняем строку
temp2[s] = mas[s][j]; // -//- столбец
mas[s][j] = str[s]; // транспонируем
mas[i][s] = temp2[s]; // транспонируем
}
}
}
}
return mas;
}
int counter1(int **mas, int n)
{
int counter = 0; // счетчик столбцов и строк
for (int i = 0; i < n; i++)// определяем кол-во строк и столбцов
// которые необходимо транспонировать
{
for (int j = 1; j < n; j++)
{
if (mas[i][0] == mas[0][j])
{
counter++;
}
}
}
return counter;
}
char bufrus[256]; //создать после тела программы
char* rus(const char* text)
{
CharToOem(text,bufrus);
return bufrus;
}
//---------------------------------------------------------------------------
Результат работы программы
Дата добавления: 2018-05-13; просмотров: 416; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!