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

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

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.10.2011, 20:41   #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, 22:31   #2
Prizrak86
Форумчанин
 
Аватар для Prizrak86
 
Регистрация: 15.10.2011
Сообщений: 139
По умолчанию

а может тебе изначально задать что бы значения в столбцах массива не повторялись?
Программист это не профессия, программист - это образ жизни.
Prizrak86 вне форума Ответить с цитированием
Старый 29.10.2011, 10:05   #3
Gray_Jagger
Пользователь
 
Аватар для Gray_Jagger
 
Регистрация: 04.04.2010
Сообщений: 29
По умолчанию

суть задачи в том что бы удалить
Пока будущее туманно, оно в твоих руках.
Gray_Jagger вне форума Ответить с цитированием
Старый 29.10.2011, 11:13   #4
Guy
Форумчанин
 
Регистрация: 15.12.2010
Сообщений: 398
По умолчанию

F8 и в перёд
Guy вне форума Ответить с цитированием
Старый 29.10.2011, 11:31   #5
Gray_Jagger
Пользователь
 
Аватар для Gray_Jagger
 
Регистрация: 04.04.2010
Сообщений: 29
По умолчанию

Я уже пробовал трассировку, ничего неправильного я не нашел.
Пока будущее туманно, оно в твоих руках.
Gray_Jagger вне форума Ответить с цитированием
Старый 29.10.2011, 12:13   #6
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Цитата:
Сообщение от Gray_Jagger Посмотреть сообщение
Я уже пробовал трассировку, ничего неправильного я не нашел.
КАК?
У меня поиск занял десять секунд, плюс минута на исправление (вместе с упомянутой мной ошибкой строгости неравенства) и всё заработало.
Код:
            for (int i = processingArray.Length; i >= 0; i--) {
                if (needDel(processingArray, i)) {
i - это номер... чего?
Abstraction вне форума Ответить с цитированием
Старый 29.10.2011, 14:26   #7
Gray_Jagger
Пользователь
 
Аватар для Gray_Jagger
 
Регистрация: 04.04.2010
Сообщений: 29
По умолчанию

Спасибо большое, перепутал индекс строки и столбца, заменил в цикле на
Код:
for (int i = processingArray[0].Length; i >= 0; i--) {
и все заработало.
Пока будущее туманно, оно в твоих руках.
Gray_Jagger вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Скрыть консоль в VC++ TwiX Visual C++ 2 22.08.2011 05:08
консоль Volkogriz Общие вопросы Delphi 2 23.03.2011 09:28
Консоль Voliume Общие вопросы C/C++ 2 12.02.2010 19:48
Консоль в паскале XiN Общие вопросы Delphi 3 06.09.2008 21:57
Консоль MAcK Общие вопросы Delphi 4 19.12.2007 19:05