+1.13
6 читателей, 53 топика


Типы данных в C++

Базовые типы данных в C++

int Целые числа
char Символьный
wchar_t Расширенный символьный
bool Логический
float Вещественный
double Вещественный с двойной точностью

Спецификаторы типа

short Короткий
long Длинный
signed Знаковый
unsigned Беззнаковый
  • avatar
  • 0
  • 0


Математические функции в C++ из пакета cmath

Для работы с математическими функциями необходимо в начало программы добавить строку

#include <cmath>


Список функций
pow(x,n) — xn
sqrt(x) — x
cbrt(x) — x3
abs(x) — абсолютное значение x (модуль x)
exp(x) — ex
log(x) — натуральный логарифм x
log10(x) — десятичный логарифм x
log2(x) — log2x
sin(x) — sin x (x в радианах)
cos(x) — cos x (x в радианах)
tan(x) — tan x (x в радианах)
asin(x) — arcsin x (в радианах)
acos(x) — arccos x (в радианах)
atan(x) — arctan x (в радианах)
ceil(x) — Округление x сверху, возвращает наименьшее целое значение, которое не меньше x
floor(x) — Округление x снизу, возвращает наибольшее целое значение, которое не больше x
round(x) — Округление x до ближайшего целого (метод симметричного округления)
trunc(x) — Округление x до ближайшего целого (метод отбрасывания дробной части)
fmod(a,b) — Остаток от деления a на b
  • avatar
  • 0
  • 0


Полезные расширения для Joomla

1. DJ-ImageSlider — удобное расширение для создание слайдеров и фотогалерей.
Как сказано в описании на сайте разработчика, DJ-ImageSlider — является свободно распространяемым расширением с адаптивным дизайном и поддержкой сенсорных экранов, которым можно управлять через компоненты и модули. Вы можете создавать неограниченное количество групп и слайдов и размещать их в любом месте сайта. Это расширение оптимизировано для SEO, использует CSS3 анимации, быстрое и с удобным административным интерфейсом. Каждый слайд содержит заголовок и описание и ссылку на статью Joomla, пункт меню или URL.

Официальный сайт: https://dj-extensions.com/dj-imageslider
  • avatar
  • 0
  • 0


Установка и настройка связки MinGW и Eclipse для программирования на C++ в Windows

Eclipse — одна из наиболее популярных свободных кроссплатформенных сред разработки.

Для использования этой IDE для разработки на C++ необходимо установить компилятор и некоторые другие инструменты. Необходимые компоненты включает в себя коллекция бесплатных программ и библиотек MinGW.

Процесс установки и настройки связки MinGW и Eclipse состоит из следующих шагов:

1. Установка MinGW.
Установщик можно скачать с официального сайта mingw.org.
После установки запускаем MinGW Installation Manager (обычно он запускается автоматически), выбираем и устанавливаем пакеты mingw-developer-toolkit, mingw32-base, mingw32-gcc-g++, mingw32-gcc-objc, msys-base в разделе Basic Setup.

2. Настройка системной переменной Path.
Для корректного вызова программ, входящих в состав MinGW, необходимо изменить значение системной переменной Path.
Для этого выбираем Пуск — Мой Компьютер — Свойства системы — Дополнительные параметры системы — Переменные среды. В списке системных переменных находим переменную Path и нажимаем изменить. В конце строки добавляем ;C:\MinGW\bin\; и нажимаем ok. После этого перезагружаем компьютер.

3. Установка Eclipse.
Дистрибутив можно скачать с сайта eclipse.org. Для программирования на C++ необходимо скачать сборку IDE for C/C++ developers.
Распаковываем скачанный архив в корень диска C. Открываем каталог C:\eclipse и запускаем eclipse.exe.
После запуска необходимо указать расположение каталога workspace. Лучше его также разместить в корне диска C.

Видео с демонстрацией установки:
  • avatar
  • 0
  • 0


Построение поверхности на основе матрицы данных с помощью Gnuplot

Иногда требуется представить данные, хранящиеся в матрице, в виде поверхности.

Эта задача легко решается с помощью программы Gnuplot.

Пусть некоторые данные хранятся в файле «data.txt» в виде матрицы.

Для построения 3d графика в Gnuplot необходимо выполнить команду


splot "data.txt" matrix with lines


Например, в файле «data.txt» хранится матрица численного решения волнового уравнения. С помощью Gnuplot получим график

Gnuplot matrix

Можно убрать невидимые линии

set hidden3d
splot "data.txt" matrix with lines


Gnuplot matrix

или закрасить поверхность


