Разговорник PascalABC.NET — C++ — различия между версиями

Материал из Вики ИТ мехмата ЮФУ
Перейти к: навигация, поиск
 
(не показаны 34 промежуточные версии 3 участников)
Строка 1: Строка 1:
 +
__TOC__
 +
Ниже приведены примеры программ на двух языках: на PascalABC.NET и на C++.
 +
 +
== Часть 1. Простейшие программы ==
 +
 
1. Вывести приветствие "Hello, world".
 
1. Вывести приветствие "Hello, world".
  
 
<source lang="Pascal">
 
<source lang="Pascal">
program HelloWorld;
 
 
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 <cstdlib// для system - см. ниже
+
 
 +
// для отображения кириллицы в консоли:
 +
#include <locale>   
  
 
using namespace std; // подключение сразу всех имён из «пространства имён» std;
 
using namespace std; // подключение сразу всех имён из «пространства имён» std;
Строка 44: Строка 50:
  
 
int main() {
 
int main() {
     system("chcp 1251"); // для отображения кириллицы в консоли
+
     std::locale::global(std::locale("")); // для отображения кириллицы в консоли;
  
 
     double a, h;
 
     double a, h;
Строка 73: Строка 79:
 
<source lang="cpp">
 
<source lang="cpp">
 
#include <iostream>
 
#include <iostream>
#include <cstdlib>
+
#include <locale>
  
 
using namespace std;
 
using namespace std;
  
 
int main() {
 
int main() {
     system("chcp 1251");
+
     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 <cstdlib>
+
#include <locale>
 
#include <cmath> // математические функции и константы
 
#include <cmath> // математические функции и константы
  
Строка 111: Строка 118:
  
 
int main() {
 
int main() {
     system("chcp 1251");
+
     std::locale::global(std::locale(""));
  
 
     double x;
 
     double x;
 
     cout << "Введите значение угла в радианах: ";
 
     cout << "Введите значение угла в радианах: ";
cin >> x;
+
    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. Написать функцию целочисленного аргумента, возвращающее целое число по правилу:
If25-formula.gif

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;
    }
}