2013-11-19 3 views
0

Мне была задана проблема, которая просит нас решить систему уравнений 2, используя массив и указатель на этот массив. Это своего рода линейная алгебрая по этому поводу, с x_1 = (DE-BF)/(AD-BC) и x_2 = (AF-CE)/(AD-BC). Система Ax_1 + Bx_2 = C и Dx_1 + Ex_2 = F. Мой код компилируется, но выплескивает мусор. Может кто-нибудь мне помочь? Я уверен, что это ошибка с моими указателями, но я не знаю, как это исправить. Большое спасибо заранее.Использование указателей и массивов для решения линейной системы

#include "stdafx.h" 
#include <iostream> 

using namespace std; 

int main(){ 
    double A,B,C,D,E,F; 
    cout << "Please enter a value for A: " << endl; 
    cin >> A; 
    cout << "Please enter a value for B: " << endl; 
    cin >> B; 
    cout << "Please enter a value for C: " << endl; 
    cin >> C; 
    cout << "Please enter a value for D: " << endl; 
    cin >> D; 
    cout << "Please enter a value for E: " << endl; 
    cin >> E; 
    cout << "Please enter a value for F: " << endl; 
    cin >> F; 
    double paramarray[6] = {A,B,C,D,E,F}; 
    double* p; 
    p = &paramarray[6]; 
    double x1 = (p[3]*p[4] - p[1]*p[5])/(p[0]*p[3] - p[1]*p[2]); 
    double x2 = (p[0]*p[5] - p[2]*p[4])/(p[0]*p[3] - p[1]*p[2]); 
    cout << "X_1 = " << x1 << endl; 
    cout << "X_2 = " << x2 << endl; 
    int f; 
    cin >> f; 
    return 0; 
}  

ответ

0
p = &paramarray[6]; 

Это проблема. Это означает, что вы назначаете адрес paramarray [6] на p. paramarray [6] не определен, и вы пытаетесь получить доступ к массиву границ.

Попробуйте изменить его

p = paramarray; 

Кроме того, это будет лучше, если вы первый чек на нулевой знаменатель и обновить уравнение соответственно.

+0

Это исправлено! благодаря –

0

Ваш указатель должен быть инициализирован базой массива, который является адресом первого элемента. И в вашей программе вы инициализируете его адресом за пределами границ, который является индексом 6, где последний индекс массива равен 5. Массив размером шесть означает, что первый индекс равен 0, а последний индекс 5.

так изменить строку:

p = &paramarray[6]; 

к

p = paramarray; //or p=&paramarray[0].Both are same here 

Это выше строка будет хранить адрес первого элемента в указателе p.

Смежные вопросы