Zum Inhalt springen

Bereichsüberschreitung in der Zählschleife melden


Harry-Dirty

Empfohlene Beiträge

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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 ;)

Link zu diesem Kommentar
Auf anderen Seiten teilen

@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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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++) 

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...