Zum neuen Informatik-Forum >>
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Frage zu FOR-Schleife

 
Dieses Forum ist gesperrt, du kannst keine Beiträge editieren, schreiben oder beantworten.   Dieses Thema ist gesperrt, du kannst keine Beiträge editieren oder beantworten.    Informatikerboard.de Foren-Übersicht -> C/C++
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
mave
Gast





BeitragVerfasst am: 09. Nov 2005 15:13    Titel: Frage zu FOR-Schleife Antworten mit Zitat

Hi, wollte mal fragen, warum die folgende Funktion mir immer nur 0 als Ergebnis liefert:
Code:
int imkreis(int n)
{
    int z = 0;
    for (int i=-n; i==n; i=i+1)     
        for (int j=-n; j==n; j=j+1)
            if ((i*i)+(j*j) <= n*n) z=z+1;
    return z;       
}
Nach oben
zweiundvierzig



Anmeldungsdatum: 15.02.2005
Beiträge: 55

BeitragVerfasst am: 09. Nov 2005 20:40    Titel: Antworten mit Zitat

Hi mave,

ich vermute mal, das liegt daran, dass du bei der äußeren for-Schleife die runden Klammern vergessen hast. Poste aber lieber nochmal den ganzen Code.

gruß Wink
maverick

_________________
hello world!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
Tobias



Anmeldungsdatum: 15.02.2005
Beiträge: 149

BeitragVerfasst am: 09. Nov 2005 21:17    Titel: Antworten mit Zitat

Das liegt daran, dass du den zweiten Parameter in der For-schleife falsch deutest.

for (A; B; C)

A = Initialisierung
B = boolescher Ausdruck. Wenn B wahr, dann durchlaufe Schleife, wenn B falsch, dann brich ab
C = Reinitialisierung nach Durchlauf

Der Ausdruck B ist bei dir aber gleich am Anfang falsch und deshalb wird abgebrochen.

Richtiger wäre:

Code:

int imkreis(int n)
{
    int z = 0;
    for (int i=-n; i<n; i++)     
        for (int j=-n; j<n; j++)
            if ((i*i)+(j*j) <= n*n) z=z+1;
    return z;       
}
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
tms
Gast





BeitragVerfasst am: 09. Nov 2005 22:32    Titel: Antworten mit Zitat

Lass das mal durch den Debugger laufen:
Code:
int imkreis(int n)
{
    int z = 0;
    for (int i=-n;
*          i<n;
           i++)     
        for (int j=-n; j<n; j++)
            if ((i*i)+(j*j) <= n*n) z=z+1;
    return z;       
}


Gut die Werteübergabe i=-n ist eigentlich schon falsch, weil i alles beinhalten kann.( i = i - n) i hat keinen definierten Wert. Aber das ist nicht das einzige Problem. Denn selbst wenn man dafür sorgt, dass i oder j -n ist...

Da wo das Sternchen ist die Unterbrechung und i ist gleich n-1 an dieser Stelle, warum auch immer grübelnd . (Borland C Builder). Deklariert und initialisiert man alle Variablen vorher stimmt alles. Es ist egal ob man i++ oder i = i+1 schreibt. Ich dachte zuerst an eine Scherzfrage, kann aber beim coden wirklich ein Problem werden, weil hier anscheinend eine merkwürdige Interpretation der Variablen vorliegt.

Gruß
TMS
Nach oben
Tobias



Anmeldungsdatum: 15.02.2005
Beiträge: 149

BeitragVerfasst am: 10. Nov 2005 19:36    Titel: Antworten mit Zitat

@tms: Versteh kein Wort? Kannste das nochmal erläutern?

Was ist an
Code:
int i=-n
falsch? Verwechselst du das mit
Code:
int i -= n
?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
TMSearcher



Anmeldungsdatum: 19.05.2005
Beiträge: 270
Wohnort: Bremen

BeitragVerfasst am: 11. Nov 2005 19:41    Titel: Antworten mit Zitat

Hi,
brauch, glaub ich nicht näher erklärt werden. Mein System muss gesponnen haben, denn was mir der debugger angezeigt, hat waren Hausnummern.

Zitat:
Der Ausdruck B ist bei dir aber gleich am Anfang falsch und deshalb wird abgebrochen.
Ist natürlich richtig. Muss natürlich i<n statt i==n heißen.

Ich hatte das auch zum Test geändert und war dann sehr erstaunt, als das immer noch nicht auf klappte.

Wie auch immer, das Problem ist gelöst denke ich.

Gruß
TMS

_________________
Intelligent life is so very rare,
the rarest thing in creation
and the most precious
This is Earth Calling..
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Dieses Forum ist gesperrt, du kannst keine Beiträge editieren, schreiben oder beantworten.   Dieses Thema ist gesperrt, du kannst keine Beiträge editieren oder beantworten.    Informatikerboard.de Foren-Übersicht -> C/C++ Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum nicht posten
Du kannst Dateien in diesem Forum nicht herunterladen