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

Тема в разделе "C/C++/C#", создана пользователем -, 24 мар 2012.

  1. Гость

    Дана квадратная матрица А порядка n, векторы x и y с n-элементами. Получить вектор А(x+y).
    На языке с++,помогите с прогой_
     
  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;
    Начало у тебя уже есть. Оформи это как программу, и организуй заполнения матрицы и векторов или с клавиатуры или рандомом.
    Сделаешь будем будем дальше писать программу.
     
  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;
    }
     
  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. Лучше указывать каким компилятором пользуетесь, так легче помогать.
     
  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;
    }
     
  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)
    {
    ....
    }
     
  7. Гость

    все равно не меняет столбцы(
     
  8. Гость

    Я пробывал на матрице:

    1 1 1
    2 3 1

    n = 1

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

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

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

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

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

    1 1 1
    1 2 3

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

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

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

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

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

    ну да они отсортируются по возрастанию,так и столбцы соответствующие должны меняться((помоги
     
Загрузка...
Похожие Темы - Матрицы Векторы
  1. Dantes95
    Ответов:
    0
    Просмотров:
    1.016
  2. kobrin13
    Ответов:
    0
    Просмотров:
    1.033
  3. FCDK
    Ответов:
    0
    Просмотров:
    1.264
  4. PahaStar
    Ответов:
    0
    Просмотров:
    1.077
  5. Evgesha777
    Ответов:
    1
    Просмотров:
    1.401

Поделиться этой страницей