Photonics-Helfer/src/Wein-tz/Abbildungsrechner.c
2024-12-16 15:41:32 +01:00

352 lines
11 KiB
C

/* Abbildungsrechner.c
Disese Programm macht folgendes:
1. Wahl zur Berechnung von optischen Messgroessen
2. Berechnung der gewaehlte Messgroesse
3. Gibt die Berechnung auf der Konsole aus
Autor: Catherine, Mika und Sebastian
Firma: FHGR
Version 1.0
Datum 14.12.2024
Aenderungen:
V 1.0 14.12.2024 Erste Version
*/
/******************************************************************************
** Eingebundene Bibliotheken **
******************************************************************************/
#include <stdio.h>
#include <stdlib.h>
/******************************************************************************
** Variablen **
******************************************************************************/
float f, a, A, M, y, Y; //Brennweite, Objektweite, Bildweite, Vergroesserung, Objektgroesse, Bildgroesse
int P = 0; //Programmauswahl
/******************************************************************************
** Funktions Prototypen **
******************************************************************************/
void programmAuswahl();
void Berechnung_Optische_Abbildung(float f, float a, float A, float M, float y, float Y, int P);
/******************************************************************************
** Hauptfunktion **
******************************************************************************/
int Abbildungsrechner()
{
while (P != 10){
programmAuswahl();
Berechnung_Optische_Abbildung(f, a, A, M, y, Y, P);
}
P = 0;
return 10;
}
/******************************************************************************
** Funktionen **
******************************************************************************/
void programmAuswahl()
{
printf("Waehlen Sie die zu berechnende Groesse: \n");
printf("1: Brennweite (f)\n");
printf("2: Objektweite (a)\n");
printf("3: Bildweite (A)\n");
printf("4: Objektgroesse (y)\n");
printf("5: Bildgroesse (Y)\n");
printf("6: Vergroesserung (M)\n");
printf("q: zurück zum Menu\n");
printf("Geben sie Ihre P ein(1-6):\n ");
char auswahl[21] = {0};
long auswahl_int = 0;
char *endptr;
scanf("%20s", auswahl);
auswahl_int = strtol((const char*)auswahl, &endptr, 10);
if (*endptr != 0){
auswahl_int = -1;
}
if (*endptr == 'q'){
P = 10;
return;
}
P = auswahl_int;
switch(P)
{
case 1:
printf("Sie haben Programm 1 gewaehlt: Brennweite berechnen\n");
break;
case 2:
printf("Sie haben Programm 2 gewaehlt: Objektweite berechnen\n");
break;
case 3:
printf("Sie haben Programm 3 gewaehlt: Bildweite berechnen\n");
break;
case 4:
printf("Sie haben Programm 4 gewaehlt: Objektgroesse berechnen\n");
break;
case 5:
printf("Sie haben Programm 5 gewaehlt: Bildgroesse berechnen\n");
break;
case 6:
printf("Sie haben Programm 6 gewaehlt: Vergroesserung berechnen\n");
break;
default:
printf("Dieses Programm ist ungueltigt.\n");
}
}
void Berechnung_Optische_Abbildung(float f, float a, float A, float M, float y, float Y, int P)
{
switch (P) {
case 1: // Berechnung Brennweite [f]
printf("Geben Sie Bildweite [A] und Objektweite [a] ein:\n");
printf("Bildweite [A]: ");
scanf("%f", &A);
printf("Objektweite [a]: ");
scanf("%f", &a);
// Berechnung Brennweite mit Objektweite [a] und Bildweite [A]
f = (a * A) / (A + a);
// Berechnung Vergroesserung mit Objektweite (a) und Bildweite [A]
M = -(A / a);
printf("-----------------------\n");
printf("Brennweite [f]:\n%f", f);
printf("\nVergroesserung [M]:\n%f", M);
printf("\n-----------------------\n");
printf("f = (a * A) / (A + a)\n");
printf("M = (A / a)\n");
printf("-----------------------\n");
break;
case 2: // Berechnung Objektweite [a]
printf("Waehlen Sie die Berechnungsmethode:\n");
printf("1: Mit Bildweite [A] und Brennweite [f]\n");
printf("2: Mit Bildgroesse [Y] und Objektgroesse [y]\n");
scanf("%d", &P);
if (P == 1) {
printf("Geben Sie Bildweite [A] und Brennweite [f] ein:\n");
printf("Bildweite [A]: ");
scanf("%f", &A );
printf("Brennweite [f]: ");
scanf("%f", &f);
// Berechnung Objektweite [a] mit Bildweite [A] und Brennweite [f]
a = (f * A) / (A - f);
printf("-----------------------\n");
printf("Objektweite [a]:\n%f", a);
printf("\n-----------------------\n");
printf("a = (f * A) / (A - f)\n");
printf("-----------------------\n");
}
else if (P == 2) {
printf("Geben Sie Bildgroesse [Y] und Objektgroesse [y] ein:\n");
printf("Bildgroesse [Y]: ");
scanf("%f", &Y);
printf("Objektgroesse [y]: ");
scanf("%f", &y);
// Berechnung Objektweite [a] mit Bildweite [A] und Vergroesserung (M)
a = -(A / M);
printf("-----------------------\n");
printf("Objektweite [a]:\n%f", a);
printf("\n-----------------------\n");
printf("a = a(A / M)\n");
printf("-----------------------\n");
}
break;
case 3: // Berechnung Bildweite [A]
printf("Waehlen Sie die Berechnungsmethode:\n");
printf("1: Mit Objektweite [a] und Brennweite [f]\n");
printf("2: Mit Objektweite [a] und Vergroesserung [M]\n");
scanf("%d", &P);
if (P == 1) {
printf("Geben Sie Objektweite [a] und Brennweite [f] ein:\n");
printf("Objektweite [a]: ");
scanf("%f", &a);
printf("Brennweite [f]: ");
scanf("%f", &f);
// Berechnung Bildweite [A] mit Brennweite [f] und Objektweite [a]
A = (f * a) / (a - f);
printf("-----------------------\n");
printf("Bildweite [A]:\n%f", A);
printf("\n-----------------------\n");
printf("A = (f * a) / (a - f)\n");
printf("-----------------------\n");
}
else if (P == 2) {
printf("Geben Sie Vergroesserung [M] und Objektweite [a] ein:\n");
printf("Vergroesserung [M]: ");
scanf("%f", &M);
printf("Objektweite [a]");
scanf("%f", &a);
// Berechnung Bildweite [A] mit Vergroesserung [M] und Objektweite [a]
A = -(a * M);
printf("-----------------------\n");
printf("Bildweite [A]:\n%f", A);
printf("\n-----------------------\n");
printf("A = -(a * M)\n");
printf("-----------------------\n");
}
break;
case 4: // Berechnung Objektgroesse [y]
printf("Waehlen Sie die Berechnungsmethode:\n");
printf("1: Mit Bildweite [A], Objektweite [a] und Bildgroesse [y]\n");
printf("2: Mit Bildgroesse [Y] und Vergroesserung [M]\n");
scanf("%d", &P);
if (P == 1) {
printf("Geben Sie Bildweite [A] und Objektweite [a] ein:\n");
printf("Bildweite [A]: ");
scanf("%f", &A);
printf("Objektweite [a]: ");
scanf("%f", &a);
// Berechnung Objektgroesse [y] mit Bildweite [A] und Objektweite [a] und Bildgroesse [y]
y = -(Y * A) / a;
printf("-----------------------\n");
printf("Objektgroesse [y]:\n%f", y);
printf("\n-----------------------\n");
printf("a = -(Y * A) / a\n");
printf("-----------------------\n");
}
else if (P == 2) {
printf("Geben Sie Bildgroesse [Y] und Vergroesserung [M] ein:\n");
printf("Bildgroesse [Y]: ");
scanf("%f", &Y);
printf("Vergroesserung[M]: ");
scanf("%f", &M);
// Berechnung Objektgroesse [y] mit Bildgroesse [Y] und Vergroesserung [M]
y = Y / M;
printf("-----------------------\n");
printf("Objektgroesse [y]:\n%f", y);
printf("\n-----------------------\n");
printf("y = Y / M\n");
printf("-----------------------\n");
}
break;
case 5: // Berechnung Bildgroesse [Y]
printf("Waehlen Sie die Berechnungsmethode:\n");
printf("1: Mit Bildweite [A], Objektweite [a] und Objektgroesse [y]\n");
printf("2: Mit Bildgroesse [Y] und Vergroesserung [M]\n");
scanf("%d", &P);
if (P == 1) {
printf("Geben Sie Bildweite [A], Objektweite [a] und Objektgroesse [y] ein:\n");
printf("Bildweite [A]: ");
scanf("%f", &A);
printf("Objektweite [a]: ");
scanf("%f", &a);
printf("Objektgroesse [y]: ");
scanf("%f", &y);
// Berechnung Bildgroesse [Y] mit Objektweite [a] und Bildweite [A] und Objektgroesse [y]
Y = -(A / a) * y;
printf("-----------------------\n");
printf("Bildgroesse [Y]:\n%f", Y);
printf("\n-----------------------\n");
printf("\nY = -(A / a) * y\n");
printf("-----------------------\n");
}
else if (P == 2) {
printf("Geben Sie Bildgroesse [Y] und Vergroesserung [M] ein:\n");
printf("Bildgroesse [Y]: ");
scanf("%f", &Y);
printf("Vergroesserung [M]: ");
scanf("%f", &M);
// Berechnung Bildgroesse [Y] mit Vergroesserung [M] und Objektgroesse [y]
Y = y * M;
printf("-----------------------\n");
printf("Bildgroesse [Y]:\n%f", Y);
printf("\n-----------------------\n");
printf("Y = y * M\n");
printf("-----------------------\n");
}
break;
case 6: // Berechnung Vergroesserung [M]
printf("Waehlen Sie die Berechnungsmethode:\n");
printf("1: Mit Bildweite [A] und Objektweite [a]\n");
printf("2: Mit Bildgroesse [Y] und Objektgroesse [y]\n");
scanf("%d", &P);
if (P == 1) {
printf("Geben Sie Bildweite [A] und Objektweite [a] ein:\n");
printf("Bildweite [A]: ");
scanf("%f", &A);
printf("Objektweite [a]: ");
scanf("%f", &a);
// Berechnung Vergroesserung [M] mit Objektweite [a] und Bildweite [A]
M = -(A / a);
printf("-----------------------\n");
printf("Vergroesserung [M]\n%f", M);
printf("\n-----------------------\n");
printf("M = -(A / a)\n");
printf("-----------------------\n");
}
else if (P == 2) {
printf("Geben Sie Bildgroesse [Y] und Objektgroesse [y] ein:\n");
printf("Bildgroeße [Y]: ");
scanf("%f", &Y);
printf("Objektgroesse [y]: ");
scanf("%f", &y);
// Berechnung Vergroesserung [M] mit Objektgroesse [y] und Bildgroesse [Y]
M = (Y / y);
printf("-----------------------\n");
printf("Vergroesserung [M]\n%f", M);
printf("\n-----------------------\n");
printf("M = (Y /y)\n");
printf("-----------------------\n");
}
break;
}
}