Форум программистов, компьютерный форум CyberForum.ru

функции для квадратных матриц - C++

Восстановить пароль Регистрация
 
verccety
-1 / 0 / 0
Регистрация: 09.01.2011
Сообщений: 20
09.03.2011, 16:38     функции для квадратных матриц #1
Вообщем нужна помощь по написаниям функции для квадратных матриц, 2 тривиальные (для кого-то) функции и одну не очень)

1)Ввод м-цы
2)Вывод в матричном виде
3)Составить массив-результат,состоящий из элементов расп. на главной диагонали и если число начинающиеся на гл. диагонали отрицательное,то в кач-ве элемента записать ноль

Заранее Спасибо!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.03.2011, 16:38     функции для квадратных матриц
Посмотрите здесь:

C++ Написать функцию для вычисления суммы элементов n квадратных матриц, которые расположены ниже главной диагонали.
C++ Составить описание класса для определения квадратных матриц целых чисел
C++ Ассоцыативный закон для квадратных матриц
C++ Написать функции сложения, умножения и вычитания квадратных матриц, и вычислить с их помощью выражение
C++ Функция генерации квадратных матриц
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
JamesBlack
 Аватар для JamesBlack
36 / 36 / 3
Регистрация: 28.07.2009
Сообщений: 144
09.03.2011, 19:10     функции для квадратных матриц #2
Товарищ.
Во-первых, если вы хотите чтобы вам помогли - будьте добры, приложите усилий чуть больше, чем через гугл найти этот форум, зарегаться тут и написать пост. Как минимум вы должны попробовать своими силами написать эту програмку (благо тут абсолютно ничего сложного нет) и если ничего не выйдет - выкладывать свой код и просить помочь разобраться - что тут не так.

Добавлено через 38 секунд
А во-вторых, раздел "C++ для начинающих" в другом месте.

Добавлено через 59 секунд
Пожалуйста :-)
M128K145
Эксперт C++
 Аватар для M128K145
8272 / 3491 / 142
Регистрация: 03.07.2009
Сообщений: 10,707
09.03.2011, 23:25     функции для квадратных матриц #3
1)
C++
1
2
3
4
5
6
7
void out(int** matr, int n, int m)
{
    int i, j;
    for(i = 0; i < n; ++i)
        for(j = 0; j < m; ++j)
            std::cout<<matr[i][j]<<' ';
}
2)
C++
1
2
3
4
5
6
7
void outMatrix(int** matr, int n, int m)
{
    int i, j;
    for(i = 0; i < n; ++i, std::cout<<std::endl)
        for(j = 0; j < m; ++j)
            std::cout<<matr[i][j]<<' ';
}
3)
C++
1
2
3
4
5
6
7
8
9
int* getArray(int**matr, int n)
{
    int i = 0;
    int* array = new int[n];
    array[i] = matr[i][i] < 0 ? 0 : matr[i][i];
    for(; i < n; ++i)
        array[i] = matr[i][i];
    return array;
}
verccety
-1 / 0 / 0
Регистрация: 09.01.2011
Сообщений: 20
11.03.2011, 07:13  [ТС]     функции для квадратных матриц #4
{
C++
1
2
3
4
5
    int i, j;
    for(i = 0; i < n; ++i)
        for(j = 0; j < m; ++j)
            std::cout<<matr[i][j]<<' ';
}
2)
C++
1
2
3
4
5
6
7
void outMatrix(int** matr, int n, int m)
{
    int i, j;
    for(i = 0; i < n; ++i, std::cout<<std::endl)
        for(j = 0; j < m; ++j)
            std::cout<<matr[i][j]<<' ';
}
3)
C++
1
2
3
4
5
6
7
8
int* getArray(int**matr, int n)
{
    int i = 0;
    int* array = new int[n];
    array[i] = matr[i][i] < 0 ? 0 : matr[i][i];
    for(; i < n; ++i)
        array[i] = matr[i][i];
    return array;


M128K145,спасибо огромное за помощь,но возникла проблема. Я вот например хочу вызвать функцию ввода массива через main (хотя правда в твоем первом посте написан вывод =/ ) и когда ввожу данные в массив ,то сразу вылазит ошибка "Access violation". Вот проект http://*******/EJ7eD . В чём может быть проблема?
M128K145
Эксперт C++
 Аватар для M128K145
8272 / 3491 / 142
Регистрация: 03.07.2009
Сообщений: 10,707
11.03.2011, 08:59     функции для квадратных матриц #5
Ах да, я не так прочитал задание, вот ввод
C++
1
2
3
4
5
6
7
void input(int** matr, int n, int m)
{
    int i, j;
    for(i = 0; i < n; ++i)
        for(j = 0; j < m; ++j)
            std::cin>>matr[i][j];
}
verccety
-1 / 0 / 0
Регистрация: 09.01.2011
Сообщений: 20
11.03.2011, 09:21  [ТС]     функции для квадратных матриц #6
Да не,как раз я написал точно также.Но вылазит ошибка при вводе цифры,цифр - Access violation writing location по такому-то адресу
M128K145
Эксперт C++
 Аватар для M128K145
8272 / 3491 / 142
Регистрация: 03.07.2009
Сообщений: 10,707
11.03.2011, 09:39     функции для квадратных матриц #7
verccety, напишите минимальный код воспроизводящий эту ситуацию
verccety
-1 / 0 / 0
Регистрация: 09.01.2011
Сообщений: 20
11.03.2011, 09:44  [ТС]     функции для квадратных матриц #8
C++
1
2
3
4
5
6
const int n = 5;
    const int m = 5;
 
    int **matrix = (int **) new int[n*m];
 
    input(matrix,n,m);
M128K145
Эксперт C++
 Аватар для M128K145
8272 / 3491 / 142
Регистрация: 03.07.2009
Сообщений: 10,707
11.03.2011, 11:35     функции для квадратных матриц #9
verccety, а кто так матрицу создает? Матрица создается так
C++
1
2
3
4
int i;
int** matrix = new int* [n];
for(i = 0; i < n; ++i)
    matrix[i] = new int[m];
verccety
-1 / 0 / 0
Регистрация: 09.01.2011
Сообщений: 20
11.03.2011, 12:00  [ТС]     функции для квадратных матриц #10
Ну допустим я создал так) Но когда пробую создать массив-результат из третьей ф-ций, то получается не то ,что надо =/

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
const int z = 22;
int *array = new int [z];
 
