内存分配实验报告模板

内存分配实验报告模板
内存分配实验报告模板

河北建筑工程学院

实验报告

一实验目的

1 深刻理解可变分区的首次适应算法。

2 掌握可变分区存储管理方式,使用可变分区的首次适应算法进行内存分配。二实验设备

PC机

三实验内容

在Java开发环境下模拟可变分区的内存分配,使用首次适应算法,内存分配。四程序的主要代码

package 首次适应算法;

import java.awt.Color;

import java.awt.Font;

import java.awt.GridLayout;

import https://www.360docs.net/doc/c99393663.html,bel;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JOptionPane;

import javax.swing.JPanel;

import javax.swing.JTextArea;

import javax.swing.JTextField;

import javax.swing.SwingConstants;

import javax.swing.GroupLayout;

import javax.swing.GroupLayout.Alignment;

import https://www.360docs.net/doc/c99393663.html,ponentPlacement;

public class FFMethod extends JFrame {

/**

* 首次适应算法

*/

private static final long serialVersionUID = 1889348358576796305L;

protected JTextField blank0,blank1,blank2,blank3,

blank4,blank5,blank6,blank7,

blank8,blank9,blank10,blank11,

blank12,blank13,blank14,blank15,

blank16,blank17,

blank18,blank19,blank20,blank21,blank22,blank23,

blank24,blank25,blank26,blank27,

blank28,blank29,blank30,blank31; //定义30个进程块protected JTextField applyMemTF,releaseMemTF; //申请大小、释放块号的编辑框

protected JTextArea showMemStatusTF; //内存分配情况显示框

protected JButton applyMemButton,releaseMemButton; //定义申请大小、释放块号和清空内存三个按钮

int[] processBlock = new int[32]; //表示进程块

int[] processBlockStartAdd = new int[32]; //表示存储起始地址

int[] processBlockLength = new int[32]; //表示存储进程长度

public FFMethod() {

setForeground(Color.BLACK);

setResizable(false);

getContentPane().setBackground(Color.CYAN);

setBackground(Color.WHITE);

setFont(new Font("黑体", Font.PLAIN, 15));

setTitle("\u64CD\u4F5C\u7CFB\u7EDF\u2014\u2014\u9996\u6B21\u9002\u5E9 4\u7B97\u6CD5");

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

JPanel p5 = new JPanel();

p5.setBackground(Color.YELLOW);

Font font1 = new Font("SansSerif",Font.BOLD,16);

GroupLayout groupLayout = new GroupLayout(getContentPane());

groupLayout.setHorizontalGroup(

groupLayout.createParallelGroup(Alignment.LEADING)

.addGroup(groupLayout.createSequentialGroup()

.addContainerGap()

.addComponent(p5, GroupLayout.PREFERRED_SIZE, 612, GroupLayout.PREFERRED_SIZE)

.addContainerGap(589, Short.MAX_V ALUE))

);

groupLayout.setVerticalGroup(

groupLayout.createParallelGroup(Alignment.LEADING)

.addGroup(groupLayout.createSequentialGroup()

.addContainerGap()

.addComponent(p5, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)

.addContainerGap(81, Short.MAX_V ALUE))

);

JPanel p3 = new JPanel(new GridLayout(11,1,20,0));

p3.setBackground(Color.YELLOW);

JLabel label = new JLabel("\u5185\u5B58\u5BB9\u91CF32");

label.setHorizontalAlignment(SwingConstants.LEFT);

p3.add(label);

p3.add(blank0 = new JTextField(3));

p3.add(blank1 = new JTextField(3));

p3.add(blank2 = new JTextField(3));

p3.add(blank3 = new JTextField(3));

p3.add(blank4 = new JTextField(3));

p3.add(blank5 = new JTextField(3));

p3.add(blank6 = new JTextField(3));

p3.add(blank7 = new JTextField(3));

p3.add(blank8 = new JTextField(3));

p3.add(blank9 = new JTextField(3));

p3.add(blank10 = new JTextField(3));

p3.add(blank11 = new JTextField(3));

p3.add(blank12 = new JTextField(3));

p3.add(blank13 = new JTextField(3));

p3.add(blank14 = new JTextField(3));

p3.add(blank15 = new JTextField(3));

p3.add(blank16 = new JTextField(3));

p3.add(blank17 = new JTextField(3));

p3.add(blank18 = new JTextField(3));

p3.add(blank19 = new JTextField(3));

p3.add(blank20 = new JTextField(3));

p3.add(blank21 = new JTextField(3));

p3.add(blank22 = new JTextField(3));

p3.add(blank23 = new JTextField(3));

p3.add(blank24 = new JTextField(3));

p3.add(blank25 = new JTextField(3));

p3.add(blank26 = new JTextField(3));

p3.add(blank27 = new JTextField(3));

p3.add(blank28 = new JTextField(3));

p3.add(blank29 = new JTextField(3));

p3.add(blank30 = new JTextField(3));

p3.add(blank31 = new JTextField(3));

JPanel p1 = new JPanel(new GridLayout(3,2,5,2));

p1.setBackground(Color.YELLOW);

p1.add(applyMemButton = new

JButton("\u7533\u8BF7\uFF08\u5757\u6570\uFF09"));

applyMemButton.setBackground(Color.BLUE);

p1.add(applyMemTF = new JTextField(3));

applyMemTF.setToolTipText("");

p1.add(releaseMemButton = new

JButton("\u91CA\u653E\uFF08\u5757\u53F7\uFF09"));

releaseMemButton.setBackground(Color.BLUE);

p1.add(releaseMemTF = new JTextField(3));

p1.add(new Label("\t\u5185\u5B58\u5206\u914D\u60C5\u51B5\uFF1A")); JPanel p2 = new JPanel();

p2.setBackground(Color.YELLOW);

p2.add(showMemStatusTF = new JTextArea());

GroupLayout gl_p2 = new GroupLayout(p2);

gl_p2.setHorizontalGroup(

gl_p2.createParallelGroup(Alignment.LEADING)

.addGroup(gl_p2.createSequentialGroup()

.addComponent(p1, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)

.addGap(28))

.addGroup(gl_p2.createSequentialGroup()

.addComponent(showMemStatusTF, GroupLayout.DEFAULT_SIZE, 265, Short.MAX_V ALUE)

.addContainerGap())

);

gl_p2.setVerticalGroup(

gl_p2.createParallelGroup(Alignment.LEADING)

.addGroup(gl_p2.createSequentialGroup()

.addComponent(p1, GroupLayout.PREFERRED_SIZE, 131, GroupLayout.PREFERRED_SIZE)

.addPreferredGap(ComponentPlacement.RELATED)

.addComponent(showMemStatusTF,

GroupLayout.DEFAULT_SIZE, 175, Short.MAX_V ALUE))

);

JButton button = new JButton("\u6E05\u7A7A\u5185\u5B58");

button.setBackground(Color.RED);

button.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

for(int cc = 0;cc < 10;cc++)

processBlock[cc] = 0;

colorr();

applyMemTF.setText("");

releaseMemTF.setText("");

showMemStatusTF.setText("");

}

});

