Lieber Besucher, herzlich willkommen bei: Ubuntu-Forum & Kubuntu-Forum | www.Ubuntu-Forum.de. Falls dies Ihr erster Besuch auf dieser Seite ist, lesen Sie sich bitte die Hilfe durch. Dort wird Ihnen die Bedienung dieser Seite näher erläutert. Darüber hinaus sollten Sie sich registrieren, um alle Funktionen dieser Seite nutzen zu können. Benutzen Sie das Registrierungsformular, um sich zu registrieren oder informieren Sie sich ausführlich über den Registrierungsvorgang. Falls Sie sich bereits zu einem früheren Zeitpunkt registriert haben, können Sie sich hier anmelden.
Quellcode |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 |
#include <stdio.h> #include <stdlib.h> #include <time.h> using namespace std; FILE *out; int i,j,N,jahr,tagn,anf,end,days; int s1; char heute; char zeit; char anf_s, end_s; char zeitzaehler; int temp1,temp2,anf1,end1,anf2,end2,zufall1,zufall2; int main(void) { out=fopen("stundenabrechnung.csv", "w"); printf("Dieses Programm erstellt Ihnen für ein Jahr eine Stundenabrechnung.\n\ Bitte Jahreszahl eingeben:"); scanf("i%", &jahr); fprintf(out,"Stundenabrechnung für das Jahr %i\nDatum;Tag;Von;Bis;Dauer[h];\ Gesamt[h]\n", jahr); printf("Was war der erste Tag im Jahr?"); scanf("d% (Montag=1, Dienstag=2, Mittwoch=3, Donnerstag=4, Freitag=5\ Samstag=6, Sonntag=7", &s1); printf("Wie viele Tage hat dieses Jahr?"); scanf("%d", &days); printf("Wann fangen sie frühestens an zu arbeiten? Eingabe bitte\ nur ganz- oder halbzahlig (z.B. 9.00 Uhr = 9 oder 9.30 Uhr = 9.5)\n"); scanf("%d", &anf1); printf("Wann fangen sie spätestens an zu arbeiten? Eingabe bitte\ nur ganz- oder halbzahlig (z.B. 9.00 Uhr = 9 oder 9.30 Uhr = 9.5)\n"); scanf("%d", &end1); ///Erstelle mir ein kleines Zeitintervall von n*30 Minuten. n=temp1 verwende ///ich später als obere Grenze bei meiner Zufallszahl. temp1=1+(end1-anf1)*2; printf("Wann hören sie frühestens auf zu arbeiten? Eingabe bitte nur\ ganz- oder halbzahlig (z.B. 17.00 Uhr = 17 oder 17.30 Uhr = 17.5)\n"); scanf("%d", &anf2); printf("Wann hören sie spätestens auf zu arbeiten? Eingabe bitte\ nur ganz- oder halbzahlig (z.B. 17.00 Uhr = 17 oder 17.30 Uhr = 17.5)\n"); scanf("%d", &end2); temp2=1+(end2-anf2)*2; for(i=1;i<=days;i++) { ///Die for-Schleife soll so durchlaufen, dass sie alle 365 / 366 Tage ///des Jahres durchläuft. Ist der Tag kein FR, SA, SO soll tagn++. ///Ansonsten kommen noch andere Befehle hinzu. if(tagn==5) { ///Erstellt mir die zwei Zufallszeit wann ich anfange / aufhöre zu ///arbeiten. Allerdings wird diese Funktion garnet erst richtig ///ausgeführt, da wohl etwas mit dem Zufallsgenerator nicht stimmt. time(); ///Soll mir einen String anhand meines doubles anf ausgeben. anf_s=zeitzaehler(anf); end_s=zeitzaehler(end); heute = FR; fprintf(" ;%s;%s;%s;%d; \n",datum,heute,anf_s,end_s,end-anf); ///Kann man eine Berechnung wie hier, "end-anf" einfügen??? tagn++; } if(tagn==6) { time(); anf_s=zeitzaehler(anf); end_s=zeitzaehler(end); heute = SA; fprintf(" ;%s;%d;%d;%d; \n",datum,heute,anf,end,end-anf); tagn++; } if(tagn==7) { time(); anf_s=zeitzaehler(anf); end_s=zeitzaehler(end); heute = SO; fprintf(" ;%s;%d;%d;%d; \n",datum,heute,anf,end,end-anf); tagn=0; } else tagn++; } } double times() { ///Gibt mir eine Zufallszahl zwischen 0 und temp1 bzw. temp2 aus. srand(time(NULL)); zufall1 = rand() % temp1 +0; srand(time(NULL)); zufall2 = rand() % temp2 +0; ///Berechne mir eine "künstliche" Zeit an der ich zu arbeiten beginne. anf =anf1*(1+zufall1); end =anf2*(1+zufall2); ///Werden mir die beiden doubles anf und end auch so zur weiteren Berechnung ///zur Verfügung stehen?? return anf, end; } void zeitzaehler(double res) { ///Ist meine Zeit "voll", dann soll als Uhrzeit dargestellt werden. Z.B. /// temp1 = 9 => string "9:00" if(res%1 == 0) return zeit=("%d:00",res); ///Ist meine Zeit "halbvoll", dann soll als Uhrzeit dargestellt werden. ///Z.B. temp1 = 9.5 => string "9:30" else { res=res-0.5; return zeit=("%d:30",res); } } |
Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von »grillmeister« (03.02.2013, 10:55)
Benutzerinformationen überspringen
User
Registrierungsdatum: 28.07.2011
Derivat: Kein Ubuntu-Derivat
Version: gar kein Ubuntu
Architektur: 64-Bit PC
Desktop: unbekannt
Zitat
Weiss jemand wo man dieses Zeug, welches Poettering raucht, kaufen kann? Und brennt das dann auch mit nem normalen Feuerzeug? Oder brauch ich da jointd dazu, um den Rauch zu erzeugen?
Quellcode |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 |
#include <stdio.h> #include <stdlib.h> #include <time.h> #include <iostream> #include <ostream> using namespace std; FILE *out; int i,j,N,jahr,tagn,anf,end,days; int s1; char heute; char zeit; char anf_s, end_s; int zufall1,zufall2; double anf1, anf2, end1, end2, temp1, temp2; int main(void) { out=fopen("stundenabrechnung.csv", "w"); printf("Dieses Programm erstellt Ihnen für ein Jahr eine Stundenabrechnung.\n\ Bitte Jahreszahl eingeben:"); scanf("i%", &jahr); fprintf(out,"Stundenabrechnung für das Jahr %i\nDatum;Tag;Von;Bis;Dauer[h];\ Gesamt[h]\n", jahr); printf("Was war der erste Tag im Jahr?"); scanf("d% (Montag=1, Dienstag=2, Mittwoch=3, Donnerstag=4, Freitag=5\ Samstag=6, Sonntag=7", &s1); printf("Wie viele Tage hat dieses Jahr?"); scanf("%d", &days); printf("Wann fangen sie frühestens an zu arbeiten? Eingabe bitte\ nur ganz- oder halbzahlig (z.B. 9.00 Uhr = 9 oder 9.30 Uhr = 9.5)\n"); scanf("%d", &anf1); printf("Wann fangen sie spätestens an zu arbeiten? Eingabe bitte\ nur ganz- oder halbzahlig (z.B. 9.00 Uhr = 9 oder 9.30 Uhr = 9.5)\n"); scanf("%d", &end1); ///Erstelle mir ein kleines Zeitintervall von n*30 Minuten. n=temp1 verwende ///ich später als obere Grenze bei meiner Zufallszahl. temp1=1+(end1-anf1)*2; printf("Wann hören sie frühestens auf zu arbeiten? Eingabe bitte nur\ ganz- oder halbzahlig (z.B. 17.00 Uhr = 17 oder 17.30 Uhr = 17.5)\n"); scanf("%d", &anf2); printf("Wann hören sie spätestens auf zu arbeiten? Eingabe bitte\ nur ganz- oder halbzahlig (z.B. 17.00 Uhr = 17 oder 17.30 Uhr = 17.5)\n"); scanf("%d", &end2); temp2=1+(end2-anf2)*2; for(i=1;i<=days;i++) { ///Die for-Schleife soll so durchlaufen, dass sie alle 365 / 366 Tage ///des Jahres durchläuft. Ist der Tag kein FR, SA, SO soll tagn++. ///Ansonsten kommen noch andere Befehle hinzu. if(tagn==5) { ///Erstellt mir die zwei Zufallszeit wann ich anfange / aufhöre zu ///arbeiten. Allerdings wird diese Funktion garnet erst richtig ///ausgeführt, da wohl etwas mit dem Zufallsgenerator nicht stimmt. zeiten(); ///Soll mir einen String anhand meines doubles anf ausgeben. anf_s=zeitzaehler(anf); end_s=zeitzaehler(end); heute = ("FR"); fprintf(out," ;%s;%s;%s;%d; \n",heute,anf_s,end_s,end-anf); ///Kann man eine Berechnung wie hier, "end-anf" einfügen??? tagn++; } if(tagn==6) { time(); anf_s=zeitzaehler(anf); end_s=zeitzaehler(end); heute = "SA"; fprintf(out," ;%s;%s;%s;%d; \n",heute,anf,end,end-anf); tagn++; } if(tagn==7) { time(); anf_s=zeitzaehler(anf); end_s=zeitzaehler(end); heute = ("SO"); fprintf(out," ;%s;%s;%s;%d; \n",heute,anf,end,end-anf); tagn=0; } else tagn++; } } void zeiten() { ///Gibt mir eine Zufallszahl zwischen 0 und temp1 bzw. temp2 aus. srand(time(NULL)); zufall1 = rand() % temp1 + 0; srand(time(NULL)); zufall2 = rand() % temp2 + 0; ///Berechne mir eine "künstliche" Zeit an der ich zu arbeiten beginne. anf = anf1+zufall1*0.5; end = anf2+zufall2*0.5; ///Werden mir die beiden doubles anf und end auch so zur weiteren Berechnung ///zur Verfügung stehen?? return anf, end; } char zeitzaehler(double res) { ///Ist meine Zeit "voll", dann soll als Uhrzeit dargestellt werden. Z.B. /// temp1 = 9 => string "9:00" if(res%1 == 0) return zeit=("%d:00",res); ///Ist meine Zeit "halbvoll", dann soll als Uhrzeit dargestellt werden. ///Z.B. temp1 = 9.5 => string "9:30" else { res=res-0.5; return zeit=("%d:30",res); } } |
Benutzerinformationen überspringen
User
Registrierungsdatum: 14.09.2005
Derivat: Xubuntu
Architektur: 64-Bit PC
Desktop: XFCE
Du musst die Funktionen deklarieren, oder einfach die Funktionsblöcke vor main setzen (quick and dirty-Lösung, geht glaube ich aber nicht bei allen Compilereinstellungen)Zitat
#66: "zeiten" nicht deklariert
#68: "zeitzaehler" nicht deklariert
falscher Dateityp, für "heute" würde ich ein char-array nehmen, so:Zitat
#70: ungültige umzuweisung von "const char" nach "char"
Quellcode |
|
1 |
char[2] heute; |
ziemlich selbsterklärend, du musst time wohl mit einem Argument aufrufen, das wird wohl eine Zahl sein.Zitat
#85 zu wenig argumente für die Funktion "time_t time(time_t*)"
Quellcode |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
#include <stdio.h> #include <stdlib.h> #include <time.h> ///Zufallsgenerator: Läuft! int zufall(int t){ int random; srand (time (NULL)); random = (rand () % (t + 1)); return (random); } char zeitzaehler(double res) { char zeit[5]; double mod; double tpp; tpp = res; ///Ist meine Zeit "voll", dann soll als Uhrzeit dargestellt werden. Z.B. /// res = 9 => string "9:00" mod = (res % 1.); if(mod == 0){ return zeit=("%d%s", res, ':00'); } ///Ist meine Zeit "halbvoll", dann soll als Uhrzeit dargestellt werden. ///Z.B. tpp = 9.5 => string "9:30" else{ tpp=tpp-0.5; return zeit=("%d%s", res, ':30'); } } int main(void) { int s, e; double z1; char end[5]; printf("Gib mir eine Startzeit:\n"); scanf("%d", &s); printf("Gib mir eine Endzeit:\n"); scanf("%d", &e); /// s < e !!! z1 = zufall(1+(s-e)*2); end = zeitzaehler(s+z1*0.5); printf("Start: %d, Ende: %d, Zufall &d, Daten: &c\n",s,e,z1,end); system("PAUSE"); return 0; } |
Benutzerinformationen überspringen
User
Registrierungsdatum: 14.09.2005
Derivat: Xubuntu
Architektur: 64-Bit PC
Desktop: XFCE
Modulo ist eine "Ganzzahl-Operation", das macht mit Kommazahlen kein Sinn. Folglich musst du bei Modulo immer ein Ganzzahl-Typ nehmen, was meistens int entspricht.Zitat
Kann es sein das Modulo sich nicht mit Double verträgt?
Quellcode |
|
1 |
fmod(double x, double y) |
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »grillmeister« (26.01.2013, 16:03)
Benutzerinformationen überspringen
User
Registrierungsdatum: 14.09.2005
Derivat: Xubuntu
Architektur: 64-Bit PC
Desktop: XFCE
hier wandelst du die "1" in eine Fliesskommazahl (float) um, da du "1." schreibst, solche impliziten Umwandlungen sollten dir bewusst sein.Zitat
mod = (res % 1.);
Quellcode |
|
1 2 |
float res, nachkommazahl; nachkommazahl = res - (int)res; |
Immer eine while-Schleife brauchen, naja nicht sehr intelligent bei 3 Parametern...Zitat
Aber danke für den Tipp mit der Zeit, denke mit einer while-Schleife könnte sich da was machen lassen.
C/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
int zeitzaehler(int res, int *a, int *b) { int j=0; while(res>=60){ j++; res-=60; } *a = j; *b = res; } int main(void) { int s, e, temp, temp2, z1, a, b; printf("Gib mir eine Startzeit:\n"); scanf("%d", &s); printf("Gib mir eine Endzeit:\n"); scanf("%d", &e); temp=((e-s)*2+1); z1 = zufall(temp); temp2=(s*60+z1*30); printf("Start: %i, Ende: %i, Zufall %i, Start: %i:%i\n",s, e,z1,zeitzaehler(temp2, &a, &b)); system("PAUSE"); return 0; } |
Eigentlich war es mal so gedacht, dass die Stundenanzahl nur "voll" oder "halbvoll" sein kann und genau das soll erkannt werden. Aber ich denke das habe ich mit dem neuen Zeitzähler umgangen.Zitat
PS: dein "Zeitzähler"
soll bemerken ob es Punkt (:00) oder Halb (:30) ist, bei einer
Zeiteingabe, oder soll das eher eine Rundenfunktion sein, da bei dir nur
auf Halbestunden abgerechnet wird?
Ich dachte eigentlich das "1." immer exakt 1 bedeutet, auch wenn ich die Zahl als float darstelle. Damit kein 1,0000000009 o.ä. bei rauskommt.Zitat
hier wandelst du die "1" in eine Fliesskommazahl (float) um, da du "1."
schreibst, solche impliziten Umwandlungen sollten dir bewusst sein.
Das stimmt schon, aber zu dem Zeitpunkt dacht ich ja noch das Modulo auch Kommazahlen annimmt.Zitat
Res Modulo 1 macht eh wenig Sinn
Benutzerinformationen überspringen
User
Registrierungsdatum: 14.09.2005
Derivat: Xubuntu
Architektur: 64-Bit PC
Desktop: XFCE
Du musst dir im klaren sein, was die einzelnen Dateitypen bedeuten. Wie z. B. int, float,... du schaust dir am besten mal hier die Tabelle an, dort wird gezeigt welchen Wertebereich die einzelnen Datentypen haben.Zitat
Ich dachte eigentlich das "1." immer exakt 1 bedeutet, auch wenn ich die
Zahl als float darstelle. Damit kein 1,0000000009 o.ä. bei rauskommt.
Zitat
j und res will ich jetzt wieder an main übergeben, aber iwas stimmt noch nicht.
Quellcode |
|
1 |
zeitzaehler(temp2, &a, &b); |
Quellcode |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
printf("Dieses Programm erstellt Ihnen f\x81r ein Jahr eine Stundenabrechnung.\ Bitte Jahreszahl eingeben:\n"); scanf("i%", &jahr); fflush(stdin); if ( schaltjahr(jahr) ) tij=366; else tij=365; start_tag = starttag(jahr); out=fopen("stundenabrechnung.csv", "w"); fprintf(out,"Stundenabrechnung für das Jahr %i\n", jahr); |
Quellcode |
|
1 2 |
fprint("Dieses Programm..... Bitte Jahres.... |
Benutzerinformationen überspringen
User
Registrierungsdatum: 14.09.2005
Derivat: Xubuntu
Architektur: 64-Bit PC
Desktop: XFCE
ich würde dir empfehlen das % vor dem i zu schreiben, du kannst im Prinzip immer den gleichen Formatierungsstring nehmen wie beim printf.Zitat
scanf("i%", &jahr);
soweit ich weiss solltest du einmal öffnen und dann am Schluss noch die Datei schliessen. Das ganze mit den Files ist nicht ganz einfach, also wenn man es richtig mit einer gewissen Fehlersicherheit machen will.Zitat
Später werden noch weitere Daten in die .csv Datei geschrieben. Muss ich die Datei dann nochmal mit fopen öffnen?
Quellcode |
|
1 |
out=fopen("stundenabrechnung.csv", "w"); |
Kommt wohl auf den Editor an, du kannst aber glaube ich mit "Tabulator" nach vorne rücken, das sollte glaube ich bei printf überlesen werden, bin aber nicht ganz sicher.Zitat
Manchmal kommt es vor das mein Ausgabetext länger ist als der Bildschirm
breit (siehe Zeile 1 und 2). Durch \ + Enter kann ich zwar in der
nächsten Zeile weiterschreiben, aber ich hätte gern den Text unterhalb
des Textanfangs, also das es so aussieht:
Quellcode |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 |
#include <stdio.h> #include <stdlib.h> #include <time.h> #include <math.h> #include <string.h> char tg[4]; int zufall(int z) { time_t t; time(&t); srand((unsigned int)t); return (rand() % z ); } void zeitzaehler(int *a, int *b, int res){ int j=0; while(res>=60){ j++; res-=60; } *a = j; *b = res; ///return 0; } int schaltjahr(int j){ if ( j % 4 == 0 && j % 100 != 0 || j % 400 == 0 ) return 1; else return 0; } int starttag(int j){ int i,temp=0; for(i=2001;i<j;i++){ if(schaltjahr(i)) temp+=366; else temp+=365; } temp %= 7; return temp; ///temp=1 für 2012 } int monatszaehler(int tagn, int jahr, int *tag, int *monat ){ int f; if(jahr==366) f = 1; else f = 0; if(tagn<=31) ///Januar return (*tag=tagn, *monat=1); else if( 59+f >= tagn) ///Februar return (*tag=tagn-31, *monat=2); else if( 90+f >= tagn) ///März return (*tag=tagn-59-f, *monat=3); else if((120+f)>=tagn) ///April return (*tag=tagn-90-f, *monat=4); else if((151+f)>=tagn) ///Mai return (*tag=tagn-120-f, *monat=5); else if((181+f)>=tagn) ///Juni return (*tag=tagn-151-f, *monat=6); else if((212+f)>=tagn) ///Juli return (*tag=tagn-181-f, *monat=7); else if((243+f)>=tagn) ///August return (*tag=tagn-212-f, *monat=8); else if((273+f)>=tagn) ///September return (*tag=tagn-243-f, *monat=9); else if((304+f)>=tagn) ///Oktober return (*tag=tagn-273-f, *monat=10); else if((334+f)>=tagn) ///November return (*tag=tagn-304-f, *monat=11); else return (*tag=tagn-334-f, *monat=12); ///Dezember } void tageszaehler(int tag){ switch(tag){ case 0 : strcpy(tg, "Mo") ; break; case 1 : strcpy(tg, "Di") ; break; case 2 : strcpy(tg, "Mi") ; break; case 3 : strcpy(tg, "Do") ; break; case 4 : strcpy(tg, "Fr") ; break; case 5 : strcpy(tg, "Sa") ; break; case 6 : strcpy(tg, "So") ; break; } } int main(void){ FILE *out; int tag_jahr, tij, start_tag, k; int m; ///Laufvariable char tag[20]; float anf1[7], anf2[7], end1[7], end2[7]; double temp1[7], temp2[7]; int tester[7]; int jahr, p=1; int i, l; double zufall_start[7], zufall_ende[7]; int a,b,c,d,e,f,g,h; int tep1[7], tep2[7]; printf("Dieses Programm erstellt Ihnen f\x81r ein Jahr eine Stundenabrechnung.\nBitte Jahreszahl eingeben:\n"); scanf("%i", &jahr); fflush(stdin); if ( schaltjahr(jahr) ) tij=366; else tij=365; out=fopen("stundenabrechnung.csv", "w+"); fprintf(out,"Stundenabrechnung für das Jahr %d\n\n Datum ; Tag ; Von ; Bis ; Dauer[h] ; Gesamt[h]\n", jahr ); for(m=0;m<7;m++) { switch(m) { case 0 : strcpy(tag, "Montag") ; break; case 1 : strcpy(tag, "Dienstag") ; break; case 2 : strcpy(tag, "Mittwoch") ; break; case 3 : strcpy(tag, "Donnerstag") ; break; case 4 : strcpy(tag, "Freitag") ; break; case 5 : strcpy(tag, "Samstag") ; break; case 6 : strcpy(tag, "Sonntag") ; break; } printf("Arbeitest du am %s ? (Ja=1, Nein=0)\n\n", tag); scanf("%i", &k); fflush(stdin); printf("\n"); if(k==1) { tester[m]=1; printf("Wann f\x84ngst du am %s fr\x81hestens an zu arbeiten? Eingabe nur ganz- oder halbzahlig (z.B. 9:00 Uhr = 9 oder 9:30 Uhr = 9.5)\n", tag); scanf("%f", &anf1[m]); fflush(stdin); printf("Wann f\x84ngst du am %s sp\x84testens an zu arbeiten? Eingabe nur ganz- oder halbzahlig (z.B. 9:00 Uhr = 9 oder 9:30 Uhr = 9.5)\n", tag); scanf("%f", &end1[m]); fflush(stdin); printf("Wann h\x94rst du am %s fr\x81hestens auf zu arbeiten? Eingabe nur ganz- oder halbzahlig (z.B. 17:00 Uhr = 17 oder 17:30 Uhr = 17.5)\n", tag); scanf("%f", &anf2[m]); fflush(stdin); printf("Wann h\x94rst du am %s sp\x84testens auf zu arbeiten? Eingabe nur ganz- oder halbzahlig (z.B. 17:00 Uhr = 17 oder 17:30 Uhr = 17.5)\n", tag); scanf("%f", &end2[m]); fflush(stdin); temp1[m] = (int)(1+(end1[m]-anf1[m])*2); temp2[m] = (int)(1+(end2[m]-anf2[m])*2); } else { printf("Du faule Socke ;)\n\n"); tester[m]=0; temp1[m]=0; temp2[m]=0; } } start_tag = starttag(jahr); for(i=1;i<=tij;i++) { if(tester[start_tag] == 1) { zufall_start[start_tag] = (rand() % (int)(1+(end1[start_tag]-anf1[start_tag])*2)); zufall_ende[start_tag] = (rand() % (int)(1+(end2[start_tag]-anf2[start_tag])*2)); tep1[start_tag] = ((int)((anf1[start_tag]*60)+(zufall_start[start_tag]*30))); tep2[start_tag] = ((int)((anf2[start_tag]*60)+(zufall_ende[start_tag]*30))); zeitzaehler(&a, &b, tep1[start_tag] ); zeitzaehler(&c, &d, tep2[start_tag] ); zeitzaehler(&e, &f, ( (c-a)*60+(d-b) )); tageszaehler(start_tag); monatszaehler(i,tij,&g,&h); /// Datum Tag Von Bis Dauer[h] Gesamt[h] fprintf(out," %02d.%02d. ; %s ; %02d:%02d ; %02d:%02d ; %02d:%02d \n",g,h,tg,a,b,c,d,e,f); } start_tag++; if(start_tag % 7 == 0) { fprintf(out,"\n"); p++; } start_tag %= 7; } printf("\nDie Stundenabrechnung wurde erfolgreich erstellt und steht dir nun unter dem Namen "Stundenabrechnung.csv" im gleichen Ordner wie \ dieses Programm zur Verf\x81gung.\n\nBeachte gegebenfalls noch die \x9A \berschneidung mit eventuellen Feiertagen.\n\n"); system("PAUSE"); } |
Quellcode |
|
1 2 3 4 5 6 7 8 9 10 11 12 |
double *x ///Zeiger x deklariert, x sammelt die gesamten Koordinaten aller Teilchen auf, sollte somit ein 1-dim Array sein int N; ... scanf("%d", N); ///Teilchenanzahl N festgelegt ... x=(double*)malloc(N*sizeof(double)); ///Speicher reservieren für den Vektor x der Größe "N*double" ... for(i=0;i<N;i++) { x[i] = 0.0; ///Startpunkt aller N-Koordinaten auf 0 setzen } ... |
Quellcode |
|
1 2 3 |
int N; scanf("%d", N); double x[N] ={0.0}; |
Benutzerinformationen überspringen
User
Registrierungsdatum: 14.09.2005
Derivat: Xubuntu
Architektur: 64-Bit PC
Desktop: XFCE
dein zweiter Code funktioniert nicht, da N zur Laufzeit nicht bekannt ist. Deshalb ist es für den Compiler unmöglich den Speicherplatz für "double x[N]" zu reservieren.Zitat
dann muss ich das im ersten Fall nur so kompliziert machen, weil ich nicht weiß wie groß N überhaupt ist, oder?
Speicherplatz wird für das Objekt also den "double" reserviert, es ist egal welche Zahl darin gespeichert wird. Jeder double braucht immer gleich viel Platz im Speicher, es muss theoretisch möglich sein den kleinsten oder grössten Wert eines doubles darin zu speichern.Zitat
Oder wird mir im 2. Fall nur Speicher für eine N*"0" und nicht für N*"double" reserviert?
Benutzerinformationen überspringen
User
Registrierungsdatum: 14.09.2005
Derivat: Xubuntu
Architektur: 64-Bit PC
Desktop: XFCE
Pointer und Arrays sind verwandt. Das Stichwort hier heisst "Pointeraritmetik", dein Array macht das indirekt auch. Oder auch auf Deutsch nach "Zeiger und Vektoren" suchen.Zitat
warum ich x Anfangs als Pointer definiere, ihn aber später wie ein 1-dim Array verwenden kann (x[i] etc.)[/i
Sponsorenwerbung: |
Hardware, Computer, PCs, Notebooks & Laptops mit Linux |
Forensoftware: Burning Board®, entwickelt von WoltLab® GmbH
Individuelle Notebooks Laptops - Individuelle Computer PCs - Linux Notebooks & Computers
Lastminute - Ubuntu Linux - Abmahnung - Geek und Nerd Shirt Shop
T-Shirts - sanierung wien