Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Problem bei C - Programm

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
15.10.2007, 19:59 Uhr
~malibu85
Gast


Hallo Leute, ich wollte ein Programm schreiben, was eine Funktion darstellt. Es soll die funktion f(x1)=x1^0 sein, die bei x>0 immer 1 ausgibt. Mir ist es wichtig nicht auf Operatoren wie +-*/ zuzugreifen sondern ich möchte alles mit schleifen machen. Ich habe erstmal versucht eine zweite Variable zu erzeugen, die um 1 größer als x1 ist. Dazu habe ich eine For-Schleife erstellt wobei die Abbruchbedingung nach einem Durchlauf liegt. So dass x2 durch die Anweiseung X2=++ nur einmal um 1 erhöht wird. Leider gibt mir das Programm was ganz anderes aus. Bis ebend hatte ich den Fall, dass die Negation aufgetreten ist also wenn ich 5 eingegeben habe kam die 4 als ergebnis und nun kann ich eingeben was ich will, es erscheint als ergebnis immer die 2. Als ist irgendwas festgefahren oder ein wert gespeichert worden. kennt jemand das Problem?







C++:
#include <cstdlib>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
   int x1,x2,i;
  
   printf("Geben Sie eine Zahl fuer x1 ein:\n\n");
   scanf("d",&x1);
  
   x2=x1;  /* x2 ist genau so groß wie x1*/
  
   for (i=0 ; i>1 ; i++) // eine schleife, die x2 die Anweisung gibt sich genau um 1 zu erhöhen//
                         //   dazu wurde eine Laufvariable eingefügt, sie ist auf 0 gesetzt und bricht ab, sobald die Anweisung mehr als ein mal wiederholt werden soll. //
    {
                         x2=x2++;
    }                    
    
   printf("jetz um 1 erhoeht %d\n",x2);
  
    
    
    
    
    
    system("PAUSE");
    return EXIT_SUCCESS;
}


 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
15.10.2007, 20:55 Uhr
BoBtheREapER
kein job für nen BoB


f(x1) = x1^0 ist doch immer 1.

C++:
int func(x1)
{
return 1;
}


oder habe ich im mathe unterricht was verpasst?
--
"Zwei Dinge sind unendlich: Das Universum und die menschliche Dummheit. Aber beim Universum bin ich mir nicht ganz sicher." - Albert Einstein
www.blue-xenon.de.vu
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
15.10.2007, 21:32 Uhr
~malibu85
Gast


ja du hast schon recht und ich wollte eine Funktion schreiben, die bei einer eingabe immer die 1 ausgibt aber durch schleifen. Habe in theoretische Informatik diese Funktion gegeben die mit einem LOOP/While Programm realisiert werden soll. Ich wollte es mit c machen und bekomme halt eine andere Ausgabe. Kann es sein, dass im code was falsch ist. Der Eingabe wert für x1 ist z.B 5 dann soll die Vorschleife zunächst aus x2 die Zahl 6 machen. Danach will ich x2-x1 rechnen und bekomme so für jede Zahl die ich eingebe immer 1. Ich will auf rechenoperationen verzichten. nur durch xj-1 (vorgänger) und xj+1 (nachfolger) als Wertzuweisung und den Schleifen soll es realisiert werden. Aber irgendie stimmt mein code nicht
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
15.10.2007, 21:48 Uhr
öni



Naja deine Eingabe funktion scheint falsch zu sein, ich kenne mich mit C nicht aus nur mit C++ aber die Eingabe ist für x1 immer 1 somit ist x2 auch immer 1. Wenn ich ein Haltezeichen einfüge zeigt es dann eben an das x1 egal bei welcher eingabe immer 1 ist. Aber wieso das nicht vergrößert wird ist mir ein Rätsel ich steh glaube ich selber auf dem Schlauch.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
15.10.2007, 21:55 Uhr
öni



Oh ich bin doch dumm. Er durchläuft deine Schleife gar nicht...i = 0 solange i größer ist wie 1 und i inkrementieren??? naja das kann nicht so oft passieren. Aber wenn 1 kleiner sein soll als 0 kommst schon hin.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
15.10.2007, 23:30 Uhr
Hans
Library Walker
(Operator)


