电梯调度算法void rnd() { srand(time(NULL)); for(int i = 0; i < COUNT; i++) { C[i] = rand() % 200; } }
时间: 2024-04-05 13:29:23 浏览: 34
这段代码并不是电梯调度算法,而是一个生成随机数数组的函数。具体来说,它使用了C++的srand()和rand()函数,其中srand()函数用来设置随机数发生器的种子,而rand()函数用来生成随机数。函数的参数COUNT是随机数数组的长度,数组名为C[]。代码中rand() % 200的意思是生成0到199之间的随机数,因为rand()函数生成的随机数范围是0到RAND_MAX,而RAND_MAX通常是32767。因此,这段代码的作用是生成COUNT个0到199之间的随机数,存储在C[]数组中。
相关问题
#include <stdio.h> #define N 50 #define M 11 void fun( int *a, int *b) { } double rnd() { static t=29,c=217,m=1024,r=0; r=(r*t+c)%m; return((double)r/m); } int main() { int age[N], i, d[M]; for(i=0; i<N;i++)age[i]=(int)(115*rnd()); printf("The original data :\n"); for(i=0;i<N;i++) printf((i+1)%10==0?"%4d\n":"%4d",age[i]); printf("\n\n"); fun(age, d); for(i=0;i<10;i++) printf("%4d---%4d : %4d\n",i*10,i*10+9,d[i]); printf(" Over 100 : %4d\n",d[10]); NONO(d); return 0; } void NONO(int d[M]) {/* 请在此函数内打开文件,输入测试数据,调用 fun 函数,输出数据,关闭文件。 */ FILE *wf ; int i ; wf = fopen("bc.out", "w") ; for(i = 0 ; i < 10 ; i++) fprintf(wf, "%4d---%4d : %4d\n", i*10, i*10+9, d[i]) ; fprintf(wf, " Over 100 : %4d\n", d[10]) ; fclose(wf) ; }
这段代码存在以下问题:
1. 函数fun没有完成具体的功能,不符合题目要求。
2. 函数NONO调用在main函数之后,没有提前声明。
3. 随机数生成函数rnd没有进行初始化,可能导致生成的随机数不满足要求。
下面是修改后的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 50
#define M 11
void fun(int *a, int *b) {
for (int i = 0; i < N; i++) {
int age = *(a + i);
if (age >= 100) {
*(b + 10) += 1;
} else {
*(b + age / 10) += 1;
}
}
}
void output(int *d) {
printf("Age distribution:\n");
for (int i = 0; i < 10; i++) {
printf("%3d-%3d: %3d\n", i * 10, i * 10 + 9, *(d + i));
}
printf("Over 100: %3d\n", *(d + 10));
}
void saveToFile(int *d) {
FILE *fp;
fp = fopen("output.txt", "w");
if (fp == NULL) {
printf("Error opening file!\n");
exit(1);
}
fprintf(fp, "Age distribution:\n");
for (int i = 0; i < 10; i++) {
fprintf(fp, "%3d-%3d: %3d\n", i * 10, i * 10 + 9, *(d + i));
}
fprintf(fp, "Over 100: %3d\n", *(d + 10));
fclose(fp);
}
int main() {
int age[N], d[M] = {0};
srand((unsigned)time(NULL)); // 初始化随机数种子
for (int i = 0; i < N; i++) {
age[i] = (int)(115 * (double)rand() / RAND_MAX); // 生成0~114岁之间的随机数
}
printf("The original data:\n");
for (int i = 0; i < N; i++) {
printf("%3d ", age[i]);
if ((i + 1) % 10 == 0) {
printf("\n");
}
}
printf("\n");
fun(age, d);
output(d);
saveToFile(d);
return 0;
}
```
修改后的代码中,函数fun完成了题目要求,统计年龄分布情况。函数output用于输出统计结果,函数saveToFile用于将统计结果保存到文件中。随机数生成函数使用了标准库函数rand,同时生成的随机数也符合要求。在main函数中,首先使用随机函数生成N个0~114岁之间的随机数存入数组age中,然后调用函数fun统计年龄分布情况,并输出结果和保存至文件。
k = 3 rnd = 0 ROUND_LIMIT = 10 THRESHOLD = 1e-10 melons = [] clusters = [] f = open('melons.txt', 'r') for line in f: melons.append(np.array(line.split(' '), dtype = np.string_).astype(np.float64)) mean_vectors = random.sample(melons, k) while True: rnd += 1 change = 0 clusters = [] for i in range(k): clusters.append([]) for melon in melons: c = np.argmin( list(map( lambda vec: np.linalg.norm(melon - vec, ord = 2), mean_vectors)) ) clusters[c].append(melon) for i in range(k): new_vector = np.zeros((1,2)) for melon in clusters[i]: new_vector += melon new_vector /= len(clusters[i]) change += np.linalg.norm(mean_vectors[i] - new_vector, ord = 2) mean_vectors[i] = new_vector if rnd > ROUND_LIMIT or change < THRESHOLD: break print('最终迭代%d轮'%rnd) colors = ['red', 'green', 'black'] for i, col in zip(range(k), colors): for melon in clusters[i]: plt.scatter(melon[0], melon[1], color = col) plt.show()
这段代码是 K-means 聚类算法的实现,它的作用是将 melons.txt 文件中的数据分成 k 个簇。其中,k=3 表示聚成三个簇,ROUND_LIMIT=10 表示最多迭代十次,THRESHOLD=1e-10 表示当簇中心向量的变化小于 1e-10 时停止迭代。
首先,代码读取文件 melons.txt 中的数据,将其存储在名为 melons 的列表中。然后,从 melons 中随机选择 k 个数据作为初始簇中心向量 mean_vectors。接着,进入循环,将数据分配到离其最近的簇中去,计算每个簇的新中心向量,如果中心向量的变化小于 THRESHOLD,则停止迭代。最后,将聚类结果用散点图显示出来。
需要注意的是,本段代码中并没有对聚类的效果进行评估和调参,因此其聚类效果可能不是最优的。
阅读全文