1 / 1 / 0
Регистрация: 17.04.2011
Сообщений: 24

Ошибка в программе

14.05.2011, 18:42. Показов 779. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, форумчане
Такая задача: реализовать алгоритм бинарного поиска в массиве. Массив от 0 до 1000000 (соответственно упорядочен по возрастанию, т.е. 0, 1, 2, 3, .. , 100000). В массиве необходимо найти случайное число, которое задается через Random.
У меня почему-то он проходит цикл один раз, не пойму в чем проблема. Подскажите, в чем ошибка
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            int size = 1000000;
            int[] mass = new int[size];
            int top = 0; // верхняя граница
            int lower = size; //нижняя граница
            int middle; // номер среднего элемента
            bool hit; // совпадение образца с элементом массива
            int n = 0; // число сравнений
            Random random = new Random();
            int ex = random.Next(0, 1000000);
            Console.WriteLine("Die Zufallszahl = " + ex);
 
            hit = false;
            do
            {
                double d = ((lower - top) / 2);
                int dd = Convert.ToInt32(Math.Round(d) + top);
                middle = dd;
 
                n++;
                if (mass[middle] == ex)
                    hit = true;
                else
                    if (ex < mass[middle])
                        lower = middle - 1;
                    else
                        top = middle + 1;
            }
            while ((top > lower) || (hit));
 
            Console.WriteLine("Совпадение с элементом номер = " + middle + "; " + "Сравнений = " + n);
            Console.ReadLine();
        }
    }
}
точно
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
14.05.2011, 18:42
Ответы с готовыми решениями:

ошибка в программе
Здравствуйте. Вот программа. Компилирую - все нормально. Запускаю - выдает ошибку. что исправить? public class Task07 { public...

Ошибка в программе
Задание: Построить вектор L, каждый элемент которого равен минимальному элементу соответствующей строки матрицы М (k, l) есть код: ...

Ошибка в программе
#include&lt;iostream.h&gt; int main(){ std::cout&lt;&lt;&quot;Hello-прива&quot;&lt;&lt;std::end; return 0; } Работал все время на билдоре в консолях,...

5
185 / 188 / 17
Регистрация: 26.11.2010
Сообщений: 511
14.05.2011, 18:43
А код не соизволишь выложить? Без него проблематично как-то, у меня телепатические способности после пятницы затруднены.
0
155 / 155 / 30
Регистрация: 19.10.2009
Сообщений: 319
14.05.2011, 20:58
Насколько я понимаю, значение hit должно быть противоположным, т. е. нужно перед ним поставить восклицательный знак
C#
1
while (top > lower || !hit);
Только вот ещё странно выглядит строчка
C#
1
int dd = Convert.ToInt32(Math.Round(d) + top);
Зачем прибавлять top, да и зачем Math.Round? У меня он выдавал выход значения middle за границы массива, я попробовал написать просто
C#
1
int dd = Convert.ToInt32(d);
и ошибка исчезла. Предлагаю и это проверить.
0
1 / 1 / 0
Регистрация: 17.04.2011
Сообщений: 24
15.05.2011, 01:01  [ТС]
он теперь просто "бегает" по циклу туда сюда и все..в чем ошибка? не понимаю..

Добавлено через 1 час 6 минут
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            int size = 1000000;
            int[] mass = new int[size];
            int top = size; // верхняя граница
            int lower = 1; //нижняя граница
            int middle; // номер среднего элемента
            bool hit; // совпадение образца с элементом массива
            int n = 0; // число сравнений
            Random random = new Random();
            int ex = random.Next(0, 1000000);
            Console.WriteLine("Die Zufallszahl = " + ex);
 
            hit = false;
            do
            {
 
                int dd = (lower + top) / 2;
                middle = dd;
 
                n++;
                if (ex < mass[middle])
                 top = middle - 1; 
                else
                    if (ex > mass[middle])
                        lower = middle + 1;
                
                    else
                      hit = true;
            }
            while ((top >= lower) || (!hit));
 
            Console.WriteLine("Совпадение с элементом номер = " + middle + "; " + "Сравнений = " + n);
            Console.ReadLine();
        }
    }
}
я тут поднапутала чуть-чуть..так будет правильнее, но тоже не работает..он почему-то не выполняет вот эту часть кода:
C#
1
2
 if (ex < mass[middle])
                { top = middle - 1; }