Hi,

zuerst einmal hat öni recht, die Schleife wird in Deinem Programm nicht durchlaufen. Anstelle von
C++:
for (i=0 ; i>1 ; i++)

muss es
C++:
for (i=0 ; i<1 ; i++)
heissen.

Dann mischst Du C und C++, was auch nicht gut ist. Wenn das Programm in C sein soll, hat das hier:
C++:
#include <cstdlib>
#include <iostream>

using namespace std;

im Quelltext nichts zu suchen, weil es C++ ist. Stattdessen schreibst Du einfach

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

und fertig.

Die Zeile
C++:
  scanf("d",&x1);
ist so auch falsch. Da muss vor dem d noch ein %-Zeichen, also
C++:
scanf("%d",&x1);
sonst landet Deine Eingabe irgendwo, nur nicht da, wo sie hin soll.
Schliesslich noch:

C++:
x2=x2++;

ist zwar nicht falsch, aber unsinnig, weil 'x2++' das gleiche bedeutet wie 'x2=x2+1'.
Was Du da machst, ergibt ausführlich geschrieben das hier:

C++:
x2=x2+1;
x2=x2;



Soweit das, was mir so aufgefallen ist.

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
16.10.2007, 02:11 Uhr
0xdeadbeef
Gott
(Operator)



C++:
x2=x2++;


erzeugt undefiniertes Verhalten, weil = kein Sequenzpunkt ist. Es ist also nicht klar, ob erst zugewiesen oder erst erhöht wird.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
16.10.2007, 22:04 Uhr
~malibu85
Gast


soweit ist alles klar, die fehler sind mir im großen und ganzen bekannt....ich dachte mir ich könnte eine theoretische Aufgabe schnell mal in der praxis ausprobieren und habe dafür in c++ geschrieben...dachte das ist nicht so wild. was ich nicht verstehe ist das mit der for-schleife

ihr seid der meinung, dass es heißen muss:

C++:
for ( i=0; i<1, i++)


doch dann wird doch die schleife gar nicht ausgeführt denn dort steht dass i auf 0 gesetzt ist und dass i so lange erhöht werden soll bis die Abbruchbedingung erfüllt ist.Es wird genau dann abgebrochen wenn i kleiner als 1 ist. also anfangswert=0 Abruchwert bei i kleiner 1 da ist doch gar kein Durchlauf dazwischen. wenn jedoch die Abbruchbedingung i>1 ist dann impliziert das, dass die schleife genau ein mal durchlaufen wird denn in dieser Menge ist die Teilmenge i=1 enthalten. Oder?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
16.10.2007, 23:46 Uhr
mmc20
puss in boots


hi, da hast du was falsch verstanden, die schleife wird solange ausgeführt wie die bedingung wahr (true) ist, es ist also keine "abbruchbedingung" sondenr eher eine "schleifenausführbedingung"
deine schleife wird somit genau einmal durchlaufen, weil i = 0 < 1 ist
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
17.10.2007, 00:10 Uhr
Hans
Library Walker
(Operator)


Hi,

bei der for-schleife wird der Schleifenzähler, hier also die Variable i erst am Ende erhöht, wenn der Schleifenrumpf mindestens einmal abgearbeitet wurde. Danach wird die Abbruchbedingung überprüft. Somit wird auch deine Schleife genau einmal durchlaufen.

In C und C++ ist es so, das man for-schleifen auch durch eine bestimmte Form von while-schleifen ersetzen kann. Das ist aber nicht immer Sinnvoll, weil for-schleifen meist einfacher zu handhaben und schneller zu überblicken sind. Ein Beispiel:

C++:
for (i=0; i<2; i++)
  { printf ("%d", i);
     /* hier können noch beliebiege Anweisungen stehen */
  }


ist das Gleiche wie:

C++:
i=0;
while (i<2)
   { printf ("%d", i);
     /* hier können noch beliebiege Anweisungen stehen */

      i++;
   }



Hoffe, damit wird es klar.

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.

Dieser Post wurde am 17.10.2007 um 00:12 Uhr von Hans editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: