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

Материал из Вики ИТ мехмата ЮФУ
Перейти к: навигация, поиск
м (Ulysses переименовал страницу Разговорник PascalABC.NET — C в Разговорник Pascal — C без оставления перенаправления)
м (small changes; adduse to C90)
Строка 14: Строка 14:
 
<source lang="c">
 
<source lang="c">
 
#include <stdio.h>
 
#include <stdio.h>
/* ^ для использования стандартных средств
+
/* ^ вставка текста стандартного заголовочного файла stdio.h
 +
    для использования стандартных средств
 
     ввода-вывода (в данном случае — функции printf)                    */
 
     ввода-вывода (в данном случае — функции printf)                    */
  
Строка 49: Строка 50:
 
     кодировкой символов; для использования setlocale и LC_ALL        */
 
     кодировкой символов; для использования setlocale и LC_ALL        */
  
int main() {
+
int main()  
 +
{
 +
    /* две вещественные переменные ("переменные с плавающей точкой"):  */
 +
    float a, h; /* переменные следует объявлять как можно ближе
 +
                    к месту первого использования, но только в начале
 +
                    блока (то есть сразу после символа '{')          */
 +
 
 
     setlocale(LC_ALL, ""); /* позволит отображать кириллицу в консоли  */
 
     setlocale(LC_ALL, ""); /* позволит отображать кириллицу в консоли  */
  
    /* две вещественные переменные ("переменные с плавающей точкой"):  */
 
    float a, h; /* переменные желательно объявлять как можно ближе
 
                    к месту первого использования                    */
 
 
     printf("Введите основание и высоту: ");
 
     printf("Введите основание и высоту: ");
  
Строка 93: Строка 97:
  
 
int main() {
 
int main() {
 +
    int n, d1, d2, dSum; /* целочисленные переменные                    */
 +
 
     setlocale(LC_ALL, "");
 
     setlocale(LC_ALL, "");
 
    int n; /* целочисленные переменные                    */
 
 
     printf("Введите целое двузначное число: ");
 
     printf("Введите целое двузначное число: ");
  
 
     /* чтение с клавиатуры: */
 
     /* чтение с клавиатуры: */
 
     scanf("%d", &n);
 
     scanf("%d", &n);
     /* арг #1: формат вводимых данных; %d - для целого числа в десятичной форме (decimal)
+
     /* арг #1: формат вводимых данных;  
 +
              %d - для целого числа в десятичной форме (decimal)
 
       арг #2: адреса переменной для записи результата */
 
       арг #2: адреса переменной для записи результата */
  
     int d1 = n / 10, d2 = n % 10; /* инициализация (задание начальных значений)
+
     d1 = n / 10; // серия даже коротких операций пишется ТОЛЬКО В СТОЛБИК
                                      переменных при объявлении */
+
    d2 = n % 10; //   то есть переход на новую строку обязателен!
     int dSum = d1 + d2;
+
     dSum = d1 + d2; // этого требуют соглашения об оформлении исходных
 +
                        // кодов, но не сам язык
 
      
 
      
 
     printf("Сумма цифр в числе %d равна %d\n", n, dSum);
 
     printf("Сумма цифр в числе %d равна %d\n", n, dSum);

Версия 08:22, 21 августа 2013

Ниже приведены примеры программ на двух языках: на Pascal и на C. В комментариях отмечены основные отличительные черты языка C — прочитайте эти комментарии внимательно.

Простейшие программы

1. Вывести приветствие "Hello, world".

begin
    Writeln('Hello, world');
end.
#include <stdio.h>
/* ^ вставка текста стандартного заголовочного файла stdio.h
     для использования стандартных средств
     ввода-вывода (в данном случае — функции printf)                     */

int main() 
{
    printf("Hello, world\n"); // вызов функции printf
                              // обратите внимание на
                              //    двойные кавычки для строковых литералов!
                              // \n -- символ перехода на новую строку
}


2. Вычислить площадь треугольника по заданным основанию и высоте.

program TriangleSquare;

var a, h: real;

begin
    Writeln('Введите основание и высоту');
    Readln(a, h);
    Writeln('S = ', a * h / 2);
end.
#include <stdio.h>
/* ^ для printf, scanf -- ввод с клавиатуры */

#include <locale.h>
/* ^ для работы с набором региональных настроек (локалью), в том числе
     кодировкой символов; для использования setlocale и LC_ALL         */

int main() 
{
    /* две вещественные переменные ("переменные с плавающей точкой"):  */
    float a, h; /* переменные следует объявлять как можно ближе
                     к месту первого использования, но только в начале 
                     блока (то есть сразу после символа '{')           */

    setlocale(LC_ALL, ""); /* позволит отображать кириллицу в консоли  */

    printf("Введите основание и высоту: ");

    /* чтение с клавиатуры: */
    scanf("%f %f", &a, &h);
    /* арг #1: формат вводимых данных; %f - для числа с плавающей точкой 
       арг #2, 3: адреса (&) переменных для записи результата          */

    printf("S = %f\n", a * h / 2);
    /* %f - "местоблюститель" (placeholder) для числа с плавающей 
        точкой (float); вместо %f будет подставлено значение, заданное 
        во втором аргументе printf                                     */
}


3. Вычислить сумму цифр заданного целого двузначного числа.

// Сумма цифр целого двузначного числа
program Digits;

var n, d1, d2, digitsSum: integer;

begin
    Writeln('Введите целое двузначное число');
    Readln(n);
    d1 := n div 10;
    d2 := n mod 10;
    digitsSum := d1 + d2;
    Writeln('S = ', digitsSum);
end.
#include <stdio.h>
#include <locale.h>

int main() {
    int n, d1, d2, dSum; /* целочисленные переменные                    */

    setlocale(LC_ALL, "");
    printf("Введите целое двузначное число: ");

    /* чтение с клавиатуры: */
    scanf("%d", &n);
    /* арг #1: формат вводимых данных; 
               %d - для целого числа в десятичной форме (decimal)
       арг #2: адреса переменной для записи результата */

    d1 = n / 10; // серия даже коротких операций пишется ТОЛЬКО В СТОЛБИК
    d2 = n % 10; //   то есть переход на новую строку обязателен!
    dSum = d1 + d2; // этого требуют соглашения об оформлении исходных 
                        // кодов, но не сам язык
    
    printf("Сумма цифр в числе %d равна %d\n", n, dSum);
}


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

Определение функций

В примерах ниже опущено включение (#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 << " ";
    }
}