Avatar billede athlon-pascal Juniormester
21. august 2003 - 16:36 Der er 22 kommentarer og
2 løsninger

Tal til streng - TI-83 Plus

Jeg har en TI-83 Plus grafregner. På en sådan grafregner kan man lave programmer, jeg mener sproget hedder TI Basic. Man kan også hente færdige programmer fra nettet, men det er ikke det jeg vil.
Det jeg vil, er at konvertere et tal til en streng, og omvendt, i et program jeg laver på TI-83 Plus.
Ligesom Object Pascals IntToStr(); og StrToInt();-fumktioner.

Hvordan gør man det?
Avatar billede arne_v Ekspert
21. august 2003 - 16:48 #1
Jeg købte en TI-74 i 1987 med Basic - i den er det STR$ og VAL.
Avatar billede simonvalter Praktikant
21. august 2003 - 16:49 #2
Avatar billede athlon-pascal Juniormester
21. august 2003 - 16:56 #3
Så må jeg jo gå den hårde vej, når et tal skal konverteres til en streng :-(
Men hvordan gør man nemmest det?
Avatar billede arne_v Ekspert
21. august 2003 - 17:06 #4
Algoritmen er ret simpel.

Her er et VB eksempel:

Function int2str(v As Integer) As String
  Dim digit
  digit = Array("0", "1", "2", "3", "4", "5", "6", "7", "8", "9")
  Dim res As String
  res = ""
  Dim v2 As Integer
  v2 = v
  While (v2 > 0)
      res = digit(v2 Mod 10) + res
      v2 = v2 / 10
  Wend
  int2str = res
End Function
Avatar billede athlon-pascal Juniormester
21. august 2003 - 17:09 #5
Så er spørgsmålet hvis bare om TI-83 Plus har en modulus-funktion...
Avatar billede arne_v Ekspert
21. august 2003 - 17:11 #6
Ellers så kan den også simuleres.

v2 mod 10

og

v2 - (v2 / 10) * 10

skulle gerne give det samme
Avatar billede athlon-pascal Juniormester
21. august 2003 - 17:15 #7
Arne V -> 15 - (15/10) * 10 = 0?
Avatar billede arne_v Ekspert
21. august 2003 - 17:19 #8
Hm.

Det ser ud til at basic laver floating point division ikke
integer division.

(/ versus div i Pascal)

VB har en:

v2 - (v2 \ 10) * 10

til at lave integer division med, men det tror jeg ikke at din TI'er
har.

:-(
Avatar billede athlon-pascal Juniormester
21. august 2003 - 17:24 #9
Men jeg har da en ide...
Fra manualen:
"iPart(, fPart(

iPart( (integer part) giver heltalsdelen eller -dele af et reelt eller komplekst tal, et udtryk, en liste eller en matrix."

"fPart( (fractional part) giver brøkdelen eller -dele af et reelt"...

Derfor vil
  fPart(v2 / 10) * 10
give
  v2 mod 10
hvis  v2 er et heltal :-)
Avatar billede athlon-pascal Juniormester
21. august 2003 - 17:27 #10
Hvis man ønsker at konvertere en float-værdi, kan man bare bruge iPart og fPart til at lægge det før og efter kommaet i hver sin tal-variabel, og så konvertere de to variabler, og slutte af med at lægge dem sammen igen, med et komma imellem :-)
Avatar billede athlon-pascal Juniormester
21. august 2003 - 19:10 #11
Jeg har nu fået lavet noget kode:

:Input "TAL:",N
:iPart(abs(N))->I
:fPart(abs(N))->F
:While fPart(F)<>0
:F*10->F
:End
:" "->Str1
:Repeat I<=0
:sub("0123456789",fPart(I/10)*10+1,1)+Str1->Str1
:iPart(I/10)->I
:End
:sub(Str1,1,length(Str1)-1)->Str1
:If F>0
:Then
:" "->Str2
:Repeat F<=0
:sub("0123456789",fPart(F/10)*10+1,1)+Str2->Str2
:iPart(F/10)->F
:End
:Str1+"."+sub(Str2,1,length(Str2)-1)->Str1
:If iPart(abs(N))=0
:Then
:sub(Str1,2,length(Str1)-1)->Str1
:End
:End
:If N<0
:Then
:"-"+Str1->Str1
:End
:Disp Str1
Avatar billede athlon-pascal Juniormester
21. august 2003 - 19:11 #12
Arne V og Loadet -> Hvis i lægger nogle svar, så kan jeg lukke spørgsmålet :-)
Avatar billede arne_v Ekspert
21. august 2003 - 19:12 #13
svar
Avatar billede athlon-pascal Juniormester
21. august 2003 - 19:14 #14
Arne V -> Er du ved at teste expNOTE? Du er meget hurtig :-)
Avatar billede simonvalter Praktikant
21. august 2003 - 19:23 #15
nå nej jeg har bare googlet .. det må være arne_v's point
Avatar billede athlon-pascal Juniormester
21. august 2003 - 19:34 #16
Loadet -> Det halve spørgsmål + lidt mere blev ellers besvaret af dig :-)
Arne V har måske arbejdet hårdere end dig, men du skal i hvert fald have en lille bid af kagen :-)
Husk på, at det er via dit link man kan læse følgende:
"To convert a string to a number, use the expr() function.
The syntax is expr(string)."
Og prøv så lige at læse mit spørgsmål en gang til:
"Det jeg vil, er at konvertere et tal til en streng, og omvendt".
Bemærk "og omvendt" :-)

Da jeg skulle konvertere Arne V's kode, havde jeg også brug for noget af teksten i dit link:
"Most PC BASIC's have a Str$ function that converts a number to a string. 
However, TI calculators do not have this function.  To convert a one-digit
number to a string, use this:

sub("0123456789",N+1,1) -> Str1

For numbers with multiple digits, you will have to use sub() for each digit.
  There is a program that does this in the 83-BASIC library in the misc.
programs archive." :-)
Avatar billede simonvalter Praktikant
21. august 2003 - 19:47 #17
ok .. jeg forstod bare ikke helt hvad det var i lavede .. troede det var en anden løsning ;)
men så ligger jeg da et svar
Avatar billede athlon-pascal Juniormester
21. august 2003 - 19:50 #18
Tak for hjælpen :-)
Avatar billede arne_v Ekspert
21. august 2003 - 19:53 #19
Nej - expnote er ikke blevet sat op til test med eksperten.dk endnu.

Jeg ved ikke engang om elv har snakket med admin.
Avatar billede fangel Nybegynder
21. august 2003 - 19:57 #20
arne_v => hvorfor virker expnote.exp.dk ikke mere?

Morten
Avatar billede simonvalter Praktikant
21. august 2003 - 20:02 #21
Avatar billede arne_v Ekspert
21. august 2003 - 20:19 #22
Vi er igang med en omskrivning.
Avatar billede athlon-pascal Juniormester
21. august 2003 - 21:27 #23
Arne V -> Det kunne jo være, når dit svar kom så hurtigt som det gjorde :-)
Avatar billede arne_v Ekspert
21. august 2003 - 21:34 #24
Det var bare tilfældigt.

:-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester