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

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

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.03.2013, 00:38   #1
nikitok000
 
Регистрация: 26.11.2011
Сообщений: 7
По умолчанию Описание класса массива

Описать класс для работы с одномерным массивом целых чисел (вектором). Обеспечить следующие возможности:
•задание произвольных целых границ индексов при создании объекта;
•обращение к отдельному элементу массива с контролем выхода за пределы массива;
•выполнение операций поэлементного сложения и вычитания массивов с одинаковыми границами индексов;
•выполнение операций умножения и деления всех элементов массива на скаляр;
•вывода на экран элемента массива по заданному индексу и всего массива.
Помогите с 1 и 2 заданием
3, 4 и 5 задание сделаны но выдает ошибки ..... помогите исправить

1>D:\ConsoleApplication10\Program.c s(72,31,72,50): error CS1729: Lab1.Vector не содержит конструктор, который принимает 1 аргументов
1>D:\ConsoleApplication10\Program.c s(90,31,90,50): error CS1729: Lab1.Vector не содержит конструктор, который принимает 1 аргументов
1>D:\ConsoleApplication10\Program.c s(101,27,101,46): error CS1729: Lab1.Vector не содержит конструктор, который принимает 1 аргументов
1>D:\ConsoleApplication10\Program.c s(104,27,104,35): error CS0266: Неявное преобразование типа "double" в "int" невозможно. Существует явное преобразование (возможно, отсутствует приведение)
1>D:\ConsoleApplication10\Program.c s(111,27,111,46): error CS1729: Lab1.Vector не содержит конструктор, который принимает 1 аргументов
1>D:\ConsoleApplication10\Program.c s(114,27,114,33): error CS0266: Неявное преобразование типа "double" в "int" невозможно. Существует явное преобразование (возможно, отсутствует приведение)
Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0
nikitok000 вне форума Ответить с цитированием
Старый 28.03.2013, 00:38   #2
nikitok000
 
Регистрация: 26.11.2011
Сообщений: 7
По умолчанию

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

namespace Lab1
{

    class Vector
    {
        private const string WRONG_INDICES = "Все векторы должны иметь идентичные индексы.";
        private int hIndex;
        private int nIndex;
        private int kIndex;
        public int[] vector;
        public Vector(int Index, int StartIndex, int konecIndex)// конструктор класса
        {
            hIndex = Index;
            nIndex = StartIndex;
            kIndex = konecIndex;
            vector = new int[Index];
        }
        public int StartIndex
        {
            //код доступа
            get { return nIndex; }
            set { nIndex = value; }
        }
        public int konecIndex
        {
            //код доступа
            get { return kIndex; }
            set { kIndex = value; }
        }
        public int Index
        {
            get { return hIndex; }

        }
        public int this[int NumOfElement]// индексатор
        {
            get
            {
                if (NumOfElement >= hIndex)
                {
                    throw new IndexOutOfRangeException();// исключение
                }
                else
                    return vector[NumOfElement];
            }
            set
            {
                if (NumOfElement >= hIndex)
                {
                    throw new IndexOutOfRangeException();
                }
                else
                    vector[NumOfElement] = value;
            }
        }


        //Сложение векторов
        public static Vector operator +(Vector x, Vector y)// определение операции +
        {
            if (x.Index != y.Index)
            {
                //throw new Exception("Error") ;
                throw new ArgumentException(WRONG_INDICES);// исключение
            }
            else
            {
                Vector temp = new Vector(x.Index);
                for (int i = 0; i < temp.Index; i++)
                {
                    temp[i] = x[i] + y[i];
                }
                return temp;
            }
        }
        //Вычитание векторов
        public static Vector operator -(Vector x, Vector y)//определение операции -
        {
            if (x.Index != y.Index)
            {
                //throw new Exception("Error");
                throw new ArgumentException(WRONG_INDICES);// исключение
            }
            else
            {
                Vector temp = new Vector(x.Index);
                for (int i = 0; i < temp.Index; i++)
                {
                    temp[i] = x[i] - y[i];
                }
                return temp;
            }
        }
        //Деление на скаляр
        public static Vector operator /(Vector x, double s)// определение операции /
        {
            Vector temp = new Vector(x.Index);
            for (int i = 0; i < temp.Index; i++)
            {
                temp[i] = x[i] / s;
            }
            return temp;
        }
        //Умножение на скаляр
        public static Vector operator *(Vector x, double s)// определение операции*
        {
            Vector temp = new Vector(x.Index);
            for (int i = 0; i < temp.Index; i++)
            {
                temp[i] = x[i]*s;
            }
            return temp;
        }
        public void Print(int NumOfElement)//метод print вывод на экран
        {
            Console.Write(vector[NumOfElement]);
        }
        public void Print()
        {
            for (int i = 0; i < hIndex; i++)
                Console.Write(vector[i] + " ");

        }
    }
}
nikitok000 вне форума Ответить с цитированием
Старый 28.03.2013, 06:52   #3
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,882
По умолчанию

Код:
Vector temp = new Vector(x.Index);
Цитата:
Lab1.Vector не содержит конструктор, который принимает 1 аргументов
а конструктор описан как
Код:
public Vector(int Index, int StartIndex, int konecIndex)// конструктор класса
Ничего, что студия РУССКИМ ПО БЕЛОМУ говорит об ошибке, а Вы в упор её не хотите видеть ?

Код:
//Деление на скаляр
public static Vector operator /(Vector x, double s)
...
temp[i] = x[i]/s;
Здесь целому присваивается результат деления целого на вещественное. Надо либо заменить параметр метода с double на int , либо округлять/приводить тип s к int , например temp[i] = x[i]/(int)s; Аналогично для второй такой же ошибки.

Последние 2 метода в коде не отвечают требованиям задачи - они работают так, как будто получают некий индекс извне от клиентского кода (а он будет подразумевать индекс из заданного диапазона для этого вектора, например весь диапазон может быть -10 .. -5), а работает по внутреннему индексу, в сишарпе для массивов жёстко дано, что они индексируются с 0. Возможно, другие методы этого класса также имеют некоторые помарки в работе с этими индексами, не смотрел.

Последний раз редактировалось phomm; 28.03.2013 в 07:03.
phomm вне форума Ответить с цитированием
Старый 28.03.2013, 11:55   #4
nikitok000
 
Регистрация: 26.11.2011
Сообщений: 7
По умолчанию

спасибо...

Последний раз редактировалось nikitok000; 29.03.2013 в 08:49.
nikitok000 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Предварительное описание класса Elvisnya Общие вопросы C/C++ 12 01.07.2011 20:00
описание класса SvetaLee Помощь студентам 1 30.10.2010 23:27
описание класса в паскале ai\ekcah^p Помощь студентам 0 14.03.2010 17:31
Описание класса. frem-dag Общие вопросы C/C++ 4 11.01.2010 19:53