Globale Variablen

Schnelle objektorientierte, kompilierende Programmiersprache.
Antworten
Vicky
Beiträge: 1
Registriert: Do Nov 13, 2014 12:59 am

Globale Variablen

Beitrag von Vicky » Do Nov 13, 2014 1:12 am

Hallo Leute, ich hab ein Programm geschrieben in welchem ich globale Variablen benutze. Mit Visual Studio funktioniert auch alles prima und er compiliert es ganz normal. So nun wollte ich es auf der Seite meiner Professorin hochladen (sie hat da eine Seite wo wir unsere Programme hochladen können) läuft es auf ihrem Compiler nicht, sprich er ignoriert die globalen Variablen und gibt mir dadurch falsche Werte raus. So nun hab ich jetzt verschiedenes probiert die globalen Variablen lokal zu machen aber so bekomme ich nur falsche Werte raus egal was ich mache :o habt ihr vll eine Idee?

Mein Programm schaut so aus:

Code: Alles auswählen

#include <stdio.h>

// Ausgabe soll sein: (Bedingung ist das ein Lieferwagen maximal 750 KG transportieren kann)
// Die Anzahl der beladenen Lieferwägen.
// Das Gewicht des schwersten Lieferwagen(max).
// Das Gewicht des leichtesten Lieferwagen(min).
// Das Durchschnittsgewicht aller Lieferwägen(average).


int paket = 1;
int gewicht = 0;
int kapazitaet = 0;

int lastwagen() {

	while (paket != 0 && paket <= 750 && kapazitaet <= 750) {
		printf("Das Gewicht des Paketes angeben u. mit Enter bestaetigen mit 0 beenden: ");
		scanf("%d", &paket);
		gewicht = gewicht + paket;
		kapazitaet = gewicht;
	}

	if (paket > 750)
		printf("Das Paket ist zu schwer!\n");
	else if (paket == 0) {
		printf("Der Wagen hat eine Last von %d KG\n", kapazitaet);
		printf("Alle Pakete verladen!\n");
	}
	else {
		kapazitaet = gewicht - paket;
		printf("Der Wagen ist voll und hat eine Last von %d KG, bitte naechsten Wagen beladen!\n", kapazitaet);
	}
	return 0;
}

int main() {
	int van = 0;
	int max = 0;
	int min = 0;
	double average = 0.0;
	int gesamt = 0; // Gesamt ist die Aufsummierung aller Lastwägen

	while (paket != 0 && paket <= 750) {
		lastwagen();
		van++;
		gewicht = paket;

		if (kapazitaet > max)
			max = kapazitaet;
		if (kapazitaet <= max)
			min = kapazitaet;

		gesamt = gesamt + kapazitaet;
		average = gesamt / van;
	}
	printf("%d van(s), max: %dkg, min: %dkg, average: %.2fkg\n", van, max, min, average);

	return 0;
}
Danke schon mal im vorraus für eure Vorschläge ;)


EDIT dani93: Code-Tags

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

Re: Globale Variablen

Beitrag von nufan » Do Nov 13, 2014 2:05 am

Hallo :)
Vicky hat geschrieben:ich hab ein Programm geschrieben in welchem ich globale Variablen benutze
Globale Variablen sind eine sehr unschöne Art der Programmierung. Programme werden dadurch sehr unübersichtlich und fehleranfällig. Gibt es einen Grund wieso du sie verwendest? Sind dir Funktionsparameter, Rückgabewerte und Zeiger bekannt?
Vicky hat geschrieben:Mit Visual Studio funktioniert auch alles prima und er compiliert es ganz normal. So nun wollte ich es auf der Seite meiner Professorin hochladen (sie hat da eine Seite wo wir unsere Programme hochladen können) läuft es auf ihrem Compiler nicht, sprich er ignoriert die globalen Variablen und gibt mir dadurch falsche Werte raus.
Ich glaube kaum, dass der Compiler die globalen Variablen ignoriert, das Problem liegt ziemlich sicher wo anders. Weißt du was für einen Compiler deine Professorin verwendet?
Vicky hat geschrieben:

Code: Alles auswählen

      if (kapazitaet <= max)
         min = kapazitaet;
Schau dir das nochmal genau an. In der Folge dann auch die Initialisierung von "min".
Vicky hat geschrieben:

Code: Alles auswählen

      gesamt = gesamt + kapazitaet;
      average = gesamt / van;
Diese Werte jedes mal in der Schleife zu berechnen ist nicht notwendig, du überschreibst deine Ergebnisse ja nur und verwendest für die Ausgabe die letzten Ergebnisse. Du könntest genauso gut nur die letzte Berechnung nach der Schleife machen. Unnötiger Aufwand, aber natürlich nicht der Grund für falsche Werte.
Vicky hat geschrieben:

Code: Alles auswählen

   while (paket != 0 && paket <= 750 && kapazitaet <= 750) {
      printf("Das Gewicht des Paketes angeben u. mit Enter bestaetigen mit 0 beenden: ");
      scanf("%d", &paket);
      gewicht = gewicht + paket;
      kapazitaet = gewicht;
   }
Dir fehlt hier etwas die Fehlerbehandlung die du nach der Schleife hast. Wenn du z.B. ein Paket mit Gewicht 1000 eingibst, wird das zum Gewicht und zur Kapazität addiert, danach aber nicht mehr korrigiert.
Deine Variable "kapazitaet" setzt du auch nie zurück. Wenn du mal über deine Obergrenze von 750 kommst, kannst du keinen Lastwagen mehr befüllen.

Das ist mir mal auf den ersten Blick aufgefallen ^^ Ich würde vorschlagen du korrigierst deinen Code entsprechend und wenns dann noch immer Probleme gibt kannst du natürlich fragen.

Antworten