singlepost

Помогите разобратся С++ << На главную или назад  

Вот задача:
На основе исходной прямоугольной матрицы получить 2 вектора:вектор,сформированный путем суммирования элементов строк матрицы;вектор,полученный путем умножения матрицы на первый вектор.

Вроде все верно, но не понятно почему я не могу присвоить элементам матрицы c[i], d[i] значения. Заранее всем спасибо

#include <iostream.h>
#include <stdio.h>
void main()
{
int n,m,i,j;
float A[100][100],c[100],d[100];// A – Матрица, с, d – векторы
cout <<"Rabota s matrix"<<endl;
cout<<"Vvdete kol-vo strok v matrice: ";
cin>>n;
cout<<"Vvedite kol-vo stolbcov v matrice: ";
cin>>m;
for(i=0;i<n;i++)
for(j=0;j<m;j++)
{
cout<<"Vedite zna4enie matrici ["<<i<<","<<j<<"] : "; // ввод значений матрицы
cin>>A[i][j];
}
for(i=0;i<n;i++) {
c[i]=0; // если в следующей строке посмотреть значение, то оно равно некоему большому числу 2543****
for(j=0;j<m;j++) {
c[i]=c[i]+A[i][j];
}
}
for(i=0 ; i < n; i++)
{
d[i]=0;
for(j=0; j < m; j++)
{
d[i]=d[i]+A[i][j]*c[i];
}
}
cout<<"BEKTOP 1: "<<endl;
for(i=0; i < n; i++)
cout<<'c['<<i<<']: '<< c[i] <<endl;
cout<<"BEKTOP 2: "<<endl;
for(i=0; i < n; i++)
cout<<'d['<<i<<']: '<< d[i] <<endl;// и в ответе получаю просто огромные числа
}

42 ответов в теме “Помогите разобратся С++”

  1. 19
    Данил Валиулин ответил:

    народ тут начал учиться на программиста
    решил написать свою 1 аростую рограмму, но когда написла вылезает ошибка и не могу понять из-за чего

    #include <iostream.h>

    #include <math.h>

    void main()

    {float R,R1,R2;

    cout<<"/nR1"; cin>>R1;

    cout<<"/nR2"; cin>>R2;

    R=R1+R2;

    cout<<R;
    }

  2. 18
    Павел Потапов ответил:

    Точно, кавычки я тоже правил :)

  3. 17
    Денис Ахметшин ответил:

    2 Пашка ت Джиоев
    Видать на меня тоже =) Оказывается вправду ошибка была лишь в кавычках, а сколько мучений, спасибо!
    2 Павел Scavenger Потапов
    На счет матрицы, она должна по условию быть прямоугольной, а с вводом все норма, теперь все работает, тоже очень благодарен за помощь

  4. 16
    Денис Ахметшин ответил:

    Всем очень благодарен, вот рабочий код =)

    #include <iostream.h>
    #include <stdio.h>
    void main()
    {
    int n,m,i,j;
    float A[100][100],c[100],d[100];
    cout <<"Rabota s matrix"<<endl;
    cout<<"Vvdete kol-vo strok v matrice: ";
    cin>>n;
    cout<<"Vvedite kol-vo stolbcov v matrice: ";
    cin>>m;
    for(i=0;i<n;i++)
    for(j=0;j<m;j++)
    { cout<<"Vedite zna4enie matrici ["<<i<<","<<j<<"] : ";
    cin>>A[i][j];
    }
    for(i=0;i<n;i++) {
    c[i]=0;
    for(j=0;j<m;j++) {
    c[i]=c[i]+A[i][j];
    }
    }

    for (j = 0; j < m; ++j)
    {
    d[j] = 0;
    for (i = 0; i < n; ++i)
    {
    d[j] += A[i][j] * c[i];
    }
    }

    cout<<"BEKTOP 1: "<<endl;
    for(i=0; i < n; i++)
    cout<<"c["<<i<<"]: "<< c[i] <<endl;

    cout<<"BEKTOP 2: "<<endl;
    for(i=0; i < m; i++)
    cout<<"d["<<i<<"]: "<< d[i] <<endl;
    }

  5. 15
    Ольга Калякулина ответил:

    Подскажите пожалуйста как в си++ можно из данной матрицы вычислить обратную))))Пожааалуйста))

  6. 14
    Павел Потапов ответил:

    Сырцы я не сохранял (т.к. собирал в рабочем проекте), но единственное (кроме исправленной ошибки), что я правил – это заменил ручной ввод на захардкоженные значения.

    ЗЫ Возможно где-то проблема с неправильной индексацией. Попробуй проверить на квадратной матрице. На ней должны плучиться разумные числа (даже если неправильные).

  7. 13
    Пашка Джиоев ответил:

    Блин, что-то я протупил, видимо Паскаль на меня так плохо повлиял ) Строки в C++ должны быть заключены в двойные кавычки, а у тебя они заключены в одинарные.

  8. 12
    Денис Ахметшин ответил:

    2 Пашка ت Джиоев
    вот что я получаю //s53.radikal.ru/i141/0910/e7/624c4156fbe8.gif
    2 Павел Scavenger Потапов
    Выложи код, пожалуйста, у меня все еще не правильно работает

  9. 11
    Павел Потапов ответил:

    Я пробовал с небольшими изменениями, и у меня все работало отлично.

  10. 10
    Пашка Джиоев ответил:

    Во-первых поменяй вычисление d, как Павел Scavenger Потапов написал:

    for (int j = 0; j < m; ++j)
    {
    d[j] = 0;
    for (int i = 0; i < n; ++i)
    {
    d[j] += A[i][j] * c[i];
    }
    }

    во-вторых, на выводе поменяй

    cout<<" BEKTOP 2: "<<endl;
    for(i=0; i < m; i++)
    cout<<'d['<<i<<']: '<< d[i] <<endl;

    А с чего ты взял вообще, что там у тебя не обнуляется?

  11. 9
    Денис Ахметшин ответил:

    2 Пашка ت Джиоев:
    Каждый элемент вектора получен путем суммирования всех элементов строки.
    2 Николай DuddIds Терентьев:
    Пока не знаю как работает new, попробую спасибо =)

  12. 8
    Пашка Джиоев ответил:

    Не очень понял условие. Первый вектор – это сумма столбцов матрицы или строк?

  13. 7
    Макс Донцов ответил:

    Было бы правильно выделить память под матрицу с помощью new

  14. 6
    Николай Терентьев ответил:

    а попробуй память для массивов выделять с помощью new.

  15. 5
    Денис Ахметшин ответил:

    2 Ленар Хайруллин
    Уже пробовал не помогает
    2 Павел Scavenger Потапов
    спасибо, что увидел ошибку

    Но проблема все же осталась, так же не могу обнулить элементы матриц с и d

  16. 4
    Денис Ахметшин ответил:

    Может кто нибудь попытается откомпилировать на своей машинe, может проблема не в программе, буду очень благодарен

  17. 3
    Павел Потапов ответил:

    Вру – не первый, а второй вектор должен иметь размер m. И считаться он должен так:

    for (int j = 0; j < m; ++j)
    {
    d[j] = 0;
    for (int i = 0; i < n; ++i)
    {
    d[j] += A[i][j] * c[i];
    }
    }

  18. 2
    Павел Потапов ответил:

    1) Для начала я бы забил фиксированную матрицу в коде (3*4, например), тогда было бы гораздо быстрее отлаживаться. И только после этого сделал бы ввод с клавиатуры.

    2) Кроме стилистических увидел только пару проблем: первый вектор (c) неправильно считается. Он должен иметь размер m. Соответственно, выражение для вычисления элемента второго вектора должно быть:

    d[i] += A[i][j] * c[j];

  19. 1
    Ленар Хайруллин ответил:

    попробуй обнулить матрицу в начале проги.

Клуб программистов работает уже ой-ой-ой сколько, а если поточнее, то с 2007 года.