Помогите перевести из с++ в си код
Дан массив A[N]. Осуществить циклический сдвиг элементов массива вправо на k позиций, где k – целая часть среднего арифметического значения отрицательных элементов массива A[N].
#include
using namespace std;
int main ()
{
const int n = 8; // количество элементов массива
int m[n] = {4, -5, 6, 7, 8, 9, -10, 11}; // переменная для хранения массива
int sum = 0; // переменная для хранения суммы отрицательных элементов
int m1[2]; // переменная для хранения индексов отрицательных эл. массива
int j = 0;
int sum2 = 0; // переменная для хранения суммы положительных элементов
cout<<" исходный массив "<<endl;
// выводим значения исходного массива
for (int i = 0; i < n; i++)
cout<<"m["<<i<<"] = "<< m[i] << endl;
// находим сумму отрицательных элементов массива
for (int i = 0; i < n; i++)
if(m[i]<0)
sum += m[i];
cout<<" сумма отрицательных элементов = " << sum << endl;
// находим индексы отрицательных элементов массива
for (int i = 0; i < n; i++)
if(m[i]<0){
m1[j]=i;
cout<<"индекс "<<j+1<<" = "<<m1[j]<<endl;
j=j+1;
}
// находим сумму положительных элементов, которые между отрицательными
for (int i = m1[0]+1; i < m1[1]; i++)
sum2 += m[i];
cout<<" сумма положительных элементов = " << sum2 << endl;
return (0);
}
>>> где k – целая часть среднего арифметического значения отрицательных элементов массива
<<< т. к. среднее арифметическое также будет отрицательным, то следует вычислить модуль результата
#include <stdlib.h>
#include <stdio.h>
#define LENGTH 8
void right(int* box) {
int i = LENGTH - 1;
int last = box[i];
while (i > 0) {
box[i] = box[i - 1];
--i;
}
box[0] = last;
}
void right_n(int* box, int n) {
int i;
for (i = 0; i < n; ++i) right(box);
}
int average_negate(int* box) {
int i;
int acc = 0;
int count = 0;
for (i = 0; i < LENGTH; ++i) if (box[i] < 0) {
acc += box[i];
++count;
}
return abs(count? acc / count : count);
}
void show(int* box) {
int i;
for (i = 0; i < LENGTH; ++i) printf("%4i", box[i]);
puts("");
}
int main(void) {
int box[LENGTH] = { 4, -5, 6, 7, 8, 9, -10, 11 };
int avg = average_negate(box);
show(box);
right_n(box, avg);
show(box);
system("pause > nul");
return 0;
}
#include<stdio.h>
#include<math.h>
#include<unistd.h>
#define SIZE 8
int mid(int *arr, int size)
{
int middle=0,count=0;
for(int i = 0; i < size; i++)
if(arr[i] < 0) {middle+=arr[i]; count++;}
return fabs(middle/count);
}
void shift(int *arr,int size,int shift)
{
int buf;
for(int j = 0; j < shift; j++)
{
buf = arr[size-1];
for(int i = size-1; i > 0; i--)
{
arr[i] = arr[i-1];
arr[i-1] = buf;
}
}
}
void print(int *arr, int size)
{
for(int i = 0; i < size; i++)
printf("%d ",arr[i]);
}
int main()
{
int arr[SIZE]={4, -5, 6, 7, 8, 9, -10, 11};
shift(arr,SIZE,mid(arr,SIZE)); //сдвигаем
print(arr,SIZE); //печатаем
fflush(stdout); //сброс буфера
sleep(10); //пауза
return 0;
}