const int n = 2;
const int m = 2;
int i;
int **matrix = new int *[n];
 for (i = 0; i < n; i++)
   matrix[i] = new int [m];
    in(matrix,n,m);
    array = inverse(matrix,n);
 
    for (i=0; i < z; i++)
        cout<<*array<<' ';
M128K145
Эксперт C++
 Аватар для M128K145
8272 / 3491 / 142
Регистрация: 03.07.2009
Сообщений: 10,707
11.03.2011, 13:04     функции для квадратных матриц #11
verccety, а можно сделать так, чтобы я не вытягивал с вас по одному слову.
Что у вас получается, что вы ожидали, что делает функция inverse?
verccety
-1 / 0 / 0
Регистрация: 09.01.2011
Сообщений: 20
11.03.2011, 13:06  [ТС]     функции для квадратных матриц #12
Я же написал ,что эта третья функция которую вы написали. Тоесть я ввожу матрицу 1 2 3 4, а массив получится должен 1 ,4. А на самом деле выходит,что он имеет только первую цифру матрицы и тупо её копирует
M128K145
Эксперт C++
 Аватар для M128K145
8272 / 3491 / 142
Регистрация: 03.07.2009
Сообщений: 10,707
11.03.2011, 13:19     функции для квадратных матриц #13
Цитата Сообщение от verccety Посмотреть сообщение
А на самом деле выходит,что он имеет только первую цифру матрицы и тупо её копирует
а в коде моей функции написано так, что именно первая и не копируется. А вы утверждаете, что именно она копируется. Перепишите так:
C++
1
2
3
4
5
6
7
8
9
10
int* getArray(int**matr, int n)
{
    int i = 0;
    int* array = new int[n];
    ++i;
    array[i] = matr[i][i] < 0 ? 0 : matr[i][i];
    for(; i < n; ++i)
        array[i] = matr[i][i];
    return array;
}
verccety
-1 / 0 / 0
Регистрация: 09.01.2011
Сообщений: 20
11.03.2011, 13:25  [ТС]     функции для квадратных матриц #14
Вот мой main
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <iostream>
void in(int **matr, int n , int m);
int *inverse(int **matr, int n);
void out(int **matr, int n , int m);
using namespace std;
 
