g++ 3.4.5
Версия реализации g++ языка программирования C++Версия компилятора g++.
Примеры:
Hello, World! - C++ (34):
#include <iostream>
int main(void)
{
std::cout << "Hello, World!" << std::endl;
return 0;
}
Числа Фибоначчи - C++ (41):
#include <iostream>
int fibonacci(int n)
{
return (n<=2 ? 1 : fibonacci(n-1) + fibonacci(n-2));
}
int main(void)
{
for (int n=1; n<=16; n++)
std::cout << fibonacci(n) << ", ";
std::cout << "..." << std::endl;
return 0;
}
Факториал - C++ (43):
Используется рекурсивное определение факториала. Реализация отличается от альтернативной использованием типа __int64
вместо unsigned long long
и функции вывода на печать printf
вместо std::cout <<
.
#include "stdio.h"
__int64 factorial(__int64 n)
{
return (n==0 ? 1 : n*factorial(n-1));
}
int main(int argc, char* argv[])
{
for (int n=0; n<=16; n++)
printf("%d! = %I64d\n",n,factorial(n));
return 0;
}
Квадратное уравнение - C++ (134):
В этом примере используется класс complex<>
, входящий в состав библиотеки STL. Все вычисления выполняются в комплексных числах, т.к. это позволяет не беспокоиться о знаке дискриминанта и различных представлениях корней для действительного и комплексного случаев.
Оператор >>
класса complex<>
перегружен так, что он распознает несколько форматов вводимых чисел, в т.ч. и числа без мнимой части, так что константы A, B и C читаются не как целые числа, а сразу как комплексные. Такая реализация позволяет расширить область применения примера до уравнений с дробными и даже комплексными коэффициентами.
Оператор <<
класса complex<>
также перегружен и выводит любое комплексное число x
как (x.real(),x.imag())
, поэтому для вывода корней без мнимой части как обычных дробных чисел используется функция print
.
#include <iostream>
#include <complex>
#include <math>
using namespace std;
void print(int ind, complex<double> x)
{ cout << "x" << ind << " = ";
if (fabs(x.imag()) < 1E-6)
cout << x.real() << endl;
else cout << x << endl;
}
void main()
{ complex<double> A, B, C, D, x1, x2;
cout << "A = ";
cin >> A;
if (abs(A)<1E-3)
{ cout << "Not a quadratic equation." << endl;
return;
}
cout << "B = ";
cin >> B;
cout << "C = ";
cin >> C;
A *= 2;
D = B*B-A*C*2.0;
if (abs(D)<1E-3)
cout << "x = " << (-B/A).real();
else
{ print(1, (-B+sqrt(D))/A);
print(2, (-B-sqrt(D))/A);
}
}
Hello, World! - C, Objective-C, C++ (191):
#include <stdio.h>
int main()
{
printf("Hello, World!\n");
return 0;
}
Квадратное уравнение - C, Objective-C, C++ (192):
Этот пример работает на C и C++, а также на Objective-C, являющемся строгим надмножеством языка C. В случае C может понадобиться компилировать программу с опцией -lm
, чтобы подключить библиотеку математики.
#include <math.h>
#include <stdio.h>
int main()
{
int A, B, C, D;
printf("A = ");
scanf("%d", &A);
if (A == 0) {
printf("Not a quadratic equation.\n");
return 0;
}
printf("B = ");
scanf("%d", &B);
printf("C = ");
scanf("%d", &C);
D = B * B - 4 * A * C;
if (D == 0) {
printf("x = %f\n", -B / 2.0 / A);
return 0;
}
if (D > 0) {
printf("x1 = %f\nx2 = %f\n",
(-B + sqrt(D)) / 2.0 / A, (-B - sqrt(D))/ 2.0 / A);
} else {
printf("x1 = (%f, %f)\nx2 = (%f, %f)\n",
-B / 2.0 / A, sqrt(-D) / 2.0 / A, -B / 2.0 / A, -sqrt(-D) / 2.0 /A);
}
return 0;
}
Комментарии
]]>blog comments powered by Disqus
]]>