Harry-Dirty Geschrieben 22. Juni 2002 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
Jaipur Geschrieben 23. Juni 2002 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
Klotzkopp Geschrieben 23. Juni 2002 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.
Harry-Dirty Geschrieben 23. Juni 2002 Autor 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
Klotzkopp Geschrieben 24. Juni 2002 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++)
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden