Hallo,
habe eben meinen Beitrag editiert.
Also der Fehler kommt jetzt an den scanf Stellen.
'z': nichtdeklarierter Bezeichner
ich nehme an, dass die Adressierung etwas anders aussehen muss, aber bisher bin ich nicht drauf gekommen.
Danke
Hallo,
habe eben meinen Beitrag editiert.
Also der Fehler kommt jetzt an den scanf Stellen.
'z': nichtdeklarierter Bezeichner
ich nehme an, dass die Adressierung etwas anders aussehen muss, aber bisher bin ich nicht drauf gekommen.
Danke
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.
ZitatAlles anzeigenstruct Complex { double re,
im;
};
int main()
{
printf("1. Zahl: ");
scanf("%f %f", &z1.x, &z1.y);
printf("2. Zahl: ");
scanf("%f %f",&z2.x, &z2.y);
}
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.
Danke Dir nochmal! Hast mir echt viel geholfen.
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
ZitatAlles anzeigen
for(i=0;i<anzahl;i++)
{
printf("Zeichen eingeben: ");
getchar(zeichen);
flushall();
}
Aber bei der Ausgabe bekomme ich für jedes Zeichen 1/4.
Alles anzeigen1. Das \0 Character ist ein besonderes Zeichen (wie alle Zeichen in einem char oder string, die mit \ eingeleitet werden), das üblicherweise dazu benutzt wird, einen String o.ä. als beendet zu erklären. Es hat den ASCII-Wert 0.
2. ( ist 50(oktal). Mit \xyz (wo x, y, z elem 0..9) wird eine Oktalzahl angegeben.
3. a ist ein int mit dem Wert 100. ASCII-Wert 100 ist ein 'd'.
4. '\xa': \x ist für Hex-Zahlen. a ist (im Detail abhängig vom OS), als ob du Return drückst.
5. %f Floatingpoint, %e Exponentialdarstellung.
Das sind alles Dinge, die in jedem C-Anfänger-Buch stehen!
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.
ZitatAlles anzeigen
[INDENT] #include <stdio.h>
[/INDENT]
[INDENT] main()
{ int a=100;
double b=0.4567890;
printf("%d %o %X\n", 10, 10, 10);
printf("%d %d %d\n", 0, '0', '\0');
printf("%c %c %c\n", 50, 0x50, '\50');
printf("%c %c %c\n", a, 'a', '\xa');
printf("%8.3f %10.3e", b, b);
}
[/INDENT]
ich habe den so kompilieren lassen und versucht nachzuvollziehen.
Ausgabe sieht so aus
Zitat
10 12 A
0 48 0
2 P (
d a0.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.
ZitatAlles anzeigen
#include <stdio.h>int main()
{
char zeichen[10]; // Array mit 10 Elementen
int i;for(i=0;i<10;i++)
{
printf("Zeichen eingeben: ");
scanf("%c",&zeichen[i]);
}for(i=0;i<10;i++)
{
printf("%c\n",zeichen[i]-32);
}
}
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!
Danke für die Hilfen nochmal!
Also das Programm wie ich es zuletzt hier geschrieben habe, hat ihm ausgereicht. Er meinte so ist das ok.
Vielen Dank nochmal!!
Sieht das dann so aus?
ZitatAlles anzeigen
#include <stdio.h>
void main()
{
short dezimal;
printf("Dezimalzahl eingeben: ");
scanf("%hd",&dezimal);
printf("in Hexadezimal: %x\n",dezimal);
}
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
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?
ZitatAlles anzeigen
#include <stdio.h>
void main()
{
int dezimal;
printf("Dezimalzahl eingeben: ");
scanf("%d",&dezimal);
printf("in Hexadezimal: %0x\n",dezimal);
}
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?
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 !