MOD: Difference between revisions
Jump to navigation
Jump to search
Navigation:
Main Page with Articles and Tutorials
Keyword Reference - Alphabetical
Keyword Reference - By usage
Report a broken link
(Created page with "The MOD operator gives the remainder after division of one number by another (sometimes called modulus). {{PageSyntax}} : {{Parameter|remainder}} = {{Parameter|numerator}} MOD {{Parameter|divisor}} {{Parameters}} * Returns the integer division remainder as a whole INTEGER, LONG or _INTEGER64 value. * {{Parameter|numerator}} is the INTEGER value to divide. * {{Parameter|divisor}} is the INTEGER value to divide by. {{PageDescription}} * F...") |
No edit summary |
||
Line 8: | Line 8: | ||
{{Parameters}} | {{Parameters}} | ||
* Returns the integer division remainder as a whole [[INTEGER]], [[LONG]] or [[_INTEGER64]] value. | * Returns the integer division remainder as a whole [[INTEGER]], [[LONG]] or [[_INTEGER64]] value. | ||
* {{Parameter|numerator}} is the [[INTEGER]] value to divide. | * {{Parameter|numerator}} is the [[INTEGER]] value to divide. | ||
* {{Parameter|divisor}} is the [[INTEGER]] value to divide by. | * {{Parameter|divisor}} is the [[INTEGER]] value to divide by. | ||
Line 14: | Line 14: | ||
{{PageDescription}} | {{PageDescription}} | ||
* Floating decimal point ''numerator'' and ''divisor'' values are [[CINT]] rounded (e.g. {{InlineCode}}19 MOD 6.7{{InlineCodeEnd}} returns 5 just like {{InlineCode}}19 MOD 7{{InlineCodeEnd}} would). | * Floating decimal point ''numerator'' and ''divisor'' values are [[CINT]] rounded (e.g. {{InlineCode}}19 MOD 6.7{{InlineCodeEnd}} returns 5 just like {{InlineCode}}19 MOD 7{{InlineCodeEnd}} would). | ||
* MOD returns 0 if a number is evenly divisible by integer division ( [[\]] ) or the number divided is 0. | * MOD returns 0 if a number is evenly divisible by integer division ( [[\]] ) or the number divided is 0. | ||
* '''{{Parameter|divisor}} (second value) must not be between 0 and .5'''. This will create a [[ERROR Codes|"Division by zero" error]] due to [[CINT]] rounding the value to 0. | * '''{{Parameter|divisor}} (second value) must not be between 0 and .5'''. This will create a [[ERROR Codes|"Division by zero" error]] due to [[CINT]] rounding the value to 0. | ||
* The result has the same sign as the numerator (e.g. {{InlineCode}}-1 MOD 7{{InlineCodeEnd}} returns -1, not 6). | * The result has the same sign as the numerator (e.g. {{InlineCode}}-1 MOD 7{{InlineCodeEnd}} returns -1, not 6). | ||
Line 21: | Line 21: | ||
{{PageExamples}} | {{PageExamples}} | ||
''Example 1:'' | ''Example 1:'' | ||
{{CodeStart}} | {{CodeStart}} | ||
I% = 100 {{Cl|\}} 9 | I% = 100 {{Cl|\}} 9 | ||
R% = 100 {{Cl|MOD}} 9 | R% = 100 {{Cl|MOD}} 9 | ||
PRINT "Integer division ="; I%, "Remainder ="; R% | PRINT "Integer division ="; I%, "Remainder ="; R% | ||
{{CodeEnd}} | {{CodeEnd}} | ||
{{OutputStart}} | {{OutputStart}} | ||
Integer division = 11 Remainder = 1 | Integer division = 11 Remainder = 1 | ||
{{OutputEnd}} | {{OutputEnd}} | ||
Line 51: | Line 51: | ||
LOCATE 7, 20: PRINT USING tmp2$; numerator; divisor; numerator \ divisor | LOCATE 7, 20: PRINT USING tmp2$; numerator; divisor; numerator \ divisor | ||
LOCATE 9, 20: PRINT USING tmp3$; numerator; divisor; numerator MOD divisor | LOCATE 9, 20: PRINT USING tmp3$; numerator; divisor; numerator MOD divisor | ||
DO: SLEEP: LOOP UNTIL INKEY$ <> "" | DO: SLEEP: LOOP UNTIL INKEY$ <> "" | ||
NEXT | NEXT | ||
{{CodeEnd}} | {{CodeEnd}} | ||
''Example 3:'' Integer division and MOD can be used to convert values to different base numbering systems from base 2 to 36 as [[STRING|strings]]: | ''Example 3:'' Integer division and MOD can be used to convert values to different base numbering systems from base 2 to 36 as [[STRING|strings]]: | ||
{{CodeStart}} | {{CodeStart}} | ||
{{Cl|CLS}} | {{Cl|CLS}} | ||
DO | DO | ||
Line 89: | Line 89: | ||
{{Cl|LOOP}} {{Cl|UNTIL}} num& = 0 | {{Cl|LOOP}} {{Cl|UNTIL}} num& = 0 | ||
BASEN$ = BN$ | BASEN$ = BN$ | ||
{{Cl|END FUNCTION}} | {{Cl|END FUNCTION}} | ||
{{CodeEnd}} | {{CodeEnd}} | ||
: ''Note:'' Base numbering systems over base 10(0 - 9) use alphabetical letters to represent digits greater than 9 like [[&H|Hexadecimal]](0 - F). | : ''Note:'' Base numbering systems over base 10(0 - 9) use alphabetical letters to represent digits greater than 9 like [[&H|Hexadecimal]](0 - F). |
Revision as of 02:06, 23 January 2023
The MOD operator gives the remainder after division of one number by another (sometimes called modulus).
Syntax
- remainder = numerator MOD divisor
- Returns the integer division remainder as a whole INTEGER, LONG or _INTEGER64 value.
- numerator is the INTEGER value to divide.
- divisor is the INTEGER value to divide by.
Description
- Floating decimal point numerator and divisor values are CINT rounded (e.g. 19 MOD 6.7 returns 5 just like 19 MOD 7 would).
- MOD returns 0 if a number is evenly divisible by integer division ( \ ) or the number divided is 0.
- divisor (second value) must not be between 0 and .5. This will create a "Division by zero" error due to CINT rounding the value to 0.
- The result has the same sign as the numerator (e.g. -1 MOD 7 returns -1, not 6).
- Division and multiplication operations are performed before addition and subtraction in QBasic's order of operations.
Examples
Example 1:
I% = 100 \ 9 R% = 100 MOD 9 PRINT "Integer division ="; I%, "Remainder ="; R% |
Integer division = 11 Remainder = 1 |
Explanation: Integer division 100 \ 9 returns 11. 11 * 9 = 99. So the remainder must be 1 as 100 - 99 = 1. Normal decimal point division would return 11.11111.
Example 2: Comparing normal, integer and remainder division.
tmp1$ = " Normal: ####.# / #### = ##.### " tmp2$ = " Integer: ####.# \ #### = ### " tmp3$ = " Remainder: ####.# MOD #### = #### " FOR i = 1 TO 6 SELECT CASE i CASE 1: numerator = 1: divisor = 5 CASE 2: numerator = 13: divisor = 10 CASE 3: numerator = 990: divisor = 100 CASE 4: numerator = 1100: divisor = 100 CASE 5: numerator = 4501: divisor = 1000 CASE 6: numerator = 50.6: divisor = 10 END SELECT LOCATE 5, 20: PRINT USING tmp1$; numerator; divisor; numerator / divisor LOCATE 7, 20: PRINT USING tmp2$; numerator; divisor; numerator \ divisor LOCATE 9, 20: PRINT USING tmp3$; numerator; divisor; numerator MOD divisor DO: SLEEP: LOOP UNTIL INKEY$ <> "" NEXT |
Example 3: Integer division and MOD can be used to convert values to different base numbering systems from base 2 to 36 as strings:
CLS DO INPUT "Enter a base number system 2 to 36: ", b% IF b% < 2 OR b% > 36 THEN EXIT DO PRINT "Enter a positive value to convert: "; num$ = "" DO: K$ = INKEY$ num$ = num$ + K$ LOCATE CSRLIN, POS(0): PRINT K$; LOOP UNTIL K$ = CHR$(13) n& = VAL(num$) IF n& = 0 THEN EXIT DO Bnum$ = BASEN$(n&, b%) PRINT Bnum$ ', VAL("&H" + Bnum$) 'tests hexadecimal base 16 only LOOP END FUNCTION BASEN$ (number&, basenum%) IF basenum% < 2 OR basenum% > 36 OR number& = 0 THEN EXIT FUNCTION num& = number& 'protect value of number! DO remain% = ABS(num&) MOD basenum% ' remainder is used to create actual digit 0 to Z num& = num& \ basenum% ' move up one exponent of base% with integer division IF remain% > 9 THEN b$ = CHR$(65 + (remain% - 10)) 'limited to base 36 ELSE: b$ = LTRIM$(STR$(remain%)) ' make remainder a string number END IF BN$ = b$ + BN$ ' add remainder character to base number string LOOP UNTIL num& = 0 BASEN$ = BN$ END FUNCTION |
- Note: Base numbering systems over base 10(0 - 9) use alphabetical letters to represent digits greater than 9 like Hexadecimal(0 - F).
See also
- / (normal division operator)
- \ (integer division operator)
- INT, CINT, FIX, _ROUND, _CEIL
- Mathematical Operations