标题:[求助]c++作业不会做了,关于分块查找的
只看楼主
horsedog
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2007-6-12
 问题点数:0 回复次数:2 
[求助]c++作业不会做了,关于分块查找的

终于找到达人聚集的地方了,偶有个c++作业不会做了,请求达人们速帮我搞定

题目为:
用分块查找的方法实现对学生成绩的查找。具体要求如下:
(1)将若干学生成绩按分数段存放在数组a的不同位置上。其中低于60分的成绩排在数组的最前面若干位置上,后面依次分段存放60~69分、70~79分、80~89分,90~100分的成绩。要求同一分数段的分数必须存放在一起,但不要求同一分数段内的分数有序。
(2)每个分数段内的数据个数为随机产生的5~10之间的任意数。(不能通过输入获得)
(3)每个分数段内的分数也不能通过输入获得,而要随机产生。
如,数组a的内容为:
34 56 23 15 59 44 53
65 63 69 62 67
76 77 74 73 72 78
81 87 85 86 82 89 84 88 80
99 90 97 93 100

老师的提示:
1、首先将每个分数段内的最高分组织在另外一个数组中,在该数组中用二分法(对半查找)找到待查数据所在的分数段,然后再到响应的段中去顺序查找。注意此处的二分法和通常二分法实现细节上的差别。
2、该程序中要涉及的数据、函数比较多,尽可能少用或不用全局变量。
作业要求:
1、方法不限,可用结构化方法,也可用面向对象的方法


请求达人们帮我搞定,告诉我代码

搜索更多相关主题的帖子: 作业 分块 分数 学生 
2007-06-12 15:03
horsedog
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2007-6-12
得分:0 
偶非常感谢
2007-06-12 15:03
HJin
Rank: 6Rank: 6
等 级:贵宾
威 望:27
帖 子:401
专家分:0
注 册:2007-6-9
得分:0 

I generate the array for you --- you need to do the homework yourself.

[CODE]/**
I did not implement the following requirement 1.
What I did is to generate the scores' array.
1、首先将每个分数段内的最高分组织在另外一个数组中,
在该数组中用二分法(对半查找)找到待查数据所在的分数段,
然后再到响应的段中去顺序查找。注意此处的二分法和通常二分法实现细节上的差别。
*/

#include <iostream>
#include <ctime> // for srand()
using namespace std;

// generate random number between a and b, both inclusive.
int rd(int a, int b) // this is a very crappy random number generator
{
return a + ( rand() | (rand() << 16) ) % (b-a+1);
}
class StuScores
{
public:
// generating the array
StuScores() : size(0)
{
int i;
int j;
int pos=0;
srand(time(0)); // seed random number generator
// generate sizes for each part and calculate the total size
for(i=0; i<5; ++i)
{
partSizes[i] = rd(5, 10);
size += partSizes[i];
}

a= new int[size];
i=0;
// first part has scores 0..59
for(j=0; j<partSizes[i]; ++j)
a[j] = rd(0, 59);

pos = partSizes[0];
// parts #2..#5
for(i=1; i<5; ++i)
{
for(j=0; j<partSizes[i]; ++j)
{
if(i==4) // needs to include the score 100
a[pos+j] = (5+i)*10 + rd(0, 10);
else
a[pos+j] = (5+i)*10 + rd(0, 9);
}
pos+=partSizes[i];
}
}
virtual ~StuScores()
{
delete [] a;
}
// print the scores' array
void display() const
{
int i=0;
int b[4];
int j;
b[0] = partSizes[0]-1;
for(j=1; j<4; ++j)
b[j] = b[j-1]+partSizes[j];
j=0;
while(i < size)
{
cout<<a[i]<< " ";
if (i==b[j] && j<4)
{
cout<<endl;
++j;
}

++i;
}
cout<<endl;
}
private:
int *a; // the scores' array
int size; // total number of students
int partSizes[5]; // stores the size of each part
};

int main(int argc, char** argv)
{
StuScores ss;
ss.display();

return 0;
}[/CODE]


I am working on a system which has no Chinese input. Please don\'t blame me for typing English.
2007-06-13 01:06



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-146805-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.467627 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved