Funktionen in C++

RenscHee

Grünschnabel
Hey Leute,

Hätte da mal ne Frage,
C++:
#include <conio.h>
#include <stdio.h>


int zahlensumme ( int anfang, int ende );

int main()
{
    int anfang;
    int ende;
    int ausgabe;
    
    printf("Bitte gib einen Anfangswert ein: ");
    scanf("%d", &anfang);
    printf("Bitte gib einen Endwert ein: ");
    scanf("%d", &ende);
    
    ausgabe = zahlensumme ( anfang, ende );
    
    printf("Zahlensumme: %d", ausgabe);
    
    getch();
}

int zahlensumme ( int anfang, int ende )
{
    int i;
    
    do 
    {
        anfang ++;
    }while ( anfang <= ende );

    
    return i;
    
}
Ein Freund bräuchte eine Antwort warum dieses Programm nicht funktioniert (es soll Anfang & Ende einlesen und dann die Zahlensumme ausgeben z.B. 3, 6 = 18 ( 3 + 4 + 5 + 6 ) . Ich kenn mich da nicht so gut aus.

Bitte um Hilfe
 
Zuletzt bearbeitet von einem Moderator:
Hallo

Nutze bitte die Codetags ([c pp][/c pp] ohne Leerzeichen).
C:
int zahlensumme ( int anfang, int ende )
{
    int i;

    do 
    {
        anfang ++;
    }while ( anfang <= ende ); 


    return i;

}
Die Variable i ist nicht definiert, wenn sie zurückgegeben wird.
C:
int zahlensumme ( int anfang, int ende )
{
    int i = 0; //Variablen kann man am Anfang direkt definieren, was mühsame Fehler verhindert

    while ( anfang < ende +1)
    {
        i+=anfang; //i muss auch noch verändert werden
        anfang++;
    }
    return i;
}
Ungetestet.

Gruss
cwriter

//Edit:
int main() muss einen Wert zurückgeben. Schreibe ein
C:
return 0;
ans Ende der Funktion.
Ausserdem ist die korrekte Form der main
C:
int main(int argc, char* argv[])
{
    //Etwas ausführen
    return 0;
}
Aber die parameterlose Funktion geht bei diesem Beispiel natürlich auch.
 
Zuletzt bearbeitet:
...warum dieses Programm nicht funktioniert...
Es wäre durchaus hilfreich zu schreiben, was denn genau nicht funktioniert. Das erspart die Analyse des gesamten Quellcodes.

Im dem Programm hat dein Freund schlichtweg vergessen, die Variable "i" in der Funktion "zahlensumme" zu verwenden. Wenn der grundsätzlich Aufbau der Schleife behalten werden soll, könnte man es so schreiben:
C++:
int zahlensumme ( int anfang, int ende )
{
    int i = anfang;

    do
    {
        i += (++anfang);
    
    } while( anfang < ende );

    return i;
}
Gruß
MCoder
 
Im Grunde brauchst du sogar nicht mal eine Schleife, weil für die Bildung von Teilsummen auch optimierte Formeln bestehen.

Ich habe schnell mal eine aus der Gaußschen Summenformel abgeleitet. Mit dem Anfangswert a und dem Endwert e ergibt sich für die Summe aller Zahlen von a bis e:

Summe = 0,5 * (e - a + 1) * (e + a)

Eine mögliche Implementierung könnte z.B. so aussehen:

C++:
#include <iostream>
#include <stdio.h>

long zahlensumme(int, int); //prototyp

int main(int argc, char *argv[])
{
    printf("\n\nBitte gib Anfangs- und Endwert ein: ");
    int anfang, ende;
    long ausgabe; //long da die summe sehr groß werden kann
    scanf("%i %i", &anfang, &ende); //nimm beide eingaben gleichzeitig auf (mit leerzeichen getrennt)

    ausgabe = zahlensumme(anfang, ende);

    printf("Zahlensumme: %i\n\n", ausgabe);
}

long zahlensumme(int anfang, int ende)
{
    if(anfang <= 0 || ende <= 0) //negative zahlen sind nicht vorgesehen
        return 0;
    if(ende < anfang) //wenn der endwert kleiner als der anfangswert ist, gib 0 zurück
        return 0;
    if(ende == anfang) //wenn die werte gleich sind, gib entweder anfang oder ende zurück
        return anfang;
    return (long)(ende - anfang + 1)*(ende + anfang)/2; //optimierte teilsummenformel
}

Mit freundlichen Grüßen
Technipion
 
Zurück