p1.add(button);

p2.setLayout(gl_p2);

applyMemTF.setFont(font1);

releaseMemTF.setFont(font1);

showMemStatusTF.setFont(font1);

//申请空间的运算

applyMemButton.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

int n = Integer.parseInt(applyMemTF.getText());//进程块的大小

if(n > 32 || n <0){

JOptionPane.showMessageDialog(null,"进程大小违规,请重新输入!");

}

outher://向内存中添加进程

for(int i = 0;i < 32; i++ ){ //向内存中添加进程

if(processBlock[i] == 0 && Sum(processBlock,i,n) == 0){

processBlockStartAdd[i] = i; //存储起始地址

processBlockLength[i] = n; //存储进程长度

for(int ss = i;ss < (i + n);ss++)

processBlock[ss] = 1; //找到合适的位置,置1

colorr();

JOptionPane.showMessageDialog(null,"成功分配到内存!");

showMemStatusTF.append("块号:" + processBlockStartAdd[i] + " 起始位置:" +

processBlockStartAdd[i] + " 大小: " + processBlockLength[i] +"\n");

break outher;

}

if(i == 31){

JOptionPane.showMessageDialog(null,"内存不足,请等待...");

break outher;

}

}

}

});

//释放内存按钮监听

releaseMemButton.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

int m = Integer.parseInt(releaseMemTF.getText());//进程块的起始位置和长度

for(int ff = m;ff < (m + processBlockLength[m]);ff++){

processBlock[ff] = 0;

}

processBlockStartAdd[m] = 0;

processBlockLength[m] = 0;

colorr();

showMemStatusTF.setText("");

for(int bb = 0;bb < 10; bb++){

if(processBlockLength[bb] != 0)

showMemStatusTF.append("块号:" + processBlock[bb] + "

起始位置:" +

processBlockStartAdd[bb] + " 大小:"+ processBlockLength[bb] + "\n");

}

}

});

GroupLayout gl_p5 = new GroupLayout(p5);

gl_p5.setHorizontalGroup(

gl_p5.createParallelGroup(Alignment.LEADING)

.addGroup(gl_p5.createSequentialGroup()

.addGap(20)

.addComponent(p2, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)

.addPreferredGap(ComponentPlacement.UNRELATED)

.addComponent(p3, GroupLayout.PREFERRED_SIZE, 273, Short.MAX_V ALUE)

.addGap(26))

);

gl_p5.setVerticalGroup(

gl_p5.createParallelGroup(Alignment.LEADING)

.addGroup(gl_p5.createSequentialGroup()

.addGroup(gl_p5.createParallelGroup(Alignment.LEADING, false)

.addComponent(p3, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_V ALUE)

.addGroup(gl_p5.createSequentialGroup()

.addGap(26)

.addComponent(p2,

GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)))

.addContainerGap(27, Short.MAX_V ALUE)) );

p5.setLayout(gl_p5);

getContentPane().setLayout(groupLayout);

}

//判断内存空间是否足够

public int Sum(int[] pp,int mm,int k){

int sum = 0;

if((mm + k) <= 32){

for(int zz = mm;zz < (mm + k);zz++)

sum+=pp[zz];

}

else {

sum = 1;

}

return sum;

}

//内存与processBlock数组相对应,占用颜色为绿色,空白为蓝色

public void colorr(){

if(processBlock[0]==1)

blank0.setBackground(Color.GREEN); else

blank0.setBackground(Color.WHITE); if(processBlock[1]==1)

blank1.setBackground(Color.GREEN); else

blank1.setBackground(Color.WHITE); if(processBlock[2]==1)

blank2.setBackground(Color.GREEN); else

blank2.setBackground(Color.WHITE); if(processBlock[3]==1)

blank3.setBackground(Color.GREEN); else

blank3.setBackground(Color.WHITE); if(processBlock[4]==1)

blank4.setBackground(Color.GREEN); else

blank4.setBackground(Color.WHITE); if(processBlock[5]==1)

blank5.setBackground(Color.GREEN); else

blank5.setBackground(Color.WHITE); if(processBlock[6]==1)

blank6.setBackground(Color.GREEN); else

blank6.setBackground(Color.WHITE); if(processBlock[7]==1)

blank7.setBackground(Color.GREEN); else

blank7.setBackground(Color.WHITE); if(processBlock[8]==1)

blank8.setBackground(Color.GREEN); else

blank8.setBackground(Color.WHITE); if(processBlock[9]==1)

blank9.setBackground(Color.GREEN); else

blank9.setBackground(Color.WHITE); if(processBlock[10]==1)

blank10.setBackground(Color.GREEN); else

blank10.setBackground(Color.WHITE); if(processBlock[11]==1)

blank11.setBackground(Color.GREEN); else

blank11.setBackground(Color.WHITE); if(processBlock[12]==1)

blank12.setBackground(Color.GREEN); else

blank12.setBackground(Color.WHITE); if(processBlock[13]==1)

blank13.setBackground(Color.GREEN); else

blank13.setBackground(Color.WHITE); if(processBlock[14]==1)

blank14.setBackground(Color.GREEN); else

blank14.setBackground(Color.WHITE); if(processBlock[15]==1)

blank15.setBackground(Color.GREEN); else

blank15.setBackground(Color.WHITE); if(processBlock[16]==1)

blank16.setBackground(Color.GREEN); else

blank16.setBackground(Color.WHITE); if(processBlock[17]==1)

blank17.setBackground(Color.GREEN);

else

blank17.setBackground(Color.WHITE); if(processBlock[18]==1)

blank18.setBackground(Color.GREEN); else

blank18.setBackground(Color.WHITE); if(processBlock[19]==1)

blank19.setBackground(Color.GREEN); else

blank19.setBackground(Color.WHITE); if(processBlock[20]==1)

blank20.setBackground(Color.GREEN); else

blank20.setBackground(Color.WHITE); if(processBlock[21]==1)

blank21.setBackground(Color.GREEN); else

blank21.setBackground(Color.WHITE); if(processBlock[22]==1)

blank22.setBackground(Color.GREEN); else

blank22.setBackground(Color.WHITE); if(processBlock[23]==1)

blank23.setBackground(Color.GREEN); else

blank23.setBackground(Color.WHITE); if(processBlock[24]==1)

blank24.setBackground(Color.GREEN); else

blank24.setBackground(Color.WHITE); if(processBlock[25]==1)

blank25.setBackground(Color.GREEN); else

blank25.setBackground(Color.WHITE); if(processBlock[26]==1)

blank26.setBackground(Color.GREEN);

else

blank26.setBackground(Color.WHITE);

if(processBlock[27]==1)

blank27.setBackground(Color.GREEN);

else

blank27.setBackground(Color.WHITE);

if(processBlock[28]==1)

blank28.setBackground(Color.GREEN);

else

blank28.setBackground(Color.WHITE);

if(processBlock[29]==1)

blank29.setBackground(Color.GREEN);

else

blank29.setBackground(Color.WHITE);

if(processBlock[30]==1)

blank30.setBackground(Color.GREEN);

else

blank30.setBackground(Color.WHITE);

if(processBlock[31]==1)

blank31.setBackground(Color.GREEN);

else

blank31.setBackground(Color.WHITE);

}

