розгалуження виконується, коли виконання попереднього розгалуження ще не закінчено.
Наприклад, вам потрібно встановити будильник на завтра. Якщо
завтра робочий день, то ви повинні встати о 7-й годині ранку, щоб іти
до школи. Якщо завтра субота, то ви повинні встати о 8-й годині ранку, щоб їхати на заняття гуртка. Якщо завтра неділя, то ви встаєте о
9-й годині ранку.
У наведеному на малюнку алгоритмі друге розгалуження з
умовою Завтра субота? міститься всередині першого розгалуження з
умовою Завтра робочий день?.
Такий фрагмент алгоритму називають вкладеним розгалуженням.
Вкладені розгалуження - це фрагмент алгоритму, у якому одне
розгалуження міститься всередині іншого розгалуження.
Розглянемо виконання наведеного на малюнку 3.26 фрагмента алгоритму. Спочатку перевіряється умова Завтра робочий день?. Якщо
результат перевірки цієї умови Так, то виконується команда Установити будильник на 7-му годину ранку і на цьому виконання всього
цього фрагмента алгоритму закінчується. Якщо результат перевірки
умови Завтра робочий день? - Ні, то перевіряється умова Завтра субота?. Якщо результат перевірки цієї умови Так, то виконується команда
Установити будильник на 8-му годину ранку і на цьому виконання всього цього фрагмента алгоритму закінчується, а якщо результат перевірки
цієї умови Ні, то виконується команда Установити будильник на 9-ту
годину ранку і виконання всього цього фрагмента алгоритму закінчується.
У наведеному на малюнку
фрагменті алгоритму внутрішнє
розгалуження виконується, якщо результат перевірки умови зовнішнього розгалуження Ні.
Объяснение:
рисунок 3.26 (во вложении)
Const
N = 100;//кол-во возможных элементов массива А и Z
M = 0;//при введении этого числа заканчивается заполнение ммасива А
Var
a,b,v,g,ak,bk,vk,gk,jjj,nn: integer;
masA,masZ: array[1..n] Of integer;
Begin
write('при введении числа ',M,
' заполнение массива прекращается');
writeln;
For jjj:=1 To N Do
Begin
read (masA[jjj]);
If masA[jjj]=M Then
Begin
nn := jjj-1;
break;
End;
End;
writeln('исходный массив А :');
For jjj:=1 To nn Do
write(masA[jjj],' ');
writeln;
For jjj:=1 To nn Do
If masA[jjj]<0 Then
Begin
If jjj Mod 2=0 Then a := a+1
Else g := g+1;
End
Else
Begin
If jjj Mod 2=0 Then v := v+1
Else b := b+1;
End;
writeln(a,' ',b,' ',v,' ',g);
ak := a;
bk := b;
vk := v;
gk := g;
For jjj:=1 To nn Do
If masA[jjj]>=0 Then
Begin
If jjj mod 2=0 Then
Begin
masZ[ak+bk+v] := masA[jjj];
v := v-1;
End
Else
Begin
masZ[ak+b] := masA[jjj];
b := b-1;
End
End
Else
Begin
If jjj mod 2=0 Then
Begin
masZ[a] := masA[jjj];
a := a-1;
End
Else
Begin
masZ[ak+bk+vk+g] := masA[jjj];
g := g-1;
End
End;
writeln ('полученный массив Z :');
For jjj:=1 To nn Do
write(masZ[jjj],' ');
End.
объяснить будет сложно , но я попробую . Крч, первый раз перебирая массив , программа считывает кол-во жлементов для каждой из групп (отрицательные с четным индексом-а, отрицательные с нечетным -g,положительные с четным-v,положительные с нечетным-b).
Перебирая массив второй раз , программа берет последовательно числа из масства А , определяет к какой группе они относятся , и дальше кидает в конец нужной часть массива (кол-во всех элемкнтов массива =a+b+v+g, чтобы кинуть числа -2 и -5 (стоящие на нечетных местах ) в нужную часть массива , мы должны кинуть число -2 в ячейку [а+b+v+g] , а число -5 в ячейку [а+b+v+(g-1)] )