Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » quiz Ii

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
21.07.2003, 21:38 Uhr
~rammellaus
Gast



C++:
#pragma hdrstop
#pragma argsused
#include <iostream.h>
int loesung(int);
int ka=0, e, l;
int main(int argc, char* argv[])
{            char ende;

cout << "2+2=";
l=2+2;
cin >> e;
ka=loesung(e, l);
cout << ka;


cin >> ende;
        return 0;
}

int loesung()
{     if (e=l)
return ++ka;
else return ka;
}



ich wollte jetzt mal etwas professioneller schreiben und statt tausend if anweisungen sone neue funktion darein bringen..... aber irgendwie funzt das net.... sind eh wahrscheinlich nur dumme fehler..... aber irgendwie gehts halt net!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
21.07.2003, 22:01 Uhr
mike
Pinguinhüpfer
(Operator)


Hi!
Bin mir nicht sicher, aber probier mal

C++:
int loesung(int e, int l)



mfg mike
--
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
21.07.2003, 22:30 Uhr
Uwe
C/C++ Master
(Administrator)


Hallo
int loesung(int);
ka=loesung(e, l);
int loesung()
Sind drei verschiedene Sachen.

C++:
int loesung(int,int);
ka=loesung(e, l);
int loesung(int x, int y){if (e=l) // hier erfolgt der Versuch einer Zuweisung
                                          // e==l
}


Was willst Du eigentlich berechnen?
--
"Es ist schwierig, ein Programm wirklich idiotensicher zu machen, weil Idioten so genial sind."

Bis dann...
Uwe
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
22.07.2003, 00:43 Uhr
Pablo
Supertux
(Operator)


Wenn du folgendes hast:

C++:
int loesung(int);


hast du ein "Prototyp". Du teilst damit dem Compiler mit, dass es eine Funktion gibt, die von typ int ist und die ein Argument von typ int empfängt. Das ist sehr nützlich, wenn du die Funktionen aufrufen willst, die sich weiter untem im Source Code befinden.

Das heißt, irgendwo muss die wirkliche Deklaration von loesung stehen. In diesem Fall musst du nicht auf den Namen des Parameters verzichten, wie bei den Prototypen der Fall sein kann.

Du weißt, dass es in C/C++ überladen möglich ist, d.h. dass mehrere Funktionen den selben Namen haben können (ich glaube auch mit unterschiedlichen typen), aber die sich in der Anzahl bzw. in den Typen der Parameter unterscheiden. Bsp:


C++:
int print(const char*);
int print(int);
//***, usw.
int print(const char* str)
{
    printf("%s\n", str);
}
int print(int i)
{
    printf("%d\n",i);
}



print taucht 2 Mal auf, aber nur unter dem selben Namen. In Wirklichkeit sind 2 verschiedene Funktionen.

In deinem Code hast du

C++:
int loesung(int);
//*** usw.
int loesung()
{     if (e=l)
return ++ka;
else return ka;
}



loesung(int) und int loesung() heißen zwar gleich, sind aber verschiedene Funktionen. Dein dritter Fehler ist, dass du in main() eine Funktion aufrufst, die gar nicht definiert ist, nämlich ka=loesung(e, l);. int loesung(int,int) gibt es nicht.
Der vierte Fehler ist, dass du eine Falsche Bedingung in der If Anweisung hast. = ist nicht gleich wie ==. Die Zuweisung ( = ) ist eine "Funktion", die den Wert der Zuweisung zurückgibt. Der Vergleich ( == ) liefert 1, wenn die Bedingung wahr ist und 0 wenn nicht. Eine If-Anweisung mit nur = ist möglich, aber sie muss sinvoll sein. Z.B. du willst während der Überprüfung einer Variable (a) festellen, ob sie wahr oder falsch ist. Es gibt eine Funktion XYZ die 0 oder 1 zurückgibt. Dass heißt if (a=XYZ()) nicht, wenn a ist gleich XYZ, sondern, speichere in a den Wert, der XYZ zurückliefert und liefert dessen Ergebnis zurück. Dann überprüft die If-Anweisung.

Der Code wäre nun:


C++:
#include <iostream.h>
int loesung(int,int);
int ka=0, e, l;
int main(int argc, char* argv[])
{            char ende;

cout << "2+2=";
l=2+2;
cin >> e;
ka=loesung(e, l);
cout << ka;


cin >> ende;
        return 0;
}

int loesung(int e1, l1)
{     if (e1==l1)
         return ++ka;
      else return ka;
}



Ich verstehe aber nicht, wozu die loesung Funktion implementierst, wenn sie sowieso auf globale Variablen zugreift. In deinem Fall brauchst du dann ka = .... usw. nicht, denn ka speichert ihre Änderung an loesung, wo ka schon geändert wurde, d.h, du speichers zweimal den selben Wert in ka. Am sinnvollsten (meiner Meinung nach) wäre:

