Top.Mail.Ru
Ответы

Написать программу на си использование массивов

Нельзя делать через free(x) удалять элемент надо использовать функции calloc malloc relloc Задан массив целых чисел Х(n). Найти:
• сумму четных элементов;
• количество чисел, которые расположены после минимального
элемента массива.
Заменить нулевые элементы заданного массива значениями их но-
меров. Определить среднее арифметическое элементов массива до
и после преобразования. Удалить минимальный элемент массива
Х(n).

По дате
По рейтингу
Аватар пользователя
Просветленный
6мес
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
 #include <windows.h> 
#include <locale.h> 
#include <stdio.h> 
#include <string.h> 
#include <stdlib.h> 
#include <malloc.h> 
 
int* InitDin(int*, int); 
void PrintDin(int *, int); 
int SumChetEl(int*,int); 
double safunc(int*,int); 
void ChangeZeroIndex(int *,int); 
int CountElAfterMin(int *, int); 
int* DelMin(int*,int,int); 
 
int main() 
{ 
      system("chcp 1251 > nul"); 
        SetConsoleTitle("ОтветыМейлРу");    // Русские буквы 
            setlocale(LC_ALL, "Russian"); 
 
        const int n=15; 
        int q[15]= {1,0,3,4,5,0,7,8,9,0,11,-1,13,14,15}; 
 
        int *X= InitDin(q, n); 
            PrintDin(X, n); 
 
                int s= SumChetEl(X,n); 
                printf("Сумма чётных элементов= %d\n", s); 
 
                int c= CountElAfterMin(X,n); 
                printf("После минимального %d элементов\n", c); 
 
            double saDo, saPosle; 
                saDo= safunc(X,n); 
                printf("Среднее арифметическое= %f\n", saDo); 
 
                ChangeZeroIndex(X,n); 
                PrintDin(X, n); 
 
                int *NewX= DelMin(X,n,c); 
                free(X); 
 
                printf("После удаления минимального элемента\n"); 
                PrintDin(NewX, n-1); 
 
                saPosle= safunc(NewX,n-1); 
                printf("\nСреднее арифметическое новое= %f\n",saPosle); 
 
        free(NewX); 
      printf("\n"); system("pause"); 
 
return 0; 
} 
//// 
int* DelMin(int *b, int nn, int m) 
{ 
    int *a= (int*)realloc(NULL, nn-1 * sizeof(int)); 
 
    if (a!=NULL) { printf("Memory set\n"); } 
      else { printf("OUT OF MEMORY\n"); exit(0); } 
 
      int w=0; int mm= nn-1-m; 
      for (int i=0; i<nn; i++) 
      { 
          if (i!=mm) { a[w]= b[i]; w++; } 
      } 
 
return (a); 
} 
//// 
int CountElAfterMin(int *b, int nn) 
{ 
    int mn=0; int cnt=0; 
    for (int i=1; i<nn ; i++) 
    { 
        if(b[i]<b[mn]) mn= i; 
    } 
    cnt= nn-mn-1; 
    return cnt; 
} 
//// 
int* InitDin(int qq[], int nn) 
{ 
    int *a= (int*)malloc(nn * sizeof(int)); 
 
    if (a!=NULL) { printf("Memory set\n"); } 
      else { printf("OUT OF MEMORY\n"); exit(0); } 
 
    for (int i=0; i<nn; i++) 
    { 
        a[i] = qq[i]; 
    } 
    return (a); 
} 
//// 
PrintDin(int *b, int nn) 
{ 
    for (int i=0; i<nn; i++) 
    { 
        printf("%d   ", b[i]); 
    } 
} 
//// 
int SumChetEl(int* b,int nn) 
{ 
    int sum=0; 
 
    for (int i=0; i<nn; i++) 
    { 
        if(b[i]%2==0) sum+=b[i]; 
    } 
 
    return sum; 
} 
//// 
double safunc(int*b,int nn) 
{ 
    int sum=0; 
 
    for (int i=0; i<nn; i++) 
    { 
        sum+=b[i]; 
    } 
 
    double s= (double) sum / (double) nn; 
    return s; 
} 
//// 
void ChangeZeroIndex(int*b,int nn) 
{ 
    for (int i=0; i<nn; i++) 
    { 
        if (b[i]==0) b[i]= i; 
    } 
} 
ww