Willkommen |
|
myGully |
|
Links |
|
Forum |
|
|
|
 |
03.01.12, 21:15
|
#1
|
Black Sabbath
Registriert seit: Sep 2010
Beiträge: 56
Bedankt: 4
|
Ausgabe Datei erstellen, Frage
Hallo Leute,
an der Uni musste ich ein Program schreiben und dabei bin ich auf ein kleines Problem gestoßen  Das Programm ist eig schon fertig, läuft schön, habe es mit Visual C++ programiert.
Es rechnet bei der Simulation und spuckt dabei Ergebnisse aus, die er als eine "Ergebnis.txt" Datei speichert. Dies habe ich so geschrieben:
PHP-Code:
void gebeAus() { //Datei oeffnen
ausgabe = fopen("Ergebnis.txt","a");
if(ausgabe != NULL) {
fprintf(ausgabe, // Die Ausgabe
"%2.4lf s %15.6lf A %15.6lf V %15.6lf Ohm %10.6lf W (Pw) %15.6lf W (Pel) %15.6lf W (Pstr) %20.10lf Kelvin (Temp. d. Drahtes) %20.10lf Kelvin (Temp. d. Glaskolbens) \n",\
t,I,U,Rt,Pw,Pel,Pstr,Tkelv,Tkelv_g);
}
fclose(ausgabe);
Mein Intervall geht von 0.000001 Sekunde (also eine Microsekunde) bis 1.0 Sekunde. Ist in der Aufgabenstallung vorgegeben. Lieder hat dann die Ergebnisdatei über eine Mio. Zeilen  und das möchte ich nicht. Gibt es eine Möglichkeit bzw. ein Befehl der mir es ermöglicht, z.b. alle 100 Zeilen in die Ergebnisdatei zu speichern und nicht jede ohne das ich das Intervall ändere, weil es muss bei der Microsekunde bleiben.
Vielen Dank im Voraus
__________________
MSI X79-GD45 Plus
Intel Core i7-4930k @ 4,4 GHz
G-Skill 16 GB @ 1600 MHz
nVidia GeForce GTX 670 SLI
Samsung SSD 256GB
|
|
|
16.01.12, 19:57
|
#2
|
Anfänger
Registriert seit: Aug 2011
Beiträge: 8
Bedankt: 3
|
Code:
void gebeAus()
{
static int zaehler = 100; // wegen ersten durchlauf
if(zaehler == 100)
{
//fopen und so
//ausgabe
zaehler = 0;
fclose();
return;
}
zahler++;
}
das static sorgt dafür das die werte zwischen den funktionsaufrufen erhalten bleiben.
|
|
|
16.01.12, 22:10
|
#3
|
Black Sabbath
Registriert seit: Sep 2010
Beiträge: 56
Bedankt: 4
|
Zitat:
Zitat von Ice weasel
Code:
void gebeAus()
{
static int zaehler = 100; // wegen ersten durchlauf
if(zaehler == 100)
{
//fopen und so
//ausgabe
zaehler = 0;
fclose();
return;
}
zahler++;
}
das static sorgt dafür das die werte zwischen den funktionsaufrufen erhalten bleiben.
|
Meintest du es so vllt?
PHP-Code:
void gebeAus() { //Datei oeffnen
static int zaehler = 100;
if(zaehler == 100)
{
ausgabe = fopen("Ergebnis.txt","a");
if(ausgabe != NULL) {
fprintf(ausgabe, // Die Ausgabe
"%2.6lf s %15.6lf A %15.6lf V %15.6lf Ohm %10.6lf W (Pw) %15.6lf W (Pel) %15.6lf W (Pstr) %20.10lf Kelvin (Temp. d. Drahtes) %20.10lf Kelvin (Temp. d. Glaskolbens) \n",\
t,I,U,Rt,Pw,Pel,Pstr,Tkelv,Tkelv_g);
}
zaehler = 0;
fclose(ausgabe); // Datei schließen
return;
}
zaehler++;
}
__________________
MSI X79-GD45 Plus
Intel Core i7-4930k @ 4,4 GHz
G-Skill 16 GB @ 1600 MHz
nVidia GeForce GTX 670 SLI
Samsung SSD 256GB
|
|
|
18.01.12, 21:29
|
#4
|
Anfänger
Registriert seit: Aug 2011
Beiträge: 8
Bedankt: 3
|
ja, funktionierts denn?
|
|
|
22.01.12, 01:22
|
#5
|
Black Sabbath
Registriert seit: Sep 2010
Beiträge: 56
Bedankt: 4
|
Zitat:
Zitat von Ice weasel
ja, funktionierts denn?
|
Hi,
ja es funktioniert genau so wie das obrige davor, hat aber den Vorteil das es kürzer ist. Ich habe den Bereich noch auf 500 erhöt, da 100 Schritte doch zu viel sind (wollte der Prof so)
Aber beides funktioniert
Vielen Dank an alle
__________________
MSI X79-GD45 Plus
Intel Core i7-4930k @ 4,4 GHz
G-Skill 16 GB @ 1600 MHz
nVidia GeForce GTX 670 SLI
Samsung SSD 256GB
|
|
|
04.01.12, 22:26
|
#6
|
Black Sabbath
Registriert seit: Sep 2010
Beiträge: 56
Bedankt: 4
|
Danke ich versuch es dann mal
__________________
MSI X79-GD45 Plus
Intel Core i7-4930k @ 4,4 GHz
G-Skill 16 GB @ 1600 MHz
nVidia GeForce GTX 670 SLI
Samsung SSD 256GB
|
|
|
04.01.12, 22:59
|
#7
|
Black Sabbath
Registriert seit: Sep 2010
Beiträge: 56
Bedankt: 4
|
Also es geht darum das ich eine Glühlampe simulieren muss, ich hab erst alle Variablen bennant, danach die Formeln aufgstellt, die Spannung, Widerstand, Temperatur des Drahtes usw. berechnen in Abhängigkeit von der Zeit, unzwar im Interwall von
1*10^-6 sekunden bis zur 1 Sekunde. Wenn das Program ein Intervall hinter sich hat, dann wird diese sofort in die Datei gespeichert und das macht er bis er die eine Sekunde erreicht hat. mein t ist halt immer t = t + Intervall.
Jetzt habe ich Probleme mit deinem Vorschlag, unzwar weiß ich jetzt nicht gaz was das mit dem "CounterTxtDatei" bedeutet.
Wenn ich "ausgabe = fopen("Ergebnis"+ CounterTxtDatei.(String) + ".txt","a");" schreibe dann zeigt er mir en --> Der Ausdruck muss einen Klassentyp aufweisen
Habe ich das richtig vertanden mit der If zeile die du mir geschrieben hast, das soll bedeuten, wenn die Zeile größer gleich 1 ist soll der dann die nächte +1 schreiben, richtig?
Sry, die Fachsprache der Programierer behersche ich nicht  Studiere ja auch kein Informatik, ich hab diese Program mit seht viel Aufwand und google geschrieben.
Mein Programm spuckt mir ja über 1Mio. Zeilen raus (knapp 180MB), er soll die ja alle berechnen, aber z.b nur jede tausendste speichern. Ich wollte das Intervall ändern indem ich sage er soll nicht jede 1 Microsekunde rechnen sondern jede 100. aber das will der prof nicht -.-
__________________
MSI X79-GD45 Plus
Intel Core i7-4930k @ 4,4 GHz
G-Skill 16 GB @ 1600 MHz
nVidia GeForce GTX 670 SLI
Samsung SSD 256GB
|
|
|
05.01.12, 20:53
|
#8
|
Black Sabbath
Registriert seit: Sep 2010
Beiträge: 56
Bedankt: 4
|
Nein, er soll mir nicht mehrere Dateien erstellen, sondern in der "Ergebnis" Datei jedes 100. Ergebnis aus der Rechnung speichern und nicht jedes.
Ich sag mal so, mein Program rechnet ich sag mal "1000" Rechnungen und speichert dies in Form von 1000 Zeilen. Ich brauche aber in der Datei nur jede 100. Rechnung oder 10. Rechnung zu speichern und nicht jede einzelne.
Danke für deine Hilfe
__________________
MSI X79-GD45 Plus
Intel Core i7-4930k @ 4,4 GHz
G-Skill 16 GB @ 1600 MHz
nVidia GeForce GTX 670 SLI
Samsung SSD 256GB
|
|
|
05.01.12, 21:59
|
#9
|
bla
Registriert seit: Mar 2010
Beiträge: 312
Bedankt: 302
|
Wenn du nur jede hunderste Zeile speichern möchtest, kannst du den obigen Code einfach wie folgt verwenden.
PHP-Code:
void gebeAus() {
Zaehlerdateizeile++;
if(Zaehlerdateizeile > 100)
{
Zaehlerdateizeile = 0;
return;
}
...
|
|
|
06.01.12, 14:30
|
#10
|
Black Sabbath
Registriert seit: Sep 2010
Beiträge: 56
Bedankt: 4
|
Zitat:
Zitat von germgerm
Wenn du nur jede hunderste Zeile speichern möchtest, kannst du den obigen Code einfach wie folgt verwenden.
PHP-Code:
void gebeAus() {
Zaehlerdateizeile++;
if(Zaehlerdateizeile > 100)
{
Zaehlerdateizeile = 0;
return;
}
...
|
Ok ich habs so übernommen (zeigt auch keine Fehlermeldung an), aber er speichert immer noch alle Zeilen ab. Aber woher weiß er, dass "Zaehlerdateizeile" meine Zaehlerdateizeile ist? Ist dieser Begriff schon vordefiniert? Weil das Programm läuft ja über das Intervall von einer Microsekunde bezogen auf die Dauer 1 Sekunde. Muss ich da vllt etwas bei der "fprintf(ausgabe" ändern? Weil die speichert ja die Informationen in die Text Datei.
PHP-Code:
// AUSGABE DER WERTE IN EINE DATEI
void gebeAus() { //Datei oeffnen
Zaehlerdateizeile++;
if(Zaehlerdateizeile > 100)
{
Zaehlerdateizeile = 0;
return;
}
ausgabe = fopen("Ergebnis.txt","a");
if(ausgabe != NULL) {
fprintf(ausgabe, // Die Ausgabe
"%2.6lf s %15.6lf A %15.6lf V %15.6lf Ohm %10.6lf W (Pw) %15.6lf W (Pel) %15.6lf W (Pstr) %20.10lf Kelvin (Temp. d. Drahtes) %20.10lf Kelvin (Temp. d. Glaskolbens) \n",\
t,I,U,Rt,Pw,Pel,Pstr,Tkelv,Tkelv_g);
Zaehlerdateizeile +=1;
}
fclose(ausgabe); // Datei schließen
}
// DIE SIMULATION DES EINSCHALTENS
void simuliere() {
erzeugeKonstante(); // Schleifendurchlaeufe
double i = 0;
for ( i; i <= dauerSimulation; i += INTERVALL) {
printf("%2.6f / %2.6f\r", i , dauerSimulation);
durchlaufEinesIntervalls();
gebeAus();
}
__________________
MSI X79-GD45 Plus
Intel Core i7-4930k @ 4,4 GHz
G-Skill 16 GB @ 1600 MHz
nVidia GeForce GTX 670 SLI
Samsung SSD 256GB
|
|
|
06.01.12, 17:38
|
#11
|
bla
Registriert seit: Mar 2010
Beiträge: 312
Bedankt: 302
|
Oje, das war wohl nix ^^
Code:
void gebeAus() {
if(Zaehlerdateizeile%100)
{
Zaehlerdateizeile++;
return;
}
...
Habe ich aber wieder nicht ausprobiert!
Zaehlerdateizeile muss von dir irgendwo deklariert sein, von selbst schluckt sowas nur das alte Fortran.
|
|
|
Forumregeln
|
Du kannst keine neue Themen eröffnen
Du kannst keine Antworten verfassen
Du kannst keine Anhänge posten
Du kannst nicht deine Beiträge editieren
HTML-Code ist Aus.
|
|
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:35 Uhr.
().
|