Студопедия

КАТЕГОРИИ:

АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Отчет по лабораторной работе №3




Курсовая работа по технологии программирования

 

 

Преподаватель                                                          В. Г. Томашевич

 

Студент                                                                             Д.Д. Митюнин

группы Фт-290801

 

 

Отчет по лабораторной работе №1

Постановка задачи

 

1. Вычислить значение выражения при различных вещественных типах данных (float и double). Вычисления следует выполнять с использованием промежуточных переменных. Сравнить и объяснить полученные результаты при а=1000, b=0.0001

  

2. Вычислить значения выражений. Объяснить полученные результаты.

1) m+--n

 2) m++<++n

3) n--< --m

Программа решения задания 1.

//---------------------------------------------------------------------------

#include <vcl.h>

#pragma hdrstop

#include <iostream.h>

#include <conio.h>

#include <math.h>

//---------------------------------------------------------------------------

 

#pragma argsused

int main(int argc, char* argv[])

{

           double a,w,t,b,q,e,r,func;

           a = 1000; b = 0.0001;

 

           q = pow(a-b,3);

           w = pow(a,3);

           e = pow(b,3);

           r = pow(b,2);

           t = pow(a,2);

 

           func = (q - w) / (e - 3*a*r - 3*t*b);

 

           float a1,w1,t1,b1,q1,e1,r1,func1;

               

           a1 = 1000; b1 = 0.0001;

 

           q1 = pow(a1-b1,3);

           w1 = pow(a1,3);

           e1 = pow(b1,3);

           r1 = pow(b1,2);

           t1 = pow(a1,2);

 

           func1 = (q1 - w1) / (e1 - 3*a1*r1 - 3*t1*b1);

 

           cout << "double: " << func << endl << "float: " <<func1;

           getch();

           return 0;

}

Программа решения задания 2.

//---------------------------------------------------------------------------

#include <vcl.h>

#pragma hdrstop

#include <iostream.h>

#include <conio.h>

//---------------------------------------------------------------------------

#pragma argsused

 

int main(int argc, char* argv[])

{

           int m;

           int n;

           int f,f2,f3;

 

           cout << "m = ";

           cin >> m; // вводим m

           cout << "n = ";

           cin >> n; // вводим n

 

           cout << "m+--n : ";

           f = m+--n;

           cout << f << endl;

 

           cout << "m = "<<m << endl;

           cout << "n = "<<n << endl;

               

           cout << endl;

 

           cout << "m++<++n : " ;

           f2 = m++<++n;

           cout << f2 << endl;

           cout << "m = "<<m << endl;

           cout << "n = "<<n << endl;

 

           cout << endl;

 

           cout << "n--<--m : " ;

           f3 = n--<--m;

           cout << f3 << endl;

           cout << "m = "<< m << endl;

           cout << "n = "<< n << endl;

           cout << endl;

 

           getch();

           return 0;

}

//---------------------------------------------------------------------------



Результат работы программы

Задача 1:  

Задача 2:

 


 


Объяснения результатов

Задача 1:

По завершении вычисления выражения мы можем видеть результат. При переменных типа double у нас получается единица, а при переменных типа float число 1.28. Различие в ответах заключается не только в типах данных переменных, но и в самой структуре выражения. Типы данных double является более точным, т.к этот тип занимает 8 байт, а тип float всего 4 байта. Поэтому, когда у нас идет вычисление выражения = , то число b степени выше 1 обнуляется при типе данных float, отчего и получаем число 1.28, то есть возникает погрешность вычисления. А при типе данных double нет обнуления, отчего получаем в результате единицу.

Задача 2:

       При начальных условиях m=1 и n=1 мы видим, что если перед переменной стоит два минуса(--) , то переменная уменьшается на 1 и происходит дальнейшее действие. Если после переменной стоят два плюса(++), то происходит сначала действие, потом увеличение переменной на 1. Если перед переменной (++), то сначала увеличение на 1, потом действие. Если же после переменной (--), то сначала происходит действие, а потом увеличение числа на 1.

 

 



Отчет по лабораторной работе №2

 

Постановка задачи

Найти сумму ряда с точностью e=10-4, общий член которого

Программа решения.

//---------------------------------------------------------------------------

 

#include <vcl.h>

#pragma hdrstop

#include <iostream.h>

#include <conio.h>

#include <math.h>

//---------------------------------------------------------------------------

 

#pragma argsused

int main()

{

     float sum,an,anext;

     float t = 0.001; // точность

     int n;

     cout << "e = " << t << endl;

     an = 0.25; // первый член ряда

     sum = an; // в сумму записываем первый член

     for (n = 2; ; n++)

     {

           if (an < t)

           {

           cout << "sum = " << sum << endl;

           break;

           }

           else

           {

           anext = an*(3*n-2)/(3*n+4);

           sum = anext + sum;

           an = anext;

           }

 

     }

     getch();

     return 0;

}

//---------------------------------------------------------------------------



Результат работы программы

 

 

 

 



Отчет по лабораторной работе №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-29; просмотров: 186.

stydopedya.ru не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда...