Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
239 / 150 / 41
Регистрация: 26.01.2019
Сообщений: 545
.NET 4.x

Как лучше хранить данные периодической таблицы Менделеева?

01.04.2020, 15:40. Показов 1346. Ответов 8

Студворк — интернет-сервис помощи студентам
Друзья, нужна помощь, подсказки и указание направления движения

Хочу изобрести велосипед создать структуру данных для хранения периодической таблицы Менделеева.
Из нее буду вытягивать атомные массы для последующих расчетов, позже и другие данные.
с MySQL только знакомлюсь, поэтому пока решил хранить внутри.

Есть вариант сделать через List, но мне не нравится сложность добавления новых полей элементов
Вариант через List<>
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
using System.Collections.Generic;
 
public class Element
{
    public int AtomicNumber { get; set; }
    public string Symbol { get; set; }
    public string NameEng { get; set; }
    public string NameRus { get; set; }
    public decimal AtomicWeight { get; set; }
 
    public Element() { }
    public Element(int atomicNumber, string symbol, string nameEng, string nameRus, decimal atomicWeight)
    {
        AtomicNumber = atomicNumber;
        Symbol = symbol;
        NameEng = nameEng;
        NameRus = nameRus; 
        AtomicWeight = atomicWeight;
    }
}
 
public class PeriodicTable
{
    public List<Element> Elements;
 
    public PeriodicTable()
    {
        Elements.Add(new Element(1, "H", "Hydrogen", "Водород" ,1.007825M));
        Elements.Add(new Element(2, "He", "Helium", "Гелий", 4.00260M));
        Elements.Add(new Element(3, "Li", "Lithium", "Литий", 6.941M));
        // И далее по списку
    }
}


Также крутится идея сделать через Dictionary, и ключами Symbol...

Пожалуйста, накидайте идей как лучше хранить такие структуры и/или какими инструментами удобнее работать?

Добавлено через 4 часа 14 минут
Может быть я веткой ошибся? ))
Ни у кого нет соображений, как лучше организовать это хозяйство?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
01.04.2020, 15:40
Ответы с готовыми решениями:

Электронный аналог периодической таблицы химических элементов Менделеева
vot na etu temu&quot;создать электронный аналог периодической таблицы химических элементов Менделеева&quot;

Сведения о каждом химическом элементе из периодической таблицы Д.И. Менделеева представить в виде структуры
Задание 1. Сведения о каждом химическом элементе из периодической таблицы Д.И. Менделеева представить в виде структуры. Haписать программу...

Как лучше хранить данные
В одной таблице или нет? есть 1) 50мил.строк 2) каждая строка занимает 3кб (т.е. выходит 150гиг база)

8
 Аватар для Enifan
1848 / 1190 / 501
Регистрация: 14.10.2018
Сообщений: 3,211
01.04.2020, 16:28
Цитата Сообщение от GeoCod Посмотреть сообщение
вариант сделать через List, но мне не нравится сложность добавления новых полей элементов
а в чем сложность ? вам в любой случаи надо прописывать все данные - порядковый номер, сокращенная запись, полная запись, другие данные. Можно конечно сократить запись
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class PeriodicTable
{
    public List<Element> Elements;
 
    public PeriodicTable()
    {
        Elements = CreateTable();
    }
 
    List<Element> CreateTable()
    {
        return new List<Element>()
        {
            new Element(1, "H", "Hydrogen", "Водород", 1.007825M),
            new Element(2, "He", "Helium", "Гелий", 4.00260M),
            new Element(3, "Li", "Lithium", "Литий", 6.941M)
        };
    }
}
Что насчет словаря - в целом можно, но еще лучше создать свой класс для работы с данной таблицей. В нем можно перегрузить индексаторы, которые будут работать с элементом через его сокращенное название ["He"] и через его порядковый номер [2].
Вообще чтобы ответить на данный вопрос, желательно бы знать какая именно будет вестись работа с таблицей. На основании этого выбирается / создается класс с нужными методами, свойствами.
Даже если делать это через БД - суть останется почти таже, нужно знать как именно будет вестись работа с таблицей.
1
Эксперт .NET
 Аватар для Rius
13121 / 7681 / 1675
Регистрация: 25.05.2015
Сообщений: 23,437
Записей в блоге: 14
01.04.2020, 16:30
А где там сложность?

Можно в xml, при первой загрузке парсить.
1
239 / 150 / 41
Регистрация: 26.01.2019
Сообщений: 545
01.04.2020, 20:16  [ТС]
Цитата Сообщение от Enifan Посмотреть сообщение
а в чем сложность ? вам в любой случаи надо прописывать все данные
"сложность" - это я погорячился. Когда набил большую часть элементов, вспомнил что есть плотность, и добавить это поле в такой List из 118 элементов - оказалось такое себе занятие.
Возникла мысль, что можно лучше организовать это хозяйство.

