Другие языки программирования и технологии
Как лучше всего оформлять сложные логические выражения?(С помощью булевских операций или с помощью вложенных if)
Что и когда может оказаться предподчительным?
Предположим такая задача:
вывести все 5-тизначные числа без повторяющихся цифр.
Для неё лучше использовать вложенные if, чтобы было меньше сравнений:
10: for n1 := 1 to 9 do
20: __for n2 := 0 to 9 do
21: ____if n1 <> n2 then
30: for n3 := 0 to 9 do
31: __if (n1 <> n3) and (n2 <> n3) then
40: for n4 := 0 to 9 do
41: __if (n1 <> n4) and (n2 <> n4) and (n3 <> n4) then
50: for n5 := 0 to 9 do
51: __if (n1 <> n5) and (n2 <> n5) and (n3 <> n5) and (n4 <> n5) then
60: WriteLn(n1, n2, n3, n4, n5);
Согласись, что применение отсеивания только на последнем шаге (51) в данном случае не целесообразно, хотя возможно:
10: for n1 := 1 to 9 do
20: __for n2 := 0 to 9 do
30: ____for n3 := 0 to 9 do
40: ______for n4 := 0 to 9 do
50: ________for n5 := 0 to 9 do
51: __________if (n1 <> n2) and (n1 <> n2) and (n1 <> n3) and (n1 <> n4) and
52:____________(n1 <>. n5) and (n2 <> n3) and (n2 <> n3) and (n2 <> n4) and
53:____________(n2 <> n5) and (n3 <> n4) and (n3 <> n5) and (n4 <> n5) then
60: WriteLn(n1, n2, n3, n4, n5);
В данном случае и проверок нужно производить больше и лишние циклы появляются.. .
Бывают случаи, когда условие нужно вынести из цикла, что влечёт за собой увеличение программного кода, но этим увеличиваем быстродействие.
К примеру:
было
for i := 1 to n do
__if Z > 5 then
____S := S + A[ i ]
__else
____S := S - A[ i ];
станет
if Z > 5 then
__for i := 1 to n do S := S + A[ i ]
else
__for i := 1 to n do S := S - A[ i ];
Это тривиальный пример, но на практике встречается очень часто.
Бывают случаи, когда ни куда не денешься, и логическое выражение приходится выполнять внутри циклов...
вывести все 5-тизначные числа без повторяющихся цифр.
Для неё лучше использовать вложенные if, чтобы было меньше сравнений:
10: for n1 := 1 to 9 do
20: __for n2 := 0 to 9 do
21: ____if n1 <> n2 then
30: for n3 := 0 to 9 do
31: __if (n1 <> n3) and (n2 <> n3) then
40: for n4 := 0 to 9 do
41: __if (n1 <> n4) and (n2 <> n4) and (n3 <> n4) then
50: for n5 := 0 to 9 do
51: __if (n1 <> n5) and (n2 <> n5) and (n3 <> n5) and (n4 <> n5) then
60: WriteLn(n1, n2, n3, n4, n5);
Согласись, что применение отсеивания только на последнем шаге (51) в данном случае не целесообразно, хотя возможно:
10: for n1 := 1 to 9 do
20: __for n2 := 0 to 9 do
30: ____for n3 := 0 to 9 do
40: ______for n4 := 0 to 9 do
50: ________for n5 := 0 to 9 do
51: __________if (n1 <> n2) and (n1 <> n2) and (n1 <> n3) and (n1 <> n4) and
52:____________(n1 <>. n5) and (n2 <> n3) and (n2 <> n3) and (n2 <> n4) and
53:____________(n2 <> n5) and (n3 <> n4) and (n3 <> n5) and (n4 <> n5) then
60: WriteLn(n1, n2, n3, n4, n5);
В данном случае и проверок нужно производить больше и лишние циклы появляются.. .
Бывают случаи, когда условие нужно вынести из цикла, что влечёт за собой увеличение программного кода, но этим увеличиваем быстродействие.
К примеру:
было
for i := 1 to n do
__if Z > 5 then
____S := S + A[ i ]
__else
____S := S - A[ i ];
станет
if Z > 5 then
__for i := 1 to n do S := S + A[ i ]
else
__for i := 1 to n do S := S - A[ i ];
Это тривиальный пример, но на практике встречается очень часто.
Бывают случаи, когда ни куда не денешься, и логическое выражение приходится выполнять внутри циклов...
Похожие вопросы
- Информатика."Найти значение логических выражений".Очень нужна ваша помощь!
- Помогите с кодом C#. Нужно удалять из строк начальные пробелы с помощью while, if, for, без специальных методов
- Pascal. Проблема с логическими выражениями.
- Вычислить выражение с помощью оператора цикла. Turbo Pascal.
- Как построить логическую функцию с IF?
- Кто знает, по какому принципу осуществляются логические операции над числами?
- VBA. Чем заменить множествееное использование конструкции "If...Then"?
- Помогите вычислить логическое значение выражения. А=0, В=0, С=0
- Как объединить два оператора " if "?
- с++ зачем нужны побитовые операции если есть обычные логические операторы?