Подскажите, как упростить код - PascalABC.NET
Формулировка задачи:
Доброго времени суток! Собственно кодить только начинаю, родные по такому случаю попросили сделать программу по работе. Программу написал, работает, все довольны. Однако хотелось бы как-то сократить или упростить, довести до вида, чтоб глаза радовала. Слишком уж нагромождено. Только не смейтесь, я только учусь и не знаю, как можно написать по другому, но очень стараюсь
Решение задачи: «Подскажите, как упростить код»
textual
Листинг программы
function Otvet(Vopros : String; VariantOtveta : array of String; Znachen : array of Real) : Real; begin WriteLn('-'*50); WriteLn(Vopros); var Sel := 0; foreach var Variant in VariantOtveta do begin Sel += 1; WriteLn(' ' + Sel + ' - ' + Variant); end; var Vibor := 0; repeat Vibor := ReadLnInteger('Выберите от 1 до ' + Sel + ' :'); until Vibor in [1..Sel]; Result := Znachen[Vibor-1]; end; function F1(d1, d2, d3, d4, d5, d6, d7, d8 : Real) : Real := d1*-0.17956+d2*0.40778+d3*0.42102+d4*-0.50549+d5*-0.41049+d6*-0.18112+d7*0.24397+d8*-1.1129+-1.4663; function F2(d1, d2, d3, d4, d5, d6, d7, d8 : Real) : Real := d1*-0.17140+d2*-0.30474+d3*-0.38007+d4*0.35164+d5*0.34494+d6*0.14447+d7*-0.25519+d8*0.95194+-1.07281; procedure Diagnostic; begin var d1 := Otvet('Пол пациента', arr('мужской', 'женский'), arr(-0.611923, 1.6297755)); var d2 := Otvet('Форма туберкулеза', arr('Очаговый', 'Инфильтративный', 'Фиброзно-кавернозный', 'Диссеминированный', 'Другие формы'), arr(-1.677071948, -0.472185306, 0.732701337, 1.937587979, 3.1424747621)); var d3 := Otvet('1 или 2х сторонняя локализация процесса', arr('Односторонняя', 'Двухсторонняя'), arr(-0.838548467, 1.189313839)); var d4 := Otvet('Наличие полостей распада в легочной ткани', arr('да', 'нет'), arr(-0.461019271, 2.163244272)); var d5 := Otvet('Лекарственная устойчивость к изониазиду', arr('да', 'нет'), arr(-2.067397222, 0.482392685)); var d6 := Otvet('Лекарственная устойчивость к рифампицину', arr('да', 'нет'), arr(-2.364738552, 0.482392685)); var d7 := Otvet('Сопутствующая патология в виде хронических неспецифических заболеваний легких', arr('да', 'нет'), arr(-2.718283712, 0.366884918)); var d8 := Otvet('Вредные привычки', arr('Алкоголизм', 'Алкоголизм и курение', 'курение', 'наркомания', 'нет'), arr(-1.512227025, -0.895331767, -0.278436509, 0.33845875, 0.955354008)); WriteLn('~'*50, NewLine, '~'*50); if F1(d1, d2, d3, d4, d5, d6, d7, d8) > F2(d1, d2, d3, d4, d5, d6, d7, d8) then WriteLn('Пациент с высокой степенью вероятности имеет риск хронического течения туберкулезного процесса.', NewLine, NewLine, 'Рекомендовано:', NewLine, 'I. Интенсивная фаза химиотерапии:', NewLine, '1) Лечение в условиях стационара.', NewLine, '2) Обязательная консультация хирурга с решением вопроса о раннем оперативном лечении.', NewLine, 'II. Фаза продолжения:', NewLine, '1) В условиях дневного стационара или амбулаторно контролируемая.', NewLine, '2) Социальная поддержка в виде продовольственных пайков.') else WriteLn('Пациент с высокой степенью вероятности не имеет риска хронизации туберкулезного процесса.', NewLine, NewLine, 'Рекомендовано:', NewLine, 'I. Интенсивная фаза химиотерапии:', NewLine, '1) Лечение в условиях стационара или дневного стационара.', NewLine, '2) Консультация хирурга по показаниям.', NewLine, 'II. Фаза продолжения:', NewLine, '1) Контролируемая химиотерация в амбулаторных условиях.'); end; begin repeat Diagnostic; until Otvet('Желаете повторить диагностику?', arr('ДА', 'НЕТ'), arr(+1.0, -1.0)) < 0; WriteLn('='*50, NewLine, 'Программа завершила свою работу.'); end.
Объяснение кода листинга программы
- В функции Otvet происходит выбор варианта ответа из предложенных.
- Переменная Sel используется для подсчета количества вариантов ответа.
- Пользователю предлагается выбрать вариант ответа с помощью функции ReadLnInteger.
- Если выбранный вариант ответа находится в допустимом диапазоне, то значение переменной Vibor изменяется в соответствии с выбранным вариантом ответа.
- Значение переменной Vibor затем используется для получения соответствующего значения из массива Znachen.
- Функции F1 и F2 представляют собой формулы для вычисления значений, основанные на входных данных.
- В процедуре Diagnostic используются эти функции для вычисления значений и сравнения результатов.
- Если результат функции F1 больше, чем результат функции F2, то выводится сообщение о высоком риске хронического течения туберкулезного процесса и рекомендации по лечению.
- В противном случае выводится сообщение о низком риске хронизации туберкулезного процесса и рекомендации по лечению.
- Пользователю предлагается повторить диагностику, пока он не введет
НЕТ
. - В конце программы выводится сообщение об окончании работы программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д