не могу понять, почему..
0
155 / 155 / 30
Регистрация: 19.10.2009
Сообщений: 319
15.05.2011, 11:12
Я тоже не сразу понял, настолько банальной оказалась причина - массив-то на самом деле заполнен не был, там были одни нули. Естественно, он там ничего не находил.
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            int size = 1000000;
            int[] mass = new int[size];
            int top = size-1; // верхняя граница
            int lower = 0; //нижняя граница
            int middle=size/2; // номер среднего элемента
            bool hit; // совпадение образца с элементом массива
            int n = 0; // число сравнений
            Random random = new Random();
            int ex = random.Next(0, 1000000);
            Console.WriteLine("Die Zufallszahl = {0}", ex);
        for (int i = 0; i < mass.Length; i++)
          mass[i]=i;
 
            hit = false;
            do
            {
 
                int dd = (lower + top) / 2;
                middle = dd;
 
                n++;
                 if (ex < mass[middle])
          { top = (middle + top)/2; } 
                else
                    if (ex > mass[middle])
                        lower = (middle + lower)/2;
                
                    else
                      hit = true;
            }
            while (top >= lower && !hit);
 
            Console.WriteLine("Совпадение с элементом номер = {0}; Сравнений = {1}", middle, n);
            Console.ReadLine();
        }
    }
}
1
1 / 1 / 0
Регистрация: 17.04.2011
Сообщений: 24
15.05.2011, 13:01  [ТС]
Спасибо большое-пребольшое Илья очень помог
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
15.05.2011, 13:01
Помогаю со студенческими работами здесь

Ошибка в программе
У меня на кайёте ошибку выкидывает, не знаете как исправить?

Ошибка в программе
Вообщем суть программы в том чтобы соединить два рисунка,двоичный код для которых лежит в двух тестовых документах. 0 0 1 0 0 0 1 0 1 0...

Ошибка в программе
Ребят, очередная ошибка в программе. - Задача - Для целочисленной квадратной матрицы найти число элементов, кратных К и наибольшие...

Ошибка в программе
Здравствуйте. Я недавно начал изучать Lisp, пробую писать простые программы в Corman Common Lisp. Я попытался реализовать программу...

ошибка в программе!
У меня стоит Win 7 и Есть Delphi 7! Программа раньше работала норм на Win XP, Сейчас же (на Win 7) выдает ошибку! Unit1.pas(7):...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

Новые блоги и статьи
50 самых полезных примеров кода Python для частых задач
py-thonny 17.06.2025
Эффективность работы разработчика часто измеряется не количеством написаных строк, а скоростью решения задач. Готовые сниппеты значительно ускоряют разработку, помогают избежать типичных ошибок и. . .
C# и продвинутые приемы работы с БД
stackOverflow 17.06.2025
Каждый . NET разработчик рано или поздно сталкивается с ситуацией, когда привычные методы работы с базами данных превращаются в источник бессонных ночей. Я сам неоднократно попадал в такие ситуации,. . .
Angular: Вопросы и ответы на собеседовании
Reangularity 15.06.2025
Готовишься к техническому интервью по Angular? Я собрал самые распространенные вопросы, с которыми сталкиваются разработчики на собеседованиях в этом году. От базовых концепций до продвинутых. . .
Архитектура Onion в ASP.NET Core MVC
stackOverflow 15.06.2025
Что такое эта "луковая" архитектура? Термин предложил Джеффри Палермо (Jeffrey Palermo) в 2008 году, и с тех пор подход только набирал обороты. Суть проста - представьте себе лук с его. . .
Unity 4D
GameUnited 13.06.2025
Четырехмерное пространство. . . Звучит как что-то из научной фантастики, правда? Однако для меня, как разработчика со стажем в игровой индустрии, четвертое измерение давно перестало быть абстракцией из. . .
SSE (Server-Sent Events) в ASP.NET Core и .NET 10
UnmanagedCoder 13.06.2025
Кажется, Microsoft снова подкинула нам интересную фичу в новой версии фреймворка. Работая с превью . NET 10, я наткнулся на нативную поддержку Server-Sent Events (SSE) в ASP. NET Core Minimal APIs. Эта. . .
С днём независимости России!
Hrethgir 13.06.2025
Решил побеседовать, с утра праздничного дня, с LM о завоеваниях. То что она написала о народе, представителем которого я являюсь сам сначала возмутило меня, но дальше только смешило. Это чисто. . .
Лето вокруг.
kumehtar 13.06.2025
Лето вокруг. Наполненное бурями и ураганами событий. На фоне магии Жизни, священной и вечной, неумелой рукой человека рисуется панорама душевного непокоя. Странные серые краски проникают и. . .
Популярные LM модели ориентированы на увеличение затрат ресурсов пользователями сгенерированного кода (грязь -заслуги чистоплюев).
Hrethgir 12.06.2025
Вообще обратил внимание, что они генерируют код (впрочем так-же ориентированы разработчики чипов даже), чтобы пользователь их использующий уходил в тот или иной убыток. Это достаточно опытные модели,. . .
Топ10 библиотек C для квантовых вычислений
bytestream 12.06.2025
Квантовые вычисления - это та область, где теория встречается с практикой на границе наших знаний о физике. Пока большая часть шума вокруг квантовых компьютеров крутится вокруг языков высокого уровня. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru