Вычислить номер минимального по модулю элемента и сумму модулей элементов массива - C#
Формулировка задачи:
в одномерном массиве, состоящем из вещественных элементов вычислить: номер минимального по модулю элемента и сумму модулей элементов массива расположенных после первого отрицательного элемента. сжать массив удалив из него все элементы, величина которых находится в интервале [a,b]. Освободившиеся в конце массива элементы заполнить нулями.
Есть примерный код на C++, нужно переделать на С# и дописать конец.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
int main()
{
double *array, sum = 0, t;
size_t n, i, j, k, imax = 0;
int ipos = -1, a, b;
srand((unsigned)time(NULL));
n = rand() % 81 + 20;
array = (double*)calloc(n, sizeof(double));
printf("Дан массив Array[%u]:\n", n);
for (i = 0; i < n; i++)
{
array[і] = (double)rand() * 198 / RAND_MAX - 99;
printf("%8.3f", array[і]);
}
for (i = 1; i < n; i++)
{
if (fabs(array[і]) > fabs(array[imax]))
imax = i;
}
printf("\nНомер максимального по модулю элемента = %u (%0.3f)\n", imax + 1, array[imax]);
for (i = 0; i < n; i++)
{
if (ipos >= 0)
sum += array[і];
if (ipos < 0 && array[і] > 0)
ipos = i;
}
if (ipos < 0)
printf("В массиве нет положительных элементов");
else
if (ipos + 1 - n)
{
printf("Первый положительный Array[%u] = %0.3f\n", ipos + 1, array[ipos]);
printf("Сумма элементов после 1-го положительного = %0.3f", sum);
}
else
printf("После 1-го положительного нет элементов");
printf("\n\nВведите a: ");
scanf_s("%d", &a);
printf("Введите b: ");
scanf_s("%d", &b);
if (a > b)
{
a ^= b;
b ^= a;
a ^= b;
}
for (i = 0, k = 0; i < n; i++)
if ((int)array[k] >= a && (int)array[k] <= b)
k++;
else
{
t = array[k];
for (j = k; j < n - 1; j++)
array[j] = array[j + 1];
array[n - 1] = t;
}
printf("Преобразованный массив: \n");
for (i = 0; i < n; i++)
printf("%8.3f", array[і]);
fflush(stdin);
printf("\n\nДля завершения работы нажмите Enter...");
getchar();
free(array);
return 0;
}Решение задачи: «Вычислить номер минимального по модулю элемента и сумму модулей элементов массива»
textual
Листинг программы
using System;
namespace ConsoleApplication
{
internal static class Program
{
public static void Main()
{
Random random = new Random();
double[] array;
double sum = 0, t;
int n, i, j, k, imax = 0;
int ipos = -1, a, b;
n = random.Next(81) + 20;
array = new double[n];
Console.WriteLine("Дан массив Array[{0}]:", n);
for (i = 0; i < n; i++)
{
array[i] = random.NextDouble() * 198 - 99; // RAND_MAX = 32767
Console.Write("{0,8:0.000}", array[i]);
}
for (i = 1; i < n; i++)
{
if (Math.Abs(array[i]) > Math.Abs(array[imax]))
{
imax = i;
}
}
Console.WriteLine("\nНомер максимального по модулю элемента = {0} ({1:0.000})", imax + 1, array[imax]);
for (i = 0; i < n; i++)
{
if (ipos >= 0)
{
sum += array[i];
}
if (ipos < 0 && array[i] > 0)
{
ipos = i;
}
}
if (ipos < 0)
{
Console.Write("В массиве нет положительных элементов");
}
else
{
if (ipos + 1 - n != 0)
{
Console.WriteLine("Первый положительный Array[{0}] = {1:0.000}", ipos + 1, array[ipos]);
Console.Write("Сумма элементов после 1-го положительного = {0:0.000}", sum);
}
else
{
Console.Write("После 1-го положительного нет элементов");
}
}
Console.Write("\nВведите a: ");
a = int.Parse(Console.ReadLine());
Console.Write("\nВведите b: ");
b = int.Parse(Console.ReadLine());
if (a > b)
{
a ^= b;
b ^= a;
a ^= b;
}
for (i = 0, k = 0; i < n; i++)
{
if ((int)array[k] >= a && (int)array[k] <= b)
{
k++;
}
else
{
t = array[k];
for (j = k; j < n - 1; j++)
{
array[j] = array[j + 1];
}
array[n - 1] = t;
}
}
Console.WriteLine("Преобразованный массив:");
for (i = 0; i < n; i++)
{
Console.Write("{0,8:0.000}", array[i]);
}
Console.Write("\n\nДля завершения работы нажмите Enter...");
Console.ReadLine();
}
}
}