Всегда ли будет работать этот алгоритм?

Итак, я пишу алгоритм TI-BASIC для своего калькулятора, который вычисляет соотношения. Вот код:

Disp "GIVE ONE NUMBER"
Prompt A
Disp "GIVE A SECOND NUMBER"
Prompt B
While fPart(A)≠0 or fPart(B)≠0
A*10->A
B*10->B
End
gcd(A,B)->C
Disp A/C
Disp B/C

Кажется, это работает в большинстве случаев. Есть ли какие-то недостатки/угловые случаи этого кода, которые я не заметил? Спасибо.


person Someone    schedule 13.06.2013    source источник
comment
Мне тоже нравится имя. Но фильм «Бойцовский клуб» был ужасен.   -  person Someone    schedule 14.06.2013
comment
Когда я увидел этот тэг ti-basic, мой разум мгновенно вернулся к моему детству TI-99/4A с его CALL SOUND и Parsec. Был разочарован, увидев, что это пост о графическом калькуляторе. Вздох.   -  person Mike Christensen    schedule 14.06.2013
comment
@Someone Все, кем ты хочешь быть, это я. Я выгляжу так, как будто ты хочешь выглядеть, я трахаюсь так, как ты хочешь трахаешься, я умный, способный и, самое главное, я свободен во всех отношениях, в отличие от тебя.   -  person Tyler Durden    schedule 14.06.2013
comment
Жаль разочаровывать :)   -  person Someone    schedule 14.06.2013


Ответы (2)


Это будет работать, но есть еще более крутой способ сделать это без петель.

Disp "GIVE ONE NUMBER"
Prompt A
Disp "GIVE A SECOND NUMBER"
Prompt B
1/fPart(A)->F
A*F->A
B*F->B
1/fPart(B)->F
A*F->A
B*F->B
gcd(A,B)->C
Disp A/C
Disp B/C
person Jean-Bernard Pellerin    schedule 13.06.2013
comment
Так вы определенно думаете, что оба будут работать? Также я предполагаю, что преимущество вашего алгоритма в том, что он быстрее? - person Someone; 14.06.2013
comment
Не знаю, быстрее ли. У моего есть потенциал для округления проблем с делением. Однако оба решения должны работать. - person Jean-Bernard Pellerin; 14.06.2013
comment
Подожди секунду. Это не сработает, если исходные числа являются целыми числами. - person Someone; 14.06.2013
comment
@someone, ха-ха, ой, я думаю, перед делением должна быть проверка, чтобы оно не делилось на 0. - person Jean-Bernard Pellerin; 14.06.2013
comment
Я думаю, мне просто нужно добавить целочисленную проверку - person Someone; 14.06.2013
comment
Просто проверьте в начале, и если да, пропустите материал 1/fpart и сразу перейдите к gcd, правильно? - person Someone; 14.06.2013
comment
@Someone Вам нужно будет проверять перед каждым 1/fpart, возможно, что первый fpart сделает оба значения целыми. пример: 1,5,2,5 -> 3,5 -> деление на 0. - person Jean-Bernard Pellerin; 14.06.2013
comment
Ах очень верно. Знаешь, может быть, я пока воспользуюсь своим алгоритмом :) - person Someone; 14.06.2013

Да, это сработает, как и ответ Жана-Бернара Пеллерина, но лучше всего очистить его:

Input "GIVE ONE NUMBER",A
Input "GIVE A SECOND NUMBER",B
1/fPart(A)->F
A*F->A
B*F->B
1/fPart(B)->F
A*F->A
B*F->B
gcd(A,B)->C
Disp A/C
Disp B/C
person Moshe Goldberg    schedule 03.07.2015