Programeer opdrachtenOpdracht : opdr2b_DirkjeGerrits.txt

Terug naar de inzendingen
Opdracht 2b,Dirk Gerrits second edition
5-Feb-2005
 Ternauwernood toch nog 2b weten te doen met Forth. Er is geen error checking of andere fancy zaken, daarvoor schiet mijn kennis van de taal momenteel nog tekort.
 1 
*****palindroom.fs*****
  
 2\ Copyright (c) 2005, Dirk H.P. Gerrits 
 3\
 4\ Permission is hereby granted, free of charge, to any person obtaining a
 5\ copy of this software and associated documentation files (the "Software"),
 6\ to deal in the Software without restriction, including without limitation
 7\ the rights to use, copy, modify, merge, publish, distribute, sublicense,
 8\ and/or sell copies of the Software, and to permit persons to whom the
 9\ Software is furnished to do so, subject to the following conditions:
 10\
 11\ The above copyright notice and this permission notice shall be included in
 12\ all copies or substantial portions of the Software.
 13\
 14\ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 15\ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 16\ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 17\ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 18\ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 19\ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 20\ DEALINGS IN THE SOFTWARE.
 21\
 22\ Summary
 23\ ---------------------------------------------------------------------------
 24\ This program transforms the words in a string as described in Pascal Schiks's
 25\ programming assignment 2b:
 26\ - palindromes have their first and last character capitalized
 27\ - other words are reversed
 28\ - the order of the words in the string remains unchanged
 29\
 30\ Usage:
 31\ ---------------------------------------------------------------------------
 32\ Run the file with your favorite Forth implementation.  With GNU Forth
 33\ (http://www.gnu.org/software/gforth/gforth.html) this can be done as follows:
 34\
 35\ $ gforth palindromes.fs -e 'bye'
 36\
 37\ This should display the transformation of the default string.
 38\
 39\ ---------------------------------------------------------------------------
 40
 41: UPCASE  ( c -- C)  95 AND ;
 42: UPCASE!  ( adr --)  DUP  C@ UPCASE  SWAP C! ;
 43: SPACE=  ( c -- t=c is a space)  32 = ;
 44: 2C@  ( adr1 adr2 -- c1 c2)  C@ SWAP C@ SWAP ;
 45: FIRST&LAST  ( first-adr len -- first-adr last-adr)  OVER + 1- ;
 46: END&FIRST  ( first-adr len -- end-adr first-adr)  OVER + SWAP ;
 47: TYPE-REVERSE  ( adr n -- )  FIRST&LAST  DO  I C@ EMIT  -1 +LOOP ;
 48: PALINDROME?  ( adr n -- t)
 49    -1 >R  FIRST&LAST BEGIN
 50        2DUP 2C@ - IF  SWAP  RDROP 0 >R  THEN  1 -1 D+
 51    2DUP >= UNTIL  2DROP R> ;
 52: WORD.END  ( beg-adr end-adr -- word-end-adr)
 53    DUP ROT  DO  I C@ SPACE=  IF  DROP I  LEAVE  THEN  LOOP ;
 54: WORD.LEN  ( beg-adr end-adr -- word-len)  OVER SWAP  WORD.END  SWAP - ;
 55: PROCESS.WORD  ( word-adr word-len --)
 56    2DUP PALINDROME?  IF  2DUP  FIRST&LAST UPCASE! UPCASE!  TYPE
 57                      ELSE  TYPE-REVERSE  THEN  SPACE ;
 58: PROCESS.WORDS  ( str-adr str-len --)
 59    END&FIRST  DO  I I' WORD.LEN I OVER  PROCESS.WORD  1+ +LOOP  CR ;
 60
 61S" In deze programeer opdracht lepel staan naast gewone nepapen woorden ook een paar topspot palindromen meeneem droogoord"
 62  PROCESS.WORDS
 
 
Mijn commentaar
 
 Ik zou het zonde vinden om deze tweede inzending van Dirk verloren te laten gaan.
 Verzoeke echter ivm het vele werk dat deze opdrachten met zich mee brengt
 slechts 1 versie per opdracht in te sturen.
 Dank je Dirk voor deze Forth demonstratie !