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
tags
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"
```