Autor:
• sobota, marca 03rd, 2007

Niewyszukany programik z niewyszukanym imieniem – napisany w Tcl/Tk. Chlebak jak sama nazwa wskazuje służy do noszenia granatów, a naumiacz do naumiewania się na pamięć słówek z języków sobie obcych. Przy uruchomieniu program prosi nas o podanie pliku ze słówkami. Plikiem tym jest zwykły plik tekstowy o układzie:

słówko obce – tłumaczenie
słówko obce – tłumaczenie
słówko obce – tłumaczenie

który możemy sobie tworzyć na bieżąco w byle notatniku (ucząc się np. z książki). Program traktuje myślnik jako oddzielenie obcego słówka od rodzimego tłumaczenia.

Po wczytaniu pliku ze słówkami do nauczenia, jesteśmy proszeni o wybranie rozdziału. Każdy rozdział to ileśtam (ile? – to do ustawienia w kodzie programu) kolejnych słów z pliku słówek.

naumiacz11.png

I rozpoczyna się nauka. Wiecie jak najefektywniej szkoli się żołnierzy w zabijaniu na polu walki? Ustawia im się ruchome tarcze, które pojawiają się na moment zza krzaka lub pagórka i po sekundzie znowu chowają. Żołnierz nie ma czasu na zastanawianie się nad pociągnięciem za spust – widzi cel, to musi bezmyślnie strzelić, bo cel się już chowa. Odruch… Z programikiem naumiacz zasada nauki słówek jest podobna, widzisz słowo i musisz jak najszybciej zaznaczyć jedną z trzech możliwości tłumaczenia. Widzisz słówko – klikasz tłumaczenie, widzisz słówko – klikasz tłumaczenie, itd. Czasu nic nie odlicza – założyłem, że korzystający z naumiacza robi to z własnej chęci, ma wystarczającą, dobrowolną motywację do nauki i nie trzeba go stresować ułamkami sekund 😉

naumiacz2.png

#!/usr/bin/wish
#
# naumiacz.tcl – program do nauki słówek.
# Autor: miroslaw.kosmala@trilowcy.org
#
###

###
# Kolorystyka
tk_setPalette gray90

# Ile słówek ma zawierać jeden dział (stan zakładany – 1}?
# max 10

set il_w_dziale 9

font create base_font -family Helvetica -size 14 -weight normal
font create word_font -family Helvetica -size 16 -weight bold

