Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Неправильно заданы условия 
:(
    Опции темы
Julia9311
Дата 1.10.2014, 19:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 6.12.2012

Репутация: нет
Всего: нет



Программа вычисляет порядковый день в году с учетом високосного года. Если дней больше 30 (31) и и февраль больше 28(29), необходимо генерировать исключения. Но следующее условие проверяется только тогда, когда все вышеперечисленные условия прошли успешно. Как мне сделать так, чтобы проверялось по одному условию и если оно не верно, генерировалось исключение?

Код

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace _1Б_задание_4
{
    class Data
    {
        public double Year { get; set; }
        public double Month { get; set; }
        public double Day { get; set; }
        public void setYear(double y)
        {
 
            Year = y;
 
            if (y < 1600)
            {
                throw new System.ArgumentException("Parameter cannot be null", "original");
            }
 
        }
 
        public void setMonth(double m)
        {
            Month = m;
 
            if (m > 12)
            {
                throw new System.ArgumentException("Parameter cannot be null", "original");
            }
 
        }
        public void setDay(double d)
        {
            Day = d;
            if ((d > 30) && (Month == 4)) 
            
                if ((d > 30) && (Month == 6))
               
                    if ((d > 30) && (Month == 9))
                  
                        if ((d > 30) && (Month == 11))
                        
                            if ((d > 31) && (Month == 1))
                           
                                if ((d > 31) && (Month == 3))
                                
                                    if ((d > 31) && (Month == 5))
                                   
                                        if ((d > 31) && (Month == 7))
                                        
                                            if ((d > 31) && (Month == 8))
                                              if ((d > 31) && (Month == 10))
                                               
                                                    if ((d > 31) && (Month == 12))
                                                    {
                                                        throw new System.ArgumentException("Parameter cannot be null", "original");
                                                    }
                                                    
            if ((((Year % 4) == 0) && (Month == 2)) || (Day > 29))
           
            if ((((Year % 4) == 1) && (Month == 2)) || (Day > 28))
            
            if ((((Year % 4) == 2) && (Month == 2)) || (Day > 28))
            
            if ((((Year % 4) == 3) && (Month == 2)) || (Day > 28))
            {
                throw new System.ArgumentException("Parameter cannot be null", "original");
            }
 
 
        }
 
 
 
        static void Main()
        {
            int[] myArr = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
            int i;
            double t = 0;
            double t1;
            Data data1 = new Data();
            Console.WriteLine("Введите год");
 
            double y = Convert.ToDouble(Console.ReadLine());
            data1.setYear(y);
            Data data2 = new Data();
            Console.WriteLine("Введите месяц");
 
            double m = Convert.ToDouble(Console.ReadLine());
            data2.setMonth(m);
 
            Data data3 = new Data();
            Console.WriteLine("Введите день");
 
            double d = Convert.ToDouble(Console.ReadLine());
            data3.setDay(d);
            if ((y % 4) == 0)
            {
                myArr[2] = 29;
                for (i = 0; i < m; i++)
                {
                    t = t + myArr[i];
                }
                t1 = t + d;
 
                Console.WriteLine(t1);
            }
            else
            {
                for (i = 0; i < m; i++)
                {
                    t = t + myArr[i];
                }
                t1 = t + d;
 
                Console.WriteLine(t1);
            }
 
        }
    }
}

PM MAIL   Вверх
jonie
Дата 1.10.2014, 20:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 6
Всего: 118



вместо всех этих if-ов:
Код

 if ((d > 30) && (Month == 4)) 
            
                if ((d > 30) && (Month == 6))
               
                    if ((d > 30) && (Month == 9))
                  
                        if ((d > 30) && (Month == 11))
                        
                            if ((d > 31) && (Month == 1))
                           
                                if ((d > 31) && (Month == 3))
                                
                                    if ((d > 31) && (Month == 5))
                                   
                                        if ((d > 31) && (Month == 7))
                                        
                                            if ((d > 31) && (Month == 8))
                                              if ((d > 31) && (Month == 10))
                                               
                                                    if ((d > 31) && (Month == 12))

заведите массив (readonly static) на 12 элементов (индекс элемента есть номер месяца, только не забывайте что массивы индексируются с нуля), где значением элемента будет длина месяца в днях.
далее просто сравните элемент массива по индексу [Month-1] с d и сгенерируйте исключение.

Т.о. сложность алгоритма станет О(1).

Это сообщение отредактировал(а) jonie - 1.10.2014, 21:00


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
Julia9311
Дата 1.10.2014, 21:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 6.12.2012

Репутация: нет
Всего: нет



Сделала, но все равно неправильно генерируются исключения
Код

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace _1Б_задание_4
{
    class Data
    {
        public double Year { get; set; }
        public double Month { get; set; }
        public double Day { get; set; }
        public void setYear(double y)
        {

            Year = y;

            if (y < 1600)
            {
                throw new System.ArgumentException("Parameter cannot be null", "original");
            }

        }

        public void setMonth(double m)
        {
            Month = m;

            if (m > 12)
            {
                throw new System.ArgumentException("Parameter cannot be null", "original");
            }

        }
        public void setDay(double d)
        {
            Day = d;

       

            if ((((Year % 4) == 0) && (Month == 2)) || (Day > 29))
            {
                throw new System.ArgumentException("Parameter cannot be null", "original");
            }
            if ((((Year % 4) == 1) && (Month == 2)) || (Day > 28))
            {
                throw new System.ArgumentException("Parameter cannot be null", "original");
            }
            if ((((Year % 4) == 2) && (Month == 2)) || (Day > 28))
            {
                throw new System.ArgumentException("Parameter cannot be null", "original");
            }
            if ((((Year % 4) == 3) && (Month == 2)) || (Day > 28))
            {
                throw new System.ArgumentException("Parameter cannot be null", "original");
            }


        }



        static void Main()
        {
            int[] myArr = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
            int[] myArray = new int[12];
            myArray[0] = 31;
            myArray[1] = 28;
            myArray[2] = 31;
            myArray[3] = 30;
            myArray[4] = 31;
            myArray[5] = 30;
            myArray[6] = 31;
            myArray[7] = 31;
            myArray[8] = 30;
            myArray[9] = 31;
            myArray[10] = 30;
            myArray[11] = 31;
            int i;
            double t = 0;
            double t1;
            Data data1 = new Data();
            Console.WriteLine("Введите год");

            double y = Convert.ToDouble(Console.ReadLine());
            data1.setYear(y);
            Data data2 = new Data();
            Console.WriteLine("Введите месяц");

            double m = Convert.ToDouble(Console.ReadLine());
            data2.setMonth(m);

            Data data3 = new Data();
            Console.WriteLine("Введите день");

            double d = Convert.ToDouble(Console.ReadLine());
            data3.setDay(d);
            if (myArray[0] < d)
            {
                throw new System.ArgumentException("Parameter cannot be null", "original");
            }
            if (myArray[1] < d)
            {
                throw new System.ArgumentException("Parameter cannot be null", "original");
            }
            if (myArray[2] < d)
            {
                throw new System.ArgumentException("Parameter cannot be null", "original");
            }
            if (myArray[3] < d)
            {
                throw new System.ArgumentException("Parameter cannot be null", "original");
            }
            if (myArray[4] < d)
            {
                throw new System.ArgumentException("Parameter cannot be null", "original");
            }
            if (myArray[5] < d)
            {
                throw new System.ArgumentException("Parameter cannot be null", "original");
            }
            if (myArray[6] < d)
            {
                throw new System.ArgumentException("Parameter cannot be null", "original");
            }
            if (myArray[7] < d)
            {
                throw new System.ArgumentException("Parameter cannot be null", "original");
            }
            if (myArray[8] < d)
            {
                throw new System.ArgumentException("Parameter cannot be null", "original");
            }
            if (myArray[9] < d)
            {
                throw new System.ArgumentException("Parameter cannot be null", "original");
            }
            if (myArray[10] < d)
            {
                throw new System.ArgumentException("Parameter cannot be null", "original");
            }
            if (myArray[11] < d)
            {
                throw new System.ArgumentException("Parameter cannot be null", "original");
            }
            if ((y % 4) == 0)
            {
                myArr[2] = 29;
                for (i = 0; i < m; i++)
                {
                    t = t + myArr[i];
                }
                t1 = t + d;

                Console.WriteLine(t1);
            }
            else
            {
                for (i = 0; i < m; i++)
                {
                    t = t + myArr[i];
                }
                t1 = t + d;

                Console.WriteLine(t1);
            }

        }
    }
}

PM MAIL   Вверх
jonie
Дата 2.10.2014, 10:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 6
Всего: 118



Цитата(Julia9311 @  1.10.2014,  22:38 Найти цитируемый пост)
Сделала, но все равно неправильно генерируются исключения

потому что в Main проверяете и в целом неверно.
У Вас же код был ранее в public void setDay(double d) , почему вы его в Main() перенесли?


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
mihryak
Дата 2.10.2014, 15:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 731
Регистрация: 28.4.2007
Где: С-Пб

Репутация: 10
Всего: 36



Цитата(Julia9311 @  1.10.2014,  22:38 Найти цитируемый пост)
Year % 4

Цитата(Wikipedia)
... год является високосным в двух случаях: либо он кратен 4, но при этом не кратен 100, либо кратен 400. Год не является високосным, если он не кратен 4, либо он кратен 100, но при этом не кратен 400.


PM MAIL ICQ   Вверх
Julia9311
Дата 2.10.2014, 21:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 6.12.2012

Репутация: нет
Всего: нет



Почему в целом неверно?
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | .NET для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0804 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.