slogan3

Maak een Fortran-programma voor aangepaste stringmanipulatiehulpmiddelen

description

Met deze prompt kun je op maat gemaakte functies voor stringmanipulatie in Fortran maken, waarmee je veelvoorkomende beperkingen van de native stringverwerking aanpakt. Je leert complexe stringbewerkingen efficiënt te verwerken met duidelijke voorbeelden en best practices, wat de onderhoudbaarheid en bruikbaarheid van je code verbetert.

prompt

Help me een Fortran-programma te maken dat aangepaste stringmanipulatiehulpmiddelen implementeert voor de volgende taken: <stringmanipulatietaken>. Voeg voorbeelden toe van het gebruik van deze functies en leg best practices uit voor stringver ...

try_prompt

generate_helper
disclaimerOnPageApi

ai_answers

provider: openai
model: gpt-4.1-nano
Natuurlijk! Hier is een eenvoudig Fortran 77-programma dat functies bevat voor het verwijderen van witruimte, omzetten naar hoofdletters en kleine letters. Ik heb ook voorbeelden toegevoegd en enkele best practices voor stringverwerking in Fortran 77. **Let op:** Fortran 77 ondersteunt geen dynamische strings, dus we werken met vaste lengtes. Het is belangrijk om de stringlengte aan te passen aan je behoeften. --- ```fortran PROGRAM StringManipulation C Voorbeeldprogramma voor stringbewerkingen in Fortran 77 CHARACTER*100 :: inputStr CHARACTER*100 :: trimmedStr CHARACTER*100 :: upperStr CHARACTER*100 :: lowerStr PRINT *, 'Voer een string in (max 100 karakters):' READ *, inputStr C Verwijder witruimte aan het begin en eind CALL trimSpaces(inputStr, trimmedStr) PRINT *, 'Geschoonde string: ', trimmedStr C Zet om naar hoofdletters CALL toUpper(trimmedStr, upperStr) PRINT *, 'Hoofdletters: ', upperStr C Zet om naar kleine letters CALL toLower(trimmedStr, lowerStr) PRINT *, 'Kleine letters: ', lowerStr STOP END C======================================================================= C Functie: trimSpaces C Verwijdert witruimte aan het begin en einde van de string C======================================================================= SUBROUTINE trimSpaces(str, result) CHARACTER*(*) :: str, result INTEGER :: startPos, endPos, i C Vind eerste niet-witte ruimte van links startPos = 1 DO WHILE (startPos <= LEN(str)) IF (str(startPos:startPos) .NE. ' ') THEN EXIT END DO startPos = startPos + 1 END DO C Vind eerste niet-witte ruimte van rechts endPos = LEN(str) DO WHILE (endPos >= startPos) IF (str(endPos:endPos) .NE. ' ') THEN EXIT END DO endPos = endPos - 1 END DO C Kopieer de gesnoeide string IF (endPos < startPos) THEN result = '' ELSE result = str(startPos:endPos) END IF RETURN END C======================================================================= C Subroutine: toUpper C Zet de string om naar hoofdletters C======================================================================= SUBROUTINE toUpper(str, result) CHARACTER*(*) :: str, result INTEGER :: i CHARACTER :: ch DO i = 1, LEN(str) ch = str(i:i) IF (ch .GE. 'a' .AND. ch .LE. 'z') THEN result(i:i) = CHR(ICHAR(ch) - 32) ELSE result(i:i) = ch END IF END DO RETURN END C======================================================================= C Subroutine: toLower C Zet de string om naar kleine letters C======================================================================= SUBROUTINE toLower(str, result) CHARACTER*(*) :: str, result INTEGER :: i CHARACTER :: ch DO i = 1, LEN(str) ch = str(i:i) IF (ch .GE. 'A' .AND. ch .LE. 'Z') THEN result(i:i) = CHR(ICHAR(ch) + 32) ELSE result(i:i) = ch END IF END DO RETURN END ``` --- ### Uitleg en best practices: 1. **Gebruik vaste strings**: In Fortran 77 werk je met vaste lengte strings (`CHARACTER*N`). Zorg dat de invoer niet langer is dan de maximale lengte. 2. **Witruimte verwijderen**: De `trimSpaces`-functie verwijdert witruimte aan het begin en einde door twee lussen te gebruiken die zoeken naar de eerste niet-witte ruimte van links en rechts. 3. **Omzetten naar hoofd- en kleine letters**: - `ICHAR` geeft de ASCII-code van een teken. - `CHR` converteert een ASCII-code terug naar een teken. - Het verschil tussen kleine en hoofdletters in ASCII is 32. 4. **Invoer en uitvoer**: Gebruik `READ` en `PRINT` voor interactie. Houd rekening met de maximale stringlengte. 5. **Compatibiliteit**: Dit programma is volledig compatibel met Fortran 77, zonder gebruik van dynamische geheugenallocatie of modules. --- ### Voorbeeld: Stel je voert in: ` Hallo Wereld! ` De uitvoer zou zijn: ``` Geschoonde string: Hallo Wereld! Hoofdletters: HALLO WERELD! Kleine letters: hallo wereld! ``` --- Mocht je verdere hulp nodig hebben bij het uitbreiden of aanpassen van dit programma, laat het gerust weten!
provider: deepseek
model: deepseek-chat
Hier is een Fortran 77 programma met de gevraagde stringmanipulatiefuncties: ```fortran PROGRAM STRING_MANIPULATIE IMPLICIT NONE CHARACTER*50 :: tekst CHARACTER*50 :: resultaat INTEGER :: i C Voorbeeld 1: Witruimte verwijderen tekst = ' Fortran 77 String Verwerking ' CALL VERWIJDER_WITRUIMTE(tekst, resultaat) WRITE(*,*) 'Origineel: "', tekst, '"' WRITE(*,*) 'Zonder witruimte: "', resultaat, '"' WRITE(*,*) C Voorbeeld 2: Naar hoofdletters omzetten tekst = 'Fortran Programming' CALL NAAR_HOOFDLETTERS(tekst, resultaat) WRITE(*,*) 'Origineel: "', tekst, '"' WRITE(*,*) 'Hoofdletters: "', resultaat, '"' WRITE(*,*) C Voorbeeld 3: Naar kleine letters omzetten tekst = 'FORTRAN 77 STANDARD' CALL NAAR_KLEINE_LETTERS(tekst, resultaat) WRITE(*,*) 'Origineel: "', tekst, '"' WRITE(*,*) 'Kleine letters: "', resultaat, '"' END PROGRAM C Subroutine om witruimte te verwijderen SUBROUTINE VERWIJDER_WITRUIMTE(invoer, uitvoer) CHARACTER*(*) invoer, uitvoer INTEGER i, j, len_in, len_uit len_in = LEN(invoer) j = 1 DO i = 1, len_in IF (invoer(i:i) .NE. ' ') THEN uitvoer(j:j) = invoer(i:i) j = j + 1 ENDIF END DO C Vul rest op met spaties DO i = j, len_in uitvoer(i:i) = ' ' END DO END SUBROUTINE C Subroutine om naar hoofdletters om te zetten SUBROUTINE NAAR_HOOFDLETTERS(invoer, uitvoer) CHARACTER*(*) invoer, uitvoer INTEGER i, len_str CHARACTER*1 ch len_str = LEN(invoer) DO i = 1, len_str ch = invoer(i:i) IF (ch .GE. 'a' .AND. ch .LE. 'z') THEN uitvoer(i:i) = CHAR(ICHAR(ch) - 32) ELSE uitvoer(i:i) = ch ENDIF END DO END SUBROUTINE C Subroutine om naar kleine letters om te zetten SUBROUTINE NAAR_KLEINE_LETTERS(invoer, uitvoer) CHARACTER*(*) invoer, uitvoer INTEGER i, len_str CHARACTER*1 ch len_str = LEN(invoer) DO i = 1, len_str ch = invoer(i:i) IF (ch .GE. 'A' .AND. ch .LE. 'Z') THEN uitvoer(i:i) = CHAR(ICHAR(ch) + 32) ELSE uitvoer(i:i) = ch ENDIF END DO END SUBROUTINE ``` **Best practices voor stringverwerking in Fortran 77:** 1. **Vaste lengte strings**: Gebruik altijd CHARACTER*N declaraties 2. **Spatie-opvulling**: Strings worden opgevuld met spaties, houd hier rekening mee 3. **Length functie**: Gebruik LEN() om de gedeclareerde lengte te krijgen 4. **Trimmen**: Gebruik TRIM() voor dynamische lengte (indien beschikbaar) 5. **Indexering**: Strings zijn 1-geïndexeerd (niet 0) 6. **Substring extractie**: Gebruik string(i:j) voor substrings 7. **Concatenatie**: Gebruik // operator voor samenvoegen 8. **Vergelijking**: Gebruik .EQ. .NE. .LT. .GT. voor stringvergelijkingen **Compilatie en uitvoering:** ```bash gfortran -std=legacy programma.f -o programma ./programma ``` **Verwachte output:** ``` Origineel: " Fortran 77 String Verwerking " Zonder witruimte: "Fortran77StringVerwerking" Origineel: "Fortran Programming" Hoofdletters: "FORTRAN PROGRAMMING" Origineel: "FORTRAN 77 STANDARD" Kleine letters: "fortran 77 standard" ```