Не могу завершить программу с массивами! Помогите!
В одномерном массиве, состоящем из п целых элементов, вычислить:
- минимальный по модулю элемент массива;
- сумму модулей элементов массива, расположенных после первого элемента, равного нулю. Преобразовать массив таким образом, чтобы в первой его половине располагались элементы, стоявшие в четных позициях, а во второй половине - элементы, стоявшие в нечетных позициях. Вот код который практически завершен:
#include <stdio.h>
#include <math.h>
#include <stdbool.h>
int main()
{
int sum = 0;
bool flag = 0;
int array[100], size, c, location = 0;
printf("Enter number of elements in array\n");
scanf("%d", &size);
printf("Enter %d integers\n", size);
for (c = 0; c < size; c++)
scanf("%d", &array[c]);
for (c = 1; c < size; c++)
if (array[c] < array[location])
location = c;
printf("Minimum element is present at location %d and its value is %d.\n", location+1, array[location]);
for (int i = 0; i < size; i++)
{
if(array[i] == 0){
flag = 1;
}
if(flag == 1){
sum += abs(array[i]);
}
}
printf("The sum of the modules of elements after 0 is %d", sum);
return 0;
}
Я выполнил первые 2 пункта, но не имею понятия, как ,,Преобразовать массив таким образом, чтобы в первой его половине располагались элементы, стоявшие в четных позициях, а во второй половине - элементы, стоявшие в нечетных позициях.,, Помогите пожалуйста!
Ответы (1 шт):
Автор решения: AlexGlebe
→ Ссылка
// временный массив
int temp[100];
// индексы для чтения из оригинального массива
// а также временного
int ifrom=0 , ito=0;
while ( ifrom < size ) {
// читаем чётные индексы ([0],[2],[4],..)
// пишем подряд ([0],[1],[2],..)
temp[ito] = array[ifrom];
ifrom += 2 ;
++ ito ; }
// продолжаем писать в temp
// читаем по новой по нечётным индексам
ifrom = 1 ;
while ( ifrom < size ) {
// читаем чётные индексы ([1],[3],[5],..)
// пишем подряд ([+0],[+1],[+2],..)
temp[ito] = array[ifrom];
ifrom += 2 ;
++ ito ; }
дальше массив temp переписываете в array сами.