Zeitmessung mit _ftime

Schnelle objektorientierte, kompilierende Programmiersprache.
Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8859
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Zeitmessung mit _ftime

Beitrag von Xin » Do Sep 25, 2008 6:34 pm

nufan hat geschrieben:
fat-lobyte hat geschrieben:Was sollen denn die Backslashes??
Tja... so wars in dem Beispiel im Internet auch angegeben. Und viel mehr Anhaltspunkte hab ich nicht.
Kein guter Anhaltspunkt...

Ich glaube, ich verstehe das Problem eigentlich nicht, dass Du da lösen möchtest. Da ist viel Sourcecode, der irgendwas macht, was genau möchtest Du überhaupt messen?
nufan hat geschrieben:

Code: Alles auswählen

printf ("\n\n\nZeit: %hu ms, 1: %hu, 2: %hu", diff, milli1, milli2);
Es "sollte" die benötigte Zeit in Millisekunden und den 1. und den 2. Zeitwert ausgeben.
Wofür steht das h in %hu?
nufan hat geschrieben:Hab den Wert jetzt mal auf 100.000 gesetzt und bekomm eine Differenz von 158 ms! Aber eigentlich sollte ja auch schon die Zuweisung in der Schleife einen messbaren Unterschied machen, oder? Die Berechnung dauert jetzt ca 5 Sekunden. Jetzt muss ich die auch noch berechnen.
Wenn Du einen Unterschied messen möchtest, dann solltest Du ein Programm machen, was zweimal die gleiche Aufgabe löst und dann die Zeiten ausgibt - ich kann aus Deinem Programm immernoch nicht erkennen, wo Du irgendwas vergleichen möchtest!?
nufan hat geschrieben:
fat-lobyte hat geschrieben:Irgendwann muss der Computer doch zum rechnen anfangen.
Ich denke, dass eher bei der Berechnung der 2. Zeit was nicht stimmt. Das Programm macht derzeit nichts, außer einem 100.000er Array Werte von 100.000 bis 1 zuzuweisen, vorher und nachher die Zeit auszulesen, die Werte zu subtrahieren und ausgeben.
100000 Zuweisungen in einer Schleife... Das ist ein if, das goto wird von der Prozessorpipe gekillt, ein inc und eine zuweisung. Seien wir großzügig und schlagen wir 3 Takte an, also 300000 Takte. Nehmen wir der Einfachheit halber an, dass Deine CPU 1GHz hat, dann sind das 0,0003 Sekunden Laufzeit für diese Schleife.
Da Deine Schleife nicht optimiert geschrieben wurde, verdoppelt oder verdreifacht sich die Zeit vielleicht. Also sagen wir 0,001s. Wenn man den Linuxkernel auf eine Taktung von 100Hz einstellt, dann kann er Zeitunterschiede von 0,01s so abschätzen (!= messen).

Lass es mich so formulieren: Deine Aufgabe ist für eine moderne CPU nichtmals ein Grund den Energiesparmodus zu verlassen... ;-)
Pack da eine Schleife drumrum, die die 10.0000 Zuweisungen 10.000mal ausführt. Das sollte sich je nach CPU zwischen 5-25 Sekunden bewegen.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

nufan
Wiki-Moderator
Beiträge: 2558
Registriert: Sa Jul 05, 2008 3:21 pm

Re: Zeitmessung mit _ftime

Beitrag von nufan » Do Sep 25, 2008 6:54 pm

