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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.09.2010, 16:53   #1
tyurroma
 
Регистрация: 27.10.2009
Сообщений: 8
По умолчанию C#: работа с многомерными массивами

Составить программу, которая получает матрицу Х размерностью m*n и вектор A размером к. Программа формирует новую матрицу, в которую включены только те строки, которые содержат хотя бы одно число из вектора А.

Создал матрицу и вектор, сделал вывод. Не знаю как правильно сравнить их для вставки строк в новую матрицу... Если нетрудно, помогите дописать этот кусочек кода или подскажите как нужно поступить

Код:
class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Введите количество строк матрицы");
            int m=Convert.ToInt32(Console.ReadLine());
            Console.WriteLine("Введите количество столбцов матрицы");
            int n=Convert.ToInt32(Console.ReadLine());
            double[,] matr=new double [m,n];
//Ввод матрицы
for (int i=0; i<m; i++)
{
	for (int j=0; j<n; j++)
	{	int h=i,g=j;
		Console.WriteLine("Введите элемент "+(++h)+(++g));
		matr[i,j]=Convert.ToDouble(Console.ReadLine());
	}
}//Конец ввода матрицы
//Ввод вектора
	Console.WriteLine("Введите размерность вектора");
	int k=Convert.ToInt32(Console.ReadLine());
	double[] vect=new double [k];
	for (int t=0; t<k; t++)
	{
		int r=t;
	Console.WriteLine("Введите "+(++r)+"-й элемент вектора");
		vect[t]=Convert.ToDouble(Console.ReadLine());
	}//Конец ввода вектора

/* Здесь должен быть организован цикл сравнения*/
       
    //Вывод матрицы и вектора
    Console.Write("\n" + "==Исходная матрица==" + "\n");
    for (int i = 0; i < m; i++)
    {
        for (int j = 0; j < n; j++)
        {
            Console.Write(matr[i, j] + "\t");
        }
        Console.WriteLine();
    }
    Console.Write("\n" + "==Исходный вектор==" + "\n");
    foreach (double el in vect) Console.Write(el + "\t");
tyurroma вне форума Ответить с цитированием
Старый 18.11.2010, 18:42   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

так пойдёт?

Код:
class Program
    {
        static void Main(string[] args)
        {
            #region Ввод исходных данных
            Console.WriteLine("Введите количество строк матрицы");
            int m=Convert.ToInt32(Console.ReadLine());
            Console.WriteLine("Введите количество столбцов матрицы");
            int n=Convert.ToInt32(Console.ReadLine());
            double[,] matr=new double [m,n];
            //Ввод матрицы
            for (int i=0; i<m; i++)
            {
                for (int j=0; j<n; j++)
                {	
                    //Console.WriteLine("Введите элемент {0}{1}", +(++h)+(++g));
                    Console.Write("Введите элемент {0}{1} :", i+1, j+1);
                    matr[i,j]=Convert.ToDouble(Console.ReadLine());
                }
            }//Конец ввода матрицы
            //Ввод вектора
            Console.WriteLine("Введите размерность вектора");
            int k=Convert.ToInt32(Console.ReadLine());
            double[] vect=new double [k];
            for (int t=0; t<k; t++)
            {
                int r=t;
                Console.WriteLine("Введите "+(++r)+"-й элемент вектора");
                vect[t]=Convert.ToDouble(Console.ReadLine());
            }//Конец ввода вектора
            #endregion

            /* Здесь должен быть организован цикл сравнения*/
            double[,] matrNew = new double [m,n];
            int mNew = 0;
            for (int i=0; i<m; i++)
            {
                bool isAinLine = false;
                for (int j=0; (j<n)&&(!isAinLine); j++)
                {
                    for (int k0=0; k0<k; k0++)
                    {
                        if (matr[i,j] == vect[k0])
                        {
                            isAinLine = true;
                            break;
                        }
                    }
                }
                if (isAinLine)
                {
                    mNew++;
                    for (int j=0; j<n; j++)
                    {
                        matrNew[mNew-1, j] = matr[i, j];
                    }
                }
            }       
            
            //Вывод матрицы и вектора
            Console.Write("\n" + "==Исходная матрица==" + "\n");
            for (int i = 0; i < m; i++)
            {
                for (int j = 0; j < n; j++)
                {
                    Console.Write(matr[i, j] + "\t");
                }
                Console.WriteLine();
            }
            Console.Write("\n" + "==Исходный вектор==" + "\n");
            foreach (double el in vect) Console.Write(el + "\t");
            
            //Вывод новой матрицы 
            Console.Write("\n" + "==Полученная матрица==" + "\n");
            for (int i = 0; i < mNew; i++)
            {
                for (int j = 0; j < n; j++)
                {
                    Console.Write(matrNew[i, j] + "\t");
                }
                Console.WriteLine();
            }
            
            
            Console.ReadLine();
        }
}
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программирование алгоритмов над многомерными динамическими массивами Master23 Общие вопросы C/C++ 2 30.05.2009 04:28
работа с многомерными массивами tik17 Помощь студентам 14 14.03.2009 20:07
Работа с многомерными массивами в функции. Очередной вопос начинающего (#005) Albert2008 Компоненты Delphi 14 13.08.2008 22:03