Lösungen zu Blatt 6 //Aufgabe 6.2 #include <stdio.h> #include <stdlib.h> int funktion(int a, int b) { a = a+b; b = b+a; //Diese Zeile kann weggelassen werden, //weil nur a zurück gegeben wird. return a; } int main() { int a, b; a = 3; b = 5; b = funktion(a, b); printf("a=%d, b=%d\n", a,b); } //b erhält den lokalen Wert a aus der Funktion -------------------------------------------------------------------------------------------------------------------------------------------------//Aufgabe 6.3 #include <stdio.h> #include <stdlib.h> int a=4; //a wird global vereinbart int func(int a) { return (--a); } //formaler Parameter void proc() { ++a; } int main() { proc(); proc(); func(a); //hier ist a lokal gültig //hier ist a global gültig //aktueller Parameter //Der Rückgabewert wird keiner //Variablen zugewiesen! printf("a= %i\n", a); return 0; } //Aufgabe 6.4 #include <stdio.h> #include <stdlib.h> int ggT(int x,int y) { while(x!=y) { if(y<x) x=x-y; if(y>x) y=y-x; } return x; } int main() { int a,b,erg; printf("Euklidischer Algorithmus\n"); printf("\na = "); scanf("%i",&a); printf("\nb = "); scanf("%i",&b); erg=ggT(a,b); printf("\nggT(%i, %i) = %i\n\n",a,b,erg); return 0; } -------------------------------------------------------------------------------------------------------------------------------------------------//Aufgabe 6.5 #include <stdio.h> #include <stdlib.h> double D_abs(double a) { return (a<0?-a:a); } int main() { double a; printf("Absolutwert einer double-Variablen\n"); printf("\na = "); scanf("%lf",&a); printf("a = %f",D_abs(a)); return 0; } //Aufgabe 6.6 #include <stdio.h> #include <stdlib.h> int Fakultaet1(int a) { int i; int erg=1; for (i=1;i<=a;i++) erg=erg*i; return erg; } //iterative Programmierung int Fakultaet2(int a) //rekursive Programmierung! { int erg; if(a==0) erg=1; else erg=Fakultaet2(a-1)*a; return erg; } int main() { int a; printf("Berechnung der Fakultaet einer Zahl\n"); printf("\nZahl: "); scanf("%i",&a); printf("\n%i! = %i (iterativ berechnet)",a,Fakultaet1(a)); printf("\n%i! = %i (rekursiv berechnet)\n\n",a,Fakultaet2(a)); return 0; } i=1; while(i<=n) { erg=erg+i; i+=2; } printf("\nAlle ungeraden Zahlen bis %i ergeben %i\n\n",n,erg); return 0; } -------------------------------------------------------------------------------------------------------------------------------------------------//Aufgabe 6.7 #include <stdio.h> #include <stdlib.h> int signum(double a) { return(a<0?-1:(a==0?0:1)); } int main() { double a; printf("Signum-Funktion\n"); printf("\na = "); scanf("%lf",&a); printf("\nsignum(%lf) = %i",a,signum(a)); return 0; } //Aufgabe 6.8 #include <stdio.h> #include <stdlib.h> double a[3]; double b[3]; double erg[]; double skalarprod() { double erg=(a[1]*b[1]+a[2]*b[2]+a[3]*b[3]); return erg; } void kreuzprod() { erg[1]=a[2]*b[3]-a[3]*b[2]; erg[2]=a[3]*b[1]-a[1]*b[3]; erg[3]=a[1]*b[2]-a[2]*b[1]; } int main() { printf("Skalarprodukt von zwei Vektoren\n\n"); printf("a[1] = "); scanf("%lf",&a[1]); printf("a[2] = "); scanf("%lf",&a[2]); printf("a[3] = "); scanf("%lf",&a[3]); printf("\nb[1] = "); scanf("%lf",&b[1]); printf("b[2] = "); scanf("%lf",&b[2]); printf("b[3] = "); scanf("%lf",&b[3]); kreuzprod(); printf("\n\na * b = %.0f\n",skalarprod()); printf("\nKreuzprodukt: "); printf("\nx = %3.0f\ny = %3.0f\nz = %3.0f\n",erg[1],erg[2],erg[3]); return 0; }