2015-05-11 3 views
2

У меня есть небольшой код в TI BASIC на калькуляторе TI-84 Plus C Silver Edition, который определит правильную дозировку лекарств на основе веса пациента. Например, если аспирин дается при 5 мг на кг веса пациента (это не так), тогда код должен сказать мне дать 100 кг пациента 500 мг аспирина. Тем не менее, код решает все возможные лекарства. Вот оно:Неисправность в заявлении «Если» на TI-84 Plus C Silver Edition

PROGRAM:DRUG1 
:Input "PATIENT WEIGHT: ",W 
:Input "AGENT NAME: ",A 
:If A=IPPI 
:Disp "DOSAGE",W*2 
:If A=NEVO 
:Disp "DOSAGE", W*0.5 

Таким образом, в этом случае два препарата IPPI и NEVO. Если я дам вес пациента 100 кг, и выбрать IPPI, то я бы ожидал увидеть

DOSAGE     200 

Однако то, что я вижу

DOSAGE    200 
DOSAGE    50 

так, видимо, и «если» заявления работают, хотя я дал только одно значение (IPPI). [То же самое происходит, когда я установил A как NEVO].

Я попытался ограждающих как If заявления в Then...End, так что код будет выглядеть следующим образом:

PROGRAM:DRUG1 
:Input "PATIENT WEIGHT: ",W 
:Input "AGENT NAME: ",A 
:If A=IPPI 
:Then 
:Disp "DOSAGE",W*2 
:End 
:If A=NEVO 
:Then 
:Disp "DOSAGE", W*0.5 
:End 

, но это ничего не меняет. Я довольно новичок в BASIC, поэтому я уверен, что есть простая ошибка, которую я не вижу, но сейчас я в тупике.

ответ

5

Вам необходимо изменить вторую команду ввода, чтобы информация хранилась в строке вместо числовой переменной. Для этой цели в калькуляторе серии TI-84 в меню [VARS] [7] есть десять строковых переменных.

Обратите также внимание на то, что вы должны сравнивать строку со строкой «IPPI», а не с последовательностью букв (числовых переменных) IPPI. Так что ваш код может быть:

:Input "PATIENT WEIGHT: ",W 
:Input "AGENT NAME: ",Str1 
:If Str1="IPPI" 
:Disp "DOSAGE: ",W*2 
:If Str1="NEVO" 
:Disp "DOSAGE: ",W*0.5 

или более сжато:

:Input "PATIENT WEIGHT: ",W 
:Input "AGENT NAME: ",Str1 
:Disp "DOSAGE:" 
:If Str1="IPPI" 
:Disp 2W 
:If Str1="NEVO" 
:Disp .5W 
+0

Спасибо! Я также добавил строку в начале «DelVar Str0» (я использовал Str0 вместо Str1), так что предыдущее значение для Str0 не было перенесено - на всякий случай. –

+2

DelVar не требуется, поскольку можно пропускать команду Input с помощью кнопки ON, которая завершает работу программы. – lirtosiast

3

Вы пытаетесь использовать имена переменных как строки.

:If A=IPPI 

Это не сравнивая строку «IPPI», это сравнение числовой переменной A с числовым значением I * PP * * I, который я угадывание результатов в 0 в вашем случае.

Аналогичным образом, когда вы вводите ввод, если вы введете IPPI, он будет умножать эти переменные и назначить A таким продуктом.

Вам понадобится строковая переменная и кавычки.

+0

Спасибо, что кажется моей проблемой.:) Я посмотрел с помощью строковой переменной, и все, что я могу найти, это что-то на Equ-> String, которое я не могу понять, поэтому, если бы вы могли мне дать пример, я бы очень признателен ! Мне просто нужно увидеть, что мне нужно делать. –

+0

@FredBarclay, если вы используете STR1 вместо A, вам не нужно вводить цитаты – JediPythonClone

2

Основная проблема с вашей программой является то, что Вы знаете, назначая строку переменной, которая поддерживает только цифры. Это оставляет новое значение переменной логическим значением строки True, которое в случае TI-BASIC является значением. 1. Чтобы исправить это, вам нужно назначить его переменной, которая поддерживает символы в строке, в в этом случае вы можете использовать STR1.

+0

upvote для объяснения причины ошибки. –

+0

Это неправильно. Строки не преобразуются в boolean. Если вы вводите 'IPPI' в приглашении' Input A', числовая переменная A будет содержать I * P * P * I, как указано в ответе MattPutnam. – lirtosiast

+0

@ lirtosiast да, но даже если он исправит это и сделает это, как сказал ответ МэттПутнам, все равно будет эта проблема –

 Смежные вопросы

  • Нет связанных вопросов^_^