Error in function - C (СИ)

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

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

Если Progonka(...) в окремой функции - не работает. Если код из функции скопировать в main() все работает. Код ->
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
 
void Progonka(int N,double **A, double* B , double* X);
int main(int argc, char *argv[])
{
    int N = 4;
    //double A[N][N];
    double** A = malloc(N * sizeof *A);
    for (int i = 0; i < N; i++)
      {
        A[i] = malloc(N * sizeof *A[i]);
      }
   // double B[N];
    //double X[N];
    double* B = malloc(N * sizeof *B);
    double* X = malloc(N * sizeof *X);
    A[0][0] = 1;    A[0][1] = 2;
    A[1][0] = 1;    A[1][1] = 10;   A[1][2] = -5;
                    A[2][1] = 1;    A[2][2] = -5;   A[2][3] = 2;
                                    A[3][2] = 1;    A[3][3] = 4;
 
    B[0] = -5;
    B[1] = -9;
    B[2] = -20;
    B[3] = -27;
 
    puts("A matrix\n");
 
    for(int i = 0;i < N;i++){
        for(int j = 0; j < N;j++){
        printf("%lf   ",A[i][j]);
        }
        putchar('\n');
    }

    Progonka(N, A, B, X);
 
    putchar('\n');
    puts("X vector....");
    for(int i = 0;i < N;i++)
       printf("%lf   ", X[i]);
 
    for (int i = 0; i < N; i++)
    {
       free(A[i]);
    }
    free(A);
    free(B);
    free(X);
    return 0;
}
 
void Progonka(int N, double **A, double* B , double* X){
    double Alp[N];
    double Bet[N];
    int i = 0;
 
    Alp[0] = -A[0][ 1] / A[0][0];
    Bet[0] = B[0] / A[0][0];
 
    for (i = 1; i < N; i++)
    {
      Alp[i] = -A[i][ i + 1] /(A[i][ i] + Alp[i - 1] * A[i][i - 1]) ;
      Bet[i] = (B[i] - A[i][i - 1] * Bet[i - 1]) / (A[i][ i] + Alp[i - 1] * A[i][i - 1]);
    }
 
    X[N] = (B[N] - A[N][ N - 1] * Bet[N - 1]) / (A[N][N] + Alp[N - 1] * A[N][N - 1]);
 
    for (i = N - 1; i >= 0; i--)
    {
        X[i] = Alp[i] * X[i + 1] + Bet[i];
    }
}

Решение задачи: «Error in function»

textual
Листинг программы
for (i = 1; i < N; i++) { 
    Alp[i] = -A[i][ i + 1] /(A[i][ i] + Alp[i - 1] * A[i][i - 1]) ; 
    Bet[i] = (B[i] - A[i][i - 1] * Bet[i - 1]) / (A[i][ i] + Alp[i - 1] * A[i][i - 1]); 
}

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

  1. Проходим циклом по элементам массива от 1 до N-1
  2. Вычисляем значение Alp[i] по формуле: Alp[i] = -A[i][ i + 1] /(A[i][ i] + Alp[i - 1] * A[i][i - 1])
  3. Вычисляем значение Bet[i] по формуле: Bet[i] = (B[i] — A[i][i — 1] Bet[i — 1]) / (A[i][ i] + Alp[i — 1] A[i][i — 1])

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


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

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

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