Brauche Hilfe bei HA
-
Hallo,
Ich habe dieses Jahr angefangen zu studieren und muss nun auch mit C programmieren. Allerdings muss ich gestehen das ich schon in der Schule mit Delphi nicht besonders gut im programmieren war. Ich hoffe ihr könntet mir etwas behilflich sein mit meinen Hausaufgaben, da sie laut Professor nicht besonders schwer sind. Die erste Aufgabe habe ich sogar schon gelöst ich werde sie trotzdem nocheinmal hier herein schreiben um vielleicht Verbesserungsvorschläge zu bekommen. Da wir ganz am Anfang vom Programmieren stehen haben wir als erstes eine komplexes Beispiel bekommen.#include <stdio.h> int main(void) { double a,b,hyp; double hoehe, flaeche, umfang; a = 3; b = 4; hyp = 5; umfang = a + b + hyp; hoehe = (a * b) / hyp; flaeche = (a * b) / 2; printf("Das Dreieck hat die Seiten:\n"); //folgende Zeile soll für die Aufgaben //verwendet bzw. abgewandelt werden printf("Kathete a=%lf Kathete b=%lf Hypothenuse hyp=%lf\n",a,b,hyp); return 0; }
Nun ist die Aufgabe 1 Berechnungen als Funktionen zu implementieren und diese in der Main Funktion auszugeben. Dies habe ich so gelöst.
#include <stdio.h> double berechneUmfang(double a, double b, double hyp) { double umfang = a + b + hyp; //Berechnung return umfang; } double berechneHoehe(double a, double b) { double hoehe = (a * b) / 2; //Berechnung return hoehe; } double berechneFlaeche(double a, double b) { double flaeche = (a * b) / 2; //Berechnung return flaeche; } int main(void) { double a,b,hyp; double hoehe, flaeche, umfang; a = 3; b = 4; hyp = 5; umfang = berechneUmfang(a, b, hyp); hoehe = berechneHoehe(a, b); flaeche = berechneFlaeche(a, b); printf("Das Dreieck hat die Seiten: a, b und hyp\n"); //folgende Zeile soll für die Aufgaben //verwendet bzw. abgewandelt werden printf("Kathete a=%lf Kathete b=%lf Hypothenuse hyp=%lf\n",a,b,hyp); return 0; }
Die 2. Aufgabe ist allerdings etwas komplizierter. Sie lautet:
Die Gleichungen(ausser Umfang) gelten für
rechtwinklige Dreiecke. Für die Parameter im Beispiel
(a,b,hyp) ist dies der Fall.
Prüfen Sie vor den Berechnungen, ob die Kantenlängen
einem rechtwinkligem Dreieck entsprechen. Wenn ja,
dann kann die Berechnung mit Hilfe der im Beispiel
genannten Gleichungen erfolgen. Falls die Seiten
nicht rechtwinklig sind, so müssten Fläche und Höhe
anders errechnet werden. Das Programm sollte daher in
diesen Fällen eine gehaltvolle Fehlermeldung ausgeben
und ohne Berechnungen enden.Ich habe sie wie folgt gelöst, allerdings meint mein Compiler(MinGW) syntax error before '}' token.
#include <stdio.h> #include <math.h> double berechneUmfang(double a, double b, double hyp) { double umfang = a + b + hyp; //Berechnung return umfang; } double berechneHoehe(double a, double b) { double hoehe = (a * b) / 2; //Berechnung return hoehe; } double berechneFlaeche(double a, double b) { double flaeche = (a * b) / 2; //Berechnung return flaeche; } int main(void) { double a,b,hyp; double hoehe, flaeche, umfang, rechtwinklig; a = 3; b = 4; hyp = 5; umfang = berechneUmfang(a, b, hyp); if (pow(a, 2) + pow(b, 2) == pow(hyp, 2)) { hoehe = berechneHoehe(a, b); flaeche = berechneFlaeche(a, b); } else {prinf("Das Dreieck ist nicht rechtwinklig\n")} printf("Das Dreieck hat die Seiten: a, b und hyp\n"); //folgende Zeile soll für die Aufgaben //verwendet bzw. abgewandelt werden printf("Kathete a=%lf Kathete b=%lf Hypothenuse hyp=%lf\n",a,b,hyp); return 0; }
Aufgabe 3.1:
Implementieren Sie den in der Übung 1
vorgestellten Dezimal-zu-Binär-
Konverter/Algorithmus. Der Nutzer soll eine
positive Ganzzahl eingeben können, die dann
visuell bestätigt und schlußendlich im
(zeilenweise) Binärformat ausgegeben wird.
Implementieren Sie den eigentlichen Algorithmus
in einer Funktion.
Hinweis: Benutzen Sie zur Lösung die
Shiftoperatoren! Machen Sie sich ggf.
schriftlich vorher klar, was die Operatoren
(left, right shift) bewirken, wenn um eine
Stelle geschoben wird.Der Dezimal-zu-Binär-Konverter/Algorithmus ist meiner Meinung nach dieser Z=((i=−n)Σ(m))zi⋅2i ("hoffe ihr versteht meine Summenschreibweise")
Ich weis natürlich das alles ziemlich viel Text ist und auch einige Aufgaben beinhaltet.Ich hoffe trotzdem das ihr mir behilflich sein könntet.
Gruß,
Rasta
-
Rasta schrieb:
#include <stdio.h> double berechneUmfang(double a, double b, double hyp) { double umfang = a + b + hyp; //Berechnung return umfang; } double berechneHoehe(double a, double b) { double hoehe = (a * b) / 2; //Berechnung return hoehe; } double berechneFlaeche(double a, double b) { double flaeche = (a * b) / 2; //Berechnung return flaeche; } ...
Bei den Funktionen kannst du Dir die Variable eigentlich sparen. Mach doch z. B. einfach
return ((a * b) / 2);
.Rasta schrieb:
... int main(void) { double a,b,hyp; double hoehe, flaeche, umfang, rechtwinklig; a = 3; b = 4; hyp = 5; umfang = berechneUmfang(a, b, hyp); if (pow(a, 2) + pow(b, 2) == pow(hyp, 2)) { hoehe = berechneHoehe(a, b); flaeche = berechneFlaeche(a, b); } else {prinf("Das Dreieck ist nicht rechtwinklig\n")} printf("Das Dreieck hat die Seiten: a, b und hyp\n"); //folgende Zeile soll für die Aufgaben //verwendet bzw. abgewandelt werden printf("Kathete a=%lf Kathete b=%lf Hypothenuse hyp=%lf\n",a,b,hyp); return 0; }
In Zeile 15 fehlt ein Semikolon nach der
printf
-Anweisung.Zur letzten Aufgabe:
#include <stdio.h> int main () { int dec = 5, bin[8]; for (int i = 0; i < 8; i++) bin[7 - i] = dec & (1 << i) ? 1 : 0; for (int i = 0; i < 8; i++) printf ("%i", bin[i]); return 0; }
Wenn die AND-Verknüpfung wahr ist (Wert > 0) schreibt er eine '1' in das Array, wenn falsch (Wert == 0) eine '0'. Das Array wird von hinten beschrieben, sodass die hinterste Stelle die niederwertigste ist.
Erklärung:
Beispiel: Dezimal = 5 5: 00000101 5: 00000101 5: 00000101 & i << 0: 00000001 & i << 1: 00000010 & i << 2: 00000100 ------------------ ------------------ ------------------ 00000001 00000000 00000100 ...
-
Hey,
Habe die 2. Aufgabe nun verändert:#include <stdio.h> double berechneUmfang(double a, double b, double hyp) { return a + b + hyp; } double berechneHoehe(double a, double b, double hyp) { return (a * b) / hyp; } double berechneFlaeche(double a, double b) { return (a * b) / 2; } int main(void) { double a,b,hyp; double hoehe, flaeche, umfang, rechtwinklig; a = 3; b = 4; hyp = 5; umfang = berechneUmfang(a, b, hyp); if (a * a + b * b = hyp * hyp) { hoehe = berechneHoehe(a, b, hyp); flaeche = berechneFlaeche(a, b); } else {prinf("Das Dreieck ist nicht rechtwinklig\n")}; printf("Das Dreieck hat die Seiten: a, b und hyp\n"); //folgende Zeile soll für die Aufgaben //verwendet bzw. abgewandelt werden printf("Kathete a=%lf Kathete b=%lf Hypothenuse hyp=%lf\n",a,b,hyp); return 0; }
Allderings meint mein Compiler das es Probleme in der Main Funktion gibt: invalid lvalue in assignment und syntax error before '}' token
Hoffe ihr könnt mir helfen.
Gruß,
Rasta
-
Dein "invalid lvalue" kommt von Zeile 26. Das Gleichheitszeichen bedeutet "überschreibe die Adresse links mit dem Wert von rechts". Links steht aber keine Adresse, also ist das ungültig. Du willst bestimmt prüfen ob beide Seiten gleich sind, dafür gibt es das "==".
In Zeile 31 fehlt das Semikolon nach der printf-Funktion. Das Semikolon am Ende von Zeile 31 tut garnichts. Eigentlich kannst du die geschweiften Klammern in Zeile 31 auch ganz weglassen.
Benutze zukünftig bitte die [ cpp], nicht die [ c]-BBCodes. Mit cpp isses bunter und bunt ist toll.
-
Hab es jetzt geändert in Zeile 31 zu:
[cpp]
prinf("Das Dreieck ist nicht rechtwinklig\n");
allerdings kommt jetzt der Fehler: undefined reference to printf
-
printf schreibt man auch printf und nicht prinf
Das mit dem BBCode...
[c++]code[/c++], dann funktionierts auch.
-
Oh man das ist mir garnicht aufgefallen ... naja aufjedenfall funktionieren jetzt zumindest ersteinmal die ersten 2 Aufgaben
Gruß Rasta