Harry-Dirty Geschrieben 22. Juni 2002 Teilen Geschrieben 22. Juni 2002 Hallo Leute hallo erst mal hier im Forum an alle!!!!!!!!!! da hab ich es, das erste richtige Problem in C !! folgende Aufgabenstellung habe ich: startwert +stopwert als integer, die summer aller Zahlen von startwert bis stopwert sollen addiert werden, zugelassen sind alle Zahlen im signierten bereich, also von ca. - 2Mrd bi +2 Mrd. jetzt muss der Copiler aber meckern wenn es während des Schleifendurchlaufes eine Bereichsüberschreitung gibt!!! das isses ja nun, wenn ich nur die positiven Zahlen zusammenzähle ist es ja noch einfach!!!!, da lässt sich eine Überschreitung noch klar feststellen, doch wenn ich einen Startwert von, sagen wir -100.000 habe, fängt der compiler an, die negativen zahlen zusammen zu zählen und er hat im negativen Bereich eine Überschreitung, was muss ich tun, um all dieses zu unterscheiden und das er wirklich nur bei der Bereichsüberschreitung meckert??? Hilfe wäre toll Gruß Harry :marine :marine Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Jaipur Geschrieben 23. Juni 2002 Teilen Geschrieben 23. Juni 2002 Hi, ich hoffe nur das ich dich jetzt richtig vertanden habe Addiere doch alle negativen und positiven getrennt von einander, um so nachher die GesamtSumme zu erhalten. In der Schleife: if( x<0) negativ += x; else positiv += x; summe = positiv - negativ; Nicht vergessen summe,positiv und negativ vorher mit 0 zu initialisieren Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 23. Juni 2002 Teilen Geschrieben 23. Juni 2002 @Harry-Dirty: Ich nehme an, Du meinst, dass das Programm eine Fehlermeldung liefern soll, denn der Compiler hat zur Laufzeit nun wirklich nichts mehr zu melden Zum Problem: wie wäre es damit: int startwert = ...; int stopwert = ...; int summe = 0; int altesumme = 0; for( int i=startwert; i<=stopwert; i++ ) { altesumme = summe; summe += i; if( i < 0 ? (summe > altesumme) : (summe < altesumme) ) { // Bereichsüberschreitung } }[/CODE]Grundlage: Wenn ich eine negative Zahl addiere, sollte die Summe danach kleiner geworden sein, bei einer positiven Zahl größer. Wenn das nicht der Fall ist, hat eine Bereichsüberschreitung stattgefunden. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Harry-Dirty Geschrieben 23. Juni 2002 Autor Teilen Geschrieben 23. Juni 2002 Hallo Klotzkopf Dank dir für deine Hilfe, habe es fast geschaft, dennn... die Überprüfung in der if anweisung klappt, damit kann ich die Bereichsüberschreitung feststellen!!! nun habe ich folgende Situation. Diese ganz Berechnung findet in einer eigenen funktion, die ich von der "main"aufruf, statt. In dieser eigenen Funtion sint nur int Variablen. Nun habe ich zweierlei von Funktionsergebnissen, einmal das Ergebnis der Bereichsüberschreitung und das andere mal das Ergebnis, wo keine stattfand. Was muss ich tun um in der main Funktion zwischen sollchen sachen unterscheiden zu können???(gehts überhaupt??) hier mal dem Quellcode der 'sum' funktion, die vom main programm aufgerufen wird ( muss alles in integer sein!!!) int sum(int start, int stopp) { int erg_vor=0; int erg=0; erg=erg+start; for(start=start+1 ; start<=stopp ; start++) { erg_vor=erg; erg=erg+start; if(((start<=0)&&(erg_vor>erg))||((start>=0)&&(erg_vor<=erg))) {} else { erg=erg; break;} } return (erg); } GRUß Harry :marine :marine Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 24. Juni 2002 Teilen Geschrieben 24. Juni 2002 Wie wärs mit Exceptions: schreib "throw erg;" anstelle des break in den else-Zweig Deiner Abfrage, und rufe sum folgendermaßen auf: int s; try { s = sum( -100000, 0 ); } catch( int ueberlauf ) { // Fehlermeldung ausgeben } [/CODE] Anmerkung: Das: [CODE]erg=erg+start; for(start=start+1 ; start<=stopp ; start++) ist in Deinem Fall das gleiche wie: for(;start<=stopp ; start++) Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.