Xin hat geschrieben:ch glaube, ich verstehe das Problem eigentlich nicht, dass Du da lösen möchtest. Da ist viel Sourcecode, der irgendwas macht, was genau möchtest Du überhaupt messen?
Zweimal Selectsort - einmal mit Index und einmal mit Pointer auf das Feld. Und dann prüfen welche Version die Aufgabe schneller löst.
Xin hat geschrieben:Wofür steht das h in %hu?
Ganz ehrlich.. kA. :( Hab das aber in verschiedenen Anleitungen gefunden.
[EDIT]
If you use "%hu", printf() still reads an int, but converts it to
an unsigned short.
von: http://gcc.gnu.org/ml/gcc-help/2002-10/msg00301.html
[/EDIT]
Xin hat geschrieben:Wenn Du einen Unterschied messen möchtest, dann solltest Du ein Programm machen, was zweimal die gleiche Aufgabe löst und dann die Zeiten ausgibt - ich kann aus Deinem Programm immernoch nicht erkennen, wo Du irgendwas vergleichen möchtest!?
Wenn ich mal eine Version hab, ist die zweite kein Problem mehr - egal ob im selben Programm oder einzeln.

Ich hab eigentlich nur mehr das Problem, die Sekunden aus dem String zu bekommen (genauer mach ich's glaub ich nicht). Mit atoi () kann ich nur einen Zahlenblock konvertieren. Der String sieht aber ungefähr so aus:
Thu Sep 25 19:52:00 2008
Also immer wieder chars dazwischen... mit atoi () bekomm ich nur 25.

Wenn ich versuche den String auf einen von mir erstellten mit strcpy zu kopieren, hängt sich der ganze Compiler auf (Memory Access Violation).

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8859
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Zeitmessung mit _ftime

Beitrag von Xin » Do Sep 25, 2008 9:15 pm

nufan hat geschrieben:
Xin hat geschrieben:ch glaube, ich verstehe das Problem eigentlich nicht, dass Du da lösen möchtest. Da ist viel Sourcecode, der irgendwas macht, was genau möchtest Du überhaupt messen?
Zweimal Selectsort - einmal mit Index und einmal mit Pointer auf das Feld. Und dann prüfen welche Version die Aufgabe schneller löst.
Ich geb' zu, so genau habe ich mir den Code nicht angeguckt... momentan komme ich zu nix und das wird wohl auch noch eine Woche so weitergehen.
nufan hat geschrieben:
Xin hat geschrieben:Wofür steht das h in %hu?
Ganz ehrlich.. kA. :( Hab das aber in verschiedenen Anleitungen gefunden.
Zwei Dinge:
1. Verwende nichts in Programmen, dass Du nicht verstehst.
2. Finde raus, was es bedeutet, so dass Du es verstehst und trage es in C:printf ein ^^
nufan hat geschrieben:[EDIT]
If you use "%hu", printf() still reads an int, but converts it to
an unsigned short.
von: http://gcc.gnu.org/ml/gcc-help/2002-10/msg00301.html
[/EDIT]
Das sind schonmal 50% von 2. ^^

Hab ich auch wieder was gelernt, ich benutze shorts äußerst selten und dann in der Regel nicht zum Ausgeben per printf().
nufan hat geschrieben:
Xin hat geschrieben:Wenn Du einen Unterschied messen möchtest, dann solltest Du ein Programm machen, was zweimal die gleiche Aufgabe löst und dann die Zeiten ausgibt - ich kann aus Deinem Programm immernoch nicht erkennen, wo Du irgendwas vergleichen möchtest!?
Wenn ich mal eine Version hab, ist die zweite kein Problem mehr - egal ob im selben Programm oder einzeln.
Mach's im gleichen Programm...
nufan hat geschrieben:Ich hab eigentlich nur mehr das Problem, die Sekunden aus dem String zu bekommen (genauer mach ich's glaub ich nicht). Mit atoi () kann ich nur einen Zahlenblock konvertieren. Der String sieht aber ungefähr so aus:
Thu Sep 25 19:52:00 2008
Also immer wieder chars dazwischen... mit atoi () bekomm ich nur 25.
Hiiiillfe.... ;-)

time() liefert Dir doch Sekunden als long!?
Es gibt auf jedenfall passende Funktionen - auch für Millisekunden, wobei das eben nicht Millisekundengenau gesteppt wird.
nufan hat geschrieben:
nufan hat geschrieben:Wenn ich versuche den String auf einen von mir erstellten mit strcpy zu kopieren, hängt sich der ganze Compiler auf (Memory Access Violation).
Compiler oder Dein Programm?

Ich gehe davon aus, dass es Dein Programm ist. Wenn Du die Zeit hast, korrigiere das erst, bevor Du auf eine sinnvollere Funktion umsteigst. Das ist eine gute Übung.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
fat-lobyte
Beiträge: 1398
Registriert: Sa Jul 05, 2008 12:23 pm
Wohnort: ::1
Kontaktdaten:

Re: Zeitmessung mit _ftime

Beitrag von fat-lobyte » Fr Sep 26, 2008 8:50 am

Xin hat geschrieben:
nufan hat geschrieben:
Xin hat geschrieben:Wofür steht das h in %hu?
Ganz ehrlich.. kA. :( Hab das aber in verschiedenen Anleitungen gefunden.
Zwei Dinge:
1. Verwende nichts in Programmen, dass Du nicht verstehst.
2. Finde raus, was es bedeutet, so dass Du es verstehst und trage es in C:printf ein ^^
nufan hat geschrieben:[EDIT]
If you use "%hu", printf() still reads an int, but converts it to
an unsigned short.
von: http://gcc.gnu.org/ml/gcc-help/2002-10/msg00301.html
[/EDIT]
Das sind schonmal 50% von 2. ^^

Hab ich auch wieder was gelernt, ich benutze shorts äußerst selten und dann in der Regel nicht zum Ausgeben per printf().
Das "h" in "%hu" bedeutet konvertiere zu unsigned short. Dann müssen aber auch die Parameter, die du übergibst vom Typ short oder unsigned short sein.

Wenn du nicht weißt, was eine Funktion tut, dann sieh nach! Auf jedem Linux System sind ein Haufen von Manpages isntalliert, die alles genau beschreiben.
installiere das Paket "manpages-dev", und gib dann in die kommandozeile "man 3 printf" ein. Das bedeutet "Zeige die Anleitung von printf, die in der Sektion 3 (Funktionen) enthalten ist". Rauf mit Pfeil nach oben oder "k", runter mit Pfeil nach oben oder "j", verlassen mit "q".
Wenn du das tust, wirst du unter anderem folgenden Text vorfinden:
man 3 printf hat geschrieben: ...
The length modifier
Here, âinteger conversionâ stands for d, i, o, u, x, or X conversion.

hh A following integer conversion corresponds to a signed char or
unsigned char argument, or a following n conversion corresponds
to a pointer to a signed char argument.

h A following integer conversion corresponds to a short int or
unsigned short int argument, or a following n conversion corre-
sponds to a pointer to a short int argument.

l (ell) A following integer conversion corresponds to a long int
or unsigned long int argument, or a following n conversion cor-
responds to a pointer to a long int argument, or a following c
conversion corresponds to a wint_t argument, or a following s
conversion corresponds to a pointer to wchar_t argument.

...


Alternativ sieh in einer Referenz nach, es gibt genug auf dieser Welt. Eine kleine Sammlung von Referenzen, in denen du printf() findest, findest du hier:
http://tutorial.proggen.org/doku.php?id ... referenzen

Nimm eine der ersten beiden.
Haters gonna hate, potatoes gonna potate.

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8859
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Zeitmessung mit _ftime

Beitrag von Xin » Fr Sep 26, 2008 8:58 am

fat-lobyte hat geschrieben:
nufan hat geschrieben:
Xin hat geschrieben:Wofür steht das h in %hu?
Ganz ehrlich.. kA. :(
[EDIT]
If you use "%hu", printf() still reads an int, but converts it to an unsigned short.
Das "h" in "%hu" bedeutet konvertiere zu unsigned short. Dann müssen aber auch die Parameter, die du übergibst vom Typ short oder unsigned short sein.
Da steht, dass er weiterhin ein int liest und dieses konvertiert. Es muss also kein short sein, lediglich wird der höhere Teil nicht ausgegeben. Selbiges steht in Deinem Auszug Deiner Manpage!?
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
fat-lobyte
Beiträge: 1398
Registriert: Sa Jul 05, 2008 12:23 pm
Wohnort: ::1
Kontaktdaten:

Re: Zeitmessung mit _ftime

Beitrag von fat-lobyte » Fr Sep 26, 2008 9:19 am

Xin hat geschrieben:
fat-lobyte hat geschrieben:Da steht, dass er weiterhin ein int liest und dieses konvertiert. Es muss also kein short sein, lediglich wird der höhere Teil nicht ausgegeben. Selbiges steht in Deinem Auszug Deiner Manpage!?
Tatsächlich... Mein Fehler.
Wenigstens weiß jetzt jeder, was "%hu" bedeutet ;-)


Übrigens:
fat-lobyte hat geschrieben:Wo wird eigentlich die Variable "len" gesetzt? Ist die nicht für dafür verantwortlich,wie oft die schleife wirklich durchläuft?
Ich habe das nicht gefragt, weil ich so gerne wissen wollte, wo die Variable gesetzt wird, und welche Variable für die Schleife verantwortlich ist.
Ich habe das gefragt, damit DU darüber nachdenkst, und dir den Code ansiehst! Hättest du das getan wären dir folgende Dinge aufgefallen:
  • Die Funktion "void sort (int x[ANZ], int len);" beinhaltet eine Schleife, die "len-1" mal durchläuft.
  • Die Variable "len" wird in main() mit 0 initialisiert, und dann mithilfe der Funktion "void eingabe (int x[ANZ], int *len)" eingabe gesetzt, und dann an sort() übergeben. Die Zeile ist aber auskommentiert!
Fazit: len=0 wird an sort übergeben, dass dann solange durchläuft wie i kleiner als -1 ist. Das ist NIE der FAll, deswegen läuft auch die schleife gar nicht durch.


Das ist ein kleiner Fehler, der uns allen viel zu oft passiert, deswegen braucht sich keiner zu schämen.
Ich hatte gehofft, dass du durch meine Frage vielleicht von selbst draufkommst, aber so gehts natürlich auch.
Haters gonna hate, potatoes gonna potate.

nufan
Wiki-Moderator
Beiträge: 2558
Registriert: Sa Jul 05, 2008 3:21 pm

Re: Zeitmessung mit _ftime

Beitrag von nufan » Fr Sep 26, 2008 1:27 pm

Xin hat geschrieben:time() liefert Dir doch Sekunden als long!?
Es gibt auf jedenfall passende Funktionen - auch für Millisekunden, wobei das eben nicht Millisekundengenau gesteppt wird.
Es sollte aber mit ftime () sein :cry:
Xin hat geschrieben:
nufan hat geschrieben:Wenn ich versuche den String auf einen von mir erstellten mit strcpy zu kopieren, hängt sich der ganze Compiler auf (Memory Access Violation).
Compiler oder Dein Programm?
Beides. Das Programm stoppt und die ganze IDE inklusive Compiler hängt sich auf. Da hilft nur Taskmanager und dann neu starten.
fat-lobyte hat geschrieben:Fazit: len=0 wird an sort übergeben, dass dann solange durchläuft wie i kleiner als -1 ist. Das ist NIE der FAll, deswegen läuft auch die schleife gar nicht durch.
Ja... inzwischen hab ichs auch gesehen. Ich dachte ich hätte ANZ anstelle von len gesetzt.
fat-lobyte hat geschrieben:Alternativ sieh in einer Referenz nach, es gibt genug auf dieser Welt. Eine kleine Sammlung von Referenzen, in denen du printf() findest, findest du hier:
http://tutorial.proggen.org/doku.php?id ... referenzen
Genau da hab ich gesucht. Nur anscheinend nach der falschen Funktion...


EDIT:
Hier noch der etwas veränderte Code:

Code: Alles auswählen

#include <sys/types.h>
#include <sys/timeb.h>
#include <stdio.h>
#include <time.h>

#define ANZ 100000

void sort (int x[ANZ], int len);
void swap (int *x, int *y);

int main ()
{

  int x[ANZ], len=ANZ;
  unsigned short int milli1, milli2, diff;
  struct timeb timebuffer;

  ftime(&timebuffer);
  milli1=timebuffer.millitm;

  printf("Aktuelle Zeit:  %s\n", ctime(&(timebuffer.time)));

  for (int i=100000; i>0; i--)
    x[i]=i;

  sort (x, len);

  ftime(&timebuffer);
  milli2=timebuffer.millitm;

  diff=milli2-milli1;

  printf ("\n\n\nms: diff: %hu ms, 1: %hu, 2: %hu\n", diff, milli1, milli2);
  printf("Aktuelle Zeit:  %s\n", ctime(&(timebuffer.time)));

  for (int i=0; i<ANZ; i++)
    printf ("%d  ", x[i]);

  getchar ();
  return 0;

}


void sort (int x[ANZ], int len)
{

  int i, j, min, indmin;

  for (i=0; i<ANZ-1; ++i)
  {

    min=x[i];
    indmin=i;

    for (j=i+1; j<ANZ; ++j)
    {

      if (x[j]<min)
      {
        min=x[j];
        indmin=j;
      }

    }

    swap(&x[i], &x[indmin]);

  }

}


void swap (int *x, int *y)
{

  int help;

  help=*x;
  *x=*y;
  *y=help;

}
Die Zeit wird (soweit ich das mit meiner Armbanduhr feststellen kann) korrekt ausgegeben. Nur die Sekunden kann ich nicht subtrahieren...

Benutzeravatar
Kerli
Beiträge: 1456
Registriert: So Jul 06, 2008 10:17 am
Wohnort: Österreich
Kontaktdaten:

Re: Zeitmessung mit _ftime

Beitrag von Kerli » Fr Sep 26, 2008 7:12 pm

nufan hat geschrieben:Nur die Sekunden kann ich nicht subtrahieren...
Weshalb nicht? Soweit ich in deinem Link im ersten Post von dir richtig gelesen habe, hat timeb ein Element mit dem Namen time, das die Sekunden seit 1.1.1970 00:00:00 beinhaltet. Wo liegt da das Problem den Wert am Anfang von dem am Ende abzuziehen?
"Make it idiot-proof and someone will invent an even better idiot." (programmers wisdom)

OpenGL Tutorials und vieles mehr rund ums Programmieren: http://www.tomprogs.at

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8859
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Zeitmessung mit _ftime

Beitrag von Xin » Fr Sep 26, 2008 7:36 pm

nufan hat geschrieben:
Xin hat geschrieben:time() liefert Dir doch Sekunden als long!?
Es gibt auf jedenfall passende Funktionen - auch für Millisekunden, wobei das eben nicht Millisekundengenau gesteppt wird.
Es sollte aber mit ftime () sein :cry:
ftime() liefert Dir eine Struktur mit allen wichtigen Daten zurück - wo ist denn das Problem?
Das einzige, was Du beachten musst ist, dass Du ausreichend Zeit verbraucht, weil ein Computer nunmal nicht millisekunden genau die Uhr weiterdreht.
nufan hat geschrieben:
Xin hat geschrieben:
nufan hat geschrieben:Wenn ich versuche den String auf einen von mir erstellten mit strcpy zu kopieren, hängt sich der ganze Compiler auf (Memory Access Violation).
Compiler oder Dein Programm?
Beides. Das Programm stoppt und die ganze IDE inklusive Compiler hängt sich auf. Da hilft nur Taskmanager und dann neu starten.
Dann hast Du a) einen fehlerhaften Computer und b) ein fehlerhaftes Programm.
Reparier Dein Programm.
nufan hat geschrieben:EDIT:
Hier noch der etwas veränderte Code:

Die Zeit wird (soweit ich das mit meiner Armbanduhr feststellen kann) korrekt ausgegeben. Nur die Sekunden kann ich nicht subtrahieren...
Wie schon beschrieben, Du tust nichts, was einen Computer vom Gähnen abhalten könnte. Wenn Du Geschwindigkeittests machen willst, dann solltest du das ein paar tausend machen und davon die Zeit nehmen.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

nufan
Wiki-Moderator
Beiträge: 2558
Registriert: Sa Jul 05, 2008 3:21 pm

Re: Zeitmessung mit _ftime

Beitrag von nufan » Fr Sep 26, 2008 9:14 pm

Kerli hat geschrieben:
nufan hat geschrieben:Nur die Sekunden kann ich nicht subtrahieren...
Weshalb nicht? Soweit ich in deinem Link im ersten Post von dir richtig gelesen habe, hat timeb ein Element mit dem Namen time, das die Sekunden seit 1.1.1970 00:00:00 beinhaltet. Wo liegt da das Problem den Wert am Anfang von dem am Ende abzuziehen?
Ich kenn mich mit Strings nicht besonders aus... wie muss ich was abziehen?
Wenn ich das Ergebnis auf einen eigenen String übertragen könnte, wäre die Sache schon viel einfacher. So hab ich nur das Ergebnis von

Code: Alles auswählen

ctime(&(timebuffer.time))
Xin hat geschrieben:ftime() liefert Dir eine Struktur mit allen wichtigen Daten zurück - wo ist denn das Problem?
Das einzige, was Du beachten musst ist, dass Du ausreichend Zeit verbraucht, weil ein Computer nunmal nicht millisekunden genau die Uhr weiterdreht.
ftime liefert eine Struktur:
dstflag
Nonzero if daylight savings time is currently in effect for the local time zone. (See _tzset for an explanation of how daylight savings time is determined.)

millitm
Fraction of a second in milliseconds.

time
Time in seconds since midnight (00:00:00), January 1, 1970, coordinated universal time (UTC).

timezone
Difference in minutes, moving westward, between UTC and local time. The value of timezone is set from the value of the global variable _timezone (see _tzset).


Die Struktur liefert alle Daten zurück, aber ich will die Differenz zwischen Anfang und Ende ausrechnen, mit den Sekunden aus time.
Xin hat geschrieben:Dann hast Du a) einen fehlerhaften Computer und b) ein fehlerhaftes Programm.
Ich tippe auf b), bis zum nächsten Formatieren habe ich noch fast 6 Monate :)
Xin hat geschrieben:Wie schon beschrieben, Du tust nichts, was einen Computer vom Gähnen abhalten könnte. Wenn Du Geschwindigkeittests machen willst, dann solltest du das ein paar tausend machen und davon die Zeit nehmen.
Für die Zuweisung, Sortierung und Ausgabe brauch ich knapp über 5 Sekunden - also schon ein deutlich messbarer Wert.


EDIT: Ich glaub ich hab die Lösung. Der Code kommt gleich...
EDIT2: Ok, hier ein funktionierender Code:

Code: Alles auswählen

#include <sys/types.h>
#include <sys/timeb.h>
#include <stdio.h>
#include <time.h>
#include <string.h>
#include <stdlib.h>

#define ANZ 100000

void sort (int x[ANZ], int len);
void swap (int *x, int *y);

int main ()
{

  int x[ANZ], len=ANZ, i, stop=0, anzdop=0, sek1, sek2, sekdiff;
  unsigned short int milli1, milli2, diff;
  struct timeb timebuffer;
  char s[25], sek[2];

  ftime(&timebuffer);
  milli1=timebuffer.millitm;

  strcpy (s, ctime(&(timebuffer.time)));

  for (i=0; stop==0; i++)
  {

    if (s[i] == ':')
      anzdop++;

    if (anzdop == 2)
    {

      sek[0]=s[i+1];
      sek[1]=s[i+2];

      sek1=atoi(sek);

      stop=1;

    }

  }

  for (int i=100000; i>0; i--)
    x[i]=i;

  sort (x, len);

  ftime(&timebuffer);
  milli2=timebuffer.millitm;

  strcpy (s, ctime(&(timebuffer.time)));

  stop=0;
  anzdop=0;

  for (i=0; stop==0; i++)
  {

    if (s[i] == ':')
      anzdop++;

    if (anzdop == 2)
    {

      sek[0]=s[i+1];
      sek[1]=s[i+2];

      sek2=atoi(sek);

      stop=1;

    }

  }

  if (sek1>sek2)
    sekdiff=sek2+60-sek1;

    else
      sekdiff=sek2-sek1;

  if (milli1>milli2)
    diff=milli2+100-milli1;

    else
      diff=milli2-milli1;

  printf ("Dauer der Berechnung: %d.%3hu s", sekdiff, diff);

  getchar ();
  return 0;

}


void sort (int x[ANZ], int len)
{

  int i, j, min, indmin;

  for (i=0; i<ANZ-1; ++i)
  {

    min=x[i];
    indmin=i;

    for (j=i+1; j<ANZ; ++j)
    {

      if (x[j]<min)
      {
        min=x[j];
        indmin=j;
      }

    }

    swap(&x[i], &x[indmin]);

  }

}


void swap (int *x, int *y)
{

  int help;

  help=*x;
  *x=*y;
  *y=help;

}
Sicher noch optimierbar, aber funktioniert.
Frage: Kann ich die Millisekunden auch auf drei Vorkommastellen ausgeben, sodass die nicht belegten Stellen mit 0 ersetzt werden? Wenn z.B. die Differenz 81 ist, wird 5.81 ausgegeben, was ja falsch ist. Schreibe ich %3hu, wird ein Leerzeichen gesetzt, also 5. 81. Geht da auch ne 0 statt dem Leerzeichen?
So jetzt muss ich das noch mit Pointer schreiben, aber das schaff ich jetzt hoffentlich allein :) Also danke für die Hilfe.

Antworten