Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

практикаС++

.docx
Скачиваний:
28
Добавлен:
24.03.2015
Размер:
78.45 Кб
Скачать

МИНЕСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РЕСПУБЛИКИ КАЗАХСТАН

КАЗАХСКИЙ НАЦИОНАЛЬНЫЙ УНИВЕРСИТЕТ ИМЕНИ АЛЬ - ФАРАБИ

Механико-математический факультет

Кафедра математического и компьютерного моделирования

Отчет по учебной практике

Выполнил: Есенқожа Ә. М.

Проверила:  Рахимжанова А. Ж.

Алматы, 2014

Вариант 15

Задача 1. а) Дано n треугольников. Подсчитать количество треугольников, лежащих в каждой координатной четверти и не пересекающих оси координат. Проиллюстрировать графически.

Код программы на языке программирования С++(Visual C++ 2010):

// praktika_var15.cpp: определяет точку входа для консольного приложения.

//

#include "stdafx.h"

#include <iostream>

#include <Windows.h>

using namespace std;

class Point{

public:

Point(){

SetConsoleCP(1251);// установка кодовой страницы win-cp 1251 в поток ввода

SetConsoleOutputCP(1251);

cout <<"Введите х : ";cin >> x;

cout <<"Введите у : ";cin >> y;

};

~Point(){};

double x, y;

};

// class Triangle

class Triangle{

Point v1, v2, v3;

public:

Triangle(){};

~Triangle(){};

int Determinate();

};

int proc(double x, double y){

if(x > 0 && y > 0) return 1;

else if(x < 0 && y > 0) return 2;

else if(x < 0 && y < 0) return 3;

else return 4;

}

int Triangle:: Determinate(){

if(proc(v1.x, v1.y) == proc(v2.x, v2.y) && proc(v1.x, v1.y) == proc(v3.x, v3.y)){

return proc(v1.x, v1.y);

}

return 5;

}

int _tmain(int argc, _TCHAR* argv[])

{

SetConsoleCP(1251);// установка кодовой страницы win-cp 1251 в поток ввода

SetConsoleOutputCP(1251);

Triangle *t;

int n, a[5] = {0};

cin >> n;

t = new Triangle [n];

for(int i = 0 ; i < n ; i++){

a[t[i].Determinate() - 1]++;

}

for(int i = 0 ; i < 5 ; i++){

if(i == 4) cout << "\nКоличество треугольников пересекающих оси координат равно " << a[i];

else cout << "\nКоличество треугольников в " << i + 1 << " четверти равно " << a[i];

}

cout << endl;

system ("pause");

return 0;

}

б) Вычислить интегралы:

Код программы на языке программирования С++(Visual C++ 2010):

// praktika_var15b.cpp: определяет точку входа для консольного приложения.

//

#include "stdafx.h"

#include <iostream>

#include <cmath>

using namespace std;

double OurFunction_1(double x){

return sin(x) * sin(x)/(1 + x * x);

}

double OurFunction_2(double x){

return (double)(1/tan(x * x + 4));

}

double OurFunction_3(double x){

return 3 * sin(x * x + 1);

}

int _tmain(int argc, _TCHAR* argv[])

{

double h, a, b, x, s = 0;

int n, i = 0;

cin >> n;

cin >> a >> b;

h = (b - a)/n;

//cout << "\nh = " << h;

x = a ;

s += OurFunction_1(x)/2;

while(i < n - 1){

x += h ;

//cout << "\nx = " << x;

s += OurFunction_1(x);

i++;

}

x += h;

s += OurFunction_1(x)/2;

s *= h;

cout <<"\ns = "<< s << endl;

i = 0 ;

cin >> n;

cin >> a >> b;

h = (b - a)/n;

//cout << "\nh = " << h;

x = a ;

s += OurFunction_2(x)/2;

while(i < n - 1){

x += h ;

//cout << "\nx = " << x;

s += OurFunction_2(x);

i++;

}

x += h;

s += OurFunction_2(x)/2;

s *= h;

cout <<"\ns = "<< s << endl;

i = 0 ;

cin >> n;

cin >> a >> b;

h = (b - a)/n;

//cout << "\nh = " << h;

x = a ;

s += OurFunction_3(x)/2;

while(i < n - 1){

x += h ;

//cout << "\nx = " << x;

s += OurFunction_3(x);

i++;

}

x += h;

s += OurFunction_3(x)/2;

s *= h;

cout <<"\ns = "<< s << endl;

system("pause");

return 0;

}

Задача 2. Два двузначных числа, записанных одно за другим, образуют четырехзначное число, которое делится на их произведение. Найти эти числа.

Код программы на языке программирования С++(Visual C++ 2010):

// praktika_var15c.cpp: определяет точку входа для консольного приложения.

//

#include "stdafx.h"

#include <iostream>

#include <string>

using namespace std;

int _tmain(int argc, _TCHAR* argv[])

{

int a, b;

for(int i = 1000 ; i < 10000 ; i++){

a = (i / 100);

b = (i % 100);

if(a != 0 && b != 0)

if( i % (a * b) == 0) cout << i << endl;

}

system("pause");

return 0;

}

Задача 19.

Пусть известно, что для перемножения матрицы размера n*m на матрицу размера m*k требуется n*m*k операций. Необходимо определить, какое минимальное число операций потребуется для перемножения n матриц А1,...Аn, заданных своими размерами n(i)*m(i). При этом можно перемножать любые две рядом стоящие матрицы, в результате чего получается матрица нужного размера.

Замечание:

n(i) - число строк в матрице Ai

m(i) - число столбцов в матрице Ai

n(i)=m(i)+1.

Код программы на языке программирования С++(Visual C++ 2010):

// praktika_zad19.cpp: определяет точку входа для консольного приложения.

//

#include "stdafx.h"

#include <iostream>

using namespace std;

int _tmain(int argc, _TCHAR* argv[])

{

int n, **a, s = 0;

cin >> n;

a = new int *[2];

a[0] = new int [n];

a[1] = new int [n];

for(int i = 0; i < n; i++){

cin >> a[0][i];

a[1][i] = a[0][i] + 1 ;

}

for(int i = 0; i < n - 1; i++){

if(a[1][i] == a[0][i + 1]){

s += (a[1][i] * a[0][i] * a[1][i + 1]);

}

}

cout << s;

return 0;

}

Proc60. Используя функцию Dist из задания Proc59, описать процедуру

Heights(xA, yA, xB, yB, xC, yC, hA, hB, hC), находящую высоты hA, hB, hC тре-

угольника ABC (выходные параметры), проведенные соответственно из

вершин A, B, C (их координаты являются входными параметрами). С по-

мощью этой процедуры найти высоты треугольников ABC, ABD, ACD, ес-

ли даны координаты точек A, B, C, D.

Код программы на языке программирования С++(Visual C++ 2010):

// praktika_proc60.cpp: определяет точку входа для консольного приложения.

//

#include "stdafx.h"

#include <iostream>

#include <cmath>

using namespace std;

double Leng(double x1, double y1, double x2, double y2){

return pow(((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2)), 0.5);

}

double Perim(double x1, double y1, double x2, double y2, double x3, double y3){

return (Leng(x1, y1, x2, y2) + Leng(x2, y2, x3, y3) + Leng(x1, y1, x3, y3));

}

double Area(double x1, double y1, double x2, double y2, double x3, double y3){

return sqrt((Perim(x1, y1, x2, y2, x3, y3)/2) * (Perim(x1, y1, x2, y2, x3, y3)/2 - Leng(x1, y1, x2, y2)) * (Perim(x1, y1, x2, y2, x3, y3)/2 - Leng(x3, y3, x2, y2)) * (Perim(x1, y1, x2, y2, x3, y3)/2 - Leng(x1, y1, x3, y3)));

}

double Dist(double xp, double yp, double x1, double y1, double x2, double y2){

return 2 * Area(xp, yp, x1, y1, x2, y2)/Leng(x1, y1, x2, y2);

}

void Heights(double x1, double y1, double x2, double y2, double x3, double y3, double *h1, double *h2, double *h3){

*h1 = Dist(x1, y1, x2, y2, x3, y3);

*h2 = Dist(x2, y2, x1, y1, x3, y3);

*h3 = Dist(x3, y3, x2, y2, x1, y1);

}

int _tmain(int argc, _TCHAR* argv[])

{

double xa = 1, ya = 1, xb = 1, yb = 4, xc = 4, yc = 1, ha, hb, hc;

Heights(xa, ya, xb, yb, xc, yc, &ha, &hb, &hc);

cout << ha <<" "<< hb <<" " << hc << "\n";

system ("pause");

return 0;

}