Разговорник PascalABC.NET — C++ — различия между версиями
Ulysses (обсуждение | вклад) |
Xamgore (обсуждение | вклад) |
||
(не показаны 34 промежуточные версии 3 участников) | |||
Строка 1: | Строка 1: | ||
+ | __TOC__ | ||
+ | Ниже приведены примеры программ на двух языках: на PascalABC.NET и на C++. | ||
+ | |||
+ | == Часть 1. Простейшие программы == | ||
+ | |||
1. Вывести приветствие "Hello, world". | 1. Вывести приветствие "Hello, world". | ||
<source lang="Pascal"> | <source lang="Pascal"> | ||
− | |||
begin | begin | ||
Writeln('Hello, world'); | Writeln('Hello, world'); | ||
Строка 18: | Строка 22: | ||
int main() { | int main() { | ||
− | cout << "Hello world!" << endl; | + | cout << "Hello world!" << endl; // двойные кавычки для строковых литералов! |
} | } | ||
</source> | </source> | ||
Строка 38: | Строка 42: | ||
<source lang="Cpp"> | <source lang="Cpp"> | ||
#include <iostream> | #include <iostream> | ||
− | #include < | + | |
+ | // для отображения кириллицы в консоли: | ||
+ | #include <locale> | ||
using namespace std; // подключение сразу всех имён из «пространства имён» std; | using namespace std; // подключение сразу всех имён из «пространства имён» std; | ||
Строка 44: | Строка 50: | ||
int main() { | int main() { | ||
− | + | std::locale::global(std::locale("")); // для отображения кириллицы в консоли; | |
double a, h; | double a, h; | ||
Строка 73: | Строка 79: | ||
<source lang="cpp"> | <source lang="cpp"> | ||
#include <iostream> | #include <iostream> | ||
− | #include < | + | #include <locale> |
using namespace std; | using namespace std; | ||
int main() { | int main() { | ||
− | + | std::locale::global(std::locale("")); | |
int n; | int n; | ||
Строка 99: | Строка 105: | ||
var x: double; | var x: double; | ||
Readln(x); | Readln(x); | ||
− | Writeln('Проверяем основное тригонометрическое тождество: 1=', sqr(sin(x)) + sqr(cos(x))); | + | Writeln('Проверяем основное тригонометрическое тождество: 1 = ', |
+ | sqr(sin(x)) + sqr(cos(x))); | ||
end. | end. | ||
</source> | </source> | ||
Строка 105: | Строка 112: | ||
<source lang="Cpp"> | <source lang="Cpp"> | ||
#include <iostream> | #include <iostream> | ||
− | #include < | + | #include <locale> |
#include <cmath> // математические функции и константы | #include <cmath> // математические функции и константы | ||
Строка 111: | Строка 118: | ||
int main() { | int main() { | ||
− | + | std::locale::global(std::locale("")); | |
double x; | double x; | ||
cout << "Введите значение угла в радианах: "; | cout << "Введите значение угла в радианах: "; | ||
− | + | cin >> x; | |
− | cout << "Проверяем основное тригонометрическое тождество: 1 = " << pow(sin(x), 2) + pow(cos(x), 2) << endl; | + | cout << "Проверяем основное тригонометрическое тождество: 1 = " |
+ | << pow(sin(x), 2) + pow(cos(x), 2) << endl; | ||
} | } | ||
</source> | </source> | ||
+ | |||
+ | |||
+ | 5. Вывести случайные целые от 0 до 99 и от 10 до 99, а также случайное вещественное от 0 до 1. | ||
+ | |||
+ | <source lang="Pascal"> | ||
+ | program Randoms; | ||
+ | |||
+ | begin | ||
+ | // Случайное целое от 0 до 99 | ||
+ | var n: integer; | ||
+ | n := Random(100); | ||
+ | Writeln(n); | ||
+ | |||
+ | // Случайное целое от 10 до 99 | ||
+ | var n2: integer; | ||
+ | n2 := Random(10, 100); | ||
+ | Writeln(n2); | ||
+ | |||
+ | // Случайное вещественное от 0 до 1 | ||
+ | var d: real; | ||
+ | d := Random; | ||
+ | Writeln(d); | ||
+ | end. | ||
+ | </source> | ||
+ | |||
+ | <source lang="Cpp"> | ||
+ | #include <iostream> | ||
+ | #include <cstdlib> // для использования генератора случайных чисел | ||
+ | #include <ctime> // функции времени для инициализации генератора с. ч. | ||
+ | |||
+ | using namespace std; | ||
+ | |||
+ | int main() { | ||
+ | srand(unsigned(time(0))); // инициализации генератора с. ч. | ||
+ | |||
+ | // rand() генерирует псевдослучайное целое число от 0 до | ||
+ | // константы RAND_MAX, значение которой не меньше, чем 32767 | ||
+ | |||
+ | // Случайное целое от 0 до 99 | ||
+ | int n1 = rand() % 100; | ||
+ | cout << n1 << endl; | ||
+ | |||
+ | // Случайное целое от a=10 до b=99 | ||
+ | const int a = 10; | ||
+ | const int b = 100; | ||
+ | int n2 = rand() % (b - a) + a; | ||
+ | cout << n2 << endl; | ||
+ | |||
+ | // Случайное вещественное от 0 до 1 | ||
+ | double d = static_cast<double>(rand()) / RAND_MAX; | ||
+ | cout << d << endl; | ||
+ | } | ||
+ | </source> | ||
+ | |||
+ | == Часть 2. Определение функций == | ||
+ | В примерах ниже опущено включение (#include) уже знакомых заголовочных файлов и директивы using (примеры см. выше). | ||
+ | |||
+ | 0. Написать подпрограмму, печатающую «Здравствуй, мир!» на консоль и вызвать её в основной программе. | ||
+ | <source lang="Pascal"> | ||
+ | // Печать «Здравствуй, мир!» на консоль | ||
+ | procedure HelloWorld; | ||
+ | begin | ||
+ | Writeln('Здравствуй, мир!'); | ||
+ | end; | ||
+ | |||
+ | begin | ||
+ | HelloWorld | ||
+ | end. | ||
+ | </source> | ||
+ | |||
+ | <source lang="Cpp"> | ||
+ | // Печать «Здравствуй, мир!» на консоль | ||
+ | void helloWorld() { // void указывает на отсутствие возвращаемого значения — аналог процедуры | ||
+ | cout << "Здравствуй, мир!" << endl; | ||
+ | } | ||
+ | |||
+ | int main() { | ||
+ | std::locale::global(std::locale("")); | ||
+ | helloWorld(); // Обратите внимание: () и ; необходимы!!! | ||
+ | } | ||
+ | </source> | ||
+ | |||
+ | |||
+ | 1. Написать функцию, вычисляющую гипотенузу по заданным катетам. | ||
+ | <source lang="Pascal"> | ||
+ | // Значение гипотенузы по двум заданным катетам | ||
+ | function Hypotenuse(a, b : real) : real; | ||
+ | begin | ||
+ | result := sqrt(sqr(a) + sqr(b)); | ||
+ | end; | ||
+ | </source> | ||
+ | |||
+ | <source lang="Cpp"> | ||
+ | // Значение гипотенузы по двум заданным катетам | ||
+ | double hypotenuse(double a, double b) { | ||
+ | return sqrt(a*a + b*b); | ||
+ | } | ||
+ | </source> | ||
+ | |||
+ | |||
+ | 2. Написать подпрограмму, принимающую три целых числа и печатающую на консоль «Given sequence is monotonic: x», где x — истинностное значение условия: полученные числа составляют монотонную последовательность. | ||
+ | <source lang="Pascal"> | ||
+ | // Проверка трёх чисел на монотонность | ||
+ | procedure IsMonotonic(a, b, c : integer); | ||
+ | begin | ||
+ | Writeln("Given sequence is monotonic: ", | ||
+ | ((a < b) and (b < c)) or ((c < b) and (b < a))); | ||
+ | end; | ||
+ | </source> | ||
+ | <source lang="Cpp"> | ||
+ | // Проверка трёх чисел на монотонность | ||
+ | void isMonotonic(int a, int b, int c) { | ||
+ | cout << "Given sequence is monotonic: " << | ||
+ | (((a < b) && (b < c)) || ((c < b) && (b < a))) << endl; | ||
+ | } | ||
+ | </source> | ||
+ | <source lang="Cpp"> | ||
+ | // Проверка трёх чисел на монотонность | ||
+ | void isMonotonic(int a, int b, int c) { | ||
+ | cout << "Given sequence is monotonic: " << | ||
+ | // ver. 2 -- без лишних скобок с учетом приоритета операций | ||
+ | (a < b && b < c || c < b && b < a) << endl; | ||
+ | } | ||
+ | </source> | ||
+ | |||
+ | |||
+ | 3. Написать подпрограмму, которая по заданному двухзначному целому числу ''n'' возвращает два однозначных числа, определённых первой и второй цифрами ''n''. | ||
+ | <source lang="Pascal"> | ||
+ | // разбиение целого двузначного числа n на цифры | ||
+ | procedure Figures(n: integer; var first, second : integer); | ||
+ | begin | ||
+ | first := n div 10; | ||
+ | second := n mod 10; | ||
+ | end; | ||
+ | </source> | ||
+ | <source lang="Cpp"> | ||
+ | // разбиение целого двузначного числа n на цифры | ||
+ | void figures(int n, int & first, int & second) { | ||
+ | first = n / 10; | ||
+ | second = n % 10; | ||
+ | } | ||
+ | </source> | ||
+ | |||
+ | |||
+ | 4. Написать функцию целочисленного аргумента, возвращающее целое число по правилу:<br /> | ||
+ | [[Файл:If25-formula.gif]] | ||
+ | <source lang="Pascal"> | ||
+ | function f(x: integer) : integer; | ||
+ | begin | ||
+ | if (x < -2) or (2 < x) then | ||
+ | result := 2 * x | ||
+ | else | ||
+ | result := -3 * x; | ||
+ | end; | ||
+ | </source> | ||
+ | <source lang="Cpp"> | ||
+ | int f(int x) { | ||
+ | if (x < -2 || 2 < x) // ver. 1 -- оператор if | ||
+ | return 2 * x; | ||
+ | else | ||
+ | return -3 * x; | ||
+ | } | ||
+ | </source> | ||
+ | <source lang="Cpp"> | ||
+ | int f(int x) { | ||
+ | // ver. 2 -- условная операция(?:) : | ||
+ | return (x < -2 || 2 < x) ? (2 * x) : (-3 * x); | ||
+ | } | ||
+ | </source> | ||
+ | |||
+ | |||
+ | 5. Даны целые числа K и N (N > 0). Вывести N раз число K. | ||
+ | <source lang="Pascal"> | ||
+ | // Печать числа K ровно N раз | ||
+ | procedure PrintNtimes(K, N: integer); | ||
+ | var i : integer; | ||
+ | begin | ||
+ | for i := 1 to N do | ||
+ | Write(K, ' '); | ||
+ | end; | ||
+ | </source> | ||
+ | <source lang="Cpp"> | ||
+ | // Печать числа K ровно N раз | ||
+ | void printNtimes(int K, int N) { | ||
+ | for (int i = 0; i < N; ++i) { | ||
+ | cout << K << " "; | ||
+ | } | ||
+ | } | ||
+ | </source> | ||
+ | |||
+ | 6. Дано целое число. Определить количество цифр в нём. | ||
+ | <source lang="Pascal"> | ||
+ | function DigitCount(n: integer): integer; | ||
+ | begin | ||
+ | if (n = 0) then | ||
+ | begin | ||
+ | result := 1; | ||
+ | exit; | ||
+ | end; | ||
+ | while n <> 0 do | ||
+ | begin | ||
+ | n := n div 10; | ||
+ | result := result + 1; | ||
+ | end; | ||
+ | end; | ||
+ | </source> | ||
+ | <source lang="cpp"> | ||
+ | int digitCount(int n) { | ||
+ | int res = 0; | ||
+ | if (!n) | ||
+ | return 1; | ||
+ | while (n) { | ||
+ | /* n % 10 -- очередная цифра числа; если требуется */ | ||
+ | n /= 10; | ||
+ | ++res; | ||
+ | } | ||
+ | return res; | ||
+ | } | ||
+ | </source> | ||
+ | |||
+ | |||
+ | 7. Дана последовательность целых чисел, заканчивающаяся нулём, подсчитать её длину. | ||
+ | <source lang="Pascal"> | ||
+ | function SeqLength: integer; | ||
+ | var x: integer; | ||
+ | begin | ||
+ | while true do | ||
+ | begin | ||
+ | Readln(x); | ||
+ | if x = 0 then | ||
+ | break; | ||
+ | result := result + 1; | ||
+ | end; | ||
+ | end; | ||
+ | </source> | ||
+ | <source lang="cpp"> | ||
+ | void seqLength() { | ||
+ | int res = 0; | ||
+ | while (true) { | ||
+ | int x; | ||
+ | cin >> x; | ||
+ | if (!x) | ||
+ | return res; // выход из функции | ||
+ | ++res; | ||
+ | } | ||
+ | } | ||
+ | </source> | ||
+ | |||
+ | [[Категория:C++]] | ||
+ | [[Категория:Разговорники]] |
Текущая версия на 21:07, 4 сентября 2014
Ниже приведены примеры программ на двух языках: на PascalABC.NET и на C++.
Часть 1. Простейшие программы
1. Вывести приветствие "Hello, world".
begin
Writeln('Hello, world');
end.
#include <iostream>
/* ^ для использования стандартных средств
ввода-вывода */
using std::cout; // для использования далее cout — стандартного потока вывода —
// без уточнения «std::»
using std::endl; // аналогично; символ перехода на новую строку
int main() {
cout << "Hello world!" << endl; // двойные кавычки для строковых литералов!
}
2. Вычислить площадь треугольника по заданному основанию и высоте.
program TriangleSquare;
begin
Writeln('Введите основание и высоту');
var a, h: real;
Readln(a, h);
Writeln('S = ', a * h / 2);
end.
#include <iostream>
// для отображения кириллицы в консоли:
#include <locale>
using namespace std; // подключение сразу всех имён из «пространства имён» std;
// удобно, но возможны конфликты стандартных имён с вашими!
int main() {
std::locale::global(std::locale("")); // для отображения кириллицы в консоли;
double a, h;
cout << "Введите основание и высоту: ";
cin >> a >> h;
cout << "S = " << a * h / 2 << endl;
}
3. Вычислить сумму цифр заданного целого двузначного числа.
// Сумма цифр целого двузначного числа
program Digits;
begin
Writeln('Введите целое двузначное число');
var n: integer;
Readln(n);
var d1 := n div 10;
var d2 := n mod 10;
var digitsSum := d1 + d2;
Writeln('S=', digitsSum);
end.
#include <iostream>
#include <locale>
using namespace std;
int main() {
std::locale::global(std::locale(""));
int n;
cout << "Введите целое двузначное число: ";
cin >> n;
int d1 = n / 10, d2 = n % 10;
int digitsSum = d1 + d2;
cout << "S = " << digitsSum << endl;
}
4. Проверить, выполняется ли основное тригонометрическое тождество для заданного угла в радианах.
program SinCos;
begin
Writeln('Введите значение угла в радианах');
var x: double;
Readln(x);
Writeln('Проверяем основное тригонометрическое тождество: 1 = ',
sqr(sin(x)) + sqr(cos(x)));
end.
#include <iostream>
#include <locale>
#include <cmath> // математические функции и константы
using namespace std;
int main() {
std::locale::global(std::locale(""));
double x;
cout << "Введите значение угла в радианах: ";
cin >> x;
cout << "Проверяем основное тригонометрическое тождество: 1 = "
<< pow(sin(x), 2) + pow(cos(x), 2) << endl;
}
5. Вывести случайные целые от 0 до 99 и от 10 до 99, а также случайное вещественное от 0 до 1.
program Randoms;
begin
// Случайное целое от 0 до 99
var n: integer;
n := Random(100);
Writeln(n);
// Случайное целое от 10 до 99
var n2: integer;
n2 := Random(10, 100);
Writeln(n2);
// Случайное вещественное от 0 до 1
var d: real;
d := Random;
Writeln(d);
end.
#include <iostream>
#include <cstdlib> // для использования генератора случайных чисел
#include <ctime> // функции времени для инициализации генератора с. ч.
using namespace std;
int main() {
srand(unsigned(time(0))); // инициализации генератора с. ч.
// rand() генерирует псевдослучайное целое число от 0 до
// константы RAND_MAX, значение которой не меньше, чем 32767
// Случайное целое от 0 до 99
int n1 = rand() % 100;
cout << n1 << endl;
// Случайное целое от a=10 до b=99
const int a = 10;
const int b = 100;
int n2 = rand() % (b - a) + a;
cout << n2 << endl;
// Случайное вещественное от 0 до 1
double d = static_cast<double>(rand()) / RAND_MAX;
cout << d << endl;
}
Часть 2. Определение функций
В примерах ниже опущено включение (#include) уже знакомых заголовочных файлов и директивы using (примеры см. выше).
0. Написать подпрограмму, печатающую «Здравствуй, мир!» на консоль и вызвать её в основной программе.
// Печать «Здравствуй, мир!» на консоль
procedure HelloWorld;
begin
Writeln('Здравствуй, мир!');
end;
begin
HelloWorld
end.
// Печать «Здравствуй, мир!» на консоль
void helloWorld() { // void указывает на отсутствие возвращаемого значения — аналог процедуры
cout << "Здравствуй, мир!" << endl;
}
int main() {
std::locale::global(std::locale(""));
helloWorld(); // Обратите внимание: () и ; необходимы!!!
}
1. Написать функцию, вычисляющую гипотенузу по заданным катетам.
// Значение гипотенузы по двум заданным катетам
function Hypotenuse(a, b : real) : real;
begin
result := sqrt(sqr(a) + sqr(b));
end;
// Значение гипотенузы по двум заданным катетам
double hypotenuse(double a, double b) {
return sqrt(a*a + b*b);
}
2. Написать подпрограмму, принимающую три целых числа и печатающую на консоль «Given sequence is monotonic: x», где x — истинностное значение условия: полученные числа составляют монотонную последовательность.
// Проверка трёх чисел на монотонность
procedure IsMonotonic(a, b, c : integer);
begin
Writeln("Given sequence is monotonic: ",
((a < b) and (b < c)) or ((c < b) and (b < a)));
end;
// Проверка трёх чисел на монотонность
void isMonotonic(int a, int b, int c) {
cout << "Given sequence is monotonic: " <<
(((a < b) && (b < c)) || ((c < b) && (b < a))) << endl;
}
// Проверка трёх чисел на монотонность
void isMonotonic(int a, int b, int c) {
cout << "Given sequence is monotonic: " <<
// ver. 2 -- без лишних скобок с учетом приоритета операций
(a < b && b < c || c < b && b < a) << endl;
}
3. Написать подпрограмму, которая по заданному двухзначному целому числу n возвращает два однозначных числа, определённых первой и второй цифрами n.
// разбиение целого двузначного числа n на цифры
procedure Figures(n: integer; var first, second : integer);
begin
first := n div 10;
second := n mod 10;
end;
// разбиение целого двузначного числа n на цифры
void figures(int n, int & first, int & second) {
first = n / 10;
second = n % 10;
}
4. Написать функцию целочисленного аргумента, возвращающее целое число по правилу:
function f(x: integer) : integer;
begin
if (x < -2) or (2 < x) then
result := 2 * x
else
result := -3 * x;
end;
int f(int x) {
if (x < -2 || 2 < x) // ver. 1 -- оператор if
return 2 * x;
else
return -3 * x;
}
int f(int x) {
// ver. 2 -- условная операция(?:) :
return (x < -2 || 2 < x) ? (2 * x) : (-3 * x);
}
5. Даны целые числа K и N (N > 0). Вывести N раз число K.
// Печать числа K ровно N раз
procedure PrintNtimes(K, N: integer);
var i : integer;
begin
for i := 1 to N do
Write(K, ' ');
end;
// Печать числа K ровно N раз
void printNtimes(int K, int N) {
for (int i = 0; i < N; ++i) {
cout << K << " ";
}
}
6. Дано целое число. Определить количество цифр в нём.
function DigitCount(n: integer): integer;
begin
if (n = 0) then
begin
result := 1;
exit;
end;
while n <> 0 do
begin
n := n div 10;
result := result + 1;
end;
end;
int digitCount(int n) {
int res = 0;
if (!n)
return 1;
while (n) {
/* n % 10 -- очередная цифра числа; если требуется */
n /= 10;
++res;
}
return res;
}
7. Дана последовательность целых чисел, заканчивающаяся нулём, подсчитать её длину.
function SeqLength: integer;
var x: integer;
begin
while true do
begin
Readln(x);
if x = 0 then
break;
result := result + 1;
end;
end;
void seqLength() {
int res = 0;
while (true) {
int x;
cin >> x;
if (!x)
return res; // выход из функции
++res;
}
}