我想使用大量数据进行操作 - 包含元素和周期表。 首先让程序返回给定元素的原子量。你会怎么做?
通过手动创建包含118个元素的表并在tab1[element][]
中搜索给定元素,然后通过迭代最多118次传递tab1[][atomic_weight]
?
或者也许不是在程序表中创建一个带有数据的文件?语言是C ++和JS(在浏览器-JS中,您可以处理本地文件,但只能使用例如AJAX的服务器,是吗?)。
稍后它将不得不执行更高级的计算。当然数据库会有用,但不使用它?
答案 0 :(得分:2)
以下是实现此目标的步骤:
提示您可以回答自己的问题的提示:
对您设计的对象使用单维数组。这就是面向对象编程如此之大的一个原因。它可以在以后轻松扩展。
为什么是单维数组?
jist:
你不是在愚弄我。你还有很长的路要走。学习先编程。
答案 1 :(得分:0)
我建议将所有元素信息放入结构中 例如:
struct Element_Attributes
{
const char * symbol;
unsigned int weight;
};
包含元素的数据结构会有所不同,具体取决于您希望如何访问它们。
由于元素周期表上有列和行,因此矩阵是合适的。矩阵中有空白区域,因此您的程序必须处理矩阵中的{wasted}空白区域。
另一个想法是拥有行和列链接。行链接将指向行中的下一个元素。列链接将指向列中的下一个元素。这将比矩阵具有更慢的访问时间,但不会有空槽(链接)。
此外,除非有人(用户)说它太慢,否则不要担心你的节目的表现。其他实体通常比执行循环慢。其中一些实体是文件I / O和用户I / O.
编辑1 - 实施
该表有33列,有7行:
#define MAX_ROWS 7
#define MAX_COLUMNS 33
Element_Attributes Periodic_Table[MAX_ROWS][MAX_COLUMNS];
手动,可以创建一个元素并将其添加到表中:
Element_Attributes hydrogen = {"H", 1};
Periodic_Table[0][0] = hydrogen;
该表也可以静态定义(声明时)。这留给读者练习。
搜索:
bool element_found = false;
for (unsigned int row = 0; row < MAX_ROWS; ++row)
{
for (unsigned int column = 0; column < MAX_COLUMNS; ++column)
{
const std::string element_symbol = Periodic_Table[row][column].symbol;
if (element_symbol == "K") // Search for Potassium
{
element_found = true;
break;
}
}
if (element_found)
{
break;
}
}