Вычислить среднее арифметическое значение элементов, лежащих на диагоналях матрицы - C (СИ)

  1. Добрый день. Помогите с программой на двумерный массив. Вычислить среднее арифметическое значение элементов, лежащих на диагоналях матрицы С (6х6). Заменить этим значением все диагональные элементы матрицы.Добавлено через 11 минут Простите, не то задание скинул. Вот то что мне надо. Дана матрица А(10х10). Отсортировать элементы, лежащие на главной диагонали, в порядке возрастания.


textual

Код к задаче: «Вычислить среднее арифметическое значение элементов, лежащих на диагоналях матрицы - C (СИ)»

#ifdef _MSC_VER
#define _CRT_SECURE_NO_WARNINGS
#endif
 
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
double** create_matrix(size_t size)
{
    size_t i = 0;
    double** matrix = (double**)malloc(sizeof(double*) * size);
    for (i = 0; i < size; i++)
        matrix[i] = (double*)malloc(sizeof(double) * size);
    return matrix;
}
 
void free_matrix(double** matrix, size_t size)
{
    size_t i = 0;
    for (i = 0; i < size; i++)
        free(matrix[i]);
    free(matrix);
}
 
void fill(double** matrix, size_t size)
{
    size_t i = 0, j = 0;
    for (i = 0; i < size; i++)
        for (j = 0; j < size; j++)
            matrix[i][j] = rand() % 20;
}
 
void print_row(const double* row, size_t size)
{
    while (size--)
        printf("%8.2lf ", *row++);
    putchar('\n');
}
 
void print_matrix(const double** matrix, size_t size)
{
    size_t i = size;
    while (i--)
        print_row(*matrix++, size);
}
 
double diag_sum(const double** matrix, size_t size)
{
    double sum = 0;
    size_t i;
    for (i = 0; i < size; i++)
        sum += matrix[i][i];
    return sum;
}
 
void replace_diag(double** matrix, double value, size_t size)
{
    size_t i = 0;
    for (i = 0; i < size; i++)
        matrix[i][i] = value;
}
 
int main()
{
    const size_t size = 6;
    double avg = 0;
    double** matrix = create_matrix(size);
    srand(time(0));
    fill(matrix, size);
    print_matrix(matrix, size);
    avg = diag_sum(matrix, size) / size;
    replace_diag(matrix, avg, size);
    putchar('\n');
    print_matrix(matrix, size);
    free_matrix(matrix, size);
#ifdef _MSC_VER
    system("pause");
#endif
    return EXIT_SUCCESS;
}

СДЕЛАЙТЕ РЕПОСТ

8   голосов, оценка 4.125 из 5



Похожие ответы
  1. Всем привет, помогите пожалуйста решить задачу Задание: Написать программу для расчета по двум формулам. Результат вычисления по первой формуле должен совпадать со второй. Использовать операции потокового ввода-вывода.

  1. C1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 #include   double sum2d(int a, int b, const double  mass[a][b]);   int main(void) {     const int YEARS = 5;     const int MONTHS = 12;     const float rain[YEARS][MONTHS] =     {         { 4.3, 4.3, 4.3, 3.0, 2.0, 1.2, 0.2, 0.2, 0.4, 2.4, 3.5, 6.6 },         { 8.5, 8.2, 1.2, 1.6, 2.4, 0.5, 2.0, 9.0, 3.0, 9.1, 4.7, 3.0 },         { 9.1, 8.5, 6.7, 4.3, 2.1, 0.8, 0.2, 0.2, 1.1, 2.3, 6.1, 8.4 },         { 7.2, 9.9, 8.4, 3.3, 1.2, 0.8, 0.4, 0.0, 0.6, 1.7, 4.3, 6.2 },         { 7.6, 5.6, 3.8, 2.8, 3.8, 0.2, 0.0, 0.0, 0.0, 1.3, 2.6, 5.2 },     };       printf("Среднегодовое количество осадков за 5 лет = %f",sum2d(YEARS, MONTHS, rain[YEARS][MONTHS])/YEARS); return 0; }   double sum2d(int a, int b, const double  mass[a][b]) {     int i, j;     int total;     double **pt;     **pt = mass[0][0];       for (i = 0; i < a; ++i)     {         for(j = 0; j < b; ++j)         {             total+=**pt;             ++pt;         }     } return total; }При компиляции помимо куци предупреждений выдается следующие ошибки: rain.c:20:2: error: incompatible type for argument 3 of ‘sum2d’ printf("Среднегодовое количество осадков за 5 лет = %f",sum2d(YEARS, MONTHS, rain[YEARS][MONTHS])/YEARS); ^ rain.c:3:8: note: expected ‘const double (*)[(sizetype)(b)]’ but argument is of type ‘float’ double sum2d(int a, int b, const double mass[a][b]);Добавлено через 23 секунды по заданию считать нужно с применением указателей.

  1. Назначение: вычисляет десятичное значение целого числа по заданной строке символов s, который является записью этого числа в двоичной системе счисления. Постановка задачи В соответствии с вариантом задания составить функцию для обработки символьных строк и программу для проверки работоспособности функции. За образец можно брать библиотечные функции обработки строк языка С, но не использовать их в своей функции. При выполнении 1-го задания необходимо: 1. Строки для тестирования функции вводить в главной программе с клавиатуры. 2. Предусмотреть обработку ошибок в задании параметров и особые случаи. 3. Разработать два варианта заданной функции с использованием: а) индексированных массивов; б) указателей.

  1. Написала программу, она компилируется, но не даёт результат (текстовые файлы я создала). Помогите, пожалуйста C++1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 #include #include #include FILE *f, *f1; int main() {int x, q=0,  sum=0; double l; f=fopen("D:\\TextFile", "rt"); f1=fopen("D:\\rez", "wt"); if(f == NULL)         {           printf("Problems");           system("pause");           return 1;         } if (fscanf(f,"%d",&x)>0)   {sum+=x; q+=1; l=sum/q; }     fprintf(f1," %3lf",l); fclose(f); fclose(f1);   return 0; }

  1. Помогите пожалуйста. Использовать стандартные функции и арифметические операторы; изучить операторы отношения и присваивания, логические операции, условный оператор и оператор-переключатель; научиться использовать в программах операторы цикла. Написать программы на изученные темы. Для заданного x вычислить значение функции y=ctg x , где x (0, 2 )

  1. Все Работает если вводить без пробелов, но с пробелом выводится только первое число, (если можно с кратким объяснением пожалуйста)C1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 #include #include     int main(){       char str[100];     int x = 0;     scanf("%s", str);     for(int i = 0;i < strlen(str);i++)     {         if((str[i] >= '1') && (str[i] <= '9'))         {             x += ((int)str[i] - 48);                     }     }     printf("%d", x);       return 0; }

  1. по идее программа должна вычислять сумму всех положительных элементов квадратной матрицыC1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 #include #include  main () {int n=3,m=3,a[3][3],i,j,z; z=0; for(i=n;i0) z+=a[i][j]; printf("z=%d\n",&z);} system("pause"); return(0); }

  1. В чем ошибка? Вычислить среднее арифметическое элементов числовой последовательности, в записи значения которых содержится цифра 5. Если таких элементов не существует, то вывести 'NO'. Во входном потоке в первой строке задано число элементов целочисленной числовой последовательности N (N <= 100), во второй строке - записаны через пробел двухзначные значения элементов числовой последовательности. В выходной поток вывести единственное вещественное число с точностью три знака после запятой или 'NO'. Пример входного файла: 5 11 25 30 50 46 Пример выходного файла: 37.500 C1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 #include int main() { double n,a,k=0,s=0; scanf("%lf",&n); for(double i=1;i<=n;i++) { scanf("%lf",&a);   if(a/10==5) { k++; }     {     s=a/k; } } printf("%.3lf",s); return 0; }Добавлено через 7 минут Вот так. В чем ошибка? C1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 #include int main() { double n,a,k=0,s=0,r=0; scanf("%lf",&n); for(double i=1;i<=n;i++) { scanf("%lf",&a);   if(a/10==5) {    s+=a;       {     k++;       {       r=s/k;   }   }   } printf("%.3lf",r); return 0; } }

  1. C1 2 3 4 5 6 7 8 9 10 11 12 13 14 #include #include int main() { int a, x, i; printf("\tВас приветствует программа авто ряд!\nВведите номер члена прогрессии:\n"); scanf("%d", a); do { x=1*pow(2,i)+x; } while (i

  1. Здравствуйте! Скажите, что не так в моем коде?C1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 #include #include #include      void aver(int tab[], int n);    void  aver(int tab[],int n){       int suma=0;          for(int i=0;i