proc binomi (int n, int k) "USAGE: binomi(n,k); int n, int k RETURN: int, Binomialkoeffizient n ueber k KEYWORDS: Binomialkoeffizient EXAMPLE: example binomi; zeigt ein Beispiel" { if ((k < 0) or (k > n)) { return(0); } else { int i; int nenner,zaehler1,zaehler2 = 1,1,1; for (i=1;i<=n;i++) { nenner = nenner * i; } for (i=1;i<=k;i++) { zaehler1 = zaehler1 * i; } for (i=1;i<=n-k;i++) { zaehler2 = zaehler2 *i; } return (nenner / (zaehler1 * zaehler2)); } } example { "Beispiel:"; echo = 2; binomi(5,2); binomi(7,5); } proc quadratsumme (int n) "USAGE: quadratsumme(n); int n RETURN: int, Summe der ersten n Quadratzahlen KEYWORDS: Quadratzahlen EXAMPLE: example quadratsumme; zeigt ein Beispiel" { if (n < 0) { return (0); } else { int i; int ergebnis = 0; for (i=1;i<=n;i++) { ergebnis = ergebnis + i*i; } return (ergebnis); } } example { "Beispiel:"; echo = 2; quadratsumme(3); quadratsumme(5); } proc minimum (intvec iv) "USAGE: minimum(iv); iv intvector RETURN: int, the minimum of the entries in iv KEYWORDS: minimum EXAMPLE: example minium; shows an example" { int i; int k=size(iv); int ergebnis=iv[1]; for (i=2;i<=k;i++) { if (iv[i] < ergebnis) { ergebnis=iv[i]; } } return(ergebnis); } example { "EXAMPLE:"; echo=2; intvec iv=3,2,5,2,1; print(iv); minimum(iv); iv =-3,4,5,3,-6,7; print(iv); minimum(iv); } proc abs_val (poly r) "USAGE: abs_val(r); poly r - eine rationale/reelle Zahl RETURN: poly, gibt den Absolutbetrag von r wieder, falls r eine reelle Zahl KEYWORDS: Absolutbetrag EXAMPLE: abs_val; zeigt ein Beispiel" { if (r < 0) { return(-r); } else { return(r); } } example { "Beispiel:"; echo = 2; ring r=real,x,lp; abs_val(-5.45); ring s=0,x,lp; abs_val(-4/5); } proc summennorm (vector v) "USAGE: summennorm(v); vector v mit rationalen/reellen Eintraegen RETURN: poly, gibt die Zeilensummennorm von A wieder KEYWORDS: Summennorm EXAMPLE: example summennorm; zeigt ein Beispiel" { int i; int n=size(v); poly r=0; for (i=1;i<=n;i++) { r=r+v[i]; } return (r); } example { "Beispiel:"; echo = 2; ring r=real,x,lp; vector v=-3,-2,-1,3,-4,2; print(v); summennorm(v); } proc zeilensummennorm (matrix A) "USAGE: zeilensummennorm(A); matrix A mit rationalen/reellen Eintraegen RETURN: poly, gibt die Zeilensummennorm von A wieder KEYWORDS: Matrixnorm, Zeilensummennorm EXAMPLE: example zeilensummennorm; zeigt ein Beispiel" { int i,j; int n,m = ncols(A),nrows(A); poly r,s = 0,0; for (i=1;i<=m;i++) { for (j=1;j<=n;j++) { r = r + abs_val(A[i,j]); } if (r > s) { s = r; } r = 0; } return (s); } example { "Beispiel:"; echo = 2; ring r=real,x,lp; matrix A[3][2]=-3,-2,-1,3,-4,2; print(A); zeilensummennorm(A); ring r=0,x,lp; matrix B[3][2]=-7,0,0,3,-4,2; print(B); zeilensummennorm(B); } proc maximumsnorm (matrix A) "USAGE: maximumsnorm(A); matrix A mit rationalen/reellen Eintraegen RETURN: poly, gibt die Zeilensummennorm von A wieder KEYWORDS: Matrixnorm, Maximumsnorm EXAMPLE: example maximumsnorm; zeigt ein Beispiel" { int i,j; int n,m = ncols(A),nrows(A); poly r = 0; for (i=1;i<=m;i++) { for (j=1;j<=n;j++) { if (abs_val(A[i,j]) > r) { r = abs_val(A[i,j]); } } } return(r); } example { "Beispiel:"; echo = 2; ring r=real,x,lp; matrix A[3][2]=-3,-2,-1,3,-4,2; print(A); maximumsnorm(A); ring r=0,x,lp; matrix B[3][2]=-7,0,0,3,-4,2; print(B); maximumsnorm(B); } proc q_eukl_norm (matrix A) "USAGE: q_eukl_norm(A); matrix A mit rationalen/reellen Eintraegen RETURN: poly, gibt das Quadrat der euklidischen Norm von A wieder KEYWORDS: Matrixnorm, Euklidische Norm EXAMPLE: example q_eukl_norm; zeigt ein Beispiel" { int i,j; int n,m = ncols(A),nrows(A); poly r = 0; for (i=1;i<=m;i++) { for (j=1;j<=n;j++) { r = r + abs_val(A[i,j]) * abs_val(A[i,j]); } } return (r); } example { "Beispiel:"; echo = 2; ring r=real,x,lp; matrix A[3][2]=-3,-2,-1,3,-4,2; print(A); q_eukl_norm(A); ring r=0,x,lp; matrix B[3][2]=-7,0,0,3,-4,2; print(B); q_eukl_norm(B); } proc euler (number x, int n) "USAGE: euler(x,n); number x, int n RETURN: real, Approximation der Potenzreihe exp(x) bis zum Summanden n KEYWORDS: Exponentialfunktion EXAMPLE: example euler; zeigt ein Beispiel" { int k; // Laufvariable number summand=1; // Speichert den k-ten Summanden zur weitern Verwertung im Schritt k+1 number summe=1; // Speichert im k-ten Schritt die Summe der ersten k Summanden // Falls n<0, gib -1 zurueck ... if (n<0) { return(-1); } // ... sonst berechne die Approximation von exp(x) bis zum Summanden n. else { // Wenn n=0, dann ist die Approximation 1 (=summe) und nichts weiter braucht getan zu werden. // Fuer n>1, muessen Summanden berechnet und aufsummiert werden. for (k=1;k<=n;k++) { // Der (k+1)-te Summand entsteht aus dem k-ten durch Multiplikation mit x/k. summand = summand * x / k; // Die Summe der ersten (k+1) Summanden entsteht aus der Summe er esten k durch // Addition des (k+1)-ten Summanden. summe = summe + summand; } return(summe); } } example { "Beispiel:"; echo=2; ring r=real,x,lp; euler(1,-1); euler(1,0); euler(2.3,10); } proc betrag (int r) "USAGE: betrag(r); int r RETURN: int, gibt den Absolutbetrag von r wieder KEYWORDS: Absolutbetrag EXAMPLE: betrag; zeigt ein Beispiel" { if (r < 0) { return(-r); } else { return(r); } } example { "Beispiel:"; echo=2; betrag(-3); betrag(4); } proc quersumme (intvec v) "USAGE: quersumme(v); intvec v mit rationalen/reellen Eintraegen RETURN: int, gibt die Quersumme der Eintraege in v zurueck KEYWORDS: Summennorm " { int i; int n=size(v); int r=0; for (i=1;i<=n;i++) { r=r+v[i]; } return (r); } example { "Beispiel:"; echo=2; intvec v=2,4,1,-7,9,2,3,-10; quersumme(v); } proc pi (int n) "USAGE: pi(n); int n positive ganze Zahl RETURN: number, gibt eine Naeherung der Kreiszahl Pi mittels der Potenzreihenentwicklung des Arcus-Sinus KEYWORDS: Kreiszahl, Pi EXAMPLE: example pi; zeigt ein Beispiel " { // Fehler bei der Eingabe abfangen if (n<0) { return(0); } // Beginn der eigentlichen Prozedur int i,j; number PI=2; number zaehler=1; number nenner=1; for (i=1;i<=n;i++) { zaehler=zaehler*(2*i-1); nenner=nenner*2*i; PI=PI+2*zaehler/(nenner*(2*i+1)); } return (PI); } example { "Beispiel:"; echo=2; pi(0); pi(1); pi(2); // Berechnen wir den Dezimal-Wert der Naeherung: ring r=(real,10),x,lp; number p=pi(5000); p; } proc cos (int n, number x) "USAGE: cos(n,x); int n positive ganze Zahl, number x eine rationale Zahl RETURN: number, gibt eine Naeherung von cos(x) mittels der Potenzreihenentwicklung des Cosinus KEYWORDS: Kreiszahl, trigonometrische Funktionen, Sinus, Cosinus EXAMPLE: example cos; zeigt ein Beispiel " { // Fehler bei der Eingabe abfangen if (n<0) { return(0); } // Beginn der eigentlichen Prozedur int i,j; number COS=1; number zaehler=1; number nenner=1; number vorzeichen=1; for (i=1;i<=n;i++) { zaehler=zaehler*x*x; nenner=nenner*(2*i-1)*2*i; vorzeichen=vorzeichen*(-1); COS=COS+vorzeichen*zaehler/nenner; } return (COS); } example { "Beispiel:"; echo=2; ring r=(real,20),x,lp; number PI=3.141592; cos(0,0); cos(0,PI/2); cos(4,PI/2); cos(20,PI/2); }