set pm3d
set hidden3d
splot "data.txt" matrix with lines


Gnuplot matrix
  • avatar
  • 0
  • 0


Бесплатный Cервис моментального приема платежей и партнерских программ Glopart.ru - Glopart.

В сети обнаружена новая система по заработку онлайн.
Бесплатная регистрация. Вы можете продавть свои цифровые товары, подключив к оплате только сервис
Glopart.
Встроенная партнерская программа.
Моментальные выплаты на Карты, Яндекс, Qiwi, Payeer, Okpay.
А так же Вы можете продавать неограниченное количество чужих товаров, всего лишь разместив ссылку на своем блоге, сайте или форуме.
Выплаты до 100%!
Присоединяйтесь сегодня!
Описание сервиса:
Максимальное удобство для продавцов и партнеров.
Интегрированный со всеми платежными системами и встроенной партнерской программой.
Регистрация — БЕСПЛАТНО! *
• * free аккаунт — только один товар для продажи
• premium аккаунт — неограниченное количество товаров + дополнительные сервисы

Возможности для продавцов:
— мгновенный доступ к аккаунту.
— процент комиссии — 1 у.е. с каждой продажи
— встроенная партнерская программа для каждого товара
— партнерский процент от 20 до 100 %, с возможностью изменять в любое время
— связь с каждым партнером
— подробная статистика
— инструменты раскрутки
— еженедельные автоматизированные выплаты
— расчеты в WM, Яндекс и Qiwi
— техническая поддержка

Регистрируйтесь — добавляйте товары — армия партнеров ждет Ваших товаров!
Для партнеров:
— бесплатный единый аккаунт с доступом ко всем продуктам сервиса
— еженедельные выплаты (без ограничения суммы)
— Ваш процент от 20 до 100%
— статистика
— расчеты в WM, Яндекс и Qiwi
— техническая поддержка


Решение краевой задачи для линейного дифференциального уравнения второго порядка методом конечных разностей на C++


При численном решении этой задачи методом конечных разностей отрезок [a,b] разбивают на равные части с шагом h точками xi, где h=(b−a)/n.

Заменяя производные правыми односторонними конечно — разностными отношениями для внутренних точек xi и концевых точек отрезка [a,b], и выполняя алгебраические преобразования, получим систему линейных алгебраических уравнений




Реализовать решение на C++ можно следующим образом:


//============================================================================
// Name        : mkr.cpp
// Author      : 
// Version     :
// Copyright   : Your copyright notice
// Description :
//============================================================================

#include <iostream>
#include <cmath>
using namespace std;

double p(double x){
	return exp(x);
}

double q(double x){
	return 2*x;
}

double f(double x){
	return pow(x,3);
}

void gauss(double** A, double* B, double* X, int n);

int main() {
	double alpha0=2; double alpha1=-2.5; double Ac=0;
	double beta0=3; double beta1=-3.4; double Bc=5;
	double a0=0.1; double b0=1.3;
	int n=4;
	//matrix A[n+1][n+1]
	double **A = new double*[n+1];
	for(int i=0; i<n+1; i++){
		A[i]=new double[n+1];
	}
	//===
	double *B = new double[n+1]; //vector B[n+1]
	double *X = new double[n+1]; //vector X[n+1]
	//Grid
	double h=(b0-a0)/n;
	for(int i=0; i<=n; i++){
		X[i]=a0+i*h;
		//cout << X[i] << endl;
	}
	//===
	cout << "h=" << h << endl;
	//calculate matrix A, B
	for(int i=0; i<=n-2; i++){
    	A[i][i]=h*h*q(X[i])-h*p(X[i])+1;
    	A[i][i+1]=h*p(X[i])-2;
    	A[i][i+2]=1;
    	B[i]=h*h*f(X[i]);
	}
	A[n-1][0]=alpha0*h-alpha1;
	A[n-1][1]=alpha1;
	A[n][n-1]=-beta1;
	A[n][n]=beta0*h+beta1;
	B[n-1]=h*Ac;
	B[n]=h*Bc;
	//===
	//print A
	for(int i=0; i<=n; i++){
		for(int j=0; j<=n; j++){
			cout << "A["<<i<<"]"<<"["<<j<<"]="<<A[i][j] <<" ";
		}
		cout << endl;
	}
	//===
	cout << endl;
	//print B
	for(int i=0; i<=n; i++){
		cout << "B["<<i<<"]="<<B[i] <<" ";
	}
	cout << endl;
	cout << endl;
	//===
	//solve A*X1=B
	double *X1 = new double[n+1]; //vector X1[n+1]
	gauss(A,B,X1,n+1); //solve
	//print X1
	for(int i=0; i<=n; i++){
		cout << "X1[" << i << "]=" << X1[i] << " ";
	}
	//===
	return 0;
}

