Студопедия КАТЕГОРИИ: АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Отчет по лабораторной работе №3Стр 1 из 5Следующая ⇒
Курсовая работа по технологии программирования
Преподаватель В. Г. Томашевич
Студент Д.Д. Митюнин группы Фт-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). Для сравнения найти точное значение функции.
Вариант задания
Программа решения
//--------------------------------------------------------------------------- #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; } //---------------------------------------------------------------------------
Результат работы программы Постановка задачи 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)); } } //--------------------------------------------------------------------------- Результат работы программы Постановка задачи Используя функции, решить указанную в варианте задачу. Массив должен передаваться в функцию как параметр. Вариант задания Написать процедуру обмена столбца и строки двухмерного массива. С ее помощью поменять местами те строки и столбцы, первые элементы которых совпадают. Текст программы //---------------------------------------------------------------------------
#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 не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда... |