Totaler Neuling...C++ Fragen

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Totaler Neuling...C++ Fragen

    Ich habe ein Buch bekommen von meinem Bruder "Jetzt lernen sie C"(brauche C++).

    Ich verstehe aber den umwandlungsvorgang nicht...also wie ich den so hinschreibe,das der compiler das auch mitmacht.

    Also meine Aufgabe ist:Ein kleines Programm zu schreiben,welches einen Wert von der Tastatur entgegennimt,diesen der Variabel x zuweisst,den Ausdruck y=2*sin(2*x) berechnet und das Resultat auf dem Bildschirm anzeigt

    2 Sache die ich nicht ganz mitverfolgen kann (wie man das Programmierisch hinschreibt)...

    DATENUMWANDLUND über Chast

    z.b db = (double) fl;

    wo muss ich das genau hinschreiben in einem Programm?


    P.S ich bin von einem halben Jahr genau bei gleichen Punkt stecken geblieben...aber diesmal frage ich,befor ich aufgebe.(Aufgeben niemals 8) )
  • Datentypen werden intern unterschiedlich interpretiert und können unterschiedliche Arten von Werte aufnehmen. So kann zB eine Variable vom Typ char auf einem normalen Windows-System die Werte von -128 - +127 annehmen und braucht 1 Byte im Speicher. Ein "int" hat einen Bereich von -2^31 - +(2^31-1) benötigt dafür aber 4 Bytes im Speicher.
    Stell dir vor du hast eine "int" Variable, die den Wert 1000 enthält (int i = 1000;)
    Nun möchtest du diesen Wert einer Variablen "c" vom Typ "char" zuweisen -> ein char kann den Wert 1000 aber nicht speichern, und das merkt der Compiler und meckert.
    Über einen "Cast" (ohne 'h') kannst du dem Compiler sagen: Mecker nicht, und machs einfach.
    Umgekehrt (also von char Variable in int Variable) ist es kein Problem, da ja jeder Wert von char auch ein Pendant in int hat.
    Die Datentypen "float" und "double" haben eine unterschiedliche Genauigkeit und brauchen 4 Bytes (float) bzw. 8 Bytes (double) im Speicher. Wenn du also versuchst einen "double" Wert in eine "float" Variable zu speichern. wird der Compiler wieder meckern. Mit einem Cast sagst du ihm wie gesagt, dass du das absichtlich machst und er sich nicht damit beschäftigen soll.
    Als Faustregel würde ich aber sagen, dass du im Normalfall einfach immer "double" nimmst, da du jede float Variable problemlos (und ohne Compiler-Gemecker) in eine double Variable umwandeln kannst.

    hth
  • danke erst mal für die Antwort,sie hatte mir indirekt weitergeholfen,indem ich jetzt ein wenig mehr verstehe was genau der Sinn der Umwandlung ist.

    Im Buch steht das man die Typumwandlung vor die Variabel schreiben muss steht aber nach weiten versuchen,steht nicht drin wie man es vorne dran schreibne muss...

    Kann mir jemand ein kleinen Beispiel von einer Linie schreiben wie das aussehen müsste...dafür wäre ich sehr dankbar.
  • also das ich das richtig verstehe. i wird in ein char umgewandelt...und c bleibt?

    dan habe ich gerade noch eine Frage....

    Die Anweisung ch...kann mir wer sagen was ein Array ist?

    und in welchen Fällen der Tatenyp ch gebrauch sinvoll ist?

    Ich weiss was er macht aber ich sehe keinen Sinn.
    merci für die Antworten und Hilfe.
  • öhm.. das ist doch nur ne simple zuweisung
    c wird der der umgewandelte wert von i zugwiesen

    * i bleibt also unverändert
    * c erhält den zeichenwert von 1000 (nach ascii tabelle wäre das so ein komisches Ϩ)

    ein array ist eine matrix (mathematik)
    kann man in beliebig viele dimensionen steigern

    datentyp ch? meinst du char? man nimmt immer den datentyp der am besten zum inhalt passt.. einen String für ein einziges zeichen zu verwenden wäre inperformant, weil der string mehr speicher reserviert als ein einzelnes char
  • Danke für die antwort...

    Quellcode

    1. #include <stdio.h>
    2. #include <math.h>
    3. #include <stdlib.h>
    4. int main()
    5. {
    6. float a,b;
    7. printf("Gebe eine Zahl fuer a und b ein\n");
    8. scanf("%g",&a);
    9. scanf("%g",&b);
    10. if(a==10)
    11. {
    12. printf("%g ist richtig geraten",a);
    13. }
    14. else if (a==11)
    15. {
    16. printf("%g ist richtig geraten",a);
    17. }
    18. else if (a==12)
    19. {
    20. printf("%g ist richtig geraten",a);
    21. }
    22. else if (b==10)
    23. {
    24. printf("%g ist richtig geraten",a);
    25. }
    26. else
    27. printf("%g ist falsch geraten",a);
    28. if(b==20)
    29. {
    30. printf("%g ist richtig geraten",b);
    31. }
    32. else if (b==21)
    33. {
    34. printf("%g ist richtig geraten",b);
    35. }
    36. else if (b==22);
    37. {
    38. printf("%g ist richtig geraten",b);
    39. }
    40. else
    41. printf ("DIE ZAHL IST LEIDER FALSCH GERATEN!!!!!");
    42. system("pause");
    43. }
    Alles anzeigen


    Ich bekomme beim letzten else ein Fehler weiss aber nicht warum,bin erst heute Abend zum Kapitel if, else ,else if gekommen das Programm habe ich selbst geschrieben...bis auf das geht eigentlich alles...


    P.S Ich weiss der Inhalt des Programms ist nicht Sinvoll,aber es geht ja ums üben nicht um die Sinnvoligkeit des Programms.
  • Danke zuerst mal für die Hilfe zum letzten Programm habe wieder ein neues Programm mit schlaufen gemacht,das nicht so funktioniert wie ich das will.

    Ich möchte gern das es wen ich Luca eingebe steht richtig geraten und wen ich luca oder sonst was eingebe steht falsch geraten versuchen sie es erneut....

    Quellcode

    1. #include <stdio.h>
    2. #include <math.h>
    3. #include <stdlib.h>
    4. int main()
    5. {
    6. char a[5];
    7. printf("Eraten sie meinen Namen,4 Zeichen ist er lang \n");
    8. scanf("%s",&a);
    9. while (a != "luca")
    10. {
    11. if (a != "luca")
    12. {
    13. printf("Richtig geraten");
    14. a =="luca";
    15. }
    16. else
    17. {
    18. printf("Leider Falsch, raten sie erneut \n");
    19. scanf("%s",&a);
    20. }
    21. }
    22. system("pause");
    23. }
    Alles anzeigen


    P.S wie macht ihr das c: und dan is tder Text in so einem Kästchen
  • Strings (char* oder char[...]) kann man leider nicht mit "==" vergleichen, dafür braucht man "strcmp" -> wichtig: diese Funktion liefert 0 zurück wenn es passt:

    Beispiel:

    Quellcode

    1. if (strcmp (a, "luca") == 0) {
    2. // ja, es ist luca!
    3. }


    Probier mal aus, was passiert, wenn du mehr als 4 Zeichen eingibts -> dein Programm sollte abstürzen, oder anderweitig komisch reagieren.
    Warum? Das liegt daran, dass a nur für 4 Zeichen + '\0' Platz hat. Wenn du mehr eingibts, überschreibst du Speicher.
    Zitat aus der MSDN:
    When reading a string with scanf, always specify a width for the %s format (for example, "%32s" instead of "%s"); otherwise, improperly formatted input can easily cause a buffer overrun.

    Das hiese für dich,

    Quellcode

    1. scanf ("%4s", &a);
    zu verwenden.


    Ad b) Wenn du eine neue Nachricht hast, gibt es rechts oben eine Box mit "Syntax Highlighting" -> du markierst den Block den du haben willst und wählst dort "C++" aus (oder welche Sprache auch immer). Dann erscheint wird der Code mit einem

    Quellcode

    1. [syntax="c"] ... [/syntax]
    Block umrahmt.
    Siehe auch hier

    hth
  • Ich gehe nochmals das durch was ich hatte.Ich habe eigentlich vor das wen es eine Zahl zwischen 1-4 eingebe,das es dan beendet wird (dafür auch ||),aber es fragt immer weiter.

    Quellcode

    1. #include <stdio.h>
    2. #include <stdlib.h>
    3. #include <string.h>
    4. int main()
    5. {
    6. short i;
    7. do
    8. {
    9. printf("\nWelche Zahl wollen sie 1,2,3 oder 4?:");
    10. scanf("%d",&i);
    11. switch(i)
    12. {
    13. case 1: printf("\nSie nehmen die 1\n");
    14. break;
    15. case 2: printf("\nSie nehmen die 2\n");
    16. break;
    17. case 3: printf("\nSie nehmen die 3\n");
    18. break;
    19. case 4: printf("\nSie nehmen die 4\n");
    20. break;
    21. default:printf("\nGib bitte eine Zahl zwischen 1-4 an\n");
    22. break;
    23. }
    24. } while(i!=1||i!=2||i!=3||i!=4);
    25. system("pause");
    26. }
    Alles anzeigen
  • Quellcode

    1. while(i!=1||i!=2||i!=3||i!=4);


    jede bedingung hat einen rückgabewert

    gehen wir davon aus, dass du eine 2 eintippst
    2!=1 = true
    2!=2 = false
    2!=3 = true
    2!=4 = true

    setzen wir das wieder in die while ein
    while(true|| false || true || true)

    da alles mit einem logischen "ODER" verknüpft ist, muss nur eine der vier bedingungen zutreffen um die schleife erneut aufzurufen
  • Ich habe mir jetzt das Buch Jetzt lerne ich C++ besorgt von Markt und Technick.Ich habe ein paar Programme abgeschrieben,aus dem PDF,leider gehen die nicht.

    Quellcode

    1. #include <iostream>
    2. #include <stdlib.h>
    3. #include <stdio.h>
    4. #include <math.h>
    5. #include <stdlib.h>
    6. #include <stdafx.h>
    7. int main()
    8. {
    9. unsigned short Width = 5, Length;
    10. Length= 10;
    11. unsigned short Area =Width * Length;
    12. cout << "Breite: " <<Width<< "\n";
    13. cout << "Laenge: " << Length << endl;
    14. cout << "Flaeche:" <<Area<<endl<< endl;
    15. return 0;
    16. }
    Alles anzeigen



    Auszug aus dem Compiler


    ------ Erstellen gestartet: Projekt: Anfänger, Konfiguration: Debug Win32 ------
    Kompilieren...
    Zeichenlesser.cpp
    c:\dokumente und einstellungen\snupi\eigene dateien\visual studio 2005\projects\anfänger\anfänger\zeichenlesser.cpp(15) : error C2065: 'cout': nichtdeklarierter Bezeichner
    c:\dokumente und einstellungen\snupi\eigene dateien\visual studio 2005\projects\anfänger\anfänger\zeichenlesser.cpp(16) : error C2065: 'endl': nichtdeklarierter Bezeichner
    Das Buildprotokoll wurde unter "file://c:\Dokumente und Einstellungen\Snupi\Eigene Dateien\Visual Studio 2005\Projects\Anfänger\Anfänger\Debug\BuildLog.htm" gespeichert.
    Anfänger - 2 Fehler, 0 Warnung(en)
    ========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========



    P.S habe einige abgeschrieben alle hatten mir gesagt Cout sei nicht deklariert,Danke für die Hilfe.
  • 1. Fast alle Bibliotheken, die du einbindest (#include <stdlib.h> <stdio.h> <math.h> <stdlib.h> <stdafx.h>) brauchst du nicht! Steht das wirklich so im Buch drin?

    2. Solange du nur C++-Standardbibliotheken benutzt (das müssten eigentlich alle sein, die du in dem Buch findest), kannst du dir mal angewöhnen vor main()

    Quellcode

    1. using namespace std;

    in jedes deiner Programme zu schreiben, um "alle Namen des namespace std in den globalen namespace zu stellen".
    Hier kannst du (irgendwann mal) nachschauen was das eigentlich macht ;)
  • habe jetzt ein beispiel genommen von newb Seite Angabe.

    Quellcode

    1. #include <util.h>
    2. #include <iostream>
    3. #include <stdafx.h>
    4. using namespace std;
    5. namespace
    6. {
    7. int kleinerHelfer(int a)
    8. {
    9. cout << "kleinerHelfer" << a << endl;
    10. }
    11. } // namespace
    12. void util::service()
    13. {
    14. kleinerHelfer(12);
    15. }
    Alles anzeigen



    COMPILER SAGT:

    ------ Erstellen gestartet: Projekt: Anfänger, Konfiguration: Debug Win32 ------
    Kompilieren...
    Zeichenlesser.cpp
    c:\dokumente und einstellungen\snupi\eigene dateien\visual studio 2005\projects\anfänger\anfänger\zeichenlesser.cpp(5) : error C2871: 'std': Es ist kein Namespace mit diesem Namen vorhanden
    c:\dokumente und einstellungen\snupi\eigene dateien\visual studio 2005\projects\anfänger\anfänger\zeichenlesser.cpp(10) : error C2065: 'cout': nichtdeklarierter Bezeichner
    c:\dokumente und einstellungen\snupi\eigene dateien\visual studio 2005\projects\anfänger\anfänger\zeichenlesser.cpp(10) : error C2065: 'endl': nichtdeklarierter Bezeichner
    c:\dokumente und einstellungen\snupi\eigene dateien\visual studio 2005\projects\anfänger\anfänger\zeichenlesser.cpp(14) : error C2653: 'util': Keine Klasse oder Namespace
    Das Buildprotokoll wurde unter "file://c:\Dokumente und Einstellungen\Snupi\Eigene Dateien\Visual Studio 2005\Projects\Anfänger\Anfänger\Debug\BuildLog.htm" gespeichert.
    Anfänger - 4 Fehler, 0 Warnung(en)
    ========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========


    P.S im alten Beispiel gibt er mir die gleichen FEHLER an...was ist das Problem?
  • hm, du hast mich missverstanden.
    "using namespace std;" vor "main()":

    Quellcode

    1. #include <iostream>
    2. using namespace std;
    3. int main()
    4. {
    5. unsigned short Width = 5, Length;
    6. Length= 10;
    7. unsigned short Area =Width * Length;
    8. cout << "Breite: " <<Width<< "\n";
    9. cout << "Laenge: " << Length << endl;
    10. cout << "Flaeche:" <<Area<<endl<< endl;
    11. return 0;
    12. }
    Alles anzeigen

    Kümmer dich erstmal nicht drum was das heisst, nimms einfach hin ;)