1.Aufgabe Zwei-Dimensionale Felder und Matrizen
Aufgabenstellung:
Das folgende C-Programm soll Funktionen zur Addition, Multiplikation und Ausgabe von nxn-Matrizen bereit stellen. Definieren und rufen Sie bitte die drei Funktionen auf, sodass das Programm die richtigen Ergebnisse liefert.
CCode:
#include <stdio.h>/* Globale Konstante */
#define N 3
/* Funktionen Deklaration */
void add_matrices (double A[N][N], double B[N][N], double result[N][N]);
void mult_matrices(double A[N][N], double B[N][N], double result[N][N]);
void print_matrix(double M[N][N]);
int main(void)
{
double m1[N][N] = {{10.5, 3.4, -4.12}, {1.0, 10.2, -2.9}, {-1.0, -2.0, 5.1}};
double m2[N][N] = {{8.6, 13.7, 0.0}, {77.7, 10.8, 2.0}, {0.0, 2.2, 6.6} };
double r[N][N];
/* Rufe die Matrizen-Addition auf */
/* Rufe die Ausgabe-Funktion auf */
/* Rufe die Funktion zur Matrizen-Multiplikation auf */
/* Rufe die Ausgabe-Funktion auf */
return 0;
}
/* Funktionen-Definition */
void add_matrices (double A[N][N], double B[N][N], double result[N][N])
{
/* Anweisungen */
}
void mult_matrices(double A[N][N], double B[N][N], double result[N][N])
{
/* Anweisungen */
}
void print_matrix(double M[N][N])
{
/* Anweisungen */
}
Lösung:
Das Programm
CCode:
#include <stdio.h>
/* Globale Konstante */
#define N 3
/* Funktionen Deklaration */
void add_matrices (double A[N][N], double B[N][N], double result[N][N]);
void mult_matrices(double A[N][N], double B[N][N], double result[N][N]);
void print_matrix(double M[N][N]);
int main(void)
{
double m1[N][N] = {{10.5, 3.4, -4.12}, {1.0, 10.2, -2.9}, {-1.0, -2.0, 5.1}};
double m2[N][N] = {{8.6, 13.7, 0.0}, {77.7, 10.8, 2.0}, {0.0, 2.2, 6.6} };
double r[N][N];
freopen( "stdout.txt", "w", stdout ); //Leitet die Standardausgabe in die Datei stdout.txt um
/* Rufe die Matrizen-Addition auf */
add_matrices(m1,m2,r);
/* Rufe die Ausgabe-Funktion auf */
print_matrix(r);
/* Rufe die Funktion zur Matrizen-Multiplikation auf */
mult_matrices(m1,m2,r);
/* Rufe die Ausgabe-Funktion auf */
print_matrix(r);
return 0;
}
/* Funktionen-Definition */
void add_matrices (double A[N][N], double B[N][N], double result[N][N])
{
int i,j;
for(i=0;i<N;i++)
{
for (j=0;j<N;j++)
result[i][j]=A[i][j]+B[i][j];
}
}
void mult_matrices(double A[N][N], double B[N][N], double result[N][N])
{
int i,j,k;
double tmp;
for(i=0;i<N;i++)
{
for (j=0;j<N;j++){
tmp=0;
for(k=0;k<N;k++)
tmp+=A[i][k]*B[k][j];
result[i][j]=tmp;
}
}
}
void print_matrix(double M[N][N])
{
int i,j;
for (i=0; i<N;i++){
printf("|");
for(j=0;j<N;j++){
printf("%8.2f",M[i][j]);
}
printf("|\n");
}
printf("\n");
}
erzeugt die Ausgabe
Ausgabe stdout:
| 19.10 17.10 -4.12|
| 78.70 21.00 -0.90|
| -1.00 0.20 11.70|
| 354.48 171.51 -20.39|
| 801.14 117.48 1.26|
| -164.00 -24.08 29.66|
Dieses stimmt mit der Erwartung überein:
Der MupadCode:
m1:=matrix([[10.5, 3.4, -4.12], [1.0, 10.2, -2.9], [-1.0, -2.0, 5.1]]): m2:=matrix([[8.6, 13.7, 0.0], [77.7, 10.8, 2.0], [0.0, 2.2, 6.6]]): m1+m2,m1*m2liefert die
Ausgabe: MupadOutput:
+- -+ +- -+
| 19.1, 17.1, -4.12 | | 354.48, 171.506, -20.392 |
| | | |
| 78.7, 21.0, -0.9 |, | 801.14, 117.48, 1.26 |
| | | |
| -1.0, 0.2, 11.7 | | -164.0, -24.08, 29.66 |
+- -+ +- -+
2.Aufgabe Zeichenketten (Strings)
Aufgabenstellung:
Testen Sie bitte folgendes C-Programm. Welche Kenntnisse kann man hier gewinnen bezüglich der Zeichenketten-Verarbeitung in C?
CCode:
#include <stdio.h>
#include <string.h> /* Fuer String-Funktionen wie strlen() */
int main() {
char satz[80];
int i=0;
printf("\nBitte einen Satz eingeben\n>");
gets(satz); /* Besser fgets(satz, sizeof(satz), stdin) */
/* Der Operator sizeof(typ_name) gibt die Speichergroesse zurueck */
printf("\n%s",satz);
printf("\nDer Satz besteht aus %i Zeichen.",strlen(satz));
/* Ausgeben des Satzes zeichenweise */
while (satz[i]){
printf ("%c " , satz[i]);
printf ("%d " , satz[i]); /* ASCII Code der Zeichen */
i++;
}
printf("\n\nIch schreibe in satz[5] eine binaere Null.\n");
satz[5]='\0';
printf("\n%s",satz);
printf("\nDer Satz besteht aus %i Zeichen.\n",strlen(satz));
return 0;
}
Lösung
Die Eingabe
Eingabe stdin:
Dies ist ein vollständiger Satz.liefert
Ausgabe stdout:
Bitte einen Satz eingeben
>
Dies ist ein vollständiger Satz.
Der Satz besteht aus 32 Zeichen.
D 68
i 105
e 101
s 115
32
i 105
s 115
t 116
32
e 101
i 105
n 110
32
v 118
o 111
l 108
l 108
s 115
t 116
ä -28
n 110
d 100
i 105
g 103
e 101
r 114
32
S 83
a 97
t 116
z 122
. 46
Ich schreibe in satz[5] eine binaere Null.
Dies
Der Satz besteht aus 5 Zeichen.
Man kann daraus schließen, dass Strings genau dort enden, wo die erste binäre Null steht. Außerdem sieht man, dass man mit der Verwendung von Sonderzeichen wie ä aufpassen muss, da sie keine ASCII Zeichen sind.