public static void main(String[] args){

FFMethod frame = new FFMethod();

frame.setTitle("操作系统——首次适应算法");

frame.setSize(650,450);

frame.setLocationRelativeTo(null);

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

frame.setVisible(true);

}

}

五实验结果

程序目录如下:首次适应算法\首次适应算法\src\首次适应算法下的FFMethod.java文件。

运行程序后,显示的界面如下:

界面中共有两个可编辑文本框和三个按钮。当在第一个文本框中的输入数据并单击申请申请按钮时,便在右侧的内存显示框的分配相应的快数。具体结果如下图所示:

下面更改文本框的内容并且多申请几次,结果如下:

当内存空间已满或者所剩内存空间已不足以继续进行下次分配时,弹出如下显示:

下面进行释放内存操作,输入要释放的内存块号,并单击释放按钮:

继续释放内存,当所有内存释放完毕后,单击‘清空内存’按钮将所有显示清零,回到初始界面。

《计算方法》课内实验报告

《计算方法》实验报告 姓名: 班级: 学号: 实验日期: 2011年10月26日

一、实验题目: 数值积分 二、实验目的: 1.熟悉matlab 编写及运行数值计算程序的方法。 2.进一步理解数值积分的基础理论。 3.进一步掌握应用不同的数值积分方法求解给定的积分并给出数据结果及误差分析。 三、实验内容: 1.分别用复合梯形求积公式及复合辛普森求积公式计算积分xdx x ln 10 ? , 要求计算精度达到410-,给出计算结果并比较两种方法的计算节点数. 2.用龙贝格求积方法计算积分dx x x ?+3 021,使误差不超过510-. 3.用3=n 的高斯-勒让德公式计算积分?3 1 sin x e x ,给出计算结果. 4.用辛普森公式(取2==M N ) 计算二重积分.5 .00 5 .00 dydx e x y ? ? - 四、实验结果: 1.(1)复合梯形法: 将区间[a,b]划分为n 等份,分点n k n a b h kh a x k ,2,1,0,,=-=+=在每个区间[1,+k k x x ](k=0,1,2,···n-1)上采用梯形公式,则得 )()]()([2)()(1 11 1 f R x f x f h dx x f dx x f I n n k k k b a n k x x k k ++===∑?∑? -=+-=+ 故)]()(2)([21 1 b f x f a f h T n k k n ++=∑-=称为复合梯形公式 计算步长和划分的区间 Eps=1E-4 h1=sqrt(Eps/abs(-(1-0)/12*1/(2+1))) h1 =0.0600 N1=ceil(1/h1) N1 =17 用复合梯形需要计算17个结点。 复合梯形: function T=trap(f,a,b,n) h=(b-a)/n;

计算方法上机实验报告

. / 《计算方法》上机实验报告 班级:XXXXXX 小组成员:XXXXXXX XXXXXXX XXXXXXX XXXXXXX 任课教师:XXX 二〇一八年五月二十五日

前言 通过进行多次的上机实验,我们结合课本上的内容以及老师对我们的指导,能够较为熟练地掌握Newton 迭代法、Jacobi 迭代法、Gauss-Seidel 迭代法、Newton 插值法、Lagrange 插值法和Gauss 求积公式等六种算法的原理和使用方法,并参考课本例题进行了MATLAB 程序的编写。 以下为本次上机实验报告,按照实验内容共分为六部分。 实验一: 一、实验名称及题目: Newton 迭代法 例2.7(P38):应用Newton 迭代法求在附近的数 值解,并使其满足. 二、解题思路: 设'x 是0)(=x f 的根,选取0x 作为'x 初始近似值,过点())(,00x f x 做曲线)(x f y =的切线L ,L 的方程为))((')(000x x x f x f y -+=,求出L 与x 轴交

点的横坐标) (') (0001x f x f x x - =,称1x 为'x 的一次近似值,过点))(,(11x f x 做曲线)(x f y =的切线,求该切线与x 轴的横坐标) (') (1112x f x f x x - =称2x 为'x 的二次近似值,重复以上过程,得'x 的近似值序列{}n x ,把) (') (1n n n n x f x f x x - =+称为'x 的1+n 次近似值,这种求解方法就是牛顿迭代法。 三、Matlab 程序代码: function newton_iteration(x0,tol) syms z %定义自变量 format long %定义精度 f=z*z*z-z-1; f1=diff(f);%求导 y=subs(f,z,x0); y1=subs(f1,z,x0);%向函数中代值 x1=x0-y/y1; k=1; while abs(x1-x0)>=tol x0=x1; y=subs(f,z,x0); y1=subs(f1,z,x0); x1=x0-y/y1;k=k+1; end x=double(x1) K 四、运行结果:

太原理工大学数值计算方法实验报告

本科实验报告 课程名称:计算机数值方法 实验项目:方程求根、线性方程组的直接解 法、线性方程组的迭代解法、代数插值和最 小二乘拟合多项式 实验地点:行勉楼 专业班级: ******** 学号: ********* 学生姓名: ******** 指导教师:李誌,崔冬华 2016年 4 月 8 日

y = x*x*x + 4 * x*x - 10; return y; } float Calculate(float a,float b) { c = (a + b) / 2; n++; if (GetY(c) == 0 || ((b - a) / 2) < 0.000005) { cout << c <<"为方程的解"<< endl; return 0; } if (GetY(a)*GetY(c) < 0) { return Calculate(a,c); } if (GetY(c)*GetY(b)< 0) { return Calculate(c,b); } } }; int main() { cout << "方程组为:f(x)=x^3+4x^2-10=0" << endl; float a, b; Text text; text.Getab(); a = text.a; b = text.b; text.Calculate(a, b); return 0; } 2.割线法: // 方程求根(割线法).cpp : 定义控制台应用程序的入口点。// #include "stdafx.h" #include"iostream"

