Вот задача:
На основе исходной прямоугольной матрицы получить 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;// и в ответе получаю просто огромные числа
}
20 октября 2009 в 13:02
народ тут начал учиться на программиста
решил написать свою 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;
}
15 октября 2009 в 17:05
Точно, кавычки я тоже правил
15 октября 2009 в 17:03
2 Пашка ت Джиоев
Видать на меня тоже =) Оказывается вправду ошибка была лишь в кавычках, а сколько мучений, спасибо!
2 Павел Scavenger Потапов
На счет матрицы, она должна по условию быть прямоугольной, а с вводом все норма, теперь все работает, тоже очень благодарен за помощь
15 октября 2009 в 17:02
Всем очень благодарен, вот рабочий код =)
#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;
}
15 октября 2009 в 17:01
Подскажите пожалуйста как в си++ можно из данной матрицы вычислить обратную))))Пожааалуйста))
15 октября 2009 в 13:01
Сырцы я не сохранял (т.к. собирал в рабочем проекте), но единственное (кроме исправленной ошибки), что я правил – это заменил ручной ввод на захардкоженные значения.
ЗЫ Возможно где-то проблема с неправильной индексацией. Попробуй проверить на квадратной матрице. На ней должны плучиться разумные числа (даже если неправильные).
14 октября 2009 в 21:02
Блин, что-то я протупил, видимо Паскаль на меня так плохо повлиял ) Строки в C++ должны быть заключены в двойные кавычки, а у тебя они заключены в одинарные.
14 октября 2009 в 15:05
2 Пашка ت Джиоев
вот что я получаю //s53.radikal.ru/i141/0910/e7/624c4156fbe8.gif
2 Павел Scavenger Потапов
Выложи код, пожалуйста, у меня все еще не правильно работает
13 октября 2009 в 15:05
Я пробовал с небольшими изменениями, и у меня все работало отлично.
13 октября 2009 в 15:04
Во-первых поменяй вычисление 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;
А с чего ты взял вообще, что там у тебя не обнуляется?
13 октября 2009 в 13:04
2 Пашка ت Джиоев:
Каждый элемент вектора получен путем суммирования всех элементов строки.
2 Николай DuddIds Терентьев:
Пока не знаю как работает new, попробую спасибо =)
13 октября 2009 в 11:01
Не очень понял условие. Первый вектор – это сумма столбцов матрицы или строк?
13 октября 2009 в 0:00
Было бы правильно выделить память под матрицу с помощью new
12 октября 2009 в 23:00
а попробуй память для массивов выделять с помощью new.
12 октября 2009 в 22:05
2 Ленар Хайруллин
Уже пробовал не помогает
2 Павел Scavenger Потапов
спасибо, что увидел ошибку
Но проблема все же осталась, так же не могу обнулить элементы матриц с и d
12 октября 2009 в 22:05
Может кто нибудь попытается откомпилировать на своей машинe, может проблема не в программе, буду очень благодарен
12 октября 2009 в 16:05
Вру – не первый, а второй вектор должен иметь размер 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];
}
}
12 октября 2009 в 16:04
1) Для начала я бы забил фиксированную матрицу в коде (3*4, например), тогда было бы гораздо быстрее отлаживаться. И только после этого сделал бы ввод с клавиатуры.
2) Кроме стилистических увидел только пару проблем: первый вектор (c) неправильно считается. Он должен иметь размер m. Соответственно, выражение для вычисления элемента второго вектора должно быть:
d[i] += A[i][j] * c[j];
12 октября 2009 в 15:03
попробуй обнулить матрицу в начале проги.