C++:
#include <iostream.h>
int loesung(int,int,int);
int main(int argc, char* argv[])
{            char ende;
int ka=0, e,l;
cout << "2+2=";
l=2+2;
cin >> e;
ka=loesung(e, l,ka);
cout << ka;


cin >> ende;
        return 0;
}

int loesung(int e1, l1, int ka1)
{     if (e1==l1)
         return ++ka1;
      else return ka1;
}


Dann ist loesung(int,int,int) eine wirkliche Funktion, die nicht mit globalen Variablen arbeitet, also kannst du beliebige Werte damit ausrechnen.

Was willst du berechen? Wenn 2 Werte gleich sind, dann soll der Zähler um 1 inkrementiert werden, sonst unverändert bleiben?
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!

Dieser Post wurde am 22.07.2003 um 00:46 Uhr von Pablo Yanez Trujillo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
22.07.2003, 11:32 Uhr
0xdeadbeef
Gott
(Operator)


Eigentlich macht diese ganze Funktiongeschichte keinen richtigen Sinn. Kapseln schön und gut, aber in diesem Fall bringt das irgendwie nichts. Ich würde zunächst mal ne Schleife einarbeiten, so nach dem Motto:

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

/* Nur Zahlen von 0 bis LIMIT-1 */
#define LIMIT (10)

main() {
    int a, b, c, i, score = 0, anzahl;

    srand(time(0));

    printf("Wieviele Fragen?\n");
    scanf("%d", &anzahl);
    for(i = 0; i < anzahl; ++i) {
        a = rand() % LIMIT;
        b = rand() % LIMIT;
        printf("%d + %d = ", a, b);
        scanf("%d", &c);
        if(a + b == c) {
            ++score;
            printf("Richtig!\n");
        } else
            printf("Falsch.\n");
    }
    printf("\n\nDu hast %d aus %d Fragen richtig beantwortet.\n", score, anzahl);

    return 0;
}


--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
22.07.2003, 11:34 Uhr
0xdeadbeef
Gott
(Operator)


Ach, und was die pragmas angeht - Du benutzt die übergebenen Parameter garnicht, von daher dürfte dich das

C++:
#pragma argsused


zur runtime Rechenzeit kosten.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
22.07.2003, 14:31 Uhr
~rammellaus
Gast


also dieses pragma mach ich weils beim konsolen experten so vorgegeben ist....

und was ich damit bezwecken will ist:........
C++:
#include <iostream.h>

int main(int argc, char* argv[])
{            int e1, e2, e3, ka=0;
char ende;

cout << "2*5+6 ist gleich?: \n";
cin >> e1;
if (e1==2*5+6){
        ++ka;}
cout << "und 3*5*2+45*7 ?: \n";
cin >> e2;
if (e2==3*5*2+45*7) {
        ++ka;}
cout << "9*9+7*7+8/4=?: \n";
cin >> e3;
if (e3==9*9+7*7+8/4) {
        ++ka;}
if (ka==3) {
        cout << "Krass! Ganze " << ka << " Punkte!";

           }
else
if (ka!=0) {
cout << "Naja...immerhin " << ka << " Punkte..." ;}
else cout << "Deppenkind! Wie kann man nur " << ka << " Punkte erreichen?" ;
cin >> ende;
        return 0;
}

....für den fall das jetzt ganz viele fragen sind, kürzer zu schreiben
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
22.07.2003, 14:53 Uhr
0xdeadbeef
Gott
(Operator)


Dann würd ich mir eher überlegen, die Frage in einen vector oder arrays zu speichern oder so. Sowas in der Art:

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

#define ANZAHL (3)

main(){
    char *fragen[]={"2*5+6", "3*5*2+45*7", "9*9+7*7+8/4"};
    int antworten[] = {2*5+6, 3*5*2+45*7, 9*9+7*7+8/4 };
    int i, aw, summe=0;
  
    for(i = 0; i < ANZAHL; ++i) {
        printf("%s = ", fragen[i]);
        scanf("%d", &aw);
        if(aw == antworten[i]) ++summe;
    }

    printf("%d aus %d richtig beantwortet.\n", summe, ANZAHL);

    return 0;
}


--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
22.07.2003, 17:21 Uhr
~rammellaus
Gast


bahnhof ^^
davon versteh ich null..... soweit bin ich noch net!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
22.07.2003, 19:42 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


Mal so ne Anmerkung.

Anstatt immer hinzuschreiben: "Ich versteh nur Bahnhof" solltest du mal konkrete Fragen formulieren was genau du nicht verstehst sonst wird dir entweder nicht geantwortet oder es wird dir wahrscheinlich was anderes beantwortet als du wissen willst.

Gruss Heiko
--
...fleißig wie zwei Weißbrote
 
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: