C Sekunden in Zeit angeben

Hallo, ich hab hier eine folgende aufgabe

Ein Programm soll einen eingelesenen ganzzahligen, nichtnegativen Sekundenbetrag in die Darstellung Wochen, Tage,
Stunden, Minuten, Sekunden umwandeln und ausgeben. Beispiel: 6574548 s = 10 Wochen, 6 Tage, 2:15:48 Stunden. Die
Ausgaben ?Woche? bzw. ?Wochen? und ?Tag? bzw. ?Tage? sollen sprachlich korrekt erfolgen, also z.B. ?1 Tag?, aber
?3 Tage?. In einem Programmlauf soll mehr als ein Sekundenwert umgewandelt werden können. Überlegen Sie sich dazu
ein geeignetes Abbruchkriterium!


Code:
#include <stdio.h>
#include <math.h> 
/*Kompiliert wird mit gcc -o NAME -lm NAME.c */

int main()
{
      //initialisieren
      int sek, min = 0, std = 0, tag = 0, woche = 0, i,j,k,l;

      printf("Sekunden in Zeit\n");
      printf("Geben sie die Sekdunden an: ");
      scanf("%d",&sek); 
      fflush(stdin); 
      
      //Berechnung in der Schleife
      for (i = 0; sek > 60; i++)
      {
	  sek = sek - 60;
	  min = min + 1;
	  for (j = 0; min > 60; i++)
	  {
		min = min - 60;
		std = std + 1;
		for (k = 0; std > 24; i++)
		{
		    std = std - 24;
		    tag = tag + 1;
		    for (l = 0; tag > 7; i++)
		    {
			tag = tag - 7;
			woche = woche + 1;
		    }
		}
	  }
      }

      if (woche = 1){printf("Wir haben %d Woche, ",woche);}
      else {printf("Wir haben %d Wochen, ",woche);}
      if (tag = 1){printf("%d Tag, ",tag);}
      else {printf("%d Tage, ",tag);}
      if (std = 1){printf("%d:%d:%d Stunde\n",std,min,sek);}
      else {printf("%d:%d:%d Stunden\n",std,min,sek);}
      printf("Programm zuende\n");

return 0;
}


Ich finde da einfach kein fehler, ich hab ganz genau mehrere male nach einem Fehler gesucht.
Am ende kommt da immer sowas heraus:

Wir haben 1 Woche, 1 Tag, 1:14:7 Stunde

was völlig falsch ist. Kann einer helfen?

Wäre sehr dankbar. =)
 
Code:
 if (woche = 1){printf("Wir haben %d Woche, ",woche);}
else {printf("Wir haben %d Wochen, ",woche);}
if (tag = 1){printf("%d Tag, ",tag);}
else {printf("%d Tage, ",tag);}
if (std = 1){printf("%d:%d:%d Stunde\n",std,min,sek);}
else {printf("%d:%d:%d Stunden\n",std,min,sek);}

Du musst die = durch == ersetzen da es sich um Tests und nicht um Zuweisungen handelt. Ausserdem solltest du dir lookshe's Rat zu Herzen nehmen. Ausserdem kannst du sek -= 60 anstatt von sek = sek - 60; und min++ anstatt von min = min + 1; schreiben.
 
und weil lookshe die infokanone ist :tongue::

tage = sekunden / 86400
stunden = rest / 3600
minuten = rest / 60
sekunden = rest

beispiel 123456:
123456 / 86400 = 1 rest 37056
37056 / 3600 = 10 rest 1056
1056 / 60 = 17 rest 36

also 1 tag, 10 stunden, 17 minuten und 36 sekunden.

und das macht man halt mit modulo.
 
heyy danke, dass hat mir wirklich geholfen. Oh man bin ich blöd!

Ja mit dem Modulo wäre es natürlich geschickter, aber ich muss zurzeit Schleifen lernen. ;)
Deswegen habe ich mir dieses Konzept überlegt.

Aber danke vielmals!!
 
Hallo Leute, bin neu hier im Forum und bin fleißig am Bücher lesen und coden

Da bin ich auf diesen Thread gestoßen und dachte ich veröffentliche mal grade meine Lösung(C++).

Code:
 // Zeitumrechnung.cpp : Definiert den Einstiegspunkt für die Konsolenanwendung.
//

#include <stdafx.h>
#include <iostream>
#include <conio.h>

using namespace std;

class Zeitumrechnung
{
public:
void zeitrechner(int sekunden)
{
int wochen=0, tage=0, stunden=0, minuten=0;
//60 sek = 1 min; 3600 sek = 1 h; 86400 sek = 1Tag; 604800sek = 1 Woche
if(sekunden >= 604800)
{
wochen=sekunden/604800;
sekunden=sekunden%604800;
}
if(sekunden >= 86400)
{
tage=sekunden/86400;
sekunden=sekunden%86400;
}
if(sekunden >= 3600)
{
stunden=sekunden/3600;
sekunden=sekunden%3600;
}
if(sekunden >= 60)
{
minuten=sekunden/60;
sekunden=sekunden%60;
}
if(wochen == 1)
cout << wochen << " Woche ";
else
cout << wochen << " Wochen ";
if(tage == 1)
cout << tage << " Tag ";
else
cout << tage << " Tage ";
if(stunden == 1)
cout << stunden << " Stunde ";
else
cout << stunden << " Stunden ";
if(minuten == 1)
cout << minuten << " Minute ";
else
cout << minuten << " Minuten ";
if(sekunden == 1)
cout << sekunden << " Sekunde ";
else
cout << sekunden << " Sekunden ";

}
};

int main(void)
{
int sekunden=0,again;
cout << "Geben Sie eine Zeit in Sekunden ein: ";
cin >> sekunden;
Zeitumrechnung z1;
z1.zeitrechner(sekunden);
do
{
cout << "nNoch eine Berechnung?(ja=1,nein=0)";
cin >> again;
if(again == 1)
{
cout << "nGeben Sie eine Zeit in Sekunden ein: ";
cin >> sekunden;
Zeitumrechnung z1;
z1.zeitrechner(sekunden);
}
}
while(again!=0);
}
Ich hoffe ich konnte wem damit helfen.

MFG
Shorty
 
Code:
      //Berechnung in der Schleife
      for (i = 0; sek > 60; i++)
      {
	  sek = sek - 60;
	  min = min + 1;
	  for (j = 0; min > 60; i++)
	  {
		min = min - 60;
		std = std + 1;
		for (k = 0; std > 24; i++)
		{
		    std = std - 24;
		    tag = tag + 1;
		    for (l = 0; tag > 7; i++)
		    {
			tag = tag - 7;
			woche = woche + 1;
		    }
		}
	  }
      }
}

Was mir da so ins Auge sticht, ist zum Beispiel, dass du in jeder for-Schleife eine Zählervariable initialisierst und i erhöhst, aber keinen von den Zählern irgendwo verwendest. An deiner Stelle würde ich als Schleifenkopf also entweder
Code:
for(; std > 24;)
oder
Code:
while(str > 24)
benutzen, was aber im Endeffekt auf das Selbe hinausläuft.
 
Zurück
Oben