proc losowa max {
set temp [expr rand()]
set temp [split $temp {.}]
set temp [split [lindex $temp 1] {}]
if { [lindex $temp 0] > $max } {
while { [lindex $temp 0] > $max } {
set temp [expr rand()]
set temp [split $temp {.}]
set temp [split [lindex $temp 1] {}]
}

return [lindex $temp 0]
}

proc dawaj_slowa {} {
global rozdzial
global slowka
global tlumaczenia
global il_w_dziale

set index [losowa $il_w_dziale]

set index2 [losowa $il_w_dziale]
while { $index == $index2 } {
set index2 [losowa $il_w_dziale]
}
set index3 [losowa $il_w_dziale]
while { $index == $index3 || $index2 == $index3 } {
set index3 [losowa $il_w_dziale]
}

.f.sl configure -text „[lindex $slowka($rozdzial) $index]” -font word_font

global poprawne

set pozycja [losowa 2]
if { $pozycja == 0 } {
.f.f.g configure -text „[lindex $tlumaczenia($rozdzial) $index]” \
-font word_font
.f.f.s configure -text „[lindex $tlumaczenia($rozdzial) $index2]” \
-font word_font
.f.f.d configure -text „[lindex $tlumaczenia($rozdzial) $index3]” \
-font word_font
set poprawne „jeden”
}
if { $pozycja == 1 } {
.f.f.g configure -text „[lindex $tlumaczenia($rozdzial) $index2]” \
-font word_font
.f.f.s configure -text „[lindex $tlumaczenia($rozdzial) $index]” \
-font word_font
.f.f.d configure -text „[lindex $tlumaczenia($rozdzial) $index3]” \
-font word_font
set poprawne „dwa”
}
if { $pozycja == 2 } {
.f.f.g configure -text „[lindex $tlumaczenia($rozdzial) $index2]” \
-font word_font
.f.f.s configure -text „[lindex $tlumaczenia($rozdzial) $index3]” \
-font word_font
.f.f.d configure -text „[lindex $tlumaczenia($rozdzial) $index]” \
-font word_font
set poprawne „trzy”
}

}

# ——————————————————
# — PROCEDURA PRACY —
# ——————————————————
proc praca {widget rozdzial} {
destroy $widget

frame .f
label .f.top -text „NAUKA” -relief raised -font base_font
label .f.sep1 -text ” ”
label .f.sl
frame .f.f
label .f.f.g -text ” *** ” -font word_font \
-background white -foreground black
label .f.f.s -text ” *** ” -font word_font \
-background white -foreground black
label .f.f.d -text ” *** ” -font word_font \
-background white -foreground black

label .f.sep -text ” ”
pack .f .f.top .f.sep1 .f.sl .f.f .f.f.g .f.f.s .f.f.d .f.sep -expand no -fill x

frame .f.b
button .f.b.j -text ” Dział ” -font base_font -command { dawaj_rozdzial .f}
button .f.b.d -text ” Koniec ” -font base_font -command {exit}
pack .f.b -expand no -fill x
pack .f.b.j .f.b.d -expand no -fill x -side left

dawaj_slowa

# ———————-
# — ZDARZENIA —
# –
bind .f.f.g {
.f.f.g configure -background navy -foreground yellow
.f.f.s configure -background white -foreground black
.f.f.d configure -background white -foreground black
}
bind .f.f.s {
.f.f.g configure -background white -foreground black
.f.f.s configure -background navy -foreground yellow
.f.f.d configure -background white -foreground black
}
bind .f.f.d {
.f.f.g configure -background white -foreground black
.f.f.s configure -background white -foreground black
.f.f.d configure -background navy -foreground yellow
}
# —
bind .f.f.g {
global poprawne
if { $poprawne != „jeden” } {
tk_dialog {.con} { Kontrola } { PUDŁO!!!} {} 0 { O.K }
} else {
dawaj_slowa
}
}
bind .f.f.s {
global poprawne
if { $poprawne != „dwa” } {
tk_dialog {.con} { Kontrola } { PUDŁO!!!} {} 0 { O.K }
} else {
dawaj_slowa
}
}
bind .f.f.d {
global poprawne
if { $poprawne != „trzy” } {
tk_dialog {.con} { Kontrola } { PUDŁO!!!} {} 0 { O.K }
} else {
dawaj_slowa
}
}

}
set poprawne „”
# ——————————————————
# — PROCEDURA WYBORU ROZDZIAŁU —
# ——————————————————
proc dawaj_rozdzial {widget} {

if { $widget != „null” } {
destroy $widget
}
global il_nazwa
global il_slow
global rozdzial

frame .f
pack .f -expand yes -fill both

label .f.top -text „WYBÓR ROZDZIAŁU” -font base_font -relief raised
label .f.op -text „Do dyspozycji jest $il_slow slów\nw $il_nazwa rozdzialach.” \
-font base_font
label .f.wyb -text „Do opanowania wybieram\nrozdział nr ” \
-font base_font

spinbox .f.sb -from 1 -to $il_nazwa -width 3

label .f.sep -text ” ”
pack .f.top .f.op .f.wyb -expand yes -fill x
pack .f.sb .f.sep -expand no

frame .f.b
pack .f.b -expand no -fill x
button .f.b.b1 -text ” O.K ” -font base_font -command {
set rozdzial [.f.sb get]
praca .f [expr $rozdzial-1]
}
button .f.b.b2 -text ” Zamknij ” -command {exit} -font base_font
pack .f.b.b1 .f.b.b2 -expand no -fill x -side right

}
# ——————————————————

wm title . „Naumiacz II”
#wm geometry . 200×300

# Dawaj plik słownika
if [catch { set fdes [open [tk_getOpenFile] r]} dupa ] {
puts „Błąd: Nie mogę otworzyć pliku z danymi\n”
exit 1
}

list slowka
list tlumaczenia

set il_tmp 0
set il_nazwa 0
set il_slow -1

while { [gets $fdes wiersz] != -1 } {

set tmp [split $wiersz {-}]
lappend slowka($il_nazwa) [lindex $tmp 0]
lappend tlumaczenia($il_nazwa) [lindex $tmp 1]

if {$il_tmp != $il_w_dziale} {
set il_tmp [expr $il_tmp + 1]
} else {
set il_tmp 0
set il_nazwa [expr $il_nazwa + 1]
}

set il_slow [expr $il_slow + 1]
}
unset tmp
unset il_tmp

# —
# Dawaj na początek wybór rozdziału
dawaj_rozdzial null

No tak – wszystko powyższe fajnie, ale co gdy mamy plik ze słówkami: słowo obce – tłumaczenie, a nam jest potrzebny plik: tłumaczenie – słowo obce ? Po prostu, korzystamy z konsolowego konwentera plików ze słówkami.

konwenter.png

#!/usr/bin/tcl
#
# konwerter.tcl – program zamieniający miejscami slowa oddzielone
# myślnikiem (czyli. „słówko – tłumaczenie” na
# tłumaczenie – słowko), przewidziany jako wspomaganie
# do programu NAUMIACZ
#
#
# Autor: Mirosław ‚mk23z’ Kosmala Resko, dn. 04.09.2003r
# maito: miroslaw.kosmala@trilowcy.org godz. 22:09
#
#
####
# Sprawdzenie parametrów wywołania

if { $argc == 0 || $argc == 1 } {

puts „”
puts ” Podaj parametry wywołania:”
puts „”
puts ” BASH>konwerter.tcl ”
puts „”
exit
}

####
# Otwarcie plików roboczych

if [catch {set fin [open [lindex $argv 0] r]} dupa] {
puts „”
puts „Błąd: Nie mogę otworzyć pliku <[lindex $argv 0]> do odczytu…”
puts „”
exit
}
if [catch {set fout [open [lindex $argv 1] w]} dupa] {
puts „”
puts „Błąd: Nie mogę otworzyć pliku <[lindex $argv 1]> do zapisu…”
puts „”
exit
}

####
# Praca

# Flaga zlicznika
set zlicznik 0

while { [gets $fin inline] != -1 } {
set inline [split $inline {-}]
puts $fout „[lindex $inline 1] – [lindex $inline 0]”
set zlicznik [expr $zlicznik+1]
}

####
# Sprzątanie po sobie

close $fin
close $fout

# Raport
puts „——————————————–”
puts ” Gotowe… przerobiono $zlicznik wierszy słówek…\n”

exit

Wyślij na:
  • Facebook
  • Wykop
  • Twitter
  • MySpace
  • Google Bookmarks
  • Śledzik
  • email
Kategorie: Programy, Tcl/Tk
Możesz śledzić komentarze do tego wpisu przy pomocy RSS 2.0 Both comments and pings are currently closed.

Komentowanie zamknięte.