Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
3 / 3 / 1
Регистрация: 26.03.2012
Сообщений: 65
.NET 4.x

Обработка исключений

10.03.2013, 18:22. Показов 1511. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
не понимаю почему не хочет заносить в массив mas_a[i]=0 при срабатывании исключения Exception
Мне нужно чтобы при возникновении исключения if ((1 / (Xn + 1)) <= 0) throw new Exception(); в массив mas_a[i] заносилось 0
Пробовал и через ArithmeticException все равно одно и то же..
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
            
for (i = 0; i < n1; i++)
            {
                try
                {
                    if (Xn + 1 == 0) throw new DivideByZeroException();
                    if ((1 / (Xn + 1)) <= 0) throw new Exception();
                    mas_a[i] = Math.Log(1 / (Xn + 1));
                    dataGridView1.Rows[0].Cells[i].Value = mas_a[i].ToString();
                    Xn += dx;
                }
                catch (DivideByZeroException)
                {
                    mas_a[i] = 0; i++;
                }
                catch (IndexOutOfRangeException ex) { MessageBox.Show(ex.Message); break; }
                catch (Exception) { mas_a[i] = 0; i++;  }
            }
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
10.03.2013, 18:22
Ответы с готовыми решениями:

Обработка исключений
Задание Используя Visual Studio, создайте проект по шаблону Console Application. Создайте класс Calculator. В теле класса...

Обработка исключений
В учебной задачке необходимо обрабатывать все исключительные ситуации. Через блок try-catch-finally. Вот небольшой метод, где всё работает,...

Обработка исключений
Подскажите как обрабатывать исключение пока оно не исчезнет. Например: System.IO.Ports.SerialPort rs_port; ...

14
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
10.03.2013, 19:13
C#
1
if ((1 / (Xn + 1)) <= 0) { mas_a[i] = 0; i++;  }
Не надо использовать исключения для ветвления кода.
0
3 / 3 / 1
Регистрация: 26.03.2012
Сообщений: 65
10.03.2013, 19:15  [ТС]
Цитата Сообщение от kolorotur Посмотреть сообщение
C#
1
if ((1 / (Xn + 1)) <= 0) { mas_a[i] = 0; i++;  }
Не надо использовать исключения для ветвления кода.
по заданию так нужно.. сам бы я так и написал.. но вот не получается через бросок организовать инициализацию массива нулем
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
10.03.2013, 19:21
Для начала тогда поубирайте i++ из блоков catch (DivideByZeroException) и catch (Exception)
0
3 / 3 / 1
Регистрация: 26.03.2012
Сообщений: 65
10.03.2013, 19:24  [ТС]
Цитата Сообщение от kolorotur Посмотреть сообщение
Для начала тогда поубирайте i++ из блоков catch (DivideByZeroException) и catch (Exception)
пробовал.. все равно не хочет... если выводить массив на печать, то он полностью заполнен нулями.. хотя при входных данных такого не может быть.
0
Эксперт .NET
 Аватар для Wolfdp
3789 / 1766 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
10.03.2013, 20:04
Хм... Вот не понимаю, зачем при исключении мы увеличиваем счетчик.

Есть предположение, что 1 / (Xn + 1) возвращает ноль и Math.Log записывает в mas_a[i] -Infinity
0
3 / 3 / 1
Регистрация: 26.03.2012
Сообщений: 65
10.03.2013, 20:05  [ТС]
Цитата Сообщение от Wolfdp Посмотреть сообщение
Хм... Вот не понимаю, зачем при исключении мы увеличиваем счетчик.

Есть предположение, что 1 / (Xn + 1) возвращает ноль и Math.Log записывает в mas_a[i] -Infinity
счетчик мы не увеличиваем.. это старый вариант.. в новом i++ исключено...
0
Эксперт .NET
 Аватар для Wolfdp
3789 / 1766 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
10.03.2013, 20:10
Цитата Сообщение от saverger Посмотреть сообщение
счетчик мы не увеличиваем.. это старый вариант.. в новом i++ исключено...
Тогда есть вопрос - что именно происходит, и что должно происходить. )
0
3 / 3 / 1
Регистрация: 26.03.2012
Сообщений: 65
10.03.2013, 20:11  [ТС]
при срабатывании исключения if ((1 / (Xn + 1)) <= 0) throw new Exception(); в текущее значение mas_a[i] должно заноситься значение 0
0
Эксперт .NET
 Аватар для Wolfdp