Цитата Сообщение от Enifan Посмотреть сообщение
какая именно будет вестись работа с таблицей
На данный момент от таблицы нужны 2 вещи:
1. По символьному обозначению, как вы и говорите, получение атомной массы элемента
2. Определение валентности соединения (степени окисления)
На основе этих данных будут выполняться расчеты для разных хим. соединений, видимо уже в другом классе?

еще для всех элементов существуют кларки, по данным разных авторов, которые тоже понадобятся.

Добавлено через 5 минут
Цитата Сообщение от Rius Посмотреть сообщение
Можно в xml, при первой загрузке парсить.
Для этого все данные в xml загнать надо?

Добавлено через 17 минут
Пока это максимальный набор полей для таблицы. Последние 4 под сомнением, т.к. не у всех элементов они известны
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
            atomicNumber;    // атомный номер
            symbol;                // символ
            nameEng;              // Русское название
            nameRus;              // Английское название
            period;                // Номер периода
            groupNumber;      // Номер группы
            block;                  // название блока в таблице (s, d, p, f)
            atomicWeight;    // атомный вес
            density;              // плотность при н.у.
            temperatureMelting;    // Температура плавления
            temperatureBoiling;    // температура кипения
            discoveryDate;              // Дата открытия (год)
            discovererName;            // Первооткрыватель
0
Эксперт .NET
 Аватар для Rius
13121 / 7681 / 1675
Регистрация: 25.05.2015
Сообщений: 23,437
Записей в блоге: 14
01.04.2020, 20:25
Цитата Сообщение от GeoCod Посмотреть сообщение
Для этого все данные в xml загнать надо?
Да.
А заполнять можно так:
Миниатюры
Как лучше хранить данные периодической таблицы Менделеева?  
Вложения
Тип файла: 7z elements.7z (510 байт, 1 просмотров)
1
 Аватар для Enifan
1848 / 1190 / 501
Регистрация: 14.10.2018
Сообщений: 3,211
01.04.2020, 20:27
Цитата Сообщение от GeoCod Посмотреть сообщение
вспомнил что есть плотность, и добавить это поле в такой List из 118 элементов - оказалось такое себе занятие
даже если бы это был словарь, БД, xml - в любом случаи надо добавлять значения. Если есть какая то математическая формула, которая автоматически делает подсчет данного значения для каждого элемента - тогда не так уж и сложно, в противном случаи - все прописывать.
Если как вы говорите всего 1 ключ (он же символьное обозначение), то словарь вполне сойдет.
Цитата Сообщение от GeoCod Посмотреть сообщение
выполняться расчеты для разных хим. соединений, видимо уже в другом классе?
да, лучше создать новый, так будет проще писать код и отслеживать ошибки.
1
239 / 150 / 41
Регистрация: 26.01.2019
Сообщений: 545
01.04.2020, 20:52  [ТС]
Цитата Сообщение от Rius Посмотреть сообщение
А заполнять можно так:
О, удобный инструмент... А я уж думал урками xml-ку набивать ))
Спасибо, посмотрим что за зверь такой

Цитата Сообщение от Enifan Посмотреть сообщение
Если как вы говорите всего 1 ключ (он же символьное обозначение), то словарь вполне сойдет.
Словарь "ключ - массив" ? А сами элементы в Enum собрать?
0
 Аватар для Enifan
1848 / 1190 / 501
Регистрация: 14.10.2018
Сообщений: 3,211
01.04.2020, 22:16
Цитата Сообщение от GeoCod Посмотреть сообщение
Словарь "ключ - массив"
ключ - объект класса Element
Цитата Сообщение от GeoCod Посмотреть сообщение
А сами элементы в Enum собрать?
Enum используют для удобства читаемости кода, в принципе можно и его сделать, только опять таки каждый элемент надо прописывать
1
239 / 150 / 41
Регистрация: 26.01.2019
Сообщений: 545
01.04.2020, 22:22  [ТС]
Enifan, понял, спасибо. Опробуем вышесказанное ))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
01.04.2020, 22:22
Помогаю со студенческими работами здесь

Как лучше хранить данные
Имеется клиент и сервер с БД. После авторизации клиент получает данные из БД. Данные приходят в виде текста ( примерно 30 000 строк )....

Как лучше хранить данные
Здравствуйте, у меня есть лист товаров, каждый из них может иметь разные способы доставки. Как это все лучше хранить? Создать отдельную...

Как лучше хранить данные в коде?
Здравствуйте, недавно начал изучать джаву и по старым привычкам пытаюсь пользоваться языком. А привычка такая - делать разного рода фабрики...

Конструктор угадайки - как лучше хранить данные?
Вобщем https://www.cyberforum.ru/vb-net/thread1625809.html Как то не захотелось делать это все на васике, ибо уже к 5 той формуле мне...

Как и где лучше хранить текстовые данные
Мне нужно написать небольшую библиотеку, в которой будут храниться данные по книгам(автор, название и т.д.). В ней буду предусматривать...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru