Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Übertragung von C++source in C-source

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 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] > 15 < [ 16 ] [ 17 ] [ 18 ] [ 19 ] [ 20 ]
140
05.01.2004, 22:56 Uhr
Lumina



Gute Nacht an alle
--
*******************************************
Willst du glücklich sein im Leben, trage bei zu and'rer Glück,
denn die Freude, die wir geben, kehrt ins eig'ne Herz zurück!
*******************************************
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
141
05.01.2004, 22:57 Uhr
Pablo
Supertux
(Operator)


Dann gute Nacht und ich wünsche dir gute Erholung.

Ich kenne das, ich hab nur wegen des Studiums DSL. Naja, jetzt ist ein Bestand meines Lebens
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
142
06.01.2004, 10:30 Uhr
Lumina



Moing! Gute Nachricht!
Sitze an meinem eigenen PC, der sich nach einer Nacht Ruhe anscheinend wieder ausgesponnen hat!

Die schlechte Nachricht: Am Donnerstag muss mein Programm fertig sein! Und es ist nicht nur das Programm sondern auch noch die Fehlersuche bei zwei anderen Source-teilen...

Aber noch eine gute Nachricht: Habe gut geschlafen und heute zumindest kein Kopfweh. Vielleicht hat ja dein Gute-Nacht-und-Gute-Besserung-wünschen was geholfen, @ Pablo! Danke!
--
*******************************************
Willst du glücklich sein im Leben, trage bei zu and'rer Glück,
denn die Freude, die wir geben, kehrt ins eig'ne Herz zurück!
*******************************************
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
143
06.01.2004, 10:38 Uhr
Pablo
Supertux
(Operator)


schön zu wissen, das freut mich, dass es dir besser geht.

Tja, die Zeit ist knapp aber ich helfe soweit ich kann. Heute wird es ein bisschen schwer für mich sein, da ich nicht zu Hause bin, aber helfen kann ich trotzdem (da ich die Flat meines Kumpels ausnutze bis es nicht mehr geht ).

Also, her mit dern Fragen
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
144
06.01.2004, 11:06 Uhr
Lumina




C++:
/* Aufgabe 1:
   Finden Sie die 2 Fehler im folgenden Programm. Begründen Sie jeweils.
   Falsch erkannte Fehler (also als Fehler angegebene richtige Programmstellen)
   führen zum Punktabzug. */



# include <stdio.h>

int max(int a, int b)
{
    return((a>b)?a:b);
}

main()
{
    int x = 3, y = 9, z = 7;
    long max;

    max=max(max(x,y),z);
    printf("Das %s von %d, %d und %d ist %d.",
           "Maximum", x, y, z, max);
}




Ich hatte folgenden Vorschlag:
1.Fehler:
Eine Variable darf nicht so genannt werden wie eine Funktion,
denn das würde dazu führen, dass zunächst beides akzeptiert wird,
aber dass man der Variable nichts zuweisen kann, weil an dieser
Stelle automatisch nach () und Parametern gesucht wird, was es ja
bei einer Variable nicht gibt!
Verbesserungsvorschlag: Variable max in maximum umbenennen

Dann sieht das so aus und liefert auch das Richtige:

C++:
# include <stdio.h>

int max(int a, int b)
{
    return((a>b)?a:b);
}

main()
{
    int x = 3, y = 9, z = 7;
    long maximum;

    maximum=max(max(x,y),z);
    printf("Das %s von %d, %d und %d ist %d.",
           "Maximum", x, y, z, maximum);
}


