Подскажите, как упростить код - 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, то выводится сообщение о высоком риске хронического течения туберкулезного процесса и рекомендации по лечению.
    • В противном случае выводится сообщение о низком риске хронизации туберкулезного процесса и рекомендации по лечению.
    • Пользователю предлагается повторить диагностику, пока он не введет НЕТ.
    • В конце программы выводится сообщение об окончании работы программы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 3.857 из 5