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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Создание класса с операциями 
:(
    Опции темы
posthuman
Дата 13.12.2009, 15:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 29.10.2009
Где: Люберцы

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



Общие данные:
Каждый разрабатываемый класс должен, как правило, содержать следующие элементы: скрытые поля, конструкторы с параметрами и без параметров, методы; свойства, индексаторы; перегруженные операции. Функциональные элементы класса должны обеспечивать непротиворечивый, полный, минимальный и удобный интерфейс класса. При возникновении ошибок должны выбрасываться исключения.
Дана такая задачка:
Описать класс "предметный указатель". Каждый компонент указателя содержит слово и номера страниц, на которых это слово встречается. Количество номеров страниц, относящихся к одному слову, от одного до десяти. Предусмотреть возможность формирования указателя с клавиатуры и из файла, вывода указателя, вывода номеров страниц для заданного слова, удаления элемента из указателя.
В общем вот такая она, задачка.
PM MAIL ICQ Skype   Вверх
PaZ1T1V
Дата 13.12.2009, 19:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



а в чем собственно проблема то ? 
--------------------
[size=8]Atention please!!![/size]
[size=6]Кривые руки[/size]
PM MAIL WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
ДобренькийПапаша
Дата 13.12.2009, 19:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 14.1.2006
Где: г.Москва

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



Собственно, человек спроектировать грамотно не может. Мне бы тоже в качестве учебного примера было бы интересно посмотреть на грамотную реализацию.


--------------------
Меня зовут Себастьян Парейра, торговец чёрным деревом.
PM MAIL   Вверх
posthuman
Дата 13.12.2009, 23:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 29.10.2009
Где: Люберцы

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



Код

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
Что-то вроде этого.
PM MAIL ICQ Skype   Вверх
ДобренькийПапаша
Дата 14.12.2009, 14:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 14.1.2006
Где: г.Москва

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



Если здесь единственное что требуется реализовать это то, что есть массив слов, а у каждого элемента этого массива есть массив чисел (страниц на которых есть слово), то проще всего, ИМХО, воспользоваться Dictiontary;

Код

public Dictionary<string, int[]> dictionary = new Dictionary<string, int[]>();


Dictionary это стандартное обобщение с методами типа Add(), Remove(), Clear(). В общем все удобства. Почитайте про это обобщение. Думаю это то, что решает ваше задачу самым простым способом.

Это сообщение отредактировал(а) ДобренькийПапаша - 14.12.2009, 14:05


--------------------
Меня зовут Себастьян Парейра, торговец чёрным деревом.
PM MAIL   Вверх
posthuman
Дата 14.12.2009, 18:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 29.10.2009
Где: Люберцы

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



Как бы этот метод еще сложен для меня. Можно как-нибудь попроще задавать?
Код

public class MyIndex
{
public string word;//слово
public List<int> page = new List<int>();//страницы
public MyIndex(string _word, List<int> _page)
{
this.word = _word;
this page = _page;
}
}

Как можно вводить это с клавиатуры, чтобы введенное слово соответсвовало страницам?
PM MAIL ICQ Skype   Вверх
ДобренькийПапаша
Дата 14.12.2009, 19:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 14.1.2006
Где: г.Москва

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



Вот программа в консоли. Работает. Запустите и введите Ivanov для проверки)))
Код

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

namespace ForVingradDictionary
{
    class Program
    {
        private Dictionary<string, int[]> index = new Dictionary<string,int[]>();
        public Dictionary<string, int[]> Index
        {
            get { return index; }
        }

        private 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;
        }
        static void Main(string[] args)
        {
            Program ex = new Program();
            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.Write("Input word:");
            string word = Console.ReadLine();
            Console.WriteLine();

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

            Console.WriteLine("Pages for your word:");
            foreach (int page in pages)
            {
                Console.WriteLine(page.ToString());
            }

            Console.ReadLine();
        }
    }
}




--------------------
Меня зовут Себастьян Парейра, торговец чёрным деревом.
PM MAIL   Вверх
posthuman
Дата 14.12.2009, 19:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 29.10.2009
Где: Люберцы

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



Код

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.Write("Input word:");
            string word = Console.ReadLine();
            Console.WriteLine();

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

            Console.WriteLine("Pages for your word:");
            foreach (int page in pages)
            {
                Console.WriteLine(page.ToString());
            }

            Console.ReadLine();
        }
    }
}



Во. в отдельном классе работает.

Это сообщение отредактировал(а) posthuman - 14.12.2009, 20:02
PM MAIL ICQ Skype   Вверх
ДобренькийПапаша
Дата 14.12.2009, 20:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 14.1.2006
Где: г.Москва

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



