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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.12.2009, 15:54   #1
stellavin
Пользователь
 
Регистрация: 11.12.2009
Сообщений: 11
По умолчанию Создание класса с операциями

Общие данные:
Каждый разрабатываемый класс должен, как правило, содержать следующие элементы: скрытые поля, конструкторы с параметрами и без параметров, методы; свойства, индексаторы; перегруженные операции. Функциональные элементы класса должны обеспечивать непротиворечивый, полный, минимальный и удобный интерфейс класса. При возникновении ошибок должны выбрасываться исключения.
Дана такая задачка:
Описать класс "предметный указатель". Каждый компонент указателя содержит слово и номера страниц, на которых это слово встречается. Количество номеров страниц, относящихся к одному слову, от одного до десяти. Предусмотреть возможность формирования указателя с клавиатуры и из файла, вывода указателя, вывода номеров страниц для заданного слова, удаления элемента из указателя.
В общем вот такая она, задачка.
stellavin вне форума Ответить с цитированием
Старый 13.12.2009, 16:14   #2
SunKnight
Участник клуба Подтвердите свой е-майл
 
Аватар для SunKnight
 
Регистрация: 14.12.2007
Сообщений: 1,434
По умолчанию

Цитата:
В общем вот такая она, задачка.
Изумительно, только здесь не бюро решения задачек. Свои наработки в студию.
Проповедую design patterns, верую в MVC, доверяю eXtrime programming.
SunKnight вне форума Ответить с цитированием
Старый 13.12.2009, 17:28   #3
stellavin
Пользователь
 
Регистрация: 11.12.2009
Сообщений: 11
По умолчанию

Наработка есть, но работает у меня странно:
Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace LabRab8
{
    struct PredUkaz
    {
        public string word; //слово из указателя
        public int[] page; //массив с номерами страниц
        public PredUkaz(string word, int[] page) //конструктор с параметрами
        {
            this.word = word;
            this.page = page;
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            PredUkaz[] pu = new PredUkaz[4];
            //ввод данных
            Console.Write("Введите количество слов, которое вы желаете ввести: ");
            string buf = Console.ReadLine();
            for (int i = 1; i <= Convert.ToInt32(buf); i++)
            {
                Console.Write("Введите слово в указатель: ");
                pu[i].word = Console.ReadLine();

                Console.Write("Введите количество страниц для этого слова: ");
                string buf1 = Console.ReadLine();
                int buf11 = Convert.ToInt32(buf1);

                Console.Write("Введите номера страниц через запятую(,): ");
                string TempPage = Console.ReadLine();
                string[] TempPageMassive = TempPage.Split(',');
                int[] page = new int[] { 
                    int.Parse(TempPageMassive[0].ToString()),
                    int.Parse(TempPageMassive[1].ToString()),
                    int.Parse(TempPageMassive[2].ToString()) };
                pu[i].page = new int[buf11];
                pu[i].page = page;

            }
            //вывод введеных с клавиатуры данных
            Console.WriteLine();
            for (int k = 1; k <= Convert.ToInt32(buf); ++k)
            {
                Console.WriteLine("{0}\t\t{1},{2},{3}", pu[k].word, pu[k].page[0], pu[k].page[1], pu[k].page[2]);
            }
            Console.ReadLine();
        }
    }
}
Во-первых, у меня это объявлено как структура, переделывал в класс что-то не работает.
Во-вторых, не знаю как сделать так, чтобы для каждого слова было произвольное количество страниц. Тут кажется нужен ступенчатый массив.
Ну а вообще, указатель должен выглядить так:
A
Abort 12,13,14
Abs 50,62,17
B
base 12,17
BigMul 13
D
DataSet 123
E
EndRead 250,253
Что-то вроде этого.
stellavin вне форума Ответить с цитированием
Старый 13.12.2009, 19:12   #4
SunKnight
Участник клуба Подтвердите свой е-майл
 
Аватар для SunKnight
 
Регистрация: 14.12.2007
Сообщений: 1,434
По умолчанию

