|
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 - 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+1end 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 ]