Difference between revisions of "*"

From Free Pascal wiki
Jump to navigationJump to search
m (→‎other appearances: fixing style/layout error)
m (→‎exponentiation: fix link)
 
(5 intermediate revisions by the same user not shown)
Line 4: Line 4:
  
 
== standard Pascal ==
 
== standard Pascal ==
The symbol <syntaxhighlight lang="pascal" enclose="none">*</syntaxhighlight>, pronounced “asterisk”, is used in [[Pascal]] to
+
The symbol <syntaxhighlight lang="pascal" inline>*</syntaxhighlight>, pronounced “asterisk”, is used in [[Pascal]] to
 
* indicate multiplication of numbers, or
 
* indicate multiplication of numbers, or
 
* form the intersection of [[Set|sets]].
 
* form the intersection of [[Set|sets]].
Line 32: Line 32:
  
 
== exponentiation ==
 
== exponentiation ==
Furthermore, in [[FPC]] the exponentiation operator consisting of two consecutive asterisks <syntaxhighlight lang="pascal" enclose="none">**</syntaxhighlight> exists.
+
Furthermore, in [[FPC]] the exponentiation operator consisting of two consecutive asterisks <syntaxhighlight lang="pascal" inline>**</syntaxhighlight> exists.
However, it isn't defined for any type by the standard system unit.
+
However, it is only {{Doc|package=RTL|unit=system|identifier=.op-power-variant-ariant-ariant|text=defined for variants}} by the standard system unit, which requires a variant manager being installed.
Instead you have the chance to overload it on your own.
+
In order to actually use it with integers, one can [[Operator overloading|define]] it on their own:
 
+
<syntaxhighlight lang="pascal" highlight="6-12,15">
<syntaxhighlight lang="pascal" highlight="6-9,12">
+
program exponentiation(input, output, stdErr);
program exponentiation(input, output, stderr);
 
  
 
// make operator overloading available
 
// make operator overloading available
{$mode objfpc}
+
{$mode objFPC}
  
 
operator ** (const base: integer; const exponent: integer): integer;
 
operator ** (const base: integer; const exponent: integer): integer;
 
begin
 
begin
result := trunc(exp(ln(base) * exponent));
+
if base <> 0 then
 +
begin
 +
result := trunc(exp(ln(base) * exponent));
 +
end;
 
end;
 
end;
  
Line 52: Line 54:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
For readily available overloads, the {{Doc|package=RTL|unit=math|text=<syntaxhighlight lang="pascal" enclose="none">math</syntaxhighlight>}} and {{Doc|package=RTL|unit=math|text=<syntaxhighlight lang="pascal" enclose="none">matrix</syntaxhighlight> unit}} can be [[Uses|included]].
+
For readily available overloads, the {{Doc|package=RTL|unit=math|text=<syntaxhighlight lang="pascal" inline>math</syntaxhighlight>}} and {{Doc|package=RTL|unit=matrix|text=<syntaxhighlight lang="pascal" inline>matrix</syntaxhighlight> unit}} can be [[Uses|included]].
  
 
== other appearances ==
 
== other appearances ==
In Pascal's years of childhood computer systems did not necessarily knew the [[Comments|comment]] delimiting characters opening and closing curly brace <syntaxhighlight lang="pascal" enclose="none">{ }</syntaxhighlight>.
+
In Pascal's years of childhood computer systems did not necessarily knew the [[Comments|comment]] delimiting characters opening and closing curly brace <syntaxhighlight lang="pascal" inline>{ }</syntaxhighlight>.
To make block comments available on such systems an alternative syntax, the bigramms <syntaxhighlight lang="pascal" enclose="none">(*</syntaxhighlight> and <syntaxhighlight lang="pascal" enclose="none">*)</syntaxhighlight> are allowed, too, but they can't be interchanged willynilly:
+
To make block comments available on such systems an alternative syntax, the bigramms <syntaxhighlight lang="pascal" inline>(*</syntaxhighlight> and <syntaxhighlight lang="pascal" inline>*)</syntaxhighlight> are allowed, too, but they can't be interchanged willynilly:
<syntaxhighlight lang="pascal" enclose="none">(*</syntaxhighlight> ''has'' to match a <syntaxhighlight lang="pascal" enclose="none">*)</syntaxhighlight>, and can ''not'' match a <syntaxhighlight lang="pascal" enclose="none">}</syntaxhighlight> even though it is closing a block comment, too.
+
<syntaxhighlight lang="pascal" inline>(*</syntaxhighlight> ''has'' to match a <syntaxhighlight lang="pascal" inline>*)</syntaxhighlight>, and can ''not'' match a <syntaxhighlight lang="pascal" inline>}</syntaxhighlight> even though it is closing a block comment, too.
  
Also, if C like operators were allowed by the compiler directive [[sCoperator|<syntaxhighlight lang="pascal" enclose="none">{$COperator on}</syntaxhighlight>]], the short syntax for <syntaxhighlight lang="pascal" enclose="none">i := i * n</syntaxhighlight> reads <syntaxhighlight lang="pascal" enclose="none">i *= n</syntaxhighlight>.
+
Also, if C like operators were allowed by the compiler directive [[sCoperator|<syntaxhighlight lang="pascal" inline>{$COperator on}</syntaxhighlight>]], the short syntax for <syntaxhighlight lang="pascal" inline>i := i * n</syntaxhighlight> reads <syntaxhighlight lang="pascal" inline>i *= n</syntaxhighlight>.
 
But by doing so, you leave the domain of Pascal.
 
But by doing so, you leave the domain of Pascal.
 
Your code technically, mathematically speaking becomes wrong.
 
Your code technically, mathematically speaking becomes wrong.
  
In [[ASCII]], the character code decimal <syntaxhighlight lang="pascal" enclose="none">42</syntaxhighlight> (or [[Hexadecimal|hexadecimal]] <syntaxhighlight lang="pascal" enclose="none">2A</syntaxhighlight>) is defined to be <syntaxhighlight lang="pascal" enclose="none">*</syntaxhighlight>.
+
In [[ASCII]], the character code decimal <syntaxhighlight lang="pascal" inline>42</syntaxhighlight> (or [[Hexadecimal|hexadecimal]] <syntaxhighlight lang="pascal" inline>2A</syntaxhighlight>) is defined to be <syntaxhighlight lang="pascal" inline>*</syntaxhighlight>.
  
 
{{Symbols}}
 
{{Symbols}}
 
[[Category:Code]]
 
[[Category:Code]]

Latest revision as of 16:10, 27 November 2022

English (en) suomi (fi) français (fr) русский (ru)

*

standard Pascal

The symbol *, pronounced “asterisk”, is used in Pascal to

  • indicate multiplication of numbers, or
  • form the intersection of sets.
program asteriskDemo(input, output, stderr);

type
	day = (monday, tuesday, wednesday,
		thursday, friday, saturday, sunday);

var
	i: longint;
	n: real;
	m: set of day;

begin
	// multiplication operator
	i := 6 * 7;      // i becomes 42
	n := 6.0 * 7.0;  // n becomes 42.0
	
	// intersection operator
	m := [saturday, sunday] * [sunday, monday];
	// m is now {sunday}
end.

exponentiation

Furthermore, in FPC the exponentiation operator consisting of two consecutive asterisks ** exists. However, it is only defined for variants by the standard system unit, which requires a variant manager being installed. In order to actually use it with integers, one can define it on their own:

program exponentiation(input, output, stdErr);

// make operator overloading available
{$mode objFPC}

operator ** (const base: integer; const exponent: integer): integer;
begin
	if base <> 0 then
	begin
		result := trunc(exp(ln(base) * exponent));
	end;
end;

begin
	writeLn(2 ** 10); // will print 1024
end.

For readily available overloads, the math and matrix unit can be included.

other appearances

In Pascal's years of childhood computer systems did not necessarily knew the comment delimiting characters opening and closing curly brace { }. To make block comments available on such systems an alternative syntax, the bigramms (* and *) are allowed, too, but they can't be interchanged willynilly: (* has to match a *), and can not match a } even though it is closing a block comment, too.

Also, if C like operators were allowed by the compiler directive {$COperator on}, the short syntax for i := i * n reads i *= n. But by doing so, you leave the domain of Pascal. Your code technically, mathematically speaking becomes wrong.

In ASCII, the character code decimal 42 (or hexadecimal 2A) is defined to be *.


navigation bar: topic: Pascal symbols
single characters

+ (plus)  •  - (minus)  •  * (asterisk)  •  / (slash)
= (equal)  •  > (greater than)  •  < (less than)
. (period)  •  : (colon)  •  ; (semi colon)
^ (hat)  •  @ (at)
$ (dollar sign)  •  & (ampersand)  •  # (hash)
' (single quote)

character pairs

<> (not equal)  •  <= (less than or equal)  •  := (becomes)  •  >= (greater than or equal)

 •  >< (symmetric difference)  •  // (double slash)