int main (void)
 
{   
    
    const int z = 22;
    int *array = new int [z];
 
    const int n = 2;
    const int m = 2;
    int i;
    int **matrix = new int *[n];
    for (i = 0; i < n; i++)
        matrix[i] = new int [m];
    in(matrix,n,m);
    out(matrix,n,m);
    array = inverse(matrix,n);
 
    for (i=0; i < z; i++)
        cout<<*array<<' ';
 
 
 
 
 
system("pause");
return 0;
}
input.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
 
 
void in(int **matr, int n , int m)
 
{
 
    int i,j;
    std::cout<<" Enter Matrix:";
    for(i = 0; i < n; ++i)
        for(j = 0; j < m; ++j)
            
    {
            std::cout<<"["<<i<<"]"<<"["<<j<<"]"<<std::endl;
              std::cin>>matr[i][j];
    }
 
 
 
 
}
getarray.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
 
int* inverse(int**matr, int n)
{
    int i = 0;
    int* array = new int[n];
    ++i;
    array[i] = matr[i][i] < 0 ? 0 : matr[i][i];
    for(; i < n; ++i)
        array[i] = matr[i][i];
    return array;
}
Если всё это откомпилировать то такую матрицу


6 8
3 2

в массиве-результате получится как 6 6 6 6 6 6 и т.п

А надо - 6 2 ,ну если число отриц. то записать ноль

Upd хотя если использовать вашу последнюю функцию,то выдаются адреса заместо значений не зависимо от наличия "*" =/
M128K145
Эксперт C++
 Аватар для M128K145
8272 / 3491 / 142
Регистрация: 03.07.2009
Сообщений: 10,707
11.03.2011, 13:49     функции для квадратных матриц #15
Цитата Сообщение от verccety Посмотреть сообщение
C++
1
2
for (i=0; i < z; i++)
    cout<<*array<<' ';
Что это такое, откуда вы взяли z и почему не n? И почему вы выводите не элементы массива по индексам, а только указатель на матрицу?

http://codepad.org/ySkeqdib можете просто скопировать код.

ЗЫ. исправил опечатку в функции
C++
1
2
3
4
5
6
7
8
9
10
int* inverse(int**matr, int n)
{
    int i = 0;
    int* array = new int[n];
    array[i] = matr[i][i] < 0 ? 0 : matr[i][i];
    ++i;
    for(; i < n; ++i)
        array[i] = matr[i][i];
    return array;
}
verccety
-1 / 0 / 0
Регистрация: 09.01.2011
Сообщений: 20
11.03.2011, 14:10  [ТС]     функции для квадратных матриц #16
Во,спасибо) Щас норм робит

Только можете прокомментировать этот код ?


C++
1
2
 matr[i][i] < 0 ? 0 : matr[i][i];
    ++i;
И снова тут ошибочка вкралась (. Если ввести матрицу например

-1 6
3 5

то выводит 0 5 как и положено

но если ввести
3 4
3 -6

то -6 так и выводит (
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.03.2011, 14:29     функции для квадратных матриц
Еще ссылки по теме:

C++ Умножение квадратных матриц
C++ Перемножение квадратных матриц с вещественными числами
C++ Оптимизации алгоритма умножения квадратных матриц

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
M128K145
Эксперт C++
 Аватар для M128K145
8272 / 3491 / 142
Регистрация: 03.07.2009
Сообщений: 10,707
11.03.2011, 14:29     функции для квадратных матриц #17
Цитата Сообщение от verccety Посмотреть сообщение
если число начинающиеся на гл. диагонали отрицательное,то в кач-ве элемента записать ноль
Я трактовал выделенный фрагмент как первый элемент диагонали. Если имелось в виду все нулевые элементы, то тогда все намного проще
C++
1
2
3
4
5
6
7
int* inverse(int**matr, int n)
{
    int* array = new int[n];
    for(int i = 0; i < n; ++i)
        array[i] = matr[i][i] < 0 ? 0 : matr[i][i];
    return array;
}
5 строка написана согласно конструкции
Код
условие ? действия_если_условие_истинно : действия_если_условие_ложно
Yandex
Объявления
11.03.2011, 14:29     функции для квадратных матриц
Ответ Создать тему
Опции темы

Текущее время: 22:53. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru