Вопрос по паскалю, урок 3 (типы данных) - присваивание переменным выражений и литералов, требование совпадения типа

Вопрос по паскалю, урок 3 (типы данных)

Например я пытаюсь задать переменной тип integer,он может быть представлен выражением, литералами и переменными,и вот у меня и возникает вопрос,если я беру литералы то получается только целочисленным я могу его представить?

var a: integer;
begin
     a := 25;
     writeln(a);
     readln();
end.   

почему я не могу задать:

var a: integer;
begin
     a := '25';
     writeln(a);
     readln();
end. 

потому что это строковый литерал?
или если я положу туда выражение
a:= с + b =>я тоже должен понимать что c + b несут в себе результат в виде целого числа,не строки в виде целого числа,а именно число?

vedro-compota's picture

если переменная целочисленная, ей в любом случае должно быть присвоено число.
а число это может браться из:

  1. либо целочисленного литерала
  2. либо переменной того же типа
  3. либо выражения того же типа

Все что справа в любом случае приводится к числу (если надо -вычисляется) и только потом записывается в ячейку памяти.

Также почитать про вычислимость (забегая вперед) можно тут: https://fkn.ktu10.com/?q=node/8724
-- в Паскале любая вычислимая сущность обладает типом, это и дает возможность присваивать ее "результат"

_____________
матфак вгу и остальная классика =)

vedro-compota's picture

я могу его представить

что значит "представить"? откуда такой термин? если его вводишь - поясни что он значит

потому что это строковый литерал?

да, верно, поэтому не можешь, типы не совпадают, см. ответ выше и читай урок)

или если я положу туда выражение
a:= с + b =>я тоже должен понимать что c + b несут в себе результат в виде целого числа,не строки в виде целого числа,а именно число?

да, выражение должно обладать целым типом. Строка, чтобы в ней написано ни было - не целый тип.

_____________
матфак вгу и остальная классика =)