void gauss(double** A, double* B, double* X, int n){
	int m=n+1;
	//create C[n][n+1]
	double **C = new double*[n];
	for(int i=0; i<n; i++){
		C[i]=new double[n+1];
	}
	//===
	//split A and B to C
	for(int i=0;i<n;i++){
		for(int j=0;j<n;j++){
			C[i][j]=A[i][j];
		}
		C[i][n]=B[i];
	}
	//===
	/*
	//print C
	for(int i=0;i<n;i++){
		for(int j=0;j<n+1;j++){
			cout << C[i][j] << " ";
		}
		cout << endl;
	}
	//===
	*/

	//forward
	for (int k=0; k<n-1; k++){
	    for (int i=k+1;i<n;i++){
	        for (int j=m-1; j>=k; j--){
		        C[i][j]=C[i][j]-C[i][k]*C[k][j]/C[k][k];
	        }
    	}
	}
	//reverse
	X[n-1]=A[n-1][m-2]/A[n-1][m-2];

	for (int i=n-2; i>=0; i--){
		double s=0;
		for (int j=i+1;j<m-1;j++){
			s=s+C[i][j]*X[j];
		}
		X[i]=(C[i][m-1] - s)/C[i][i];
	}

}
  • avatar
  • 0
  • 0


Метод Рунге-Кутты на С++

См. также метод Эйлера на С++ и Метод Эйлера-Коши на C++

Будем рассматривать дифференциальное уравнение вида

y'=f(x,y),     (1)

где f(x,y) — заданная непрерывная функция в области D.

Задача нахождения решения этого уравнения, удовлетворяющего начальному условию

(x0)=y0,     (2)

называется задачей Коши.

Метод Рунге-Кутты

Пусть требуется найти решение задачи Коши (1)-(2) на отрезке [a,b].

Разобьем отрезок [a,b] на n равных частей точками xi=a+i·h, где i=0,1,,n,h=ban.

Методы Эйлера и Эйлера-Коши являются частными случаями метода Рунге-Кутты. На практике наиболее распространенным является метод Рунге-Кутты четвертого порядка. Расчетные формулы этого метода имеют вид
xi+1=a+ih,
y1i+1=hf(xi,yi),
y2i+1=hf(xi+h2,yi+y1i+12),
y3i+1=hf(xi+h2,yi+y2i+12),
y4i+1=hf(xi+h,yi+y3i+1),
yi+1=yi+16(y1i+1+2y2i+1+2y3i+1+y4i+1).
Пример. Решить методом Рунге-Кутты 4-го порядка дифференциальное уравнение y'=3sin2y+x с начальным условием y(0)=2 на отрезке [0,1] с шагом h=0,1.

Решение.

//============================================================================
// Name        : runge.cpp
// Author      : 
// Version     :
// Copyright   : 
// Description : 
//============================================================================

#include <iostream>
#include <cmath>
using namespace std;

double F(double x, double y){
	return 3*sin(2*y)+x;
}

int main() {
	double a=0; double b=1; double h=0.1;
	double n=(b-a)/h;
	double X[(int)n];
	double Y1[(int)n];
	double Y2[(int)n];
	double Y3[(int)n];
	double Y4[(int)n];
	double Y[(int)n];
	//calculate
	X[0]=a; Y[0]=2;
	for(int i=1; i<=n; i++){
		X[i]=a+i*h;
		Y1[i]=h*F(X[i-1],Y[i-1]);
		Y2[i]=h*F(X[i-1]+h/2.0,Y[i-1]+Y1[i]/2.0);
		Y3[i]=h*F(X[i-1]+h/2,Y[i-1]+Y2[i]/2);
		Y4[i]=h*F(X[i-1]+h,Y[i-1]+Y3[i]);
		Y[i]=Y[i-1]+(Y1[i]+2*Y2[i]+2*Y3[i]+Y4[i])/6;
	}
	//print results
	for(int i=0; i<=n; i++){
		cout << "X["<<i<<"]="<<X[i] <<" ";
	}
	cout << endl;
	for(int i=0; i<=n; i++){
		cout << "Y["<<i<<"]="<<Y[i] << " ";
	}
	return 0;
}


См. также метод Эйлера на С++ и Метод Эйлера-Коши на C++
  • avatar
  • 0
  • 0


Метод Эйлера-Коши на С++

См. также метод Эйлера на С++

Будем рассматривать дифференциальное уравнение вида

