Was macht der Programmcode? < Algor.+Datenstr. < Theoretische Inform. < Hochschule < Informatik < Vorhilfe
|
Aufgabe | Gegeben sei das folgende Programm:
/*A3b.CC*/
#include<iostream>
using namespace std;
int main(void)
{
int a[1]={5}, c = 4, b, f(int [],int);
b = f(a[],c);
cout << a[0] << ’ ’ << b << ’ ’ << c;
}
int f(int u[],int c)
{
u[0] = u[0] + 2;
c = c + 1;
return(u[0] + c);
}
Der Funktionsaufruf enthält einen Syntaxfehler, stellen Sie ihn richtig. Was erscheint
am Bildschirm, wenn das (korrigierte) Programm abläuft? |
Hallo, diese Aufgabe bereitet mir gerade ein bisschen Ärger.
Ich gehe mal davon aus, dass der Syntaxfehler " b = f(a[],c); "
ist.
Nun komme ich aber nicht auf die angebliche Lösung " 7 12 4 ".
(Bin mir auch nicht sicher ob die stimmt)
Hat vielleicht jemand eine kurze Erklärung, wie das Programm ausgeführt wird?
Grüße
|
|
|
|
Hallo!
Erstmal ja, der Fehler steckt in der von dir genannten Zeile. Aber was genau ist der fehler, und wie lautet es richtig?
Das Ergebnis stimmt, aber erzähl doch erstmal, was du denkst, was das Programm macht.
|
|
|
|
|
Also ich geh es mal so durch wie ich mir das denke.
int a an der Stelle 1 hat den Wert 5, c = 4;
Ich glaube, dass b ein Integer ist und f nimmt ein Int-Array und ein int entgegen.
Ich würde sagen, dass es " b = f(a,c); " heißen muss.
Und dann müsste es zunächst mit int f(int u[], int c) weitergehen.
c= c+1; sollte 5 sein. Aber was steht denn an Stelle u[0] und a[0]?
Da blicke ich jetzt gerade überhaupt nicht durch.
|
|
|
|
|
Hallo sahnepudding,
> Also ich geh es mal so durch wie ich mir das denke.
> int a an der Stelle 1 hat den Wert 5, c = 4;
> Ich glaube, dass b ein Integer ist und f nimmt ein
> Int-Array und ein int entgegen.
> Ich würde sagen, dass es " b = f(a,c); " heißen muss.
>
Ja, das ist korrekt.
> Und dann müsste es zunächst mit int f(int u[], int c)
> weitergehen.
> c= c+1; sollte 5 sein. Aber was steht denn an Stelle u[0]
Der Wert von c wird in der Funktion f() erhöht.
Nach Verlassen der Funktion hat c wieder den Wert 4.
> und a[0]?
Nun a ist ein Array mit einem Element.
In C beginnt der Array-Index bei 0.
> Da blicke ich jetzt gerade überhaupt nicht durch.
>
Gruss
MathePower
|
|
|
|
|
Dankeschön!
Ich dachte, dass mir int a[1] = {5} die Stelle "1" angibt an der "5" geschrieben wird!
|
|
|
|
|
Hallo!
Ich denke du hast die Aufgabe mittlerweile richtig verstanden. Ich möchte dir hier mal eine Möglichkeit bieten, wie man den Code "verbessern" könnte:
1: |
| 2: | #include<iostream>
| 3: | using namespace std;
| 4: |
| 5: |
| 6: |
| 7: | int f(int u[], int c)
| 8: | {
| 9: | u[0] = u[0] + 2;
| 10: | c = c + 1;
| 11: |
| 12: | return(u[0] + c);
| 13: | }
| 14: |
| 15: |
| 16: |
| 17: | int main(void)
| 18: | {
| 19: | int a[1]={5}; //Wenn man Funktionen (hier "f") vor die main schreibt, kann man sich die deklaration inner halb der main sparen
| 20: | int c = 4; //Zur besseren Übersicht des Codes alle Variablen einzelnen deklarieren
| 21: | int b;
| 22: |
| 23: | b = f(a,c); //FEHLER war beim Funktionsaufruf: arrays werden ohne []-Operator an die Funktion übergeben.
| 24: | //Bei arrays werden ohnehin nur Zeiger übergeben.
| 25: |
| 26: | cout << a[0] << ' ' << b << ' ' << c; //da call by reference ist a[0] = 7
| 27: | //b ist der return-Wert der Funktion f also 12
| 28: | //c bleibt 4
| 29: | //Ausgabe: "7 12 4"
| 30: |
| 31: |
| 32: |
| 33: | return 0; //return 0 hat auch gefehlt
| 34: | }
|
|
|
|
|