Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
0 / 0 / 0
Регистрация: 25.10.2020
Сообщений: 36

Выдает ошибку "выход за пределы массива" в коде

27.03.2021, 13:55. Показов 733. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
есть готовый код, но при запуске выдает ошибку, мол, выход за пределы массива.
Вот код:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
 static void Main(string[] args)
        {
 
 
            String s1 = Console.ReadLine();
            String s2 = Console.ReadLine();
            Console.WriteLine(Filt(s1, s2));
 
        }
 
 
        public static int Filt(String s1, String s2)
        {
 
            List<ulong> mul = new List<ulong>(128);
            mul['A'] = 1;
            mul['C'] = (ulong)Math.Pow(2, 12);
            mul['G'] = (ulong)Math.Pow(2, 32);
            mul['T'] = (ulong)Math.Pow(2, 48);
 
            List<ulong> all = new List<ulong>();
            for (int len = (int)Math.Min(s1.Length, s2.Length); len >= 1; len--)
            {
                all.Clear();
                ulong code = 0;
                for (int i = 0; i < len; i++)
                {
                    code += mul[s1[i]];
                }
                all.Add(code + 0 * 2 + 0);
 
                for (int i = len; i < (int)s1.Length; i++)
                {
                    code += mul[s1[i]];
                    code -= mul[s1[i - len]];
                    ulong f1 = (ulong)(i - len + 1) * 2 + 1;
                    all.Add(code + f1);
                }
 
 
 
 
                code = 0;
                for (int i = 0; i < len; i++)
                {
                    code += mul[s2[i]];
                }
                all.Add(code + 0 * 2 + 1);
 
                for (int i = len; i < (int)s2.Length; i++)
                {
                    code += mul[s2[i]];
                    code -= mul[s2[i - len]];
                    ulong f = (ulong)(i - len + 1) * 2 + 1; 
                    all.Add(code + f);
                }
 
 
                all.Sort();
                for (int i = 1; i < (int)all.Count; i++)
                {
 
                    int set1 = (int)(all[i] & 1);
                    int set2 = (int)(all[i - 1] & 1);
                    if ((all[i] >> 12) == (all[i - 1] >> 12) && set1 != set2)
                    {
                        int pos1 = (int)(all[i] >> 1) & 0x7FF;
                        int pos2 = (int)(all[i - 1] >> 1) & 0x7FF;
 
                        if (set1 == 1)
                        {
                            int x = pos1;
                            pos1 = pos2;
                            pos2 = x;
                        }
                        Console.Write("{0:D}\n", len);
                        Console.Write("{0:D} {1:D}", pos1 + 1, pos2 + 1);
                        return 0;
 
                    }
                }
            }
            Console.Write("0");
            return 0;
 
        }
Вот задача, для которой писался код:

Вася никогда не любил биологию. Но когда он узнал про ДНК, у него появился живой интерес. Он решил, что если все существа произошли друг от друга, то и ДНК у них должны быть похожими. У некоторых более похожие, у некоторых - менее, но у всех ДНК можно записать в виде строки, состоящей из символов A, C, G и T. Поэтому он решил найти какой-нибудь показатель родства. И придумал следующее. Он берет из двух ДНК по подстроке. Если одна из них является анаграммой другой (т. е. получается перестановкой букв), то это хорошая пара подстрок. Естественно, в любой хорошей паре обе подстроки имеют одинаковую длину. Тогда степень родства двух ДНК – это максимально возможная длина подстрок в хорошей паре.

Входные данные
В первой строке входного файла INPUT.TXT находится ДНК Васи. А во второй строке - ДНК первого попавшегося Васе живого существа. Обе строки не пусты и состоят не более, чем из 1 300 символов A, C, G и T.

Выходные данные
В первую строку выходного файла OUTPUT.TXT выведите степень родства Васи с подопытным существом. Если степень родства отлична от нуля, то во вторую следует вывести две начальные позиции подстрок из соответствующей хорошей пары в первой и второй ДНК соответственно. В случае неоднозначности последних двух чисел, выведите любые подходящие.

Примеры
№ INPUT.TXT OUTPUT.TXT
1 ACGT.............3
GTC............2 1

2 ACGT.............2
CAT...........1 1

3 ACA............2
AC............2 1
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
27.03.2021, 13:55
Ответы с готовыми решениями:

Выход за пределы массива в коде нахождения минимальной длины отрезка
я написала функцию нахождения минимальной длины отрезка, в которую передаю матрицу, каждая строка которой - координаты 1 точки. выдает...

Выход за пределы вектора ("Vector subscript out of range") - найти и исправить ошибку в коде
Имеется код: struct orders { string product; string mark; string surname; string name; string...

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

4
 Аватар для EveKS
601 / 485 / 185
Регистрация: 19.04.2016
Сообщений: 1,885
27.03.2021, 20:12
Цитата Сообщение от Fitley Посмотреть сообщение
1 ACGT.............3
Если там все эти числа и точки, то в mul нет таких индексов
0
0 / 0 / 0
Регистрация: 25.10.2020
Сообщений: 36
27.03.2021, 20:37  [ТС]
не, я это сделал, чтоб понятно было
0
 Аватар для EveKS
601 / 485 / 185
Регистрация: 19.04.2016
Сообщений: 1,885
28.03.2021, 06:25
Fitley, чтоб помогли, можно расписать что и где делается. Код явно переписан не с c#, return 0, return 1
Зачем тут этот сдвиг?
Цитата Сообщение от Fitley Посмотреть сообщение
(all[i] >> 12) == (all[i - 1] >> 12)
Много нюансов, в код не всматривался, это то, на что обратил внимание.

Добавлено через 2 минуты
в c# здесь упадет
Цитата Сообщение от Fitley Посмотреть сообщение
mul['A'] = 1;
Добавлено через 5 минут
Если это верно
C#
1
2
3
4
AGGTCCATCTG
AGGCCCATCTG
6
3 10
То
C#
1
2
3
4
5
6
7
8
9
10
11
12
        public static int Filt(String s1, String s2)
        {
            Dictionary<char, ulong> mul = new Dictionary<char, ulong>
            {
                ['A'] = 1,
                ['C'] = (ulong) Math.Pow(2, 12),
                ['G'] = (ulong) Math.Pow(2, 32),
                ['T'] = (ulong) Math.Pow(2, 48)
            };
 
            List<ulong> all = new List<ulong>();
// код дальше
Ну и с return - думаю всё ок.
0
0 / 0 / 0
Регистрация: 25.10.2020
Сообщений: 36
28.03.2021, 09:20  [ТС]
спасибо! сейчас проверю и отпишу

Добавлено через 3 минуты
в общем, при вводе ACGT GTC выдает 00,
а должен 3
2 1

Добавлено через 26 минут
все, я сделал, спасибо помог!!!!!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
28.03.2021, 09:20
Помогаю со студенческими работами здесь

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

Выход за пределы массива
Привет, как он печатает массив и не обрезает, если я его сделал размерностью 6?

Выход за пределы массива
При работе с цветными изображениеми появляется выход за пределы массива. С черно-белыми такого не происходит. В чем может быть ошибка? ...

Выход за пределы массива
в одном из обучающих видео уроков наткнулся на ТАКОЕ. алгоритм sort получает в себя начало и конец массива, далее просто выведится...

Выход за пределы массива
Где-то здесь происходит выход за пределы массива puti, но я не могу его найти уже второй день. Объясните, пожалуйста, в чем моя проблема и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru