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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.10.2012, 00:50   #1
Надежда1286
Пользователь
 
Аватар для Надежда1286
 
Регистрация: 26.10.2011
Сообщений: 16
По умолчанию Решить задачу в C#

Описать класс «ВосьмеричноеЧисло» для работы
со строкой, позволяющей хранить только восьмерич-
ное число и выполнять с объектами данного класса
следующие операции:
– инициализацию объекта заданным значением с
проверкой допустимости значений.
В случае недопустимых значений выбрасывать ис-
ключения.
Выполнять над объектами класса операции
– сложения;
– вычитания;
– умножения и
– целочисленное деление.
Описать свойства для получения состояния объекта.
Написать программу, демонстрирующую все разра-
ботанные элементы класса.
Результат решения задачи внести в файл Outlet.out
Ввод (файл Inlet.in):
anan−1 : : : a1a0(8) (где ai i =
0; n – строка цифр )
Число1(8)
Число2(8)
Вывод (файл Outlet.out):
anan−1 : : : a1a0
SnSn−1 : : : S1S0 – сумма
RnRn−1 : : :R1R0 – разность
PnPn−1 : : : P1P0 – произведение
CnCn−1 : : :C1C0 – целая часть
частного от деления
чисел Числа1(8) и Число2(8)
Надежда1286 вне форума Ответить с цитированием
Старый 25.10.2012, 00:51   #2
Надежда1286
Пользователь
 
Аватар для Надежда1286
 
Регистрация: 26.10.2011
Сообщений: 16
По умолчанию

Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;

namespace ОперацииС_Восьмеричными
{
    class ВосьмеричноеЧисло : IEnumerable
    {
        ArrayList число;
        char знакЧисла = ' ';
        /// <summary>
        /// Конструктор по умолчанию. Формирует "пустое" число
        /// </summary>
        public ВосьмеричноеЧисло() 
        {
            число = new ArrayList();
        }
        /// <summary>
        /// Конструктор с аргументом. Формирует число по его строковому представлению
        /// с контролем за корректностью указания цифр 8-ого представления числа
        /// </summary>
        /// <param name="число"> - строковое предсталение числа</param>
        /// 
        public ВосьмеричноеЧисло(string число)
        {
            this.число = new ArrayList(число.Length);
            знакЧисла = число[0];
            if (знакЧисла == '-' || знакЧисла == '+' || знакЧисла == ' ')
            {
                число = число.Remove(0, 1);
            }
            else
            {
                if (знакЧисла < '0' || знакЧисла > '7')
                {
                    throw new Exception("В начале числе ни знак числа, ни восьмеричная цифра");
                }
            }
            foreach (char цифра in число)
            {
                if (((int)цифра - 48 <= 7) && ((int)цифра - 48 >= 0))
                {
                    this.число.Add((int)цифра - 48);
                }
                else
                {
                    throw new Exception("Не восьмеричная цифра");
                }
            }

        }
        /// <summary>
        /// Свойство 
        ///   - выводящее значение длины числа (по записи)
        ///   - принимающее значение длины (по чтению)
        /// </summary>
        public int длинаЧисла
        {
            get
            {
                return число.Count;
            }
            set
            {
                if (число.Capacity != value)
                {
                    число.Capacity = value;
                }
            }
        }
        /// <summary>
        /// Итератор, дающий возможность "просматривать" цифры числа
        /// </summary>
        /// <returns></returns>
        public IEnumerator GetEnumerator()
        {
            for (int i = 0; i < число.Count; i++)
                yield return число[i];
        }
        /// <summary>
        /// Метод возвращающий значение числа (в виде строки)
        /// </summary>
        /// <returns></returns>
        public string значение()
        {
            string стрЧисло="";
            foreach (int цифра in число)
                стрЧисло=стрЧисло+цифра;
            return знакЧисла+ стрЧисло;
        }
        /// <summary>
        /// Переопределение операции "+"
        /// </summary>
        /// <param name="слагаемое1"> - первое слагаемое</param>
        /// <param name="слагаемое2"> - второе слагаемое</param>
        /// <returns></returns>
        public static ВосьмеричноеЧисло operator +(ВосьмеричноеЧисло слагаемое1, ВосьмеричноеЧисло слагаемое2)
        {
            ВосьмеричноеЧисло сумма = new ВосьмеричноеЧисло();
            сумма.длинаЧисла = слагаемое1.длинаЧисла > слагаемое2.длинаЧисла ? слагаемое1.длинаЧисла + 1 : слагаемое2.длинаЧисла + 1;
            int суммаЦифр, единицаПереноса = 0, поз1 = слагаемое1.число.Count - 1, поз2 = слагаемое2.число.Count - 1;
            while (поз1 >= 0 && поз2 >= 0)
            {
                суммаЦифр = (int)слагаемое1.число[поз1] + (int)слагаемое2.число[поз2]+единицаПереноса;
                единицаПереноса = суммаЦифр / 8;
                сумма.число.Insert(0, суммаЦифр - единицаПереноса * 8);
                поз1--;
                поз2--;
            }
            while (поз1 >= 0)
            {
                суммаЦифр = (int)слагаемое1.число[поз1] + единицаПереноса;
                единицаПереноса = суммаЦифр / 8;
                сумма.число.Insert(0, суммаЦифр - единицаПереноса * 8);
                поз1--;
            }
            while (поз2 >= 0)
            {
                суммаЦифр = (int)слагаемое2.число[поз2] + единицаПереноса;
                единицаПереноса = суммаЦифр / 8;
                сумма.число.Insert(0, суммаЦифр - единицаПереноса * 8);
                поз2--;
            }
            if (единицаПереноса!=0)
                сумма.число.Insert(0, единицаПереноса);
            return сумма;
        }
    }
}



___________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Не забывайте об этом!
Модератор.

Последний раз редактировалось Serge_Bliznykov; 25.10.2012 в 10:13.
Надежда1286 вне форума Ответить с цитированием
Старый 25.10.2012, 01:06   #3
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

Это вы где такое старьеоткопали?
eval вне форума Ответить с цитированием
Старый 25.10.2012, 01:09   #4
Надежда1286
Пользователь
 
Аватар для Надежда1286
 
Регистрация: 26.10.2011
Сообщений: 16
По умолчанию

Эт не я, а препод в универе
Надежда1286 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
решить задачу!!!!!!! pantuhin Помощь студентам 1 15.03.2012 20:42
решить задачу Евгений 9 Общие вопросы Delphi 0 23.12.2011 09:33
РЕШИТЬ ЗАДАЧУ В С++ колбаса Помощь студентам 0 23.11.2011 17:07
решить задачу Рон99 Паскаль, Turbo Pascal, PascalABC.NET 0 01.11.2011 21:23
решить задачу на С++ Лина_Чер Помощь студентам 7 16.06.2011 16:28