Beiträge von xxyy

    Hallo Leute, guten Tag euch allen!

    Ich bin dabei eine struct für komplexe Zahlen zu schreiben.
    Dann soll das Programm zwei komplexe Zahlen addieren, subtrahieren, multiplizieren und dividieren können.

    Die struct habe ich nach langer Mühe zusammengebastelt und hoffe dass sie nicht ganz falsch ist.

    Das ist zunächst nur für die Addition.

    Ich bin mir bei der Eingabe printf unsicher. Und ich weiß nicht genau wie ich die 2 Zahlen der add Funktion übergeben soll.

    Ich habe zuerst versucht das oben zu kompilieren, aber bekam einen Fehler.

    Für mich bisher ungewohnt mit struct zu arbeiten und hoffe mir kann jemand helfen.

    Vielen Dank fürs Lesen schon mal!


    EDIT: habe eben herausgefunden, dass struct vor int main() muss. bekomme aber einen Fehler bei der scanf Stelle.

    Ah, wundert mich dass es in dem tutorial von pronix nicht so drin steht.

    Kann das Array mit char zeichen[anzahl] definiert werden oder mit int zeichen[anzahl] oder ist das egal?

    Weil bei Pronix scheint es egal zu sein. Aber das heisst praktischer ist immer int oder?

    Zitat


    'getchar' dient zum Einlesen einzelner Zeichen von Tastatur. Sie werden jetzt sicher verwundert sein das der Rückgabewert von 'getchar' vom Typ 'int' ist. Nun das liegt daran das ein char vor seiner Verwendung in einem Ausdruck in ein 'int' konvertiert wird. Wenn Ihnen der tiefere Hintergrund darüber interessiert können sie den Text im folgenden Rahmen lesen, wenn nicht können sie ihn auch überspringen.

    Das Problem der Verwendung von int liegt an der Konstanten EOF (End of File) die das Ende einer Eingabe anzeigt. EOF ist meist als -1 definiert, damit sie nicht mit den normalen ASCII - Zeichen kollidiert. Nun früher als noch 127 Zeichen verwendet wurden war das kein Problem. Heute kommt es oft vor das Zeichen größer wie 127 gelesen werden wie z.B. ä,ö,ü.....! Daher wird char oft mit unsigned deklariert und kann somit Zeichen zwischen 0...255 lesen. Nun ist aber kein Platz mehr für EOF. Man hat dann einfach den Rückgabewert von 'getchar' als int deklariert und damit können sowohl die 256 Zeichen als auch das EOF übermittelt werden.

    Hallo,

    danke für die Hinweise. Mein Prof. sagt uns immer, wir sollen mit den Mitteln arbeiten die wir bis jetzt kennen gelernt haben. Deshalb habe ich das so "einfach" gemacht.
    toupper(int char) kenne ich noch nicht wirklich, aber ist interessant.
    Um das flushall(); kann man einfach bei scanf zwei mal %c%c eingeben sagte mein Prof.. Aber wie flushall(); funktioniert, darauf ist er nicht wirklich eingegangen.

    Ich habe die erste for-Schleife folgendermassen verändert

    Aber bei der Ausgabe bekomme ich für jedes Zeichen 1/4.

    Danke zunächst!

    Bei Punkt 2 muss es doch heißen: x,y,z elem 0...7 oder?

    Das habe ich jetzt wirklich verschlafen mit der Oktaldarstellung, auch wenn ich sie bisher kaum verwendet habe.
    Aber \0 ist eigentlich ja dann eine "Oktalzahl", wo man auch mit dem character einen string beendet ?

    Zu 5 nochmal.
    %f Floatingpoint kenne ich bisher wo ich z.B. %.3f verwendet um beim Nachkomma zu runden. Aber was die 8 genau bewirkt weiß ich nicht. Ich sehe nur dass sich die Position der Zahl dann nach links oder rechts verschiebt bei der Ausgabe.

    Das gleiche Problem mit %e. .3 gibt die Rundung an, aber wenn ich die 10 verändert tut sich nichts. auch -001 bleibt gleich.

    Hallo Leute,

    ich mal wieder mit paar Fragen...

    Ich habe einen Quellcode dessen Ausgabe ich verstehen muss.

    ich habe den so kompilieren lassen und versucht nachzuvollziehen.

    Ausgabe sieht so aus

    Zitat


    10 12 A
    0 48 0
    2 P (
    d a

    0.457 4.568e-001


    Die 1 Zeile mit der Ausgabe "10 12 A" kann ich nachvollziehen.
    Bei der 2. Zeile mit "0 48 0" kann ich dir ersten 2 Werte nachvolliehen. Also zuerst einfach die Ausgabe der Zahl 0, dann die Ausgabe der Dezimalzahl "48" in der ASCII Tabelle der Ziffer 0.
    Aber was bedeutet '\0', da ja "0" ausgegeben wird?!

    In der 3. Zeile wird zuerst Zeichen "2" an der Dezimalstelle 50 ausgegeben, dann das Zeichen "P" an der Hexzahlstelle 50.
    Und was bedeutet dann die '\50', dass "(" ausgegeben wird?

    Die 4. Zeile verstehe ich auch nicht bis auf die Ausgabe von "a", da ja einfach 'a' da steht.

    Die 5. Zeile mit der Ausgabe der Zahl kann ich auch nicht nachvollziehen. Ich weiß nur dass z.B. bei %8.3f die 3 für das Runden nach der dritten Nachkommastelle steht.


    danke fürs lesen.

    Hallo Leute,

    diesmal bin ich dabei ein Proggie zu schreiben, dass 10 kleine Zeichen einliest und diese dann in Großbuchstaben einliest.

    Zunächst habe ich das für ein Zeichen gemacht.

    Zitat


    #include <stdio.h>

    void main()
    {
    char zeichen;

    printf("Zeichen: ");
    scanf("%c",&zeichen);

    printf("%c\n",zeichen-32);
    }


    Das funktioniert wie es soll.

    Jetzt habe ich die Eingabe von 10 Zeichen in einem Array speichern wollen und dann wieder ausgeben, aber er liest mir nur 5 ein und die Ausgabe sieht komisch aus.


    Was mache ich falsch?

    EDIT: Ich hab´s grad rausgefunden. Habe am Ende der ersten For-Schleife einfach den Tastaturpuffer mit flushall(); gelöscht.
    Und jetzt geht alles.


    Vielen vielen Dank!

    Sieht das dann so aus?

    In wie fern Datenverlust? Etwa, dass ein falsches Ergebnis raus kommt?

    Danke euch für die schnellen Antworten!

    Wegen short fragte ich, weil in der Übungsaufgabe ja steht "in einer short Variablen speichern".
    Und ich frag mich warum die Aufgabenstellung zur Umrechnung hexa->dezimal so einfach da steht und bei dezimal->Hexa so "kompliziert", also:


    Die Fehlermeldung lautet wenn ich short dezimal definiere:
    Run-Time Check Failure #2-stack around the variable 'dezimal' was corrupted


    EDIT:
    Hier nochmal die genauen Aufgabenstellungen

    • Schreiben Sie ein Programm, das eine vorzeichenlose Hexadezimalzahl einliest und die gespeicherte Zahl in dezimaler Form ausgibt.
    • Schreiben Sie ein Programm, das eine vorzeichenbehaftete Dezimalzahl einliest, in einer short-Variablen speichert und das gespeicherte Bitmuster in hexadezimaler Form gemäß der vorzeichenlosen Darstellung ausgibt.
    • Konvertieren Sie die Dezimalzahl 47010 in das Hexadezimalsystem und bestimmen Sie die Zweierkomplement-Darstellung von -4510
    • Überprüfen Sie Ihre Ergebnisse mit dem Programm aus Aufgabe 6.2


    1. und 2. sind ja eigentlich gleich, nur dass da die Eingabe und Ausgabe vertauscht werden. Und wenn ich die Aufgabe 2 mit dem short Typ %hd programmiere und dann z.B. die Zahl 47010 gibt er FFFFb7a2 aus. Was soll das FFFF bedeuten? Denn eigentlich ist ja nur das b7a2 relevant und man könnte es mit einer normalen integer Variablen programmieren.

    Hallo Leute,

    ich habe auf dem Gebiet noch etwas Schwierigkeiten.
    Habe zu 2 Programmen eine Frage.

    1.
    In der Aufgabenstellung steht, dass eine vorzeichenbehaftete Dezimalzahl eingelesen werden soll, in einer short Variablen gespeichert werden soll und das gespeicherte Bitmuster in hexadezimaler Form gemäß der vorzeichenlpsen Darstellung ausgegeben werden soll.
    Ist das so richtig?

    Ist das so richtig? Wenn ich die Variable "dezimal" mit short definiere, dann bekomme ich beim Programm einen Fehler nach der Eingabe.

    2.
    Wie sieht es aus, wenn ich eine Hexazahl eingeben will und mir dann die Dezimalzahl ausgegeben wird?
    ich probiere schon die ganze Zahl herum, aber nichts klappt.

    Vielen vielen Dank!!

    Hallo Leute,

    ich habe eine Aufgabe mit einer Lösung vor mir und mir ist bei der Lösung etwas nicht klar. Und zwar lautet sie:

    Schreiben Sie Programme in MC68000-Assembler, die die folgenden Algorithmen ausführen.

    Do-While-Schleife:
    Initialisiere Variable P mit Hexadezimal $10000
    Wiederhole
    Lösche die Speicherstelle auf die P zeigt
    Solange P < $11000

    Als Lösung habe ich:

    1. START ORG $1000
    2. P DC.L $10000
    3. MOVE.L P,A0
    4. LOOP CLR (A0)+
    5. CMP.L #$11000,A0
    6. BNE LOOP
    7. TRAP #15
    8. END START

    Hier jetzt meine Kommentare

    1. Die Basisadresse von der das Programm im RAM beginnen soll
    2. Initialisiert P mit $10000
    3. Schreibt den Wert von P in A0
    4. Löscht den Wert auf den A0 zeigt
    5. vergleicht den Wert von A0 mit $11000
    6. Wenn gleich dann zum nächsten Befehl, sonst zurück zu LOOP
    7. Stopt die Simulation

    Sind die Kommentare richtig?

    Und dann warum in der 7 Zeile trap #15 ?? Kann mir jemand den Befehl erklären und warum #15 ?? Im Internet finde ich nichts.

    Spielt es eine Rolle ab welcher Basisadresse das Programm im Ram beginnt?
    Gibt es auch eine andere Möglichkeit als trap #15 das Programm zu beenden?
    Und warum wird der Wert zuerst in P und dann in A0 geladen?

    Danke!!

    Achso ja ist logisch...

    Unser Prof hat uns gefragt, was die größte und kleinste Zahl ist die mit Single Precision IEEE754 Floating-Point Zahlen dargestellt werden können.

    Das ist ja 2^-126 und (2-2^-23)*2^127
    Habe ich von hier

    Er meinte dass es dafür eine triviale Antwort und eine nicht triviale Antwort gibt. Was meint er?

    Zitat von Dimitrij


    Du hast 0,5 vergessen. Es wird aber trotzdem nie aufhören, da 2,6 nicht exakt dargestellt werden kann.


    kann man das so begründen, dass in single precision nicht genug Bits vorhanden sind um die Zahl darzustellen?

    Oder hat das eine anderen Grund?


    mas

    dankeschön für die Ausführung. Wozu dient das implizierte Bit?

    Danke für die Tipps!

      Dimitri

    Was für ein Format hat die Zahl 0x40400800 ?

    Wenn ich z.b. die Zahl -2,6 binär darstellen möchte, dann macht man es ja so:

    2^1+2^-2+2^-3+......=2+0,25+0,125.....=2,6

    Ich bin bis 10^-12 gekommen, aber es ist noch ein ganzes Stück...kann man das irgendwie schneller herausfinden?

    Hallo Leute,

    ich habe in der Uni eine Übungsaufgabe bekommen mit der ich nicht richtig zurecht kommen. Zumindest noch nicht, weil wir kein Rechenbeispiel haben.

    Und zwar lautet eine z.b.:

    Welcher Fließkommazahl entspricht die unten stehende Bitfolge?
    Interpretieren Sie die Bitfolge als eine Zahl im IEEE754 Fließkommaformat mit
    einfacher Genauigkeit (single-precision).

    0100 0000 0100 0000 0000 1000 0000 0000


    Ich weiß nicht wie man das formal macht bzw. die Bits zerlegt.

    Hoffe mir kann jemand helfen!

    Danke !