y'=f(x,y),     (1)

где f(x,y) — заданная непрерывная функция в области D.

Задача нахождения решения этого уравнения, удовлетворяющего начальному условию

(x0)=y0,     (2)

называется задачей Коши.

Метод Эйлера-Коши

Пусть требуется найти решение задачи Коши (1)-(2) на отрезке [a,b].

Разобьем отрезок [a,b] на n равных частей точками xi=a+i·h, где i=0,1,,n,h=ban.

Метод Эйлера-Коши позволяет увеличить точность метода Эйлера. Расчетные формулы этого метода имеют вид

xi+1=a+i·h,

yi+1=yi+hf(xi,yi)

yi+1=yi+hf(xi,yi)+f(xi+1,yi+1)2.

Пример. Решить методом Эйлера-Коши дифференциальное уравнение y'=3sin2y+x с начальным условием y(0)=2 на отрезке [0,1] с шагом h=0,1.

Решение.


#include <iostream>
#include <cmath>
using namespace std;

double F(double x, double y){
	return 3*sin(2*y)+x;
}

int main() {
	double a=0; double b=1; double h=0.1;
	double n=(b-a)/h;
	double X[(int)n];
	double Y1[(int)n];
	double Y[(int)n];
	//calculate
	X[0]=a; Y[0]=2;
	for(int i=1; i<=n; i++){
		X[i]=a+i*h;
		Y1[i]=Y[i-1]+h*F(X[i-1],Y[i-1]);
		Y[i]=Y[i-1]+h*(F(X[i-1],Y[i-1])+F(X[i],Y1[i]))/2.0;
	}
	//print results
	for(int i=0; i<=n; i++){
		cout << "X["<<i<<"]="<<X[i] <<" ";
	}
	cout << endl;
	for(int i=0; i<=n; i++){
		cout << "Y["<<i<<"]="<<Y[i] << " ";
	}
	return 0;
}


См. также метод Эйлера на С++
  • avatar
  • 0
  • 0


Метод Эйлера на C++

См. также метод Эйлера-Коши на С++

Будем рассматривать дифференциальное уравнение вида

y'=f(x,y),     (1)

где f(x,y) — заданная непрерывная функция в области D.

Задача нахождения решения этого уравнения, удовлетворяющего начальному условию

(x0)=y0,     (2)

называется задачей Коши.

Метод Эйлера

Пусть требуется найти решение задачи Коши (1)-(2) на отрезке [a,b].

Разобьем отрезок [a,b] на n равных частей точками xi=a+i·h, где i=0,1,,n,h=ban. Заменяя в уравнении (1) производную разностным отношением, получим
y1y0h=f(x0,y0).

Перепишем последнее уравнение в виде
y1=y0+h·f(x0,y0).

Повторяя этот процесс, получим приближенное решение задачи (1)-(2).

Таким образом, итерационная формула метода Эйлера имеет вид
xi+1=a+i·h,   yi+1=yi+h·f(xi,yi),   i=0,1,,n.

Пример. Решить методом Эйлера дифференциальное уравнение y'=3sin2y+x с начальным условием y(0)=2 на отрезке [0,1] с шагом h=0,1.

Решение.

#include <iostream>
#include <cmath>
using namespace std;

double F(double x, double y){
	return 3*sin(2*y)+x;
}

int main() {
	double a=0; double b=1; double h=0.1;
	double n=(b-a)/h;
	double X[(int)n]; double Y[(int)n];
	X[0]=a; Y[0]=2;
	for(int i=1; i<=n; i++){
		X[i]=a+i*h;
		Y[i]=Y[i-1]+h*F(X[i-1],Y[i-1]);
	}
	for(int i=0; i<=n; i++){
		cout << "X["<<i<<"]="<<X[i] <<" ";
	}
	cout << endl;
	for(int i=0; i<=n; i++){
		cout << "Y["<<i<<"]="<<Y[i] << " ";
	}
	return 0;
}


Результат:

X[0]=0 X[1]=0.1 X[2]=0.2 X[3]=0.3 X[4]=0.4 X[5]=0.5 X[6]=0.6 X[7]=0.7 X[8]=0.8 X[9]=0.9 X[10]=1 
Y[0]=2 Y[1]=1.77296 Y[2]=1.66494 Y[3]=1.62879 Y[4]=1.62407 Y[5]=1.63217 Y[6]=1.64544 Y[7]=1.66082 Y[8]=1.6771 Y[9]=1.6938 Y[10]=1.71074


См. также метод Эйлера-Коши на С++
  • avatar
  • 0
  • 0