心得体会 使用不同的方法,可以不同程度的求得方程的解,通过二分法计算的程序实现更加了解二分法的特点,二分法过程简单,程序容易实现,但该方法收敛比较慢一般用于求根的初始近似值,不同的方法速度不同。面对一个复杂的问题,要学会简化处理步骤,分步骤一点一点的循序处理,只有这样,才能高效的解决一个复杂问题。

计算机操作系统内存分配实验报告记录

计算机操作系统内存分配实验报告记录

————————————————————————————————作者:————————————————————————————————日期:

一、实验目的 熟悉主存的分配与回收。理解在不同的存储管理方式下,如何实现主存空间的分配与回收。掌握动态分区分配方式中的数据结构和分配算法及动态分区存储管理方式及其实现过程。 二、实验内容和要求 主存的分配和回收的实现是与主存储器的管理方式有关的。所谓分配,就是解决多道作业或多进程如何共享主存空间的问题。所谓回收,就是当作业运行完成时将作业或进程所占的主存空间归还给系统。 可变分区管理是指在处理作业过程中建立分区,使分区大小正好适合作业的需求,并且分区个数是可以调整的。当要装入一个作业时,根据作业需要的主存量查看是否有足够的空闲空间,若有,则按需要量分割一个分区分配给该作业;若无,则作业不能装入,作业等待。随着作业的装入、完成,主存空间被分成许多大大小小的分区,有的分区被作业占用,而有的分区是空闲的。 实验要求使用可变分区存储管理方式,分区分配中所用的数据结构采用空闲分区表和空闲分区链来进行,分区分配中所用的算法采用首次适应算法、最佳适应算法、最差适应算法三种算法来实现主存的分配与回收。同时,要求设计一个实用友好的用户界面,并显示分配与回收的过程。同时要求设计一个实用友好的用户界面,并显示分配与回收的过程。 三、实验主要仪器设备和材料 实验环境 硬件环境:PC或兼容机 软件环境:VC++ 6.0 四、实验原理及设计分析 某系统采用可变分区存储管理,在系统运行当然开始,假设初始状态下,可用的内存空间为640KB,存储器区被分为操作系统分区(40KB)和可给用户的空间区(600KB)。 (作业1 申请130KB、作业2 申请60KB、作业3 申请100KB 、作业2 释放 60KB 、作业4 申请 200KB、作业3释放100KB、作业1 释放130KB 、作业5申请140KB 、作业6申请60KB 、作业7申请50KB) 当作业1进入内存后,分给作业1(130KB),随着作业1、2、3的进入,分别分配60KB、100KB,经过一段时间的运行后,作业2运行完毕,释放所占内存。此时,作业4进入系统,要求分配200KB内存。作业3、1运行完毕,释放所占内存。此时又有作业5申请140KB,作业6申请60KB,作业7申请50KB。为它们进行主存分配和回收。 1、采用可变分区存储管理,使用空闲分区链实现主存分配和回收。 空闲分区链:使用链指针把所有的空闲分区链成一条链,为了实现对空闲分区的分配和链接,在每个分区的起始部分设置状态位、分区的大小和链接各个分区的前向指针,由状态位指示该分区是否分配出去了;同时,在分区尾部还设置有一后向指针,用来链接后面的分区;分区中间部分是用来存放作业的空闲内存空间,当该分区分配出去后,状态位就由“0”置为“1”。 设置一个内存空闲分区链,内存空间分区通过空闲分区链来管理,在进行内存分配时,系统优先使用空闲低端的空间。 设计一个空闲分区说明链,设计一个某时刻主存空间占用情况表,作为主存当前使用基础。初始化空间区和已分配区说明链的值,设计作业申请队列以及作业完成后释放顺序,实现主存的分配和回收。要求每次分配和回收后显示出空闲内存分区链的情况。把空闲区说明

数值计算实验报告

(此文档为word格式,下载后您可任意编辑修改!) 2012级6班###(学号)计算机数值方法 实验报告成绩册 姓名:宋元台 学号: 成绩:

数值计算方法与算法实验报告 学期: 2014 至 2015 第 1 学期 2014年 12月1日课程名称: 数值计算方法与算法专业:信息与计算科学班级 12级5班 实验编号: 1实验项目Neton插值多项式指导教师:孙峪怀 姓名:宋元台学号:实验成绩: 一、实验目的及要求 实验目的: 掌握Newton插值多项式的算法,理解Newton插值多项式构造过程中基函数的继承特点,掌握差商表的计算特点。 实验要求: 1. 给出Newton插值算法 2. 用C语言实现算法 二、实验内容 三、实验步骤(该部分不够填写.请填写附页)

1.算法分析: 下面用伪码描述Newton插值多项式的算法: Step1 输入插值节点数n,插值点序列{x(i),f(i)},i=1,2,……,n,要计算的插值点x. Step2 形成差商表 for i=0 to n for j=n to i f(j)=((f(j)-f(j-1)(x(j)-x(j-1-i)); Step3 置初始值temp=1,newton=f(0) Step4 for i=1 to n temp=(x-x(i-1))*temp*由temp(k)=(x-x(k-1))*temp(k-1)形成 (x-x(0).....(x-x(i-1)* Newton=newton+temp*f(i); Step5 输出f(x)的近似数值newton(x)=newton. 2.用C语言实现算法的程序代码 #includeMAX_N) { printf("the input n is larger than MAX_N,please redefine the MAX_N.\n"); return 1; } if(n<=0) { printf("please input a number between 1 and %d.\n",MAX_N); return 1; } printf("now input the (x_i,y_i)i=0,...%d\n",n); for(i=0;i<=n;i++) { printf("please input x(%d) y(%d)\n",i,i);

c 计算器实验报告

简单计算器 姓名: 周吉祥 实验目的:模仿日常生活中所用的计算器,自行设计一个简单的计算器程序,实现简单的计算功能。 实验内容: (1)体系设计: 程序是一个简单的计算器,能正确输入数据,能实现加、减、乘、除等算术运算,运算结果能正确显示,可以清楚数据等。 (2)设计思路: 1)先在Visual C++ 6.0中建立一个MFC工程文件,名为 calculator. 2)在对话框中添加适当的编辑框、按钮、静态文件、复选框和单 选框 3)设计按钮,并修改其相应的ID与Caption. 4)选择和设置各控件的单击鼠标事件。 5)为编辑框添加double类型的关联变量m_edit1. 6)在calculatorDlg.h中添加math.h头文件,然后添加public成 员。 7)打开calculatorDlg.cpp文件,在构造函数中,进行成员初始 化和完善各控件的响应函数代码。 (3)程序清单:

●添加的public成员: double tempvalue; //存储中间变量 double result; //存储显示结果的值 int sort; //判断后面是何种运算:1.加法2.减法3. 乘法 4.除法 int append; //判断后面是否添加数字 ●成员初始化: CCalculatorDlg::CCalculatorDlg(CWnd* pParent /*=NULL*/) : CDialog(CCalculatorDlg::IDD, pParent) { //{{AFX_DATA_INIT(CCalculatorDlg) m_edit1 = 0.0; //}}AFX_DATA_INIT // Note that LoadIcon does not require a subsequent DestroyIcon in Win32 m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); tempvalue=0; result=0; sort=0; append=0; }

操作系统实验内存分配

精心整理西安邮电大学 (计算机学院) 课内实验报告 1. (1 (2 (3 原因,写出实验报告。 2.实验要求: 1)掌握内存分配FF,BF,WF策略及实现的思路; 2)掌握内存回收过程及实现思路; 3)参考本程序思路,实现内存的申请、释放的管理程序,调试运行,总结程序设计中出现的问题并找出原因,写出实验报告。

3.实验过程: 创建进程: 删除其中几个进程:(默认以ff首次适应算法方式排列) Bf最佳适应算法排列方式: wf最差匹配算法排列方式: 4.实验心得: 明 实验中没有用到循环首次适应算法,但是对其他三种的描述还是很详细,总的来说,从实验中还是学到了很多。 5.程序源代码: #include #include #include #include

#define PROCESS_NAME_LEN 32 //进程名长度 #define MIN_SLICE 10 //最小碎片的大小#define DEFAULT_MEM_SIZE 1024 //内存大小 #define DEFAULT_MEM_START 0 //起始位置 /*内存分配算法*/ #define MA_FF 1 #define MA_BF 2 #define MA_WF 3 /*描述每一个空闲块的数据结构*/ struct free_block_type { }; /* /* { }; /* /* void display_menu(); int set_mem_size(); void set_algorithm(); void rearrange(int algorithm); int rearrange_WF(); int rearrange_BF(); int rearrange_FF(); int new_process(); int allocate_mem(struct allocated_block *ab);

计算方法实验报告

计算方法实验报告(四) 方程和方程组的迭代解法 一、实验问题 利用简单迭代法,两种加速技术,牛顿法,改进牛顿法,弦割法求解习题5-1,5-2,5-3中的一题,并尽可能准确。 选取5-3:求在x=1.5附近的根。 二、问题的分析(描述算法的步骤等) (1)简单迭代法算法: 给定初始近似值,求的解。 Step 1 令i=0; Step 2 令(计算); Step 3 如果,则迭代终止,否则重复Step 2。 (2)Aitken加速法算法 Step 1 令k=0,利用简单迭代算法得到迭代序列; Step 2 令-(计算得到一个新的序列,其中k=0,1,2…);Step 3 如果,则迭代终止,否则重复Step 2。 (3)插值加速法算法 Step 1 令k=0,利用简单迭代算法得到迭代序列; Step 2 令+(计算得到一个新的序列,其中k=1,2,3…); Step 3 如果,则迭代终止,否则重复Step 2。 (4)牛顿法算法

Step 1给定初始近似值; Step 2令,其中k计算得到的序列; Step 3如果,则迭代终止,否则重复Step 2。 (5)改进牛顿法的算法 Step 1给定初始近似值; Step 2令,其中k迭代计算得到的序列; Step 3如果,则迭代终止,否则重复Step 2。 (6)弦割法算法(双点弦割法) Step 1给定初始近似值,; Step 2令其中k计算得到的序列; Step 3如果,则迭代终止,否则重复Step 2。 三、程序设计 (1)简单迭代法 利用迭代公式进行迭代运算。 #include #include #include double fun(double x) { double c=1+x*x; return pow(c,1/3.0); } void main() { double x=1.5; double y=0; double D=1;

操作系统实验之内存管理实验报告

学生学号 实验课成绩 武汉理工大学 学生实验报告书 实验课程名称 计算机操作系统 开 课 学 院 计算机科学与技术学院 指导老师姓名 学 生 姓 名 学生专业班级 2016 — 2017 学年第一学期

实验三 内存管理 一、设计目的、功能与要求 1、实验目的 掌握内存管理的相关内容,对内存的分配和回收有深入的理解。 2、实现功能 模拟实现内存管理机制 3、具体要求 任选一种计算机高级语言编程实现 选择一种内存管理方案:动态分区式、请求页式、段式、段页式等 能够输入给定的内存大小,进程的个数,每个进程所需内存空间的大小等 能够选择分配、回收操作 内购显示进程在内存的储存地址、大小等 显示每次完成内存分配或回收后内存空间的使用情况 二、问题描述 所谓分区,是把内存分为一些大小相等或不等的分区,除操作系统占用一个分区外,其余分区用来存放进程的程序和数据。本次实验中才用动态分区法,也就是在作业的处理过程中划分内存的区域,根据需要确定大小。 动态分区的分配算法:首先从可用表/自由链中找到一个足以容纳该作业的可用空白区,如果这个空白区比需求大,则将它分为两个部分,一部分成为已分配区,剩下部分仍为空白区。最后修改可用表或自由链,并回送一个所分配区的序号或该分区的起始地址。 最先适应法:按分区的起始地址的递增次序,从头查找,找到符合要求的第一个分区。

最佳适应法:按照分区大小的递增次序,查找,找到符合要求的第一个分区。 最坏适应法:按分区大小的递减次序,从头查找,找到符合要求的第一个分区。 三、数据结构及功能设计 1、数据结构 定义空闲分区结构体,用来保存内存中空闲分区的情况。其中size属性表示空闲分区的大小,start_addr表示空闲分区首地址,next指针指向下一个空闲分区。 //空闲分区 typedef struct Free_Block { int size; int start_addr; struct Free_Block *next; } Free_Block; Free_Block *free_block; 定义已分配的内存空间的结构体,用来保存已经被进程占用了内存空间的情况。其中pid作为该被分配分区的编号,用于在释放该内存空间时便于查找。size表示分区的大小,start_addr表示分区的起始地址,process_name存放进程名称,next指针指向下一个分区。 //已分配分区的结构体 typedef struct Allocate_Block { int pid; int size; int start_addr; char process_name[PROCESS_NAME_LEN]; struct Allocate_Block *next; } Allocate_Block; 2、模块说明 2.1 初始化模块 对内存空间进行初始化,初始情况内存空间为空,但是要设置内存的最大容量,该内存空间的首地址,以便之后新建进程的过程中使用。当空闲分区初始化

计算方法实验报告格式

计算方法实验报告格式 小组名称: 组长姓名(班号): 小组成员姓名(班号): 按贡献排序情况: 指导教师评语: 小组所得分数: 一个完整的实验,应包括数据准备、理论基础、实验内容及方法,最终对实验结果进行分析,以达到对理论知识的感性认识,进一步加深对相关算法的理解,数值实验以实验报告形式完成,实验报告格式如下: 一、实验名称 实验者可根据报告形式需要适当写出. 二、实验目的及要求 首先要求做实验者明确,为什么要做某个实验,实验目的是什么,做完该实验应达到什么结果,在实验过程中的注意事项,实验方法对结果的影响也可以以实验目的的形式列出. 三、算法描述(实验原理与基础理论) 数值实验本身就是为了加深对基础理论及方法的理解而设置的,所以要求将实验涉及到的理论基础,算法原理详尽列出. 四、实验内容 实验内容主要包括实验的实施方案、步骤、实验数据准备、实验的算法以及可能用到的仪器设备. 五、程序流程图 画出程序实现过程的流程图,以便更好的对程序执行的过程有清楚的认识,在程序调试过程中更容易发现问题. 六、实验结果 实验结果应包括实验的原始数据、中间结果及实验的最终结果,复杂的结果可以用表格

形式列出,较为简单的结果可以与实验结果分析合并出现. 七、实验结果分析 实验结果分析包括对对算法的理解与分析、改进与建议. 数值实验报告范例 为了更好地做好数值实验并写出规范的数值实验报告,下面给出一简单范例供读者参考. 数值实验报告 小组名称: 小组成员(班号): 按贡献排序情况: 指导教师评语: 小组所得分数: 一、实验名称 误差传播与算法稳定性. 二、实验目的 1.理解数值计算稳定性的概念. 2.了解数值计算方法的必要性. 3.体会数值计算的收敛性与收敛速度. 三、实验内容 计算dx x x I n n ? += 1 10 ,1,2,,10n = . 四、算法描述 由 dx x x I n n ? += 1 10 ,知 dx x x I n n ?+=--101110,则

可变分区存储管理方式的内存分配和回收实验报告

一.实验目的 通过编写和调试存储管理的模拟程序以加深对存储管理方 案的理解,熟悉可变分区存储管理的内存分配和回收。 二.实验内容 1.确定内存空间分配表; 2.采用最优适应算法完成内存空间的分配和回收; 3.编写主函数对所做工作进行测试。 三.实验背景材料 实现可变分区的分配和回收,主要考虑的问题有三个:第一,设计记录内存使用情况的数据表格,用来记录空闲区和作业占用的区域;第二,在设计的数据表格基础上设计内存分配算法;第三,在设计的数据表格基础上设计内存回收算法。 首先,考虑第一个问题,设计记录内存使用情况的数据表格,用来记录空间区和作业占用的区域。 由于可变分区的大小是由作业需求量决定的,故分区的长度是预先不固定的,且分区的个数也随内存分配和回收变动。总之,所有分区情况随时可能发生变化,数据表格的设计必须和这个特点相适应。由于分区长度不同,因此设计的表格应该包括分区在内存中的起始地址和长度。由于分配时空闲区有时会变成两个分区:空闲区和已分分区,回收内存分区时,可能会合并空闲分区,这样如果整个内存采用一张表格记录己分分区和空闲区,就会使表格操作繁琐。分配内存时查找空闲区进行分配,然后填写己分

配区表,主要操作在空闲区;某个作业执行完后,将该分区变成空闲区,并将其与相邻的空闲区合并,主要操作也在空闲区。由此可见,内存的分配和回收主要是对空闲区的操作。这样为了便于对内存空间的分配和回收,就建立两张分区表记录内存使用情况,一张表格记录作业占用分区的“己分分区表”;一张是记录空闲区的“空闲区表”。这两张表的实现方法一般有两种:一种是链表形式,一种是顺序表形式。在实验中,采用顺序表形式,用数组模拟。由于顺序表的长度必须提前固定,所以无论是“已分分区表”还是“空闲区表”都必须事先确定长度。它们的长度必须是系统可能的最大项数。 “已分分区表”的结构定义 #definen10//假定系统允许的最大作业数量为n struct {floataddress;//已分分区起始地址 floatlength;//已分分区长度、单位为字节 intflag;//已分分区表登记栏标志,“0”表示空栏目,实验中只支持一个字符的作业名 }used_table[n];//已分分区表 “空闲区表”的结构定义 #definem10//假定系统允许的空闲区最大为m struct {floataddress;//空闲区起始地址

数学计算方法实验报告

数学计算方法实验报告 习题二 2.估计用二分法求方程f(x)=x3+4x2-10=0在区间[1,2]内根的近似值,为使方程不超过10时所需的二分次数。f(x k) 程序过程: function two (tolerance) a=1;b=2;counter=0; while (abs(b-a)>tolerance) c=(a+b)/2; fa=a^3+4*a^2-10;

fb=b^3+4*b^2-10; fc=c^3+4*c^2-10; if ((fa==0|fb==0)) disp(counter); elseif (fa*fc<0) b=c;counter=counter+1; elseif (fb*fc<0) a=c;counter=counter+1; elseif (fb==0) disp(counter); end end solution=(a+b)/2; disp(solution); disp(counter); 实验结果: 6.取x0=1.5,用牛顿迭代法求第三中的方程根.f(x)=x3+4x2-10=0的近似值(精确到||x k+1-x k|≦10-5,并将迭代次数与3题比较。 程序过程: function six (g) a=1.5; fa=a^3+4*a^2-10;

ga=3*a^2+8*a; b=a-fa/ga; k=1; while(abs(b-a)>g) a=b; fa=a^3+4*a^2-10; ga=3*a^2+8*a; b=a-fa/ga; k=k+1; end format long; disp(a); disp(k); 实验结果:程序结果计算结果 8.用弦割法求方程f(x)=x3-3x2-x+9=0在区间[-2,-1]内的一个实根近似值x k,|f(x k)|≦10-5. 程序过程: function eight (t) a=-2; b=-1; fa=a^3-3*a^2-a+9; fb=b^3-3*b^2-b+9; c=b-fb*(b-a)/(fb-fa); k=1; while(abs(c-b)>t) a=b; b=c; fa=a^3-3*a^2-a+9; fb=b^3-3*b^2-b+9; c=b-fb*(b-a)/(fb-fa); k=k+1; end

计算方法实验报告 拟合

南京信息工程大学实验(实习)报告 一、实验目的: 用最小二乘法将给定的十个点拟合成三次多项式。 二、实验步骤: 用matlab编制以函数为基的多项式最小二乘拟合程序,并用于对下列数据作三次多项式最小二乘拟合(取权函数wi=1) x -2.5 -2 -1.5 -1 -0.5 0 0.5 1 1.5 2 y -2.30 -1 -0.14 -0.25 0.61 1.03 1.75 2.75 4.42 6.94 给定直线方程为:y=1/4*x3+1/2*x2+x+1 三、实验结论: 最小二乘法:通过最小化误差的平方和寻找数据的最佳函数匹配。利用最小二乘法可以简便地求得未知的数据,并使得这些求得的数据与实际数据之间误差的平方和为最小。最小二乘法还可用于曲线拟合。 一般地。当测量数据的散布图无明显的规律时,习惯上取n次代数多项式。 程序运行结果为: a = 0.9731 1.1023 0.4862 0.2238 即拟合的三次方程为:y=0.9731+1.1023x+0.4862*x2+0.2238*x3

-2.5 -2-1.5-1-0.5 00.51 1.52 2.5 -4-20246 81012 x 轴 y 轴 拟合图 离散点 y=a(1)+a(2)*x+a(3)*x.2+a(4)*x.3 结论: 一般情况下,拟合函数使得所有的残差为零是不可能的。由图形可以看出最小二乘解决了残差的正负相互抵消的问题,使得拟合函数更加密合实验数据。 优点:曲线拟合是使拟合函数和一系列的离散点与观测值的偏差平方和达到最小。 缺点:由于计算方法简单,若要保证数据的精确度,需要大量的数据代入计算。

计算机操作系统内存分配实验报告

一、实验目的 熟悉主存的分配与回收。理解在不同的存储管理方式下.如何实现主存空间的分配与回收。掌握动态分区分配方式中的数据结构和分配算法及动态分区存储管理方式及其实现过程。 二、实验内容和要求 主存的分配和回收的实现是与主存储器的管理方式有关的。所谓分配.就是解决多道作业或多进程如何共享主存空间的问题。所谓回收.就是当作业运行完成时将作业或进程所占的主存空间归还给系统。 可变分区管理是指在处理作业过程中建立分区.使分区大小正好适合作业的需求.并且分区个数是可以调整的。当要装入一个作业时.根据作业需要的主存量查看是否有足够的空闲空间.若有.则按需要量分割一个分区分配给该作业;若无.则作业不能装入.作业等待。随着作业的装入、完成.主存空间被分成许多大大小小的分区.有的分区被作业占用.而有的分区是空闲的。 实验要求使用可变分区存储管理方式.分区分配中所用的数据结构采用空闲分区表和空闲分区链来进行.分区分配中所用的算法采用首次适应算法、最佳适应算法、最差适应算法三种算法来实现主存的分配与回收。同时.要求设计一个实用友好的用户界面.并显示分配与回收的过程。同时要求设计一个实用友好的用户界面,并显示分配与回收的过程。 三、实验主要仪器设备和材料 实验环境 硬件环境:PC或兼容机 软件环境:VC++ 6.0 四、实验原理及设计分析 某系统采用可变分区存储管理.在系统运行当然开始.假设初始状态下.可用的内存空间为640KB.存储器区被分为操作系统分区(40KB)和可给用户的空间区(600KB)。 (作业1 申请130KB、作业2 申请60KB、作业3 申请100KB 、作业2 释放 60KB 、作业4 申请 200KB、作业3释放100KB、作业1 释放130KB 、作业5申请140KB 、作业6申请60KB 、作业7申请50KB) 当作业1进入内存后.分给作业1(130KB).随着作业1、2、3的进入.分别分配60KB、100KB.经过一段时间的运行后.作业2运行完毕.释放所占内存。此时.作业4进入系统.要求分配200KB内存。作业3、1运行完毕.释放所占内存。此时又有作业5申请140KB.作业6申请60KB.作业7申请50KB。为它们进行主存分配和回收。 1、采用可变分区存储管理.使用空闲分区链实现主存分配和回收。 空闲分区链:使用链指针把所有的空闲分区链成一条链.为了实现对空闲分区的分配和链接.在每个分区的起始部分设置状态位、分区的大小和链接各个分区的前向指针.由状态位指示该分区是否分配出去了;同时.在分区尾部还设置有一后向指针.用来链接后面的分区;分区中间部分是用来存放作业的空闲内存空间.当该分区分配出去后.状态位就由“0”置为“1”。 设置一个内存空闲分区链.内存空间分区通过空闲分区链来管理.在进行内存分配时.系统优先使用空闲低端的空间。 设计一个空闲分区说明链.设计一个某时刻主存空间占用情况表.作为主存当前使用基础。初始化空间区和已分配区说明链的值.设计作业申请队列以及作业完成后释放顺序.实现主存的分配和回收。要求每次分配和回收后显示出空闲内存分区链的情况。把空闲区说明链的变化情况以及各作业的申请、释放情况显示打印出来。

计算方法实验报告

实验报告 一、求方程f(x)=x^3-sinx-12x+1的全部根, ε=1e -6 1、 用一般迭代法; 2、 用牛顿迭代法; 并比较两种迭代的收敛速度。 一、首先,由题可求得:12cos 3)(2 ' --=x x x f . 其次,分析得到其根所在的区间。 ① 令()0=x f ,可得到x x x sin 1123 =+-. ② 用一阶导数分析得到1123 +-x x 和x sin 两个函数的增减区间;再用二阶导数分析得到 两个函数的拐点以及凹凸区间. ③ 在直角坐标轴上描摹出01123 =+-x x 和0sin =x 的图,在图上可以看到他们的交点,然后估计交点所在的区间,即是所要求的根的区间。经过估计,得到根所在的区间为 []3,4--,[]1,0和[]4,3. 1、 一般迭代法 (1)算法步骤: 设ε为给定的允许精度,迭代法的计算步骤为: ① 选定初值0x .由()0=x f 确定函数()x g ,得等价形式()x g x =. ② 计算()0x g .由迭代公式得()01x g x =. ③ 如果ε≤-01x x ,则迭代结束,取1x 为解的近似值;否则,用1x 代替0x ,重复步骤②和步骤③. (2)程序代码: ① 在区间[]3,4--内, 代码: clc

x0=-3.5; %初值0x iter_max=100; %迭代的最大次数 ep=1e-6; %允许精度 ε k=0; while k<=iter_max %k 从0开始到iter_max 循环 x1=(sin(x0)+12*x0-1).^(1/3); %代入0x ,算出1x 的值 if abs(x1-x0)

内存管理实验报告

内存管理实验报告

信息科学与技术学院实验报告 课程名称: 实验项目: 实验地点:指导教师: 日期: 实验类型:(验证性实验综合性实验设计性实验) 专业: 计算机外包班级: 14外三姓名: 周鹏飞学号: 1414104033 一、实验目的及要求 通过此次实验,加深对内存管理的认识,进一步掌握内存的分配,回收算法的思想。 二、实验仪器、设备或软件 Windows操作系统PC一台;VC++6.0 三、实验内容及原理 原理:设计程序模拟内存的动态分区内存管理方法。内存空闲区使用空闲分区表进行管理,采用最先适应算法从空闲分区表中寻找空闲区进行分配,内存回收时不考虑与相邻空闲分区的合并。 假定系统的内存共640k,初始状态为操作系统本身占用40k.t1时刻,为作业A,B,C分配80k,60k,100k的内存空间;t2时刻作业B完成;t3时刻为作业D分配50k的内存空间;t4时刻作业C,A完成;t5时刻作业D完成。要求编程序分别输出t1,t2,t3,t4,t5时刻内存的空闲区的状态。 实验内容: #include #include #define maxPCB 6 //最大进程数 #define maxPart 6 //最大空闲分区数

#define size 10 //不再切割剩余分区的大小 typedef struct PCB_type { char name;//进程名 int address;//进程所占分区首地址 int len;//进程所占分区的长度 int valid;//PCB标识符(有效,无效) }PCB; Typedef struct seqlist //进程信息队列 { PCB PCBelem[maxPCB];// maxPCB为为系统中允许的最多进程数 int total; //系统中实际的进程数 }PCBseql;//分区类型的描述 typedef struct Partition { int address;//分区起址 int len;//分区的长度 int valid;//有标识符(有效,无效) }Part;//内存空闲分区表(顺序表)描述 typedef struct Partlist //空白分区链 { Part Partelem[maxPart];//maxPart为系统中可能的最多空闲分区数 int sum;//系统中世纪的分区数 }Partseql;//全局变量 PCBseql *pcbl;//进程队列指针 Partseql *part1;//空闲队列指针 #intclude “MainManager.h” void initpcb() //初始化进程表vpcb1 { int i; pcb1->PCBelem[0].address=0; pcb1->PCBelem[0].len=0; pcb1->PCBelem[0].name=’s’; pcb1->PCBelem[0].valid=1; pcb1->total=0; for(i=1;i

数据分析方法与技术- 实验报告模板

《数据分析方法与技术》上机实验——实验1描述性统计方法 学号: 姓名: 日期:

实验项目(一):描述性统计方法 一、实验内容 1.实验目的 掌握常用的描述性图表展示方法的原理及操作,包括:频数分布表、分组频数表、列联表、茎叶图、箱线图、误差图、散点图等; 掌握常用的描述性统计方法的原理及操作,包括:算术平均值、中位数、众数、四分位数、极差、平均差、方差、标准差、标准分数、离散系数等。 2. 实验内容和要求 实验内容:基于标准数据集,属性描述性图表展示方法(数分布表、分组频数表、列联表、茎叶图、箱线图、误差图、散点图等),对统计指标(算术平均值、中位数、众数、极差、平均差、方差、标准差、标准分数、离散系数、偏态峰态)进行计算。 实验要求:掌握各种描述性统计指标的计算思路及其在SPSS或EXCEL环境下的操作方法,掌握输出结果的解释。 二、实验过程 1、数据集介绍 1.数据库标题:鲍鱼数据 2.该数据库共计4177行数据 3.该数据有八个属性(包含性别共有九项) 4.以下是关于属性的描述,包括属性的名称,数据类型,测量单元和一个简短的描述: Name Data TypeMeas.Description ---- --------- ----- ----------- Sex nominal M, F, and I (infant)鲍鱼宝宝 Length continuousmm Longest shell measurement最长壳 Diameter continuousmm perpendicular to length垂直长度 Height continuousmm with meat in shell有肉的壳高度 Whole weightcontinuousgramswhole abalone整个鲍鱼 Shucked weightcontinuousgramsweight of meat肉的重量 Viscera weightcontinuousgramsgut weight (after bleeding)放血后内脏重 Shell weightcontinuousgramsafter being dried弄干后重量 Rings integer +1.5 gives the age in years +1.5=年龄 5.数据的值域

内存最佳分配实验报告

一.实验名称 模拟实现动态分区存储管理 二.实验要求 编写程序实现动态分区存储管理方式的主存分配与回收。具体内容包括:先确定主存空间分配表;然后采用最优适应算法完成主存空间的分配与回收;最后编写主函数对所做工作进行测试。 三.解决方案 实现动态分区的分配与回收,主要考虑两个问题:第一,设计记录主存使用情况的数据结构,用来记录空闲区和作业占用的区域;第二,在该数据结构基础上设计主存分配算法和主存回收算法。 由于动态分区的大小是由作业需求量决定的,故分区的长度预先不能固定,且分区的个数也随主存分配和回收变动。总之,所有分区的情况随时可能发生变化,数据表格的设计必须和这个特点相适应。由于分区长度不同,因此设计的表格应该包括分区在主存中的起始地址和长度。由于分配时,空闲区有时会变成两个分区(空闲区和已分配区),回收主存分区时,可能会合并空闲区,这样如果整个主存采用一张表格记录已分配区和空闲区,就会使表格操作繁琐。主存分配时查找空闲区进行分配,然后填写已分配区表,主要操作在空闲区。由此可见,主存的分配与回收主要是对空闲区的操作。这样为了便于对主存空间的分配与回收,可建立两张分区表记录主存使用情况:“已分配区表”记录作业占用分区,“空闲区表”记录空闲区。 然后在数据结构上进行主存的分配,其主存分配算法采用最优适应算法,即按祖业要求挑选一个能满足作业要求的最小空闲区分配。具体实现时,把空闲区按长度以某种方式(递增方式)登记在“空闲区表”中,分配时顺序查找“空闲区表”,查到的第一个空闲区就是满足作业要求的最小分区。在实现回收时,先在“已分配区表”中找到将作业归还的区域,且变为空,检查“空闲区”表中未分配区域,查找是否有相邻空闲区,最后合并空闲区,修改“空闲区表”。设计程序时可选择进行主存分配或主存回收,所需参数为:若是主存分配。输入作业名和所需主存空间大小;若是回收,输入回收作业的作业名,以循环进行主存分配和回收。 四.实验代码 #include #include #define n 10 /*定义系统允许的最大作业数*/ #define m 10 /*定义系统允许的空闲区表最大值*/ #define minisize 100 struct /*已分配区表的定义*/ { float address; float length; int flag; }used_table[n]; struct {float address; float length; int flag; }free_table[m];

相关文档
最新文档