mein erstes konsolen programm
-
also ich poste hier mal mein allererstes Programm, welches ich mit C programmiert habe. Da es mein erstesd ist, ist es sicherlich noch nicht wirklich gut, es funktioniert zwar aber hab ich bestimmt sachen drin, die man so nicht macht oder nicht machen sollte. Hoffe daher auf Tips was ich ändern sollte.
In dem Programm dreht es sich um Vektoren das heist, addition, subtraktion Skalarprodukt und Länge. Es war eine Aufgabe für die Schule.
Aufgabe war es mit Zeigern zu arbeiten und Funktionen zu benutzen.#include <stdio.h> #include <math.h> #include <conio.h> #include <stdlib.h> #include <windows.h> //global variablen definieren float vektor[5]; char* v_names[] = {"x1", "x2", "y1", "y2", "z1", "z2"}; //Funktion cls() löscht den Bildschirm und zeigt den Kopf an void cls() { system("CLS"); printf("\t_____________________________________________________\n\n"); printf("\t Vektorprogramm \n"); printf("\t_____________________________________________________\n\n"); } //Funktion read() liest die 6 Vektoren ein void read(float *pvektor) { cls(); printf("\t Bitte geben Sie die Vektoren ein:\n\n"); for(int i=0;i<6;i++) { printf("\t %s=",v_names[i]); scanf("%f",(pvektor+i)); } } //Funktion calc() führt alle rechnungen aus und gibt die Ergebnise aus void calc(float *pvektor, int _operator) { cls(); switch(_operator) { //Vektoraddition case 1: { for(int i = 0;i<6;i++) { printf("\n\t Die Summe aus den Vektoren %s = %1.2f und %s = %1.2f ist %1.2f ",v_names[i],*(pvektor+i),v_names[i+1],*(pvektor+i+1),*(pvektor+i)+*(pvektor+i+1)); i++; } } break; //Vektorsubtraktion case 2: { for(int i = 0;i<6;i++) { printf("\n\t Die Differenz aus den Vektoren %s = %1.2f und %s = %1.2f ist %1.2f ",v_names[i],*(pvektor+i),v_names[i+1],*(pvektor+i+1),*(pvektor+i)-*(pvektor+i+1)); i++; } } break; //Skalarprodukt case 3: { float product=(*pvektor * *(pvektor+1))+(*(pvektor+2) * *(pvektor+3))+(*(pvektor+4) * *(pvektor+5)); printf("\t Das Skalarprodukt aus den Vektoren\n\t x1=%1.2f, x2=%1.2f,\n\t y1=%1.2f, y2=%1.2f,\n\t z1=%1.2f und z2=%1.2f\n\t ist %1.2f",*pvektor,*(pvektor+1),*(pvektor+2),*(pvektor+3),*(pvektor+4),*(pvektor+5),product); } break; //Vektorenlänge case 4: { float length = sqrt( ((*(pvektor)+*(pvektor+1))*(*(pvektor)+*(pvektor+1))) + ((*(pvektor+2)+*(pvektor+3))*(*(pvektor+2)+*(pvektor+3))) + ((*(pvektor+4)+*(pvektor+5))*(*(pvektor+4)+*(pvektor+5))) ); printf("\t Die Laenge aus den Vektoren\n\t x1=%1.2f, x2=%1.2f,\n\t y1=%1.2f, y2=%1.2f,\n\t z1=%1.2f und z2=%1.2f\n\t ist %1.2f",*pvektor,*(pvektor+1),*(pvektor+2),*(pvektor+3),*(pvektor+4),*(pvektor+5),length); } break; } getch(); } int main() { int option, i = 0; while(i = 1) { cls(); printf("\t Bitte waehlen Sie einen Menuepunkt aus\n\n"); printf("\t 1. Vektoraddition\n\t 2. Vektorsubtraktion\n\t 3. Skalarprodukt\n\t 4. Laenge bestimmen \n\t 9. Go Home\n\t "); scanf("%d",&option); //Wenn gerechnet werden muss if(option == 1 || option == 2 || option == 3 || option == 4) { read(vektor); calc(vektor,option); } //Wenn das Programm beendet wird else if(option == 9) return 0; //Wenn falscher Wert eingegeben wurde else { cls(); printf("\t Error 1001 - Falsche Zahl eingegeben"); getch(); } } }
-
Du liebe Güte...
Also ich finde deine printf-Aufrufe, naja sagen wir mal: "Recht kompakt".
Erstens kannst du auch mehrere printf-Aufrufe hintereinander schreiben.
Du musst nicht immer alles in einer Zeile reinpressen.
Also statt:printf("eins=%d, zwei=%d\n", eins, zwei);
printf("eins=%d ",eins); printf("zwei=%d\n", zwei);
Oder wenigstens Zeilenumbrüche.
Tut der Übersichtlichkeit sicher gut.Und außerdem hast du bei Case1 und Case2 in dem for-Block noch ein i++ zu stehen. Das hast du sicher übersehen.
Auf jeden Fall bist du in Sachen Kommentaren auf dem richtigen Weg
-
ich habe auch noch ein paar hints:
1. überprüfe mal, ob du wirklich alle header brauchst, die du da eingebunden hast. ich habe das jetzt nicht alles genau durchgeschaut, aber irgendwie habe ich so das gefühl, man könnte dein programm auch mit weniger headern schreiben.
2. dann trifft mich irgendwie dieser system-aufruf hart...es gibt doch bestimmt schönere methoden, um den bildschirm zu löschen. schau dir mal an, wie marc++us das in seiner improved console gelöst hat.die findest du in der konsolen-faq, wenn ich mich richtig erinnere.
3. ich bin mir ziemlich sicher, dass man mit geschickter zeigerverwendung auf diese globalen variablen verzichten kann.
4. wenn du auf den C/C++-tag-button geklickt hättest instead of den langweiligen code-button, dann wären die schlüsselwörter jetzt im schönen c/c++-blau eingefärbt. so isses nur ein fades schwarzbtw: respekt zu deinem ersten programm. mein erstes programm war ein "hello world"-mfc-dialog mit 127 fehlermeldungen
-
erstmal vielen dank für die antworten. werde mein programm mit den tips nochmal überarbeiten.
und um nochmal auf das erste programm zu kommen: hab vorher ja schon viel mit php gescriptet wodurch einem so schon vieles klarer ist. und ich hab natürlich auch zuerst tutorials mit hello-world gemacht (standard halt) und so ein bischen rumprobiert. Aber mein erstes komplett eigenständiges C-Programm ist halt das obrige.