/* nun ergibt sich als Ausgabe:
   Das Maximum von 3, 9 und 7 ist 9. Press any....



wo ist also der zweite gesuchte Fehler????
--
*******************************************
Willst du glücklich sein im Leben, trage bei zu and'rer Glück,
denn die Freude, die wir geben, kehrt ins eig'ne Herz zurück!
*******************************************
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
145
06.01.2004, 11:17 Uhr
Pablo
Supertux
(Operator)


so, der erste Fehler ist richtig. Ich glaube, dass manche Compiler das gar nicht kompilieren, wenn du eine Funktion und Variable den gleichen Namen haben. Das heißt Doppeldeutigkeit.

2. ... ich gucke mal nach


Bearbeitung von Pablo:


C++:
printf("Das %s von %d, %d und %d ist %d.",
           "Maximum", x, y, z, maximum);


Nun, %s gibt eine Zeichenkette aus, x ist aber nur ein Zahl. Das könnte der 2. Fehler sein. Es könnte auch die #include direktive, ich glaube, da muss es auch kein Leerzeichen geben, bin ich nicht sicher, da ich jetzt nicht testen kann. Aber ich würde sagen ist %s der 2. Fehler.

Ich hoffe, ich habe mich nicht geiirt.


--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!

Dieser Post wurde am 06.01.2004 um 11:24 Uhr von Pablo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
146
06.01.2004, 11:36 Uhr
Lumina



es funktioniert aber soweit, das ist ja das Seltsame. Das %s ist mit Sicherheit kein Fehler, denn das bedeutet nur, dass and diese Stelle, wo eben das %s steht, die Zeichenkette (String) "Maximum" gesetzt wird.

Was mich irritiert ist, dass die Variable fürs Maximum als long, also genauer gesagt: long int deklariert wird und dann mit %d, also wie ein normaler short int, ausgegeben wird. Müsste das nicht anders lauten?


Oder ist es so, dass ich, weil ja das main keinen Rückgabewert liefert, schreiben muss:

void main(void)

dann ist nämlich die Warnung weg.

Aber Warnung ist doch nicht immer ein Fehler...
--
*******************************************
Willst du glücklich sein im Leben, trage bei zu and'rer Glück,
denn die Freude, die wir geben, kehrt ins eig'ne Herz zurück!
*******************************************
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
147
06.01.2004, 11:41 Uhr
Pablo
Supertux
(Operator)


void main(void) ist nicht ANSI. Die main Funktion ist int und liefert 0, wenn es keine Fehler gibt und ungleich 0 sonst.

Ich hab falsch gelesen, sorry, hab nicht das Wort "Maximum" gesehen. Das mit dem long könnte schon richtig sein, da bin ich jetzt nicht sicher (hab keine Man Pages zur Verfügung ).

Welche Warnungen bekommst du?
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
148
06.01.2004, 11:42 Uhr
Lumina



Aufgabe 2:
Folgendes C-Programm soll den gerundeten Zahlenwert von Wurzel2
ausgeben. Leider ergibt sich bei der Ausführung ein völlig
unsinniger Wert. Korrigieren Sie den Fehler, begründen Sie Ihre
Korrektur und geben Sie die genaue Ursache für den Fehler an.


C++:
# include <stdio.h>

main()
{
    double wurzelZwei;
    wurzelZwei=sqrt(2.0);
    printf("Wurzel 2: %3.2lf\n", wurzelZwei);
}



Ich würde sagen, das liegt daran, weil die Headerdatei <math.h>
nicht eingebunden wurde. Sonst wird nämlich angenommen, dass
die Funktion sqrt extern mit Rückgabetyp int ist und es ergibt
sich das falsche Ergebnis bei der Ausgabe.

Also so:

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

main()
{
    double wurzelZwei;
    wurzelZwei=sqrt(2.0);
    printf("Wurzel 2: %3.2lf\n", wurzelZwei);
}



Nun ergibt sich als Ausgabe:
Wurzel 2: 1.41 Press any...

Könnte doch stimmen, oder?

Bearbeitung von Pablo:

Wir haben leider keine C tags, sondern nur cpp tags


--
*******************************************
Willst du glücklich sein im Leben, trage bei zu and'rer Glück,
denn die Freude, die wir geben, kehrt ins eig'ne Herz zurück!
*******************************************

Dieser Post wurde am 06.01.2004 um 11:45 Uhr von Pablo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
149
06.01.2004, 11:47 Uhr
Pablo
Supertux
(Operator)


Ja, da würde ich das gleiche sagen. Mein gcc würde sogar streiken, wenn ich math.h nicht includiere und wenn ich ohne -lm kompiliere.
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] > 15 < [ 16 ] [ 17 ] [ 18 ] [ 19 ] [ 20 ]     [ 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: