Матрицы И Векторы

  • Автор темы Guest
  • Дата начала
G

Guest

#1
Дана квадратная матрица А порядка n, векторы x и y с n-элементами. Получить вектор А(x+y).
На языке с++,помогите с прогой_
 
G

Guest

#2
Квадратная матрица -- двумерный массив.
C++:
const int n = 5;
double **A = new double*[n];
for (int i = 0; i < n; i++)
{
A[i] = new double[n];
}
Вектора -- одномерные массивы.
C++:
double *x = new double[n];
double *y = new double[n];
в конце нужно освободить динамическую память
C++:
for(int i = 0; i < n; i++)
{
delete[] A[i];
}
delete[] A;

delete[] x;
delete[] y;
Начало у тебя уже есть. Оформи это как программу, и организуй заполнения матрицы и векторов или с клавиатуры или рандомом.
Сделаешь будем будем дальше писать программу.
 
G

Guest

#3
помогите с ошибкой...не работает(

#include <iostream>
using namespace std;
int main()
{
int N,a;
char end;
cout<<"Vvedite poriadok"<<'\n'<< "N=";
cin>>N;
int X[N],Y[N],A[N][N],B[N];
for(int i=1;i<N+1;i++)
{
cout<<"Vvedite "<<"X("<<i<<")"<<'\n'<<"X("<<i<<")=" ;
cin>>X;
}
for(int i=1;i<N+1;i++)
{
cout<<"Vvedite "<<"Y("<<i<<")"<<'\n'<<"Y("<<i<<")=" ;
cin>>Y;
}
for(int i=1;i<N+1;i++)
{
for(int j=1;j<N+1;j++)
{
cout<<"Vvedite "<<"A("<<i<<","<<j<<")"<<'\n'<<"A("<<i<<","<<j<<")=";
cin>>A[j];
}
}
for(int i=1;i<N+1;i++)
{
B=0;
for(int j=1;j<N+1;j++)
{
B=B+A[j]*(X[j]+Y[j]);
}
}

for(int i=1;i<N+1;i++)
{

cout<<B<<'\n';
}
cout<<"Najmite lubuu simvolnuu klavishu a posle Enter";
cin>>end;
return 0;
}
 
G

Guest

#4
Видя такую конструкцию
C++:
int X[N],Y[N],A[N][N],B[N];
компилятор пытается определить размер выделяемой памяти, и конечно же, не может этого сделать, так как размер массива будет известен только в ходе выполнения программы. В таких случаях память выделяется динамически, как я показал в первом посте.

В с++ нумерация элементов массива начинается с 0, и так делать не правельно!!!
C++:
for(int i=1;i<N+1;i++)
{
cout<<"Vvedite "<<"X("<<i<<")"<<'\n'<<"X("<<i<<")=";
cin>>X[i]; 
}

C++:
#include <iostream>
#include <conio.h>
using namespace std;
int main()
{
int N; 
cout<<"Vvedite poriadok"<<'\n'<< "N=";
cin>>N;
/*int X[N],Y[N],A[N][N],B[N];*/

int *X = new int[N];
int *Y = new int[N];
int *B = new int[N];

int **A = new int*[N];
for (int i = 0; i < N; i++)
A[i] = new int[N];


for(int i=0;i<N;i++)
{
cout<<"Vvedite "<<"X("<<i<<")"<<'\n'<<"X("<<i<<")=";
cin>>X[i]; 
}
for(int i=0;i<N;i++)
{
cout<<"Vvedite "<<"Y("<<i<<")"<<'\n'<<"Y("<<i<<")=";
cin>>Y[i]; 
} 
for(int i=0;i<N;i++)
{
for(int j=0;j<N;j++)
{
cout<<"Vvedite "<<"A("<<i<<","<<j<<")"<<'\n'<<"A("<<i<<","<<j<<")=";
cin>>A[i][j];
}
}
for(int i=0;i<N;i++)
{
B[i]=0; 
for(int j=0;j<N;j++)
{
B[i]=B[i]+A[i][j]*(X[j]+Y[j]);
}
}

for(int i=0;i<N;i++)
{

cout<<B[i]<<'\n'; 
}
cout<<"Najmite lubuu simvolnuu klavishu a posle Enter"; 
_getch();

delete[] X;
delete[] Y;
delete[] B;

for(int i = 0; i < N; i++)
delete[] A[i];
delete[] A;

return 0; 
}
Код проверил в VS2008

P.S. Лучше указывать каким компилятором пользуетесь, так легче помогать.
 
G

Guest

#5
окей)))

можешь проверить и помочь исправить программу,там у меня по возрастанию меняет,а столбцы никак...помоги)

Упорядочить элементы к-ой строки матрицы m*n по возрастанию.Если элементы одинаковы,то упорядочить элементы к+1-ой строки также по возрастанию.

C++:
#include "stdafx.h"
#include <conio.h>
#include <iostream>
#include <windows.h>
#include <iomanip>
using namespace std;



int _tmain(int argc, _TCHAR* argv[])
{
setlocale(LC_ALL,"RUS");
int i , j , st , str ,s=0 ,k=0 , n ,f=0,f1=0;
system("cls");
//Вводим число строк и столбцов матрицы
cout << "Введите число строк : " << endl;
cout << ">>>>>> ";
cin >> st;
cout << "Введите число столбцов : " << endl;
cout << ">>>>>> ";
cin	>> str; 
//Выделяем под них память
double **m;
m=new double*[st]; 
for(int i = 0; i < st; i++) 
{	
m[i] = new double[str];
}
//Заполняем матрицу
for(int i=0;i<st;i++)
{
for(int j=0;j<str;j++)
{
cout << "Введите " << j+1 << " элемент " << i+1 << " сроки : "<<endl;
cin >> m[i][j];
}
}
//Выводим матрицу
cout << "Ваша матрица : \n\n";
for (int i = 0; i < st; i++)
{
for (j=0; j < str; j++)
{
cout.width(7);
cout <<m[i][j];
}
cout << endl;
}
//Сортируем строку матрицы 
cout<<"Какую строку нужно отсортировать : "<<endl;
cin>>n;
n=n-1;
//Проверяем равенство элементов , если они все равны , то уведичиваем показатель номера строки , и снова проверяем , и так до тех пор , пока элементы будут не равны
while(f1!=1)
{
for(int j=0;j<str;j++)
{
if(j+1==str)
{
break;
}
if(m[n][j]==m[n][j+1])
{
f++;
}
}
if(f==str-1)
{
n=n+1;
cout<<n<<endl;
f=0;
}
else
{f1=1;}
}
//Алгоритм сортировки элементов строки матрицы
while(k!=str)
{
for(int j=0;j<str;j++)
{
if(m[n][j]>m[n][j+1])
{
if(j+1==str)
{
break;
}
s=m[n][j];
m[n][j]=m[n][j+1];
m[n][j+1]=s;
}
}
k++;
}
//Вывод отсортированной матрицы на экран
cout << "Отсортированная матрица : "<<endl;
for (int i = 0; i < st; i++)
{
for (j=0; j < str; j++)
{
cout.width(7);
cout <<m[i][j];
}
cout << endl;
}
system("PAUSE");
return 0;
}
 
G

Guest

#6
C++:
#include <stdio.h>
#include <tchar.h>
#include <conio.h>
#include <iostream>
#include <windows.h>
#include <iomanip>
using namespace std;



int _tmain(int argc, _TCHAR* argv[])
{
setlocale(LC_ALL,"RUS");
int st , str ,s=0 ,k=0 , n ,f=0,f1=0;
system("cls");
//Вводим число строк и столбцов матрицы
cout << "Введите число строк : " << endl;
cout << ">>>>>> ";
cin >> st;
cout << "Введите число столбцов : " << endl;
cout << ">>>>>> ";
cin >> str; 
//Выделяем под них память
double **m;
m=new double*[st]; 
for(int i = 0; i < st; i++) 
{ 
m[i] = new double[str];
}
//Заполняем матрицу
for(int i=0;i<st;i++)
{
for(int j=0;j<str;j++)
{
cout << "Введите " << j+1 << " элемент " << i+1 << " сроки : "<<endl;
cin >> m[i][j];
}
}
//Выводим матрицу
cout << "Ваша матрица : \n\n";
for (int i = 0; i < st; i++)
{
for (int j=0; j < str; j++)
{
cout.width(7);
cout <<m[i][j];
}
cout << endl;
}
//Сортируем строку матрицы 
cout<<"Какую строку нужно отсортировать : "<<endl;
cin>>n;
n=n-1;
//Проверяем равенство элементов , если они все равны , то уведичиваем показатель номера строки , и снова проверяем , и так до тех пор , пока элементы будут не равны
bool cntn = true;// Продолжить цикл
while(cntn)
{
for(int j=0;j<str - 1;j++)
if(m[n][j]!=m[n][j+1])
cntn = false; // В столбце есть не равные элементы. Дальнейшая проверка не нужна.

if(cntn)
{
n=n+1;
cout<<"Сортируеться строка " << n + 1<<endl;
}

if (n == st)
cntn = false; //Проверена вся матрица.
}

//Алгоритм сортировки элементов строки матрицы
if (n != st)// 
{
while(k!=str)
{
for(int j=0;j<str - 1;j++)
{
if(m[n][j]>m[n][j+1])
{
double temp = m[n][j];
m[n][j]=m[n][j+1];
m[n][j+1] = temp;
}
}
k++;
}
}

//Вывод отсортированной матрицы на экран
cout << "Отсортированная матрица : "<<endl;
for (int i = 0; i < st; i++)
{
for (int j=0; j < str; j++)
{
cout.width(7);
cout <<m[i][j];
}
cout << endl;
}
system("PAUSE");
return 0;
}
Переменные лучше объявлять непосредственно перед их использованием, а не в начале файла, это улучшает читаймость программы
C++:
C++:
bool cntn = true;// Продолжить цикл
while(cntn)
{
....
}
 
G

Guest

#8
Упорядочить элементы к-ой строки матрицы m*n по возрастанию.Если элементы одинаковы,то упорядочить элементы к+1-ой строки также по возрастанию.
все равно не меняет столбцы(
Я пробывал на матрице:

1 1 1
2 3 1

n = 1

Проверяется что в строке все элементы равны.

Увеличивается номер строки (n=n+1, хотя можно и n++) .

Во второй строке есть не равные элементы, проверка закончена.

Упорядочивается вторая строка матрицы.

Получается матрица:

1 1 1
1 2 3

Если это не правельно, то что должно быть в результате?
 
G

Guest

#9
1250
3127
3333
1031
если взять такую матрицу,то столбцы не поменяются,вот посмотри((я не понимаю,что надо исправить(
 
G

Guest

#10
Если указать в качестве сортируемой строки 1 или 2, предложенной матрицы, то будет отсортирована ТОЛЬКО 1 или ТОЛЬКО 2 строка.
Если указать 3, то так как у нее все элементы равны будет, будет отсортирована четвертая строка.

По-моему это соответствует:

Упорядочить элементы к-ой строки матрицы m*n по возрастанию.Если элементы одинаковы,то упорядочить элементы к+1-ой строки также по возрастанию.
 
G

Guest

#11
ну да они отсортируются по возрастанию,так и столбцы соответствующие должны меняться((помоги