Ну разделил...
А вообще советую изучить основы)))
Код

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

namespace ForVingradDictionary
{
    class Book
    {
        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)
        {
            Book ex = new Book();
            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.Write("Input word:");
            string word = Console.ReadLine();
            Console.WriteLine();

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

            Console.WriteLine("Pages for your word:");
            foreach (int page in pages)
            {
                Console.WriteLine(page.ToString());
            }

            Console.ReadLine();
        }
    }
}



p.s. Интересно кто за -3 проголосовал на все мои посты в этой теме?)))

Это сообщение отредактировал(а) ДобренькийПапаша - 14.12.2009, 20:07


--------------------
Меня зовут Себастьян Парейра, торговец чёрным деревом.
PM MAIL   Вверх
posthuman
Дата 14.12.2009, 23:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 29.10.2009
Где: Люберцы

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



А можно как-нибудь попроще сделать тоже самое? Задание это по классам(глава 7), а то что напрограммировано в конце книги(глава 13).
Я основы читал и до сих пор читаю, просто задание на самом деле не легкое.
Я - не ставил(недостаточно у меня постов).
PM MAIL ICQ Skype   Вверх
ДобренькийПапаша
Дата 15.12.2009, 10:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 14.1.2006
Где: г.Москва

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



Вот со структурой)))

Код

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

namespace Book
{
    struct Indexer
    {
        string word;
        int[] pages;

        public string Word
        {
            get { return word; }
        }
        public int[] Pages
        {
            get { return pages; }
        }

        public Indexer(string word, int[] pages)
        {
            this.word = word;
            this.pages = new int[pages.Length];
            this.pages = pages;
        }
    }
    class Program
    {
        const int len = 256;
        static void Main(string[] args)
        {
            Indexer[] book = new Indexer[len];

            book[0] = new Indexer("Ivanov", new int[] { 2, 25, 37 });
            book[1] = new Indexer("Petrov", new int[] { 3, 42, 21 });
            book[2] = new Indexer("Sidorov", new int[] { 12, 15, 32 });

            Console.Write("Input word:");
            string word = Console.ReadLine();

            for (int i = 0; i < len; i++)
            {
                if(book[i].Word==null)
                    break;
                if (book[i].Word == word)
                {
                    for (int j = 0; j < book[i].Pages.Length; j++)
                    {
                        Console.WriteLine(book[i].Pages[j].ToString());
                    }
                        
                }                
            }
            Console.ReadLine();
        }
    }
}



--------------------
Меня зовут Себастьян Парейра, торговец чёрным деревом.
PM MAIL   Вверх
posthuman
Дата 15.12.2009, 19:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 29.10.2009
Где: Люберцы

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



неее. там же в задачке класс, а не структура.  но сделать его как-нибудь попроще. НАпример, как нибудь мой 2ой пост в этой теме переделать в класс можно? или только в этой задачке Dictionary подойдет?
PM MAIL ICQ Skype   Вверх
ДобренькийПапаша
Дата 15.12.2009, 19:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 14.1.2006
Где: г.Москва

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



В моём последнем посте можешь структуру заменить на класс, изменив одно слово. Сделано предельно просто. Куда ещё проще я не знаю.
Элементарно всё...


--------------------
Меня зовут Себастьян Парейра, торговец чёрным деревом.
PM MAIL   Вверх
posthuman
Дата 15.12.2009, 19:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 29.10.2009
Где: Люберцы

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



Ихменив струтуру на класс, придется менять и функцию main. Создавать нужно иначе экземпляр класса с аргументами, и производить ввод данных.
PM MAIL ICQ Skype   Вверх
ДобренькийПапаша
Дата 15.12.2009, 19:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 14.1.2006
Где: г.Москва

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



Я только что изменил слово struct на class.
Всё запустилось и работало. Я даже не знаю зачем я проверял это... Не знаю откуда вы взяли чего-то там про ввод и создание...

p.s. Да, в C# структура от класса сильно отличается, это правда. Но это другая история.

Это сообщение отредактировал(а) ДобренькийПапаша - 15.12.2009, 19:56


--------------------
Меня зовут Себастьян Парейра, торговец чёрным деревом.
PM MAIL   Вверх
SpbFlush09
Дата 17.12.2009, 20:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Ребят, помогите класс создать, у меня с ними полнейший завал, не понимаю их совсем!!! 
Задача :
Описать класс, представляющий круг. Предусмотреть методы для создания объектов вычисления площади круга, длины окружности и проверки попадания заданной точки внутрь круга. Описать свойства для получения состояния объекта. Написать программу, демонстрирующую все разработанные элементы класса.
PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

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


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

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


 




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


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

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