2015-12-16 55 views
1

我想写一个程序跟踪由7台机器在一家工厂生产的产品,这些产品都生产相同的10种产品。帕斯卡阵列无法弄清楚如何从阵列打印信息

程序要求用户输入机器ID(A,B,C ... G) 然后产品ID(0,1,2 ... 9) 最后程序要求0或者1将产品标记为质量好或质量差。

我把所有这些信息放到三个数组中。接下来我要做的是我坚持的部分。我必须从所有这些信息中创建两个表格。

第一张桌子是质量好的产品表。它必须是一个二维表,其中MachineID沿着顶部运行,而ProductID沿着侧面运行。

每台机器和每一个产品都需要一个运行总数。因此,在单元格中[A0]需要是machineA制造product0的次数的总和,它被标记为GOOD。然后[A1]等等一直到[G9]

第二个表格完全一样,只有这次只有坏产品才算。

底部需要有每台机器生产的所有产品。在右手边必须有所有机器制造的所有单个产品。

这是我的代码到目前为止。

program Production; 

var machine: array of char; 
    var product: array of integer; 
    var quality: array of integer; 
    var min, number, extra: integer; 
    var machineID: array[1..7] of char; 
    var productID: array[1..10] of char; 
    var x, y, count: integer; 

begin 

    x:= 0; 
    y:= 0; 
    number := 0; 
    min := 5; 
    extra := 5; 
    SETLENGTH(machine, min); 
    SETLENGTH(product, min); 
    SETLENGTH(quality, min); 
    writeln('Input Machine ID (A, B, C, D, E, F or G) '); 
    readln(machine[number]); 
    while (machine[number] <> '*') do 
    begin 
    while (ORD(machine[number]) < 65) or (ORD(machine[number]) > 71) do 
    begin 
     writeln('Input Invalid. Please try again.'); 
     readln(machine[number]); 
    end; 
    writeln('Input Product Number (0, 1, 2, 3, 4, 5, 6, 7, 8 or 9) '); 
    readln(product[number]); 
    while (product[number] < 0) or (product[number] > 9) do 
    begin 
     writeln('Input Invalid. Please try again.'); 
     readln(product[number]); 
    end; 
    writeln('Quality Control Check. Input 0 for GOOD or 1 for BAD.'); 
    readln(quality[number]); 
    while (quality[number] <> 0) and (quality[number] <> 1) do 
    begin 
     writeln('Input Invalid. Please try again.'); 
     readln(quality[number]); 
    end; 
    number := number + 1; 
    writeln('Input Machine ID (A, B, C, D, E, F or G) '); 
    readln(machine[number]); 
    end; 
    for count := 0 to number - 1 do 
     begin 
     writeln('Machine ID = ',machine[count]); 
     writeln('Product ID = ',product[count]); 
     writeln('Quality = ',quality[count]); 
     end; 
    writeln(''); 
    writeln(''); 
    writeln('EXIT'); 
    readln; 
end. 

任何人都可以告诉我,我会怎么做呢?我完全不知所措。

回答

1

我会以不同的方式处理问题。在记录了用户输入的一个数据(机器,产品和质量)的所有输入之后,我会将它存储在一个表格中 - 或者在这种情况下以三维数组的形式存储。如果我没有记错,您可以创建这样的事情如下:

var myTable: array[1..7, 1..10, 1..2] of integer; 

表的尺寸会来如下:

  • 1..7将机器ID
  • 1。 .10将是产品ID
  • 1..2将是好的/坏的。

一旦我得到了一切从用户输入,我想简单地递增该表中相应的字段。例如。假设该用户的输入:{机B,产品2,好}然后我们就

myTable[1, 2, 0] := myTable[1, 2, 0] + 1; 

因此,当我们希望打印出我们的表我们可以只:

for i := 0 to 7 do 
    begin 
    for j := 0 to 10 do 
     begin 
      write(myTable[i,j,0] + ' '); { i,j,0 for the good; i,j,1 for the bad values } 
     end; 
    writeln(''); 
    end; 
+0

这是一个好办法做到这一点。不过,我必须使用字母作为机器ID。这是作业的一部分。有没有办法可以解决这个问题并使用您编写的代码版本?它比我试过的任何东西都简单:D –

+1

'ORD(machine [number]) - 65'将把A,B,C ...变成0,1,2,...,不是吗? ? :) – blas3nik

+0

哈哈我想会的。 谢谢你帮助我。我在这方面真的很新颖,我试图把它全部纳入其中,但这些都非常复杂(无论如何)。 我该如何实现 myTable [1,2,0]:= myTable [1,2,0] + 1 那段代码? –