3789 / 1766 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
10.03.2013, 20:20
Хорошо, что должно происходить, я понял. А что происходит сейчас?

Ещё вопрос - какого типа Xn и dx? Не int случайно?

Добавлено через 59 секунд
Блин, туплю на ровном месте.
0
3 / 3 / 1
Регистрация: 26.03.2012
Сообщений: 65
10.03.2013, 20:20  [ТС]
Цитата Сообщение от Wolfdp Посмотреть сообщение
Хорошо, что должно происходить, я понял. А что происходит сейчас?

Ещё вопрос - какого типа Xn и dx? Не int случайно?
тип Xn и dx double.. сейчас все значения массива равны 0
0
Эксперт .NET
 Аватар для Wolfdp
3789 / 1766 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
10.03.2013, 20:28
Вот упрощенная модель.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
double[] mas_a = new double[8];
            double Xn = 4;
            double dx = -1;
            for (int i = 0; i < mas_a.Length; i++)
            {
                try
                {
                    if (Xn + 1 == 0) throw new DivideByZeroException();
                    if ((1 / (Xn + 1)) <= 0) throw new Exception();
                    mas_a[i] = Math.Log(1 / (Xn + 1));
                    //dataGridView1.Rows[0].Cells[i].Value = mas_a[i].ToString();
                    Xn += dx;
                }
                catch (DivideByZeroException)
                { mas_a[i] = 0; }
                catch (IndexOutOfRangeException ex) { Console.WriteLine(ex.Message); break; }
                catch (Exception) { mas_a[i] = 0;}
 
                Console.WriteLine("Xn={0}; mas[i]={1}", Xn, mas_a[i]);
            }
 
            Console.ReadKey();
        }
И вот что она выводит. На мой взгляд всё коректно.
Миниатюры
Обработка исключений  
0
Эксперт .NET
 Аватар для Wolfdp
3789 / 1766 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
10.03.2013, 20:30
Да итить... Я лузер. >_<

Сначала напишу, потом уже замечаю....

C#
1
2
if (Xn + 1 == 0) throw new DivideByZeroException();
if ((1 / (Xn + 1)) <= 0) throw new Exception();
Генерируется исключение и часть Xn += dx; не срабатывает. Должно быть так

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
            double[] mas_a = new double[8];
            double Xn = 4;
            double dx = -1;
            for (int i = 0; i < mas_a.Length; i++)
            {
                try
                {
                    if (Xn + 1 == 0) throw new DivideByZeroException();
                    if ((1 / (Xn + 1)) <= 0) throw new Exception();
                    mas_a[i] = Math.Log(1 / (Xn + 1));
                    //dataGridView1.Rows[0].Cells[i].Value = mas_a[i].ToString();
                }
                catch (DivideByZeroException)
                { mas_a[i] = 0; }
                catch (IndexOutOfRangeException ex) { Console.WriteLine(ex.Message); break; }
                catch (Exception) { mas_a[i] = 0;}
                Xn += dx;
 
                Console.WriteLine("Xn={0}; mas[i]={1}", Xn, mas_a[i]);
            }
 
            Console.ReadKey();
        }
1
3 / 3 / 1
Регистрация: 26.03.2012
Сообщений: 65
10.03.2013, 20:35  [ТС]
спасибо огромное! вся соль оказалась в вынесеном шаге) спасибо еще раз, что помогли разобраться
0
Эксперт .NET
 Аватар для Wolfdp
3789 / 1766 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
10.03.2013, 20:36
всегда пожалуйста. ;-)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
10.03.2013, 20:36
Помогаю со студенческими работами здесь

Обработка исключений
Господа, скажите пожалуйста, почему в этом коде try { a jo = new a(); ...

Обработка исключений
Опять написал небольшую утилитку для работы с реестром Windows. Точнее программа удаляет некоторые разделы реестра, а потом их пустыми...

Обработка исключений
Уважаемые форумчане! Если идет обработка исключений ввиде try { ... // some code } catch(*...*) { ... // some code }

Обработка исключений
Можно ли в методе А1 обработать исключение, которое создаётся методом А3? Вот схематическое изображение кода. void A1() { ...

Обработка исключений
do { Console.SetCursorPosition(55, 6); Console.Write(&quot; &quot;); try ...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru