Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.11.2010, 12:53   #11
Necare
Форумчанин
 
Аватар для Necare
 
Регистрация: 22.10.2010
Сообщений: 145
По умолчанию

Упёртый, как осёл. Я всё-равно сделал по - своему:
дописал ещё один цикл и получилось следующее:
Код:
for (int i = 0; i < B.x.GetLength(0); i++)
                        {
                            s = 0;
                            for (int j = 0; j < B.x.GetLength(1); j++)
                            {
                                if (B.x[i, j] != 0)
                                    s = s + B.x[i, j];
                            }
                           for (int j = 0; j < B.x.GetLength(1); j++)
                           {
                                B.x[i, j] = B.x[i, j] + s;
                            }
                        }
Начал мутить с А. Но возникла проблемка:
Объясните как правильно сделать перестановку строк в двумерном массиве?

Сделал но чё-то не то =)
Код:
 {
                    for (int i = 0; i < A.x.GetLength(0); i++)
                    {
                        s = 0;
                        for (int j = 0; j < A.x.GetLength(1); j++)
                            s = s + A.x[i, j];
                        b[i] = s;

                    }
                    int jj;
                    for (int i = 0; i < A.x.GetLength(0) - 1; i++)
                    {
                        s = 0;
                        for (int j = i; j < A.x.GetLength(0); j++)
                            if (b[i] < b[j])
                            {
                                s = b[i];
                                b[i] = b[j];
                                for (jj = j; jj < A.x.GetLength(1); jj++)
                                {
                                    s = A.x[i, jj];
                                    A.x[i, jj] = A.x[j, jj];
                                    A.x[j, jj] = s;
                                }
                            }



                    }
До последней точки с запятой в коде...

Последний раз редактировалось Stilet; 28.11.2010 в 16:40.
Necare вне форума Ответить с цитированием
Старый 27.11.2010, 18:16   #12
psycho-coder
Участник клуба
 
Аватар для psycho-coder
 
Регистрация: 06.04.2009
Сообщений: 1,524
По умолчанию

Например так
Код:
private void ReplaceRows(int Source, int Dest)
        {
            // Source - строка откуда перемещать
            // Dest - строка куда перемещать
            // Например Source = 1, Dest = 2
            int tmp = 0; // Временная переменная
            for (int j = 0; j < mCols; j++)
            {
                tmp = mMtx[Source, j]; // Сохраняем значение 1й строки j-го элемента
                mMtx[Source, j] = mMtx[Dest, j]; // Переносим из 2й строки в 1ю, j-й - элемент
                mMtx[Dest, j] = tmp; // Заносим во 2ю строку, j-й элемент значение
            }
        }
psycho-coder вне форума Ответить с цитированием
Старый 28.11.2010, 15:02   #13
Necare
Форумчанин
 
Аватар для Necare
 
Регистрация: 22.10.2010
Сообщений: 145
По умолчанию

А можете помочь с моим кодом?

Код:
 for (i = 0; i < A.x.GetLength(0); i++)
                    {
                        s = 0;
                        for (j = 0; j < A.x.GetLength(1); j++)
                        {
                            if (A.x[i, j] != 0)
                            {
                                s = s + A.x[i, j];
                                b[i] = s;

                                if (b[i] < b[i + 1])
                                {
                                    for (i = 0; i < A.x.GetLength(0); i++)
                                    {
                                        for (j = 0; j < A.x.GetLength(1); j++)
                                        {
                                            tmp = A.x[i, j];
                                            A.x[i, j] = A.x[i + 1, j];
                                            A.x[i + 1, j] = tmp;
                                        }

                                    }
                                }
                            }
                        }
                    }
Вводим марицу. Находим сумму каждой строки и если i-ая сумма < i+1 суммы - пытаемся поменять местами. Но оно вообще не считает. Можете подсказать что не так?
До последней точки с запятой в коде...

Последний раз редактировалось Necare; 28.11.2010 в 15:17.
Necare вне форума Ответить с цитированием
Старый 28.11.2010, 16:05   #14
psycho-coder
Участник клуба
 
Аватар для psycho-coder
 
Регистрация: 06.04.2009
Сообщений: 1,524
По умолчанию

Сначала избавится от
Цитата:
1) Чем меньше кода, тем лучше.
psycho-coder вне форума Ответить с цитированием
Старый 30.11.2010, 16:36   #15
Necare
Форумчанин
 
Аватар для Necare
 
Регистрация: 22.10.2010
Сообщений: 145
По умолчанию

Месягу удалить.
До последней точки с запятой в коде...

Последний раз редактировалось Necare; 30.11.2010 в 16:45.
Necare вне форума Ответить с цитированием
Старый 30.11.2010, 16:36   #16
Necare
Форумчанин
 
Аватар для Necare
 
Регистрация: 22.10.2010
Сообщений: 145
По умолчанию

