golian, пока ты со
Sla доводишь до кондиции алгоритм, я буду проводить параллели между Pascal и C++.
Pascal - язык, где регистр букв не имеет значения, в C++ регистр букв имеет значение.
Каркас программы, место, откуда начинается выполнение:
program X;
begin
{ Тут полезные действия }
end.
int main()
{
/* Тут полезные действия */
return 0;
}
Любая последовательность действий, рассматриваемая как единое целое, называется исполняемым блоком, который заключается в соответствующие скобки. В Pascal это
begin { Тут последовательность действий. } end
{ /* тут последовательность действий. */ }
В C++ фигурные скобки используются ещё в некоторых случаях, но начинающему это не важно.
Определение переменных должно быть до места их использования. Но в Pascal они всегда объявляются вне блока, который их использует, в отдельной секции, а в C++ как вне, так и внутри блока. Если есть много переменных одного типа, они перечисляются через запятую.
var x: Integer; y, z: Real;
int x; float y, z;
Поскольку в C++ определение переменной также является частью исполняемого кода, её можно сразу инициализировать. В Pascal такое разрешено только для констант. Константы есть и в C++.
const x: Integer = 1;
var y, z: Real;
begin
y := 2.0;
z := 3.0;
{ Тут какой-то код. }
end;
{
const int x = 1;
float y = 2.0, z = 3.0;
/* Тут какой-то код. */
}
В Pascal есть встроенный тип "множество" (set), в C++ нет никаких близких аналогов. Поэтому советую переписать Pascal-программу без использования этого типа. В Pascal есть встроенный тип "строка" (string), в C++ такой тип не является встроенным, поэтому правила работы с ним несколько отличаются от правил работы в Pascal - особенно в части использования функций работы со строками. Традиционно в C++ пользуются строками, как это делалось в языке C. Строка - это массив символов (типа Char). Советую переписать Pascal-программу таким образом, чтобы вместо string она использовала бы array of Char.
В Pascal операция присваивания всегда рассматривается, как отдельное действие. В C++ присваивание является операцией, могущей использоваться где угодно.
x := 1; y := 1;
x = y = 1;
Тем не менее, начинающим рекомендуется придерживаться Pascal-образного использования этой операции
x = 1; y = 1;
Ветвления в Pascal и С++ одинаковые, ветви else в обоих языках необязательны:
if { условие } then { блок кода } else { блок кода };
if(/* условие */) /* блок кода */ else /* блок кода */
В качестве условий в Pascal принимаются только выражения, вычисление которых даёт результат типа Boolean. В C++ в качестве условий принимаются выражения, вычисление которых даёт результат типа bool или число. Если результат является числом, то запись вида
int x; / * какой-то код */; if(x) / * блок кода */
эквивалентна
int x; /* какой-то код */; if(x != 0) /* блок кода */
При написании условий в C++ нужно внимательно относиться к операторам присваивания и сравнения.
if x = 1 then { блок кода };
if(x == 1) / * блок кода */
Неправильно будет:
if(x = 1) /* блок кода */
хотя это будет будет компилироваться, и программа будет запускаться. Поскольку оператор присваивания можно использовать в любом месте, в данном случае переменной x будет присвоено значение 1, а результатом всего выражения будет число 1, что в качестве условия эквивалентно 1 != 0, т.е. логическому true. Поскольку такие опечатки встречаются часто, рекомендуется записывать условия задом наперёд:
if(1 == x) /* блок кода */
Если в этом случае забыть второй знак равенства, оператор присваивания будет некорректным - нельзя числовой константе присвоить какое-то другое значение.
Цикл с предусловием в Pascal и C++ одинаковый.
while { условие } do { блок кода. };
while(/* условие */) /* блок кода. */
Цикл с постусловием в Pascal записывается с условием выхода из цикла, а не условием выполнения цикла (т.е. противоположен условию для while). В C++ по-прежнему используется условие выполнения цикла. Поэтому одинаковые циклы в Pascal и C++ будут записываться в виде:
repeat { блок кода }; until not { условие };
do { /* блок кода */ } while(/ * условие */);
Базовые типы данных и разные операторы расписывать не буду. С функциями ввода-вывода ты уже разобрался.