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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
verccety
-1 / 0 / 0
Регистрация: 09.01.2011
Сообщений: 20
#1

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

09.03.2011, 16:38. Просмотров 964. Ответов 16
Метки нет (Все метки)

Вообщем нужна помощь по написаниям функции для квадратных матриц, 2 тривиальные (для кого-то) функции и одну не очень)

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

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

Написать функции сложения, умножения и вычитания квадратных матриц, и вычислить с их помощью выражение - C++
Написать функции для сложения, умножения и вычитания квадратных матриц. Используя составленные функции, вычислить значение матричного...

Ассоцыативный закон для квадратных матриц - C++
Даны две квадратные матрицы одного порядка А и В. Показать, что для них действут ассоциативный закон, т.е. А * В = В * А. в случае...

Составить описание класса для определения квадратных матриц целых чисел - C++
Реализация класса для работы с матрицами целых чисел. Задание: Составить описание класса для определения квадратных матриц целых...

Написать функцию для вычисления суммы элементов n квадратных матриц, которые расположены ниже главной диагонали. - C++
Вместо n взял две матрицы. Ошибка в 47-й и 49-й строках. Как правильно передать квадратную матрицу в функцию? #include...

Умножение квадратных матриц - C++
Задача состоит в том, чтобы умножать квадратные матрицы двумя способами, А - записывая в матрицу С. Б - перезаписывая в матрицу А....

Умножение квадратных матриц - C++
Функция умножения: void Multiplication (int a, int b,int c){ for(int i=0,n=0; i<=N-1&& n<=N-1; i++, n++){ c=0; ...

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

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

Добавлено через 59 секунд
Пожалуйста :-)
M128K145
Эксперт С++
8286 / 3505 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
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
Эксперт С++
8286 / 3505 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
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
Эксперт С++
8286 / 3505 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
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
Эксперт С++
8286 / 3505 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
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
Эксперт С++
8286 / 3505 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
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
Эксперт С++
8286 / 3505 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
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
Эксперт С++
8286 / 3505 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
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;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.03.2011, 13:49
Привет! Вот еще темы с ответами:

Функция генерации квадратных матриц - C++
Составить процедуру генерации (заполнение случайными числами в введенном диапазоне) квадратных матриц: единичной, диагональной,...

Перемножение квадратных матриц с вещественными числами - C++
Что-то никак не могу найти ошибку: #define _CRT_SECURE_NO_WARNINGS #include &lt;iostream&gt; #include &lt;fstream&gt; #include &lt;string&gt; ...

Разработка программ с использованием квадратных матриц - C++
Ребят,кто разбираеться в C++,помогите пожалйста?. Задача: Заполнить матрицу случайными числами. отразить матрицу симметрично...

Перемножение двух квадратных целочисленных матриц - C++
Помогите написать прогу: Написать подпрограмму void mult(int a, int b, int c, int N); для перемножения двух квадратных...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
11.03.2011, 13:49
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru