Difference between revisions of "Slash"

From Free Pascal wiki
Jump to navigationJump to search
(I do not miss anything here so removed the stub category)
(substitute legacy syntaxhighlight syntax, refer to Frame instead of Block)
 
(7 intermediate revisions by 3 users not shown)
Line 1: Line 1:
<div style="float:left; margin: 0 10px 10px 0; padding:40px; font-size:500%; font-family: Georgia; background-color: #f9f9f9; border: 2px solid #777777;"><nowiki>/</nowiki></div>
+
{{Slash}}
  
The '''''/''''' or '''slash''' is used in a [[Pascal]] program to perform division. The results are a real value. If you want integer type value then use the [[Div|div]] operator, [[Round|round]] or [[Trunc|trunc]] function . If you want know remainder use [[Mod|mod]].
+
<div style="float:right; margin: 0 25px 20px 0; padding:50px; font-size:500%; font-family: Georgia; background-color: #f9f9f9; border: 2px solid #777777;">/</div>
  
<syntaxhighlight>
+
A single slash, surrounded by non-slash characters is regarded as the division operator.
A := 3 / 4;
+
Two consecutive slashes are regarded as comment introducers.
 +
 
 +
== division ==
 +
The ASCII slash <syntaxhighlight lang="pascal" inline>/</syntaxhighlight> is used in a [[Pascal]] [[Program|program]] to perform division (<syntaxhighlight lang="pascal" inline>∕</syntaxhighlight> U+2215 “division slash”).
 +
The results are ''always'' real values.
 +
If you want to perform integer division the [[Div|<syntaxhighlight lang="pascal" inline>div</syntaxhighlight> operator]] has to be used.
 +
 
 +
<syntaxhighlight lang="pascal">
 +
A := 3 / 4;
 
</syntaxhighlight>
 
</syntaxhighlight>
 +
After this operation the [[Variable|variable]] <syntaxhighlight lang="pascal" inline>A</syntaxhighlight> holds the value <syntaxhighlight lang="pascal" inline>0.75</syntaxhighlight> (assuming <syntaxhighlight lang="pascal" inline>A</syntaxhighlight> is declared as a real value [[Type|type]], otherwise the [[Compiler|compiler]] generates an incompatible type error).
 +
 +
=== related exceptions ===
 +
The value on the right side of the slash must not be zero, or a division by zero error occurs.
 +
In [[Compiler Mode|modes]] where [[Exceptions|exceptions]] are available (e.g. [[Mode ObjFPC|ObjFPC]] and [[Mode Delphi|Delphi]] mode) this condition can be caught by using a [[Try|<syntaxhighlight lang="pascal" inline>try</syntaxhighlight>]] …  [[Except|<syntaxhighlight lang="pascal" inline>except</syntaxhighlight>]] [[Frame|frame]].
 +
Otherwise a [[runtime error|run-time error]] occurs (RTE 200).
 +
<syntaxhighlight lang="pascal" highlight="25-30">program divZeroDemo(input, output, stderr);
 +
 +
// ObjFPC mode for exceptions
 +
{$mode objfpc}
  
returns 0.75 if a is real (if a is integer-type then get error:Incompatible types).
+
uses
 +
// make exception EDivByZero known
 +
sysutils;
  
The value on the right side of the slash must not be zero, or a division by zero error occurs. This can be caught through use of a [[Try|try]] .. [[Finally|finally]] or [[Try|try]] .. [[Except|except]] block.
+
const
 +
dividend = 1.1;
 +
 
 +
resourcestring
 +
enterDivisorPrompt = 'Enter divisor:';
 +
divisionOperationExceptionless = 'Division did not cause an exception.';
 +
zeroDivisionFailure = 'Error: Attempted to divide by zero.';
 +
 
 +
var
 +
divisor, quotient: single;
 +
 
 +
begin
 +
writeLn(enterDivisorPrompt);
 +
readLn(divisor);
 +
 +
try
 +
quotient := dividend / divisor;
 +
writeLn(divisionOperationExceptionless);
 +
except on EDivByZero do
 +
writeLn(zeroDivisionFailure);
 +
end;
 +
end.</syntaxhighlight>
 +
{{Note|
 +
Exception handling is expensive.
 +
A plain test whether the user input is non-zero would have been in the above example more sophisticated.}}
 +
 
 +
== comment ==
 +
Two slashes back to back introduce [[Comments|comments]] till the [[End of Line|end of line]].
 +
This is also known as “Delphi-style comment”.
 +
<syntaxhighlight lang="delphi" line start="1345">
 +
while (buf^ in [' ', #9, #10]) do // kill separators
 +
</syntaxhighlight>
 +
<small>[https://svn.freepascal.org/cgi-bin/viewvc.cgi/tags/release_3_0_4/rtl/inc/system.inc?view=markup#l1345 example source]</small>
 +
 
 +
== see also ==
 +
* [[Round|<syntaxhighlight lang="pascal" inline>round</syntaxhighlight>]]
 +
* [[Trunc|<syntaxhighlight lang="pascal" inline>trunc</syntaxhighlight>]]
  
 
{{Symbols}}
 
{{Symbols}}
 
[[Category:FPC]]
 
[[Category:Symbols]]
 

Latest revision as of 02:00, 26 January 2021

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

/

A single slash, surrounded by non-slash characters is regarded as the division operator. Two consecutive slashes are regarded as comment introducers.

division

The ASCII slash / is used in a Pascal program to perform division ( U+2215 “division slash”). The results are always real values. If you want to perform integer division the div operator has to be used.

A := 3 / 4;

After this operation the variable A holds the value 0.75 (assuming A is declared as a real value type, otherwise the compiler generates an incompatible type error).

related exceptions

The value on the right side of the slash must not be zero, or a division by zero error occurs. In modes where exceptions are available (e.g. ObjFPC and Delphi mode) this condition can be caught by using a tryexcept frame. Otherwise a run-time error occurs (RTE 200).

program divZeroDemo(input, output, stderr);

// ObjFPC mode for exceptions
{$mode objfpc}

uses
	// make exception EDivByZero known
	sysutils;

const
	dividend = 1.1;

resourcestring
	enterDivisorPrompt = 'Enter divisor:';
	divisionOperationExceptionless = 'Division did not cause an exception.';
	zeroDivisionFailure = 'Error: Attempted to divide by zero.';

var
	divisor, quotient: single;

begin
	writeLn(enterDivisorPrompt);
	readLn(divisor);
	
	try
		quotient := dividend / divisor;
		writeLn(divisionOperationExceptionless);
	except on EDivByZero do
		writeLn(zeroDivisionFailure);
	end;
end.
Note-icon.png

Note: Exception handling is expensive. A plain test whether the user input is non-zero would have been in the above example more sophisticated.

comment

Two slashes back to back introduce comments till the end of line. This is also known as “Delphi-style comment”.

1345while (buf^ in [' ', #9, #10]) do // kill separators

example source

see also


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)