Вычислить сумму целых частей элементов массива, расположенных после последнего отрицательного элемента - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Собственно сама задачка: В одномерном массиве, состоящем из N вещественных элементов, вычислить: 1) Количество элементов массива, меньших С. 2) Сумму целых частей элементов массива, расположенных после последнего отрицательного элемента. 3) Преобразовать массив таким образом, чтобы сначала располагались все элементы, отличающиеся от максимального не более чем на 20%, а потом все остальные. 4) Вычесть из положительных элементов элемент с номером k1, а к отрицательным прибавить элемент с номером k2, нулевые элементы оставить без изменения. И просьба проверить вот эту еще задачку, вроде все правильно: Для заданных преподавателем функции и отрезка [a,b] составить программу вычисляющую интеграл по а) формуле средних прямоугольников; б) по формуле трапеций; в) по формуле Симпсона. -Для вычисления интеграла по каждой, из перечисленных, формуле создать отдельную функции. - Создайте меню, обеспечивающие выбор квадратурной формулы. - Вычисления провести для N и 2N Вот сам интеграл: Вот код
#include<stdio.h>
#include<conio.h>
#include<math.h>
#define N 1000
float fun(float x)
{
      float y; 
      y=pow(cos(x),2); 
      return(y);
}
 
float func1(float (*fun)(float), float a, float b);
float func2(float (*fun)(float), float a, float b);
float func3(float (*fun)(float), float a, float b);
 
void main()
{
     float a, b, s, c;
     int o;
     c=0.0;
     printf("Vvedite a, b\n");
     scanf("%f %f", &a, &b);
     printf("viberite sposob integrirovania cos(x):\n");
     printf("1. Po formule pramoygolnikov\n");
     printf("2. Po formule trapecii\n");
     printf("3. Po formule Simpsona\n");
     scanf("%d",&o);
     switch(o)
     {
         case 1: printf("Integ=%f", func1(fun,a,b)); break;
         case 2: printf("Integ=%f", func2(fun,a,b)); break;
         case 3: printf("Integ=%f", func3(fun,a,b)); break;
         default: printf("Oshibka\n");
     }
getch();
}
 
float func1(float (*fun)(float), float a, float b)
{
      float h, s, x;
      int i;
      h=(b-a)/N;
      s=0.0;
      for(i=0; i<N; i++)
      {
               x=a+i*h;
               s+=fun(x);
      }
      return (s*h);
}
 
float func2(float (*fun)(float), float a, float b)
{
      float h, s, x, q;
      int i;
      q=(fun(a)+fun(b))/2.0;
      h=(b-a)/N;
      s=0.0;
      for(i=0; i<(N-1); i++)
      {
               x=a+(i+1)*h; s+=fun(x);
      }
      return ((s+q)*h);
}
 
float func3(float (*fun)(float), float a, float b)
{
      double h, s, x=a;
      int i;
      h=(b-a)/N;
      s=0.0;
      for(i=0; i<N; i++)
      {
               s+=(fun(x)+4*fun(x+(h*0.5))+fun(x+h));
               x+=h;
      }
      return (s*(h/6.0));
}

Решение задачи: «Вычислить сумму целых частей элементов массива, расположенных после последнего отрицательного элемента»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <math.h>
 
#define N 10
 
void swapf(double& d1, double& d2);
 
int main()
{
    double* B = new double[N];
    for (int i = 0; i < N; i++)
        B[i] = (rand() % (N-1)) + ((double)rand() / RAND_MAX) + 1; 
 
    for (int z1 = 0; z1 < N; z1++)
        printf("%4.2f ",B[z1]);
    printf("\n");
    
    double C = 0.0;
    printf("\nC = "); scanf("%f",&C);
 
    int count = 0;
    for (int k = 0; k < N; k++)
        if (B[k] < C) count++;
 
    printf("count = %d\n",count);
 
    int d1 = N-1; int sum = 0;
    while (B[d1] > 0 && d1 >= 0) d1++;
    for (int u = d1; u < N; u++)
        sum+=(int)B[u];
 
    printf("\nsum = %d\n",sum);
 
    int max = 0;
    for (int l = 0; l < N; l++)
        if (B[l] > B[max]) max = l;
 
    double e = B[max] * 0.2;
    for (int s = 0; s < N; s++)
        if (fabs(B[s]-B[max]) > e)
        {
            int r = s+1;
            while (fabs(B[r]-B[max]) > e && r < N) r++;
            swapf(B[s],B[r]);
        }
 
    for (int z2 = 0; z2 < N; z2++)
        printf("%4.2f ",B[z2]);
    printf("\n");
 
    int k1 = 0, k2 = 0;
    printf("k1 = "); scanf("%d",&k1);
    printf("k2 = "); scanf("%d",&k2);
 
    for (int t = 0; t < N; t++)
        if (B[t] > 0) B[t]-=B[k1];
        else if (B[t] < 0) B[t]+=B[k2];
 
    for (int z3 = 0; z3 < N; z3++)
        printf("%4.2f ",B[z3]);
    printf("\n");
 
    _getch();
 
    return 0;
}
 
void swapf(double& d1, double& d2)
 { double _td = d1; d1 = d2; d2 = _td; }

Объяснение кода листинга программы

  1. Объём массива N равен 10.
  2. Вектор B инициализируется случайными числами от 1 до 100.
  3. Выводится на экран начальное значение массива B.
  4. Пользователю предлагается ввести число C.
  5. Переменная count используется для подсчёта количества элементов массива B, которые меньше числа C.
  6. Вектор B проходит через цикл, и если какой-либо его элемент меньше числа C, то он увеличивается на 1.
  7. Вектор B проходит через цикл, и если какой-либо его элемент больше нуля и его индекс меньше или равен N-1 (так как последний элемент массива никогда не будет больше нуля), то он вычитается из соответствующего положительного элемента вектора B.
  8. Вектор B проходит через цикл, и если какой-либо его элемент меньше нуля, то он увеличивается на соответствующий элемент вектора B, расположенный по индексу k2.
  9. Выводится на экран конечное значение массива B.
  10. Программа завершается.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 3.667 из 5
Похожие ответы