Код:
public class MyIndex
{
private string word;//слово
private List<int> page = new List<int>();//страницы
public MyIndex(string aWord)
{
word = aWord;
}
}

.....

string word = "Hello";
Dictionary<char, MyIndex>  indexArray = 
            new Dictionary<char, MyIndex>();
indexArray.Add(word[0], new MyIndex(word));
Вот что то похожее.
Проповедую design patterns, верую в MVC, доверяю eXtrime programming.
SunKnight вне форума Ответить с цитированием
Старый 14.12.2009, 18:28   #5
stellavin
Пользователь
 
Регистрация: 11.12.2009
Сообщений: 11
По умолчанию

а как ввести страницы, на которых это слово встречается? почему в конструкторе нету списка страниц?
stellavin вне форума Ответить с цитированием
Старый 14.12.2009, 18:39   #6
SunKnight
Участник клуба Подтвердите свой е-майл
 
Аватар для SunKnight
 
Регистрация: 14.12.2007
Сообщений: 1,434
По умолчанию

Это все было написано на коленке. Описание методов и полей класса ваша забота. Я же предложил основную идею: хранение объектов в хэш-таблице, ключем которой является первая буква слова.
Проповедую design patterns, верую в MVC, доверяю eXtrime programming.
SunKnight вне форума Ответить с цитированием
Старый 14.12.2009, 22:10   #7
stellavin
Пользователь
 
Регистрация: 11.12.2009
Сообщений: 11
По умолчанию

Помогите пожалуйста доработать:
- формирования указателя с клавиатуры;
- вывод указателя;
- удаления элемента из указателя.
Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Primer
{
    class MyIndex
    {
        private Dictionary<string, int[]> index = new Dictionary<string, int[]>();

        public Dictionary<string, int[]> Index
        {
            get { return index; }
        }

        public List<int> GetPages(string word)
        {
            List<int> pages = new List<int>();
            foreach (KeyValuePair<string, int[]> item in index)
            {
                if (item.Key == word)
                {
                    pages.AddRange(item.Value);
                }
            }
            return pages;
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            MyIndex ex = new MyIndex();
            ex.Index.Add("Ivanov", new int[] { 1, 25, 73 });
            ex.Index.Add("Petrov", new int[] { 2, 31, 86 });
            ex.Index.Add("Sidorov", new int[] { 3, 41, 72 });
            //Заполнение указателя с клавиатуры
            Console.WriteLine("Заполните указатель: ");

            Console.WriteLine("Выберете действие:\n1 - Вывод указателя\n2 - Вывод номеров страниц для заданного слова\n3 - Удаление элемента из указателя");
            string buf = Console.ReadLine();
            //Вывод указателя на печать
            if (Convert.ToInt32(buf) == 1)
            {
            }
            //Вывод номеров страниц для заданного слова
            if (Convert.ToInt32(buf) == 2)
            {
                Console.Write("Введите слово: ");
                string word = Console.ReadLine();
                Console.WriteLine();

                List<int> pages = ex.GetPages(word);

                Console.WriteLine("Страницы, на которых встречается это слово: ");
                foreach (int page in pages)
                {
                    Console.WriteLine(page.ToString());
                }
            }
            //Удаление элемента из указателя
            if (Convert.ToInt32(buf) == 3)
            {
                Console.Write("Введите слово которое требуется удалить: ");
                string buf1 = Console.ReadLine();
                /*
                if ()
                {
                    ex.Index.Remove();
                }
                */
            }

            Console.ReadLine();
        }
    }
}

Последний раз редактировалось stellavin; 14.12.2009 в 22:45.
stellavin вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Тайм аут между операциями sergiksergik Microsoft Office Excel 6 09.06.2009 23:51
Создание класса Dogmat Общие вопросы C/C++ 2 12.01.2009 14:32
Создание класса Манжосов Денис :) Gamedev - cоздание игр: Unity, OpenGL, DirectX 3 31.05.2008 11:54
Создание класса Stanislav Общие вопросы Delphi 8 15.05.2008 23:34
создание класса Siren Помощь студентам 1 07.05.2008 19:19