Ekstraopgaver til Løbeseddel 4: Skalerbare søjler

for Databasestøttet Webpublicering

af Martin Elsman og Niels Hallenberg sidst rettet 15. februar, 2001


Nedenfor følger to opgaver, som bygger videre på opgave B fra løbeseddel 4.

Opgave: Variabel Tekst

Udvid din "stemmeoptælling" service election.tcl således at der centreret under knappen "Gore" skrives en af de fem mulige tekster (dog er tallet 10 tilfældigt valgt):
  1. Bush fører med 10 stemmer
  2. Bush fører med 1 stemme
  3. Stemmelighed
  4. Gore fører med 10 stemmer
  5. Gore fører med 1 stemme

Du kan f.eks. anvende en procedure status efter denne skabelon:

proc status { bush gore } {
  if { $bush - $gore == 1 } {
    return "Bush fører med 1 stemme"
  } elseif { $bush - $gore > 1 } {
    ...
  } elseif { ... } {
    ...
  } elseif { ... } {
    ...
  } else {
    ...
  }
}

Procedureren status skal da kaldes fra procedureren form_update.

Opgae: Søjlediagram

Udvid din "stemmeoptælling" service election.tcl med et søjlediagram med to liggende søjler der viser de forholdsmæssige stemmetal for Bush og Gore. Placer søjlerne under knapperne som vist nedenfor. Skaler søjlerne så søjlen for den førende kandidat udfylder 90% af skærmbredden (hvis begge kandidater har nul stemmer skal der ikke vises noget). Denne opgave ligger tæt op af histogrameksemplet histogram2.tcl fra forelæsning 5.

Du kan f.eks. anvende en procedure soejler efter denne skabelon:

proc soejler { bush gore } {
  if { $bush < $gore } {
    set max ...
  } else {
    ...
  }

  # Hvis max er nul, så vil vi slet ikke tegne nogen søjler.
  if {$max == 0} {
    return ""
  }
  
  set w_bush [expr int($bush * 90.0 / $max)] ; # Vi regner først med kommatal og 
  set w_gore [expr int(        ...        )] ; # afrunder til heltal med int.

  return "<table width=$w_bush%>
          <tr><td bgcolor=red width=$w_bush%>Bush: $bush</td></tr>
          </table>
          <table width=$w_gore%>
          <tr><td bgcolor=red width=$w_gore%>Gore: $gore</td></tr>
          </table>\n"
}

Procedureren soejler skal da kaldes fra procedureren form_update.

Election med ekstraopgaver

mael@it.edu, nh@it.edu