|
|
DataMuseum.dkPresents historical artifacts from the history of: RegneCentralen GIER Computer |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about RegneCentralen GIER Computer Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 8627 (0x21b3)
Description: Bits:30000665 linlign
Types: 8-hole paper tape
Notes: Gier Text, Has10
algol<
begin
_____
integer nr,dataomraade1,dataomraade2,orden,ordenet,ordenmet,ordenmto,
_______
getkanaler,putkanaler,i,j,k;
real max,min,løsning;
____
real array række1,række2[1:40];
____ _____
boolean ud,normering;
_______
procedure alarm(sted);
_________
value sted;
_____
integer sted;
_______
begin writetext(|< alarm|); write(|ddd|,sted);
_____ < > < >
goto slut;
____
end alarm;
___
select(9);
nr:=0;
start: nr:=nr+1; writechar(72);
if where(case nr of (|<matrixa|,|<matrixb|,|<matrixc|,
__ ____ __ < > < > < >
|<matrixd|,|<matrixe|),dataomraade1)<0 then alarm(1);
< > < > ____
if get(række1,dataomraade1,1)<0then alarm(2);
__ ____
orden:=række1[1]; ordenet:=orden+1; ordenmet:=orden-1;
ordenmto:=orden-2; max:=0; min:=10 5;
if orden_0 then
__ < ____
begin writetext(|< orden forkert|);
_____ < >
goto slut
____
end;
___
for i:=ordenet step -1 until 2 do
___ ____ _____ __
begin if get(række1,dataomraade1,i)<0 then alarm(3);
_____ __ ____
for j:=1 step 1 until ordenet do
___ ____ _____ __
begin if max<abs række1[j] then max:=abs række1[j];
_____ __ ___ ____ ___
if min>abs række1[j] then min:=abs række1[j]
__ ___ ____ ___
end
___
end den største og mindste numeriske koefficient eller højreside er fundet
___
oglagret i max og min.Systemets orden er lagret i orden.End-
videre staar den første række i systemet i arrayet række1;
getkanaler:=ordenet;
if reserve(|<matrix|,orden)|0 then alarm(4);
__ < > = ____
if where(|<matrix|,dataomraade2)|0 then alarm(5);
__ < > = ____
comment dataomraadet matrix er reserveret med orden kanaler;
_______
if max=0 then
__ ____
begin writetext(|<uendelig mange løsninger|);
_____ < >
goto slut
____
end hvis alle koefficienter og højresider er lig nul;
___
if række1[1]=0 then goto slut;
__ ____ ____
normering:=(min=0∧max<10 7∧max>1)∨(min/max>10 -7∧min|0∧max>1);
=
if normering then
__ ____
for i:=1 step 1 until ordenet do række1[i]:=række1[i]/max;
___ ____ _____ __
if put(række1,dataomraade2,1)<0 then alarm(6);
__ ____
putkanaler:=1;
for i:=3 step 1 until ordenet do
___ ____ _____ __
begin if get(række2,dataomraade1,i)<0 then alarm(7);
_____ __ ____
løsning:=if normering then række2[1]/max else række2[1];
__ ____ ____
ud:=abs række1[1]_ abs løsning;
___ > ___
if række2[1]|0 then
__ = ____
begin for j:=1 step 1 until ordenet do
_____ ___ ____ _____ __
begin if normering then række2[j]:=række2[j]/max;
_____ __ ____
række2[j]:= if ud then
__ ____
-række1[j]/række1[1]⨯løsning+række2[j] else
____
-række2[j]/løsning⨯række1[1]+række1[j]
end
___
end else for j:=1 step 1 until ordenet do
___ ____ ___ ____ _____ __
if normering then række2[j]:=række2[j]/max;
__ ____
if put(række2,dataomraade2,i-1)<0 then alarm(8);
__ ____
end (normering og) elimination af den første ubekendte;
___
putkanaler:=putkanaler+ordenmet;
getkanaler:=getkanaler+ordenmet;
for i:=2 step 1 until ordenmet do
___ ____ _____ __
begin if get(række1,dataomraade2,i)<0 then alarm(9);
_____ __ ____
comment nu følger en ombytning af 2 rækker hvis Gier støder
_______
paa et nul paa diagonalen under eliminationen;
if abs række1[i]<10 -9 then
__ ___ ____
begin række2[i]:=0; j:=0;
_____
for j:=j+1 while abs række1[j]<10 -9 do
___ _____ ___ __
begin if j=orden then
_____ __ ____
begin if abs række1[j+1]<10 -9 then
_____ __ ___ ____
writetext(|<uendelig mange løsninger|) else
< > ____
writetext(|<ingen løsning|);
< >
goto slut1
____
end hvis alle koefficienter i den paagældende række er lig nul
___
end;
___
j:=i-1;
for j:=j+1 while abs række2[j]<10 -9 do
___ _____ ___ __
begin if get(række2,dataomraade2,j)<0 then alarm(10);
_____ __ ____
k:=i-1; for k:=k+1 while abs række2[k]<10 -9 do
___ _____ ___ __
begin if k=orden then
_____ __ ____
begin if abs række2[k+1]<10 -9 then
_____ __ ___ ____
writetext(|<uendelig mange løsninger|) else
< > ____
writetext(|<ingen løsning|);
< >
getkanaler:=getkanaler+j-i;
goto slut1
____
end hvis alle koefficienter i den paagældende række er lig nul
___
end;
___
if j=orden then
__ ____
begin writetext(|<systemet har enten ingen eller|);
_____ < >
writetext(|< uendelig mange løsninger|);
< >
getkanaler:=getkanaler+j-i;
goto slut1
____
end hvis en ubekendt er elimineret væk
___
end;
___
getkanaler:=getkanaler+j-i;
if put(række1,dataomraade2,j)<0 then alarm(11);
__ ____
putkanaler:=putkanaler+1;
for j:=1 step 1 until ordenet do række1[j]:=række2[j]
___ ____ _____ __
end;
___
for j:=i+1 step 1 until orden do
___ ____ _____ __
begin if get(række2,dataomraade2,j)<0 then alarm(12);
_____ __ ____
løsning:=række2[i];
ud:=abs række1[i]_ abs løsning;
___ > ___
if række2[i]|0 then
__ = ____
for k:=i step 1 until ordenet do
___ ____ _____ __
række2[k]:=if ud then
__ ____
-række1[k]/række1[i]⨯løsning+række2[k] else
____
-række2[k]/løsning⨯række1[i]+række1[k];
if put(række2,dataomraade2,j)<0 then alarm(13);
__ ____
end elimination af den iende ubekendte
___
end nu kendes den sidste ubekendte og ved at indsætte bagfra findes
___
løsningen.Men først revideres antallet af overførte kanaler
med put og get;
j:=1;
for i:=2 step 1 until ordenmto do j:=j⨯i;
___ ____ _____ __
putkanaler:=putkanaler+j;
getkanaler:=getkanaler+j+ordenmto;
if abs række2[orden]<10 -9 then
__ ___ ____
begin if abs række2[ordenet]<10 -9 then writetext(|<uendelig mange løsninger|)
_____ __ ___ ____ < >
else writetext(|<ingen løsning|);
____ < >
goto slut
____
end;
___
løsning:=række2[ordenet]/række2[orden];
række1[ordenmet]:=(række1[ordenet]-række1[orden]⨯løsning)/række1[ordenmet];
række1[orden]:=løsning;
for i:=ordenmto step -1 until 1 do
___ ____ _____ __
begin if get(række2,dataomraade2,i)<0 then alarm(14);
_____ __ ____
løsning:=0;
for j:=orden step -1 until i+1 do
___ ____ _____ __
løsning:=løsning+række2[j]⨯række1[j];
række1[i]:=(række2[ordenet]-løsning)/række2[i];
end løsningen er fundet og er i arrayet række1;
___
if get(række2,dataomraade1,1)<0 then alarm(15);
__ ____
getkanaler:=getkanaler+ordenmet;
comment nu følger udskrift;
_______
ud:=| -d.ddd ddd ddd10 -dd|;
< >
writetext(|< fundne løsning exakt løsning afvigelse|);
< >
writecr;
for i:=1 step 1 until orden do
___ ____ _____ __
begin writecr;
_____
write(ud,række1[i]);
write(ud,række2[i+1]);
write(ud,abs (række1[i]-række2[i+1]))
___
end;
___
writecr; writecr; writecr;
writetext(|<kontrol af de fundne løsninger ved indsættelse: |);
< >
writecr;
writetext(|< venstre side højre side afvigelse|);
< >
writecr;
for i:=2 step 1 until orden+1 do
___ ____ _____ __
begin if get(række2,dataomraade1,i)<0 then alarm(16);
_____ __ ____
løsning:=0;
writecr;
for j:=1 step 1 until orden do
___ ____ _____ __
løsning:=løsning+række1[j]⨯række2[j];
write(ud,løsning);
write(ud,række2[orden+1]);
write(ud,abs(løsning-række2[orden+1]));
___
end;
___
getkanaler:=getkanaler+orden;
if true then i:=i else
__ ____ ____ ____
begin
_____
slut1: j:=1; i:=i-2;
for k:=2 step 1 until i do j:=j⨯k;
___ ____ _____ __
getkanaler:=getkanaler+j+1
end revision af getkanaler hvis Gier finder enten ingen eller
___
uendelig mange løsninger;
slut:
writecr; writecr; writecr;
writetext(|<antal overførte kanaler med get: |);
< >
writeinteger(|ddd ddd|,getkanaler);
< >
writecr;
writetext(|<antal overførte kanaler med put: |);
< >
writeinteger(|ddd ddd|,putkanaler);
< >
cancel(|<matrix|);
< >
if nr<5 then goto start;
__ ____ ____
end
___
t<[ s t o p ]