| af Martin Elsman og Niels Hallenberg | sidst rettet 15. februar, 2002 |
source.Inden du starter på øvelsen er det hensigtsmæssigt at du læser noten A Smooth Introduction to Tcl for Web Nerds og prøver at køre eksemplerne i noten. Øvelsen består af fem opgaver.
Ved gradueringen lægges der bl.a. vægt på:
while.tcl, som når det udføres
med source udskriver
på skærmen. Programmet skal konstrueres ved hjælp af en% source while.tcl 3 6 9 12 15 18 21 24 27 Efter løkken er i 30
while løkke, hvor variablen i anvendes som
tæller; du kan f.eks. anvende følgende skabelon:
set i ...
while { ........ } {
puts "$i"
...
}
puts "Efter løkken er i $i"
Kopier besvarelsen til hug.it.edu som
/web/login/www/oevelse2/while.tcl - herved bliver
filen tilgængelig for de kursusansvarlige til retning. Bemærk at
biblioteket /web/login/www/oevelse2/ allerede er blevet
oprettet; det er meget vigtigt at besvarelserne på opgavene i øvelse 2
bliver kopieret til dette bibliotek!
ugedag.tcl, som indeholder en
procedure ugedag, som tager et heltal dg som
argument og returnerer den ugedag som svarer til dg. Tabellen
angiver hvilke ugedage
dgreturværdi 1 Mandag 2 Tirsdag 3 Onsdag 4 Torsdag 5 Fredag 6 Lørdag 7 Søndag alle andre tal Ukendt dag
dg svarer til. Hvis
dg er mindre end 1 eller større end 7, så returneres
"Ukendt dag". Du kan anvende følgende skabelon:
proc ugedag { dg } {
if {$dg == 1} {
return "Mandag"
} elseif {$dg == 2} {
return "Tirsdag"
} ...
} else {
return "Ukendt dag"
}
}
# Test af ugedag
set i 0
while {$i < 9} {
puts [ugedag $i]
incr i
}
Her er uddata ved kørsel af den vejlende løsning:
Kopier besvarelsen til hug.it.edu som% source ugedag.tcl Ukendt dag Mandag Tirsdag Onsdag Torsdag Fredag Lørdag Søndag Ukendt dag %
/web/login/www/oevelse2/ugedag.tcl.
multabel som givet et tal udskriver en
multiplikationstabel for dette tal. Skriv din procedure i en fil
multabel.tcl, således at du kan bruge Tcl-kommandoen
source til at hente proceduren ind i Tcl-fortolkeren, når
denne startes. Det skal altså være muligt at skrive følgende, når
Tcl-fortolkeren startes:
Kopier besvarelsen til hug.it.edu som% source multabel.tcl % multabel 3 0 times 3 is 0 1 times 3 is 3 2 times 3 is 6 3 times 3 is 9 4 times 3 is 12 5 times 3 is 15 6 times 3 is 18 7 times 3 is 21 8 times 3 is 24 9 times 3 is 27
/web/login/www/oevelse2/multabel.tcl.
Kopier besvarelsen til hug.it.edu som% source multabel2.tcl % multabel2 3 9 times 3 is 27 8 times 3 is 24 7 times 3 is 21 6 times 3 is 18 5 times 3 is 15 4 times 3 is 12 3 times 3 is 9 2 times 3 is 6 1 times 3 is 3 0 times 3 is 0
/web/login/www/oevelse2/multabel2.tcl.
homepage, som
kan generere en standard HTML-hjemmeside. Proceduren skal tage to argumenter,
et navn og en email adresse. Argumenterne skal indgå i
den genererede hjemmeside (du bestemmer selv det præcise layout af
siden):
% source homepage.tcl % homepage "Niels Hallenberg" "nh@itu.dk" <html> ... </html>I ovenstående brug af proceduren
homepage er strengene
"Niels Hallenberg" og "nh@it.edu"
aktuelle argumenter til proceduren.
Kopier din besvarelse til hug.it.edu som
/web/login/www/oevelse2/homepage.tcl.
Hint: Du kan f.eks. overveje at benytte
<address> til at "underskrive" siden, således at man
kan se hvem man skal kontakte, hvis der er noget som ikke
virker. Derudover bør du sikre, at hvis man bogmærker siden, så vil
man få et sigende navn som bogmærke. Du bør også sikre, at man kan
linke tilbage til din indeks-side.
| A | B | A times B |
|---|---|---|
| 0 | 3 | 0 |
| 1 | 3 | 3 |
| 2 | 3 | 6 |
| 3 | 3 | 9 |
| 4 | 3 | 12 |
| 5 | 3 | 15 |
| 6 | 3 | 18 |
| 7 | 3 | 21 |
| 8 | 3 | 24 |
| 9 | 3 | 27 |
Besvarelsen kopieres til hug.it.edu som
/web/login/www/oevelse2/multabel3.tcl.
Du skal nu tilrette besvarelsen således at proceduren ikke udskriver tabellen med
puts kommandoen, men istedet returnerer tabellen som en
lang streng. Kald den nye procedure multabel4. For at
løse opgaven er det nødvendigt at bruge append kommandoen
til at opsamle resultatet, som tilslut i proceduren skal returneres
med kommandoen return. Endelig skal du kopiere denne besvarelse til hug.it.edu som
/web/login/www/oevelse2/multabel4.tcl.
Hvis temperaturen i Fahrenheit er 68 grader er temperatuen i grader Celcius altså 5.0/9.0 * (68.0 - 32.0) = 0.555556 * 36.0 = 20.0.
Skriv en procedure tempf_to_tempc, som tager som argument
en temperatur i grader Fahrenheit og returnerer temperaturen i grader
Celcius. Skriv proceduren i en fil temperatur.tcl:
%source temperatur.tcl %tempf_to_tempc 68 20.0Kopier besvarelsen til hug.it.edu som
/web/login/www/oevelse2/temperatur.tcl.
Hint:Du skal anvende kommandoen expr for at
beregne temperaturen.