
Оформите программу на ABC ПАСКАЛЕ, обеспечивающую: -заполнение одномерного массива A с клавиатуры
N вещественными значениями; -За минимальное число проходов по массиву A последовательное (а-б-в-г) формирование одномерного массива Z значениями элементов массива A в указанном порядке от исходного расположения в массиве A; а) сначала не положительные элементы, расположенные на четных позициях, в порядке, обратных данному, б) потом положительные элементы на нечетных позициях в порядке, обратном исходному, в) затем положительные элементы на четных позициях в исходном порядке, г) потом не положительные элементы на нечетных позициях в исходном порядке; - Вывод элементов массива Z; p.s. прошу не просто решить, но и рассказать про алгоритм решения, даю все свои баллы)

Ответы на вопрос

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)] )



Для решения этой задачи на ABC Pascal, мы будем использовать один одномерный массив для заполнения с клавиатуры и четыре дополнительных массива для хранения отсортированных элементов в соответствии с заданными условиями.
Алгоритм решения будет следующим:
- Запросим у пользователя число N - размерность массива.
- Запросим у пользователя N вещественных чисел и заполним массив A.
- Создадим четыре дополнительных массива Z_a, Z_b, Z_c и Z_d для хранения элементов, соответствующих частям а, б, в и г соответственно.
- Пройдем по массиву A и согласно условиям задачи, будем заполнять массивы Z_a, Z_b, Z_c и Z_d.
- Выведем элементы массива Z_a, затем Z_b, затем Z_c и, наконец, Z_d.
Давайте реализуем этот алгоритм на ABC Pascal:
pascalprogram ArraySorting; const MaxSize = 100; type RealArray = array[1..MaxSize] of Real; var A: RealArray; Z_a, Z_b, Z_c, Z_d: RealArray; N, i, size_a, size_b, size_c, size_d: Integer; procedure FillArray(var arr: RealArray; size: Integer); var i: Integer; begin for i := 1 to size do begin Write('Введите элемент массива A[', i, ']: '); ReadLn(arr[i]); end; end; procedure AppendElement(var arr: RealArray; var size: Integer; value: Real); begin Inc(size); arr[size] := value; end; procedure SortArray; var i: Integer; begin size_a := 0; size_b := 0; size_c := 0; size_d := 0; for i := 1 to N do begin if (A[i] <= 0) and (i mod 2 = 0) then AppendElement(Z_a, size_a, A[i]) else if (A[i] > 0) and (i mod 2 <> 0) then AppendElement(Z_b, size_b, A[i]) else if (A[i] > 0) and (i mod 2 = 0) then AppendElement(Z_c, size_c, A[i]) else AppendElement(Z_d, size_d, A[i]); end; end; procedure PrintArray(const arr: RealArray; size: Integer; labelStr: string); var i: Integer; begin Write(labelStr); for i := 1 to size do Write(arr[i]:8:2, ' '); WriteLn; end; begin Write('Введите размер массива N (не более ', MaxSize, '): '); ReadLn(N); if (N < 1) or (N > MaxSize) then begin WriteLn('Недопустимый размер массива.'); Exit; end; FillArray(A, N); SortArray; WriteLn('Массив Z_a (не положительные на четных позициях в порядке обратном исходному):'); PrintArray(Z_a, size_a, ''); WriteLn('Массив Z_b (положительные на нечетных позициях в порядке обратном исходному):'); PrintArray(Z_b, size_b, ''); WriteLn('Массив Z_c (положительные на четных позициях в исходном порядке):'); PrintArray(Z_c, size_c, ''); WriteLn('Массив Z_d (не положительные на нечетных позициях в исходном порядке):'); PrintArray(Z_d, size_d, ''); end.
В этой программе мы используем процедуры FillArray, AppendElement, SortArray и PrintArray. FillArray запрашивает и заполняет массив A с клавиатуры, а SortArray проходит по массиву A и формирует массивы Z_a, Z_b, Z_c и Z_d в соответствии с заданными условиями. В конце мы выводим отсортированные массивы Z_a, Z_b, Z_c и Z_d.


Похожие вопросы
Топ вопросов за вчера в категории Информатика
Последние заданные вопросы в категории Информатика
-
Математика
-
Литература
-
Алгебра
-
Русский язык
-
Геометрия
-
Английский язык
-
Химия
-
Физика
-
Биология
-
Другие предметы
-
История
-
Обществознание
-
Окружающий мир
-
География
-
Українська мова
-
Информатика
-
Українська література
-
Қазақ тiлi
-
Экономика
-
Музыка
-
Право
-
Беларуская мова
-
Французский язык
-
Немецкий язык
-
МХК
-
ОБЖ
-
Психология
-
Физкультура и спорт
-
Астрономия
-
Кыргыз тили
-
Оʻzbek tili