Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помочь доделать программу. Транспонирование матриц 
:(
    Опции темы
sanya100
Дата 18.4.2013, 11:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 18.4.2013

Репутация: нет
Всего: нет



Здравствуйте, дорогие форумчане.
Мне нужна ваша помощь.
Помогите, пожалуйста, дописать программу.
Вот, собственно, задание:
Код

#include <iostream>
#include <windows.h>
#include <conio.h>
 
using namespace std;
 
int main ()
{
    int **mas, n, i, j, b;
 
setlocale(LC_ALL,"rus");
    cout<<"Введите количество строк и столбцов матрицы: "<< endl;
    cin>>n;
    mas=new int*[n];
 
    for(i=0; i<n; i++)
       mas[i]=new int[n];
    cout<<"Введите элементы матрицы A: "<< endl;
    for(i=0; i<n; i++)
       for(j=0; j<n; j++)
       {
          cout<<"["<<i<<"]["<<j<<"]= ";
          cin>>mas[i][j];
       }
       cout<<"Введите элементы матрицы B:\n";
       for (i=0; i<n; i++){
for (j=0; j<n; j++){
cout<<"["<<i<<"]["<<j<<"]=";
cin>>mas[i][j];
}}
        cout<<"исходная матрица"<<endl;
    for(i=0; i<n; i++)
        {
       for(j=0; j<n; j++)
          cout<<mas[i][j]<<" ";
          cout<<endl;
        }
    cout<<"Транспонированая матрица по главной диагонали:"<<endl;
    for(i=0; i<n; i++)
    {
       for(j=0; j<n; j++)
           cout<<mas[j][i]<<" ";
       cout<<endl;
    }
    cout<<"Транспонированая матрица по побочной диагонали:"<<endl;
    for(i=0; i<n; i++)
    {
       for(j=0; j<n; j++)
           cout<<mas[n-1-j][n-1-i]<<" ";
       cout<<endl;
    }
    cout<<endl;  
    getch();
}

Как сделать получение одной матрицы из другой путем транспонирования один или несколько раз?
Заранее спасибо. С меня много +. 
PM MAIL   Вверх
sanya100
Дата 18.4.2013, 15:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 18.4.2013

Репутация: нет
Всего: нет



Никто не поможет? smile 
PM MAIL   Вверх
kolesnle
Дата 21.4.2013, 10:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Упертый сишник
*


Профиль
Группа: Участник
Сообщений: 93
Регистрация: 22.3.2013

Репутация: нет
Всего: нет



копируешь матрицу с помощью memcpy и транспонирушь ее сколько надо. Получаешь исходную и измененную. А в чем проблема?
PM MAIL   Вверх
sanya100
Дата 21.4.2013, 18:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 18.4.2013

Репутация: нет
Всего: нет



Проблема в том, что я не могу реализовать... Знаний не хватает. Не напишешь код реализации, пожалуйста?)
PM MAIL   Вверх
kolesnle
Дата 21.4.2013, 18:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Упертый сишник
*


Профиль
Группа: Участник
Сообщений: 93
Регистрация: 22.3.2013

Репутация: нет
Всего: нет



напиши алгоритм русским языком, я переведу на C++, так и быть
PM MAIL   Вверх
sanya100
Дата 21.4.2013, 18:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 18.4.2013

Репутация: нет
Всего: нет



Ты имеешь ввиду на алгоритмическом языке?
PM MAIL   Вверх
kolesnle
Дата 21.4.2013, 18:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Упертый сишник
*


Профиль
Группа: Участник
Сообщений: 93
Регистрация: 22.3.2013

Репутация: нет
Всего: нет



Да как хочешь, главное чтобы я понял  smile 
PM MAIL   Вверх
sanya100
Дата 21.4.2013, 19:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 18.4.2013

Репутация: нет
Всего: нет



Просто я не могу еще догнать, как вообще это реализовать. Вот и прошу, пожалуйста, написать код... И дальше попробую разобраться...
Препод проверяет по этому тесту:
-6 -5 7 9
-7 -2 -3 -9
1 2 -3 1
2 -3 8 8

вывод сообщения: нельзя

ТА если можно транспонировать, то должна выводиться транспонированная матрица из другой заданной.

Добавлено через 14 минут и 31 секунду
Сможешь написать? smile 
PM MAIL   Вверх
kolesnle
Дата 21.4.2013, 19:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Упертый сишник
*


Профиль
Группа: Участник
Сообщений: 93
Регистрация: 22.3.2013

Репутация: нет
Всего: нет



Как нужно вводить матрицу? Завтра напишу

Это сообщение отредактировал(а) kolesnle - 21.4.2013, 19:23
PM MAIL   Вверх
sanya100
Дата 21.4.2013, 19:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 18.4.2013

Репутация: нет
Всего: нет



Надо вводить матрицы. Две. Как у меня в самом первом посте. А нельзя ли сегодня, пожалуйста?

Это сообщение отредактировал(а) sanya100 - 22.4.2013, 06:19
PM MAIL   Вверх
kolesnle
Дата 21.4.2013, 19:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Упертый сишник
*


Профиль
Группа: Участник
Сообщений: 93
Регистрация: 22.3.2013

Репутация: нет
Всего: нет



Ок. Часам к 2м ночи сделаю, сейчас времени нет. Надеюсь не поздно?
PM MAIL   Вверх
sanya100
Дата 21.4.2013, 19:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 18.4.2013

Репутация: нет
Всего: нет



Пойдёт) Спасибо заранее) Я тогда в два часа ночи зайду, посмотрю) И проверю по этому тесту за одно)

Это сообщение отредактировал(а) sanya100 - 21.4.2013, 19:39
PM MAIL   Вверх
kolesnle
Дата 21.4.2013, 23:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Упертый сишник
*


Профиль
Группа: Участник
Сообщений: 93
Регистрация: 22.3.2013

Репутация: нет
Всего: нет



Код

// ha.cpp: определяет точку входа для консольного приложения.
//
// ha.cpp: определяет точку входа для консольного приложения.
//
#include "stdafx.h"
#include <iostream>
#include <locale.h>
#include <vector>

 
using namespace std;

/*Существует всего несколько вариантов получения второй матрицы
1: Исходная матрица
2: Транспонировать по главной диагонали
3: Транспонировать по побочной диагонали 
4: Транспонировать по главной диагонали матрицу транспонированную по побочной диагонали
Остальные же случаи приводят к повторениям.
Пример:
Исходная матрица:
1 2
1 2
Транспонированая по главной диагонали матрица:
1 1
2 2
Транспонированная  по побочной диагонали матрица:
2 2
1 1
Транспонированая по главной диагонали матрица транспонированная по побочной диагонали:
2 1
2 1
Пример 2:
Исходная матрица:
1 2 3
1 2 3
1 2 3
Транспонированая по главной диагонали матрица:
1 1 1
2 2 2
3 3 3
Транспонированная  по побочной диагонали матрица:
3 3 3
2 2 2
1 1 1
Транспонированая по главной диагонали матрица транспонированная по побочной диагонали:
3 2 1
3 2 1
3 2 1
*/
void tmd(std::vector<std::vector<int> >&  mtrx) 
{
    size_t size = mtrx.size();
    int i = 0, j = 0, t = 0;
    for(i = 0; i < size; ++i)
        for(j = 0; j < size; ++j)
        {
            t = mtrx[i][j];
            mtrx[i][j] = mtrx[j][i];
            mtrx[j][i] = t;
        }
}
void tsd(std::vector<std::vector<int> >& mtrx) 
{
    size_t size = mtrx.size();
    int i = 0, j = 0, t = 0;
    for(i = 0; i < size; ++i)
        for(j = 0; j < size; ++j)
        {
            t = mtrx[j][i];
            mtrx[size-i-1][size-j-1] = mtrx[j][i];
            mtrx[j][i] = t;
        }
}
void tmdtsd(std::vector<std::vector<int> >& mtrx) 
{
    tmd (mtrx);
    tsd (mtrx);
}

bool vccmpr (std::vector<std::vector<int>>& mtrx1, std::vector<std::vector<int>>& mtrx2)
{
    int i, j;
    bool equal=true;
    for (i = 0; i < mtrx1.size() && equal; ++i)
    {
        for (j = 0; j < mtrx1.size() && equal; ++j)
        {
            if (mtrx1[j][i] != mtrx2[i][j])
                equal = 0;
        }
    }
    return equal;
}

bool cmpr(std::vector<std::vector<int>>& mtrx, std::vector<std::vector<int>>& mtrxt, int& key)
{
    std::vector<std::vector<int> > mtrxcpys[] = {mtrx, mtrx, mtrx};
    tmd(mtrxcpys[0]);
    tsd(mtrxcpys[1]);
    tmdtsd(mtrxcpys[2]);
    if (vccmpr( mtrxt, mtrxcpys[0])){
        key = 0;
        return true;
    }
    else if (vccmpr( mtrxt, mtrxcpys[1]))
    {
        key = 1;
        return true;
    }
    else if (vccmpr( mtrxt, mtrxcpys[2]))
    {
        key = 2;
        return true;
    }
    else if (vccmpr(mtrxt, mtrx)){
        key = 3;
        return true;
    }
    return false;
}

int main ()
{

    int n, i, j, b;
 
    setlocale(LC_ALL,"rus");
    cout<<"Введите количество строк и столбцов матрицы: "<< endl;
    cin>>n;
    std::vector<std::vector<int> > masA(n);
    std::vector<std::vector<int> > masB(n);
    for(i=0; i<n; i++)
        masA[i]=std::vector<int>(n);
    for(i=0; i<n; i++)
        masB[i]=std::vector<int>(n);
    cout<<"Введите элементы матрицы A: "<< endl;
    for(i=0; i<n; i++)
       for(j=0; j<n; j++)
       {
          cout<<"["<<i<<"]["<<j<<"]= ";
          cin>>masA[i][j];
       }
       cout<<"Введите элементы матрицы B:\n";
       for (i=0; i<n; i++){
            for (j=0; j<n; j++){
                cout<<"["<<i<<"]["<<j<<"]=";
                cin>>masB[i][j];
                }
       }
        cout<<"исходная матрица A"<<endl;
    for(i=0; i<n; i++)
        {
       for(j=0; j<n; j++)
          cout<<masA[i][j]<<" ";
          cout<<endl;
        }
    cout<<"Транспонированая матрица A по главной диагонали:"<<endl;
    for(i=0; i<n; i++)
    {
       for(j=0; j<n; j++)
           cout<<masA[j][i]<<" ";
       cout<<endl;
    }
    cout<<"Транспонированая матрица A по побочной диагонали:"<<endl;
    for(i=0; i<n; i++)
    {
       for(j=0; j<n; j++)
           cout<<masA[n-1-j][n-1-i]<<" ";
       cout<<endl;
    }
    cout << "Можно ли получить B из A?" << endl;
    std::string answ;
    int key = -1;
    if (cmpr(masA, masB, key))
        answ = "Да!";
    else
        answ = "Нет!";
    cout << answ.c_str() << endl;
    switch(key){
    case 0:
        cout<<"Транспонированая матрица A по главной диагонали:"<<endl;
        for(i=0; i<n; i++)
        {
            for(j=0; j<n; j++)
                cout<<masA[j][i]<<" ";
            cout<<endl;
        }
        break;
    case 1:
        cout<<"Транспонированая матрица A по побочной диагонали:"<<endl;
        for(i=0; i<n; i++)
        {
            for(j=0; j<n; j++)
                cout<<masA[n-1-j][n-1-i]<<" ";
            cout<<endl;
        }
        break;
    case 2:
        cout<<"Транспонированая матрица A по побочной диагонали:"<<endl;
        for(i=0; i<n; i++)
        {
            for(j=0; j<n; j++)
                cout<<masA[n-1-j][n-1-i]<<" ";
            cout<<endl;
        }
        tsd(masA);
        cout<<"Транспонированая по главной диагонали матрица A транспонированная по побочной диагонали:"<<endl;
        for(i=0; i<n; i++)
        {
            for(j=0; j<n; j++)
                cout<<masA[j][i]<<" ";
            cout<<endl;
        }
        break;
    }
    system("pause");
}

Не работает. Исправь vccmpr и будет тебе счастье smile

Это сообщение отредактировал(а) kolesnle - 21.4.2013, 23:41
PM MAIL   Вверх
sanya100
Дата 22.4.2013, 05:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 18.4.2013

Репутация: нет
Всего: нет



Спасибо!) Странно... Но у меня работает программа smile

Добавлено через 6 минут и 27 секунд
А что там исправить надо?)
PM MAIL   Вверх
sanya100
Дата 22.4.2013, 10:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 18.4.2013

Репутация: нет
Всего: нет



Просто вроде всё нормально работает...
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0529 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.