Всем спасибо за помощь. Вот что получилось, так сказать финальный вариант.

Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Matrica
    {
        int[,] x;

        public Matrica(string name)
        {
            Console.WriteLine("Введите кол-во строк для матрицы:" + name);
            int n = int.Parse(Console.ReadLine());
            Console.WriteLine("Введите кол-во столбцов для матрицы" + name);
            int m = int.Parse(Console.ReadLine());
            x = new int[n, m];
        }
        public Matrica(int n, int m) { x = new int[n, m]; }
        public int[,] X
        {
            get { return x; }
            set { x = value; }
        }

        public int Stolb()
        {
            int k = 0;
            for (int i = 0; i < x.GetLength(1); i++)
            {
                for (int j = 0; j < x.GetLength(0); j++)
                    if (x[j, i] == 0)
                        k = k + 1;
            }
            return (k);
        }




        public void vvod(string name)
        {
            Console.WriteLine("Введите матрицу " + name);
            for (int i = 0; i < x.GetLength(0); ++i)
            {
                Console.WriteLine("Введите элементы " + i + "-й строки:");
                for (int j = 0; j < x.GetLength(1); ++j)
                    x[i, j] = int.Parse(Console.ReadLine());
            }
        }

        public void vyvod_matr(string zagolovok)
        {
            Console.WriteLine(zagolovok);
            for (int i = 0; i < x.GetLength(0); ++i)
            {
                for (int j = 0; j < x.GetLength(1); ++j)
                    Console.Write(" {0,0:f0}", x[i, j]);
                Console.WriteLine();
            }
        }


        class Program
        {
            static void Main(string[] args)
            {   int [] b = new int [ 5 ];
                int s,i,j,a;
                Matrica A = new Matrica("A"); A.vvod("A");
                Matrica B = new Matrica("B"); B.vvod("B");
                
                A.vyvod_matr("Исходная матрица А");
                B.vyvod_matr("Исходная матрица B");
                int tmp=0;
                if (A.Stolb() < B.Stolb())
                {
                    for (i = 0; i < A.x.GetLength(0); i++)
                    {
                        int s1 = 0;
                        for (j = 0; j < A.x.GetLength(1); j++)
                            s1 = s1 + A.x[i, j];
                        a = i + 1;
                        while (a < A.x.GetLength(0))
                        {
                            int s2 = 0;
                            for (j = 0; j < A.x.GetLength(1); j++)
                                s2 = s2 + A.x[a, j];
                            if (s1 < s2)
                            {
                                s1 = s2;
                                for (j = 0; j < A.x.GetLength(1); j++)
                                {
                                    tmp = A.x[i, j];
                                    A.x[i, j] = A.x[a, j];
                                    A.x[a, j] = tmp;
                                }
                            }
                            a++;
                        }
                    }
                        A.vyvod_matr("Новая A");
                } 
                
                       else
                {
                    if (A.Stolb() > B.Stolb())

                        for ( i = 0; i < B.x.GetLength(0); i++)
                        {
                            s = 0;
                            for ( j = 0; j < B.x.GetLength(1); j++)
                            {
                                if (B.x[i, j] != 0)
                                    s = s + B.x[i, j];
                                b[i] = s;
                            }
                            for ( j = 0; j < B.x.GetLength(1); j++)
                            {
                                B.x[i, j] = B.x[i, j] + s;
                            }
                        }
               
                        B.vyvod_matr("Новая B");
                }
                Console.WriteLine("Для выхода их программы нажмите любую клавишу!!!");







                Console.ReadKey();
            }
        }
    }
}
Если в матрице A меньше столбцов, содержащих нулевые элементы, чем в матрице В, расположить строки матрицы А в порядке убывания сумм положительных элементов строк. В противном случае увеличить все ненулевые элементы матрицы В на значение сумм положительных элементов соответствующих строк ( в которых ненулевые элементы расположены).

Только подскажите где подписать if(A.x[i,j] >0) для расположить строки матрицы А в порядке убывания сумм положительных элементов строк.
До последней точки с запятой в коде...

Последний раз редактировалось Necare; 30.11.2010 в 16:38.
Necare вне форума Ответить с цитированием
Старый 02.12.2010, 11:02   #17
psycho-coder
Участник клуба
 
Аватар для psycho-coder
 
Регистрация: 06.04.2009
Сообщений: 1,524
По умолчанию

До дома доберусь, гляну
psycho-coder вне форума Ответить с цитированием
Старый 02.12.2010, 21:43   #18
Necare
Форумчанин
 
Аватар для Necare
 
Регистрация: 22.10.2010
Сообщений: 145
По умолчанию

Буду чертовоски благодарен.
До последней точки с запятой в коде...
Necare вне форума Ответить с цитированием
Старый 03.12.2010, 17:26   #19
Necare
Форумчанин
 
Аватар для Necare
 
Регистрация: 22.10.2010
Сообщений: 145
По умолчанию

Код:
  for ( i = 0; i < B.x.GetLength(0); i++)
                        {
                            s = 0;
                            for ( j = 0; j < B.x.GetLength(1); j++)
                            {
                                if (B.x[i, j] != 0)
                                    s = s + B.x[i, j];
                                b[i] = s;
Нужно сделать из этого public - метод, который вернёт мне сумму элементов. =(
До последней точки с запятой в коде...
Necare вне форума Ответить с цитированием
Старый 04.12.2010, 10:55   #20
psycho-coder
Участник клуба
 
Аватар для psycho-coder
 
Регистрация: 06.04.2009
Сообщений: 1,524
По умолчанию

Берешь и делаешь)
Код:
public int SumElements()
{
  int sum = 0; // Результат
  <Тут что то делаешь>
  ...
  return sum;
}
Код еще нужно смотреть?
psycho-coder вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Непонятки с DirectX (матрица поворота, камера, матрица проекции) ROD Общие вопросы C/C++ 2 17.09.2010 17:00
TurboPascal: граф, матрица смежности и матрица инцидентности. ulala Помощь студентам 0 02.12.2009 10:11
матрица shelest Помощь студентам 1 25.11.2009 21:35
матрица Babur4iK Помощь студентам 1 11.11.2009 17:53
МАТРИЦА (СИ) Freia Помощь студентам 5 19.12.2008 22:39