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

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

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

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

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 28.10.2011, 19:07   #1
Gray_Jagger
Пользователь
 
Аватар для Gray_Jagger
 
Регистрация: 04.04.2010
Сообщений: 29
По умолчанию C# Двумерный массив.

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

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

namespace C1Lab2 {
    class Task {

        public Task(out int[][] array) {
            fillArray(out array);
        }


        public void fillArray(out int[][] array) {
            Random r = new Random();
            Console.WriteLine("Введите количество строк");
            int rows = Int32.Parse(Console.ReadLine());
            Console.WriteLine("Введите количество столбцов");
            int cols = Int32.Parse(Console.ReadLine());
            int[][] newArray = new int[rows][];
            for (int i = 0; i < newArray.Length; i++) {
                newArray[i] = new int[cols];
            }
            for (int i = 0; i < newArray.Length; i++) {
                for (int j = 0; j < newArray[0].Length; j++) {
                    newArray[i][j] = r.Next(5, 10);
                }
            }
            array = newArray;
        }


        /// <summary>
        /// Проверка на необходимость удаления столбца
        /// </summary>
        /// <param name="array"></param>
        /// <param name="indexOfChecked">номер столбца</param>
        /// <returns></returns>        

        public bool needDel(int[][] array, int indexOfChecked) {
            int countSame = 0;
            for (int i = 0; i < array.Length; i++) {
                for (int j = 0; j < array.Length; j++) {
                    if (array[i][indexOfChecked] == array[j][indexOfChecked]) {
                        countSame++;
                    }
                    if (countSame >= 2) {
                        return true;
                    }
                }
                countSame = 0;
            }
            return false;
        }


        /// <summary>
        /// Удаления столбца по его номеру
        /// </summary>
        /// <param name="array"></param>
        /// <param name="indexOfDeleted"></param>        

        public void delByIndex(ref int[][] array, int indexOfDeleted) {
            int[][] newArray = new int[array.Length][];
            for (int i = 0; i < array.Length; i++) {
                newArray[i] = new int[array[0].Length - 1];
            }
            int j = 0;
            for (int i = 0; i < array.Length; i++) {
                while (j < indexOfDeleted) {
                    newArray[i][j] = array[i][j];
                    j++;
                }
                while (j < newArray[0].Length) {
                    newArray[i][j] = array[i][j + 1];
                    j++;
                }
                j = 0;
            }



            array = newArray;
        }

        public void deleteElems(ref int[][] processingArray) {
            for (int i = processingArray.Length; i >= 0; i--) {
                if (needDel(processingArray, i)) {
                    delByIndex(ref processingArray, i);
                }
            }
        }


        public void printArray(int[][] array) {
            for (int i = 0; i < array.Length; i++) {
                for (int j = 0; j < array[0].Length; j++) {
                    Console.Write(array[i][j] + " ");
                }
                Console.WriteLine();
            }
        }


    }

    class Program {
        static void Main(string[] args) {
            int[][] mainArray;
            Task t = new Task(out mainArray);
            t.printArray(mainArray);
            t.deleteElems(ref mainArray);
            Console.WriteLine();
            t.printArray(mainArray);
            Console.ReadKey();
        }
    }
}
Пока будущее туманно, оно в твоих руках.
Gray_Jagger вне форума
Старый 28.10.2011, 21:31   #2
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Цитата:
Сообщение от Gray_Jagger Посмотреть сообщение
Необходимо удалить столбцы массива, в которых содержится более двух одинаковых элементов.
Код:
                    if (countSame >= 2) {
                        return true;
А вообще, что значит - "не те"? Удаляет соседние, удаляет больше чем надо, что-то третье?

И терминологическая поправка: двумерным массивом, насколько знаю, принято называть массив вида int[,]. А это - массив массивов.
Abstraction вне форума
Старый 29.10.2011, 10:05   #3
Gray_Jagger
Пользователь
 
Аватар для Gray_Jagger
 
Регистрация: 04.04.2010
Сообщений: 29
По умолчанию

Рваный массив я использовал потому что в нем проще получить количество столбцов/строк через array.Length array[0].Length. Удаляет не те - это значит удаляет какой-то любой столбец или даже 2, но столбцы с 2-мя одинаковыми элементами остаются
Пока будущее туманно, оно в твоих руках.
Gray_Jagger вне форума
Старый 29.10.2011, 10:14   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

кросспост темы

http://www.programmersforum.ru/showthread.php?p=903715
Serge_Bliznykov вне форума
Закрытая тема


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Одномерный массив и Двумерный массив eugene1437 Общие вопросы C/C++ 15 25.05.2011 19:17
двумерный массив Ann_Sh Помощь студентам 2 26.02.2011 13:18
Двумерный массив Анастасия18 Помощь студентам 2 25.02.2011 17:52
Двумерный массив, одномерный массив. Branbal Помощь студентам 14 18.11.2009 12:40
Двумерный массив... slim5 Помощь студентам 2 20.06.2008 23:16