in Dateien schreiben < C/C++ < Programmiersprachen < Praxis < Informatik < Vorhilfe
|
Status: |
(Frage) beantwortet | Datum: | 21:50 Fr 11.01.2013 | Autor: | pina7 |
Aufgabe | Sterne in einer Textdatei
Schreiben Sie ein Programm, welches ein Quadrat aus Sternen in einer Textdatei erzeugt.
a)
Schreiben Sie zunächst das Hauptprogramm, in dem der Benutzer nach der
Kantenlänge des Quadrats gefragt werden soll. Die eingegebene Kantenlänge soll dann an eine Funktion übergeben werden, in der die Aufgabenteile b) und c) durchgeführt werden sollen. Überlegen Sie sich den richtigen Rückgabetyp für die Funktion.
b)
In der Funktion soll nun eine Textdatei mit Namen „Sterne.txt“ auf der Festplatte C: zum schreiben geöffnet werden.
c)
Erzeugen Sie ein Quadrat aus Sternen mit der von dem Benutzer in Aufgabenteil a) eingegebenen Kantenlänge. Schreiben Sie dieses Quadrat jedoch nicht auf den Bildschirm, sondern in die von Ihnen geöffnete Datei. |
Hallo. Bei dieser Aufgabe gibt es zwei Unklarheiten meinerseits:
1. Meine Datei wird nicht erstellt. Was muss von der Funktion zurückgegeben werden?
2. Das Quadrat ist nicht richtig (getestet ohne Datei)
Vielen Dank für die Hilfe! Grüße, Pina
1: |
| 2: | #include "stdafx.h"
| 3: | #include <iostream>
| 4: | #include <fstream>
| 5: | #include <iomanip>
| 6: |
| 7: | using namespace std;
| 8: |
| 9: | int Länge (int Kantenlänge)
| 10: | {
| 11: | fstream f;
| 12: | f.open("Sterne.txt",ios::in);
| 13: |
| 14: | char stern = '*';
| 15: |
| 16: | int Zeile = 0;
| 17: |
| 18: | for (Zeile = 0; Zeile < Kantenlänge; Zeile ++)
| 19: | {
| 20: | f << setw(Kantenlänge) << setfill(stern) << " " << endl;
| 21: | Zeile ++;
| 22: | }
| 23: |
| 24: | f.close();
| 25: |
| 26: | return 0; //was zurückgeben?
| 27: | }
| 28: |
| 29: | int _tmain(int argc, _TCHAR* argv[])
| 30: | {
| 31: | int Kantenlänge = 0;
| 32: |
| 33: | cout << "Sterne in einer Textdatei" << endl << endl;
| 34: | cout << "Bitte gewuenschte Kantenlaenge eingeben: ";
| 35: | cin >> Kantenlänge;
| 36: |
| 37: | Länge(Kantenlänge);
| 38: |
| 39: | system("pause");
| 40: | return 0;
| 41: | } |
|
|
|
|
Hallo pina7,
> Sterne in einer Textdatei
> Schreiben Sie ein Programm, welches ein Quadrat aus
> Sternen in einer Textdatei erzeugt.
> a)
> Schreiben Sie zunächst das Hauptprogramm, in dem der
> Benutzer nach der
> Kantenlänge des Quadrats gefragt werden soll. Die
> eingegebene Kantenlänge soll dann an eine Funktion
> übergeben werden, in der die Aufgabenteile b) und c)
> durchgeführt werden sollen. Überlegen Sie sich den
> richtigen Rückgabetyp für die Funktion.
> b)
> In der Funktion soll nun eine Textdatei mit Namen
> „Sterne.txt“ auf der Festplatte C: zum schreiben
> geöffnet werden.
> c)
> Erzeugen Sie ein Quadrat aus Sternen mit der von dem
> Benutzer in Aufgabenteil a) eingegebenen Kantenlänge.
> Schreiben Sie dieses Quadrat jedoch nicht auf den
> Bildschirm, sondern in die von Ihnen geöffnete Datei.
> Hallo. Bei dieser Aufgabe gibt es zwei Unklarheiten
> meinerseits:
> 1. Meine Datei wird nicht erstellt. Was muss von der
> Funktion zurückgegeben werden?
Die Datei muss auch im Schreibmodus geöffnet werden.
> 2. Das Quadrat ist nicht richtig (getestet ohne Datei)
> Vielen Dank für die Hilfe! Grüße, Pina
> [code]
> #include "stdafx.h"
> #include <iostream>
> #include <fstream>
> #include <iomanip>
>
> using namespace std;
>
> int Länge (int Kantenlänge)
> {
> fstream f;
> f.open("Sterne.txt",ios::in);
>
> char stern = '*';
>
> int Zeile = 0;
>
> for (Zeile = 0; Zeile < Kantenlänge; Zeile ++)
> {
> f << setw(Kantenlänge) << setfill(stern) << " " <<
> endl;
> Zeile ++;
> }
>
> f.close();
>
> return 0; //was zurückgeben?
> }
>
> int _tmain(int argc, _TCHAR* argv[])
> {
> int Kantenlänge = 0;
>
> cout << "Sterne in einer Textdatei" << endl << endl;
> cout << "Bitte gewuenschte Kantenlaenge eingeben: ";
> cin >> Kantenlänge;
>
> Länge(Kantenlänge);
>
> system("pause");
> return 0;
> }[/code
Gruss
MathePower]
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 14:49 Sa 12.01.2013 | Autor: | pina7 |
1: |
| 2: | #include "stdafx.h"
| 3: | #include <iostream>
| 4: | #include <fstream>
| 5: | #include <iomanip>
| 6: |
| 7: | using namespace std;
| 8: |
| 9: | int Länge (int Kantenlänge)
| 10: | {
| 11: | fstream f;
| 12: | f.open("Sterne.txt",ios::out);
| 13: |
| 14: | char stern = '*';
| 15: |
| 16: | int Zeile = 0;
| 17: |
| 18: | for (Zeile = 0; Zeile < Kantenlänge; Zeile ++)
| 19: | {
| 20: | f << "*" << setw(Kantenlänge) << setfill(stern) << " " << endl;
| 21: | }
| 22: |
| 23: | f.close();
| 24: |
| 25: | return 0;
| 26: | }
| 27: |
| 28: | int _tmain(int argc, _TCHAR* argv[])
| 29: | {
| 30: | int Kantenlänge = 0;
| 31: |
| 32: | cout << "Sterne in einer Textdatei" << endl << endl;
| 33: | cout << "Bitte gewuenschte Kantenlaenge eingeben: ";
| 34: | cin >> Kantenlänge;
| 35: |
| 36: | Länge(Kantenlänge);
| 37: |
| 38: | system("pause");
| 39: | return 0;
| 40: | }
|
Vielen Dank, das mit dem Schreibmodus ::out kannte ich noch nicht. Also ist es richtig, dass die Funktion 0 als Rückgabewert hat? Weil sie nur etwas ausführt und keinen Wert zurückgibt, oder? Und das mit dem Quadrat passt nun, ich habe ein extra Stern vor der setfill Ausgabe eingefügt und hatte ein Zeile++ zuviel. Aber ist das eine vernüftige Lösung? Könnte man das nicht noch schöner schreiben?
Für Antworten hierzu bin ich sehr dankbar. Viele Grüße, Pina
|
|
|
|
|
Hallo pina7,
> 1: |
| 2: | > #include "stdafx.h"
| 3: | > #include <iostream>
| 4: | > #include <fstream>
| 5: | > #include <iomanip>
| 6: | >
| 7: | > using namespace std;
| 8: | >
| 9: | > int Länge (int Kantenlänge)
| 10: | > {
| 11: | > fstream f;
| 12: | > f.open("Sterne.txt",ios::out);
| 13: | >
| 14: | > char stern = '*';
| 15: | >
| 16: | > int Zeile = 0;
| 17: | >
| 18: | > for (Zeile = 0; Zeile < Kantenlänge; Zeile ++)
| 19: | > {
| 20: | > f << "*" << setw(Kantenlänge) << setfill(stern) << " "
| 21: | > << endl;
| 22: | > }
| 23: | >
| 24: | > f.close();
| 25: | >
| 26: | > return 0;
| 27: | > }
| 28: | >
| 29: | > int _tmain(int argc, _TCHAR* argv[])
| 30: | > {
| 31: | > int Kantenlänge = 0;
| 32: | >
| 33: | > cout << "Sterne in einer Textdatei" << endl << endl;
| 34: | > cout << "Bitte gewuenschte Kantenlaenge eingeben: ";
| 35: | > cin >> Kantenlänge;
| 36: | >
| 37: | > Länge(Kantenlänge);
| 38: | >
| 39: | > system("pause");
| 40: | > return 0;
| 41: | > }
| 42: | > |
> Vielen Dank, das mit dem Schreibmodus ::out kannte ich
> noch nicht. Also ist es richtig, dass die Funktion 0 als
> Rückgabewert hat? Weil sie nur etwas ausführt und keinen
> [b]Wert zurückgibt, oder? Und das mit dem Quadrat passt nun, [/b
In dem Fall ist der Rückgabewert unbestimmt,
d.h es bleibt Dir überlassen, was Du zurückgibst.
> ich habe ein extra Stern vor der setfill Ausgabe eingefügt
> und hatte ein Zeile++ zuviel. Aber ist das eine vernüftige
> Lösung? Könnte man das nicht noch schöner schreiben?
Das muss doch auch ohne zusätzlichen Stern funktionieren.
Bei der Funktion Länge und dem Parameter Kantenlänge
hast Du sicherlich das richtige gemeint: Laenge(Kantenlaenge)
> Für Antworten hierzu bin ich sehr dankbar. Viele Grüße,
> Pina
Gruss
MathePower
|
|
|
|