практикаС++
.docxМИНЕСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РЕСПУБЛИКИ КАЗАХСТАН
КАЗАХСКИЙ НАЦИОНАЛЬНЫЙ УНИВЕРСИТЕТ ИМЕНИ АЛЬ - ФАРАБИ
Механико-математический факультет
Кафедра математического и компьютерного моделирования
Отчет по учебной практике
Выполнил: Есенқожа Ә. М.
Проверила: Рахимжанова А. Ж.
Алматы, 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;
}