Programm zur Berechnung von Widerstandswerten (Unterprogramme)
Ihr Programm soll Ersatzwiderstände von Parallel- und Serienschaltungen von zwei oder drei Widerständen berechnen.
Das heißt Sie müssen den Nutzer nach der
- Anzahl der einzelnen Widerstände fragen und danach, ob Sie
- parallel und seriell geschaltet sind.
Ihr Programm soll danach mit einer der folgenden Funktionen die zwei bzw. drei Werte einlesen
- eingabe2 (float*,float*);
- eingabe3 (float*,float*,float*);
und auch die Berechnung der Ersatzwiderstände sollen als Funktionen implementiert werden.
0 Kommentare
9 Lösung(en)
def parallel(a):
''' Parallele Wiederstandsberechnung:
R = 1 / (1/R1 + 1/R2 + 1/R3 + ...) usw. Anzahl beliebig
'''
p = 0
for i in range(0, a):
p = p + 1/w[i]
return 1/p
def seriell():
''' Serielle Wiederstandsberechnung:
R = R1 + R2 + ... usw. Anzahl beliebig
'''
return sum(w)
w = [] # Wiederstandsliste
# Abfrage starten
a = int(input('Anzahl der einzelnen Widerstände? (2 oder 3): '))
art = input('parallel(p) oder seriell(s): ')
for i in range(0, a):
w.append(float(input('Wiederstandswert {0}: '.format(i+1))))
# Berechnung / Ausgabe
if art == 'p': print('Gesamtwiederstand parallel =', parallel(a))
if art == 's': print('Gesamtwiederstand seriell =', seriell())
Lösung von: Alex Groeg (Freies Lernen)
#include <iostream>
#include <vector>
std::vector<float> widerstande; // dynamischer Array mit dem Name "widerstande" initalizieren.
float parallel(int anzahl) {
float res = 0; // Endresultat wird in dieser Variable gespeichert.
for (int i = 0; i < anzahl; i++) {
res += 1 / widerstande[i]; // 1 / R1 + 1 / R2... etc
}
return 1 / res; // 1 / Rges und das Resultat zurückgeben
}
float seriell(int anzahl) {
float res = 0; // Endresultat wird in dieser Variable gespeichert.
for (int i = 0; i < anzahl; i++) {
res += widerstande[i]; // R1 + R2 + R3
}
return res; // Resultat zurückgeben
}
int main()
{
int n; // Hebt die Anzahl der Wiederstände auf.
char art; // Für die Auswahl benutzt.
std::cout << "Wie gross ist die Anzahl der Widerstände? (2 oder 3):";
std::cin >> n;
do {
std::cout << "Parallelschaltung (p) oder Serielleschaltung (s)?: "; // Text anzeigen.
std::cin >> art; // Auswahl vom Benutzer speichern.
} while (art != 'p' && art != 's'); // Bis die richtige Auswahl trifft.
for (int i = 0; i < n; i++) {
std::cout << "Widerstandswert [" << i + 1 << "]: "; // Text anzeigen.
float input; // Lokale Variable namens "input" initaliziern.
std::cin >> input; // In die Variable den Wert vom Benutzer einpacken.
widerstande.push_back(input); // Diese Variable in das dynamische Array hinzufügen.
}
if (art == 'p') { // Falls Parallelerwiderstand, die parallel Methode ausführen und nachher diesen Anzeigen.
std::cout << "Gesamtwiderstand: " << parallel(n);
}
else if (art == 's') { // Dasselbe, aber für den Seriellenwiderstand.
std::cout << "Gesamtwiderstand: " << seriell(n);
}
}
Lösung von: Fabio Miranda (Santis Training AG)
if (programmieraufgaben[aufgabenZurWiderstandsberechnung].length > 3000) {
einfachIgnorieren();
}
Lösung von: Lisa Salander (Heidi-Klum-Gymnasium Bottrop)
// NET Core 3.x; C# 8.x
using System;
using System.Linq;
namespace CS_Aufgabe_Widerstaende
{
class Program
{
static void Main(string[] args)
{
var (parallel, serial) = GetResSum(100, 100, 100);
Console.WriteLine($"Parallel: {parallel:F1} Ohm\tSeriell: {serial:F1} Ohm");
static (double parallel, double serial) GetResSum(params double[] resValues) => (resValues.Sum(), 1 / resValues.Select(w => 1 / w).Sum());
}
}
}
Lösung von: Jens Kelm (@JKooP)
// Net Core 3.x
// Achtung: F#
open System.Linq
let getResSum (v : float[]) =
let p = v.Sum()
let s = 1.0 / v.Select(fun w -> 1.0 / w).Sum()
printfn "Parallel: %.2f Ohm || Seriell: %.2f Ohm" p s
let g = getResSum [|100.0; 100.0; 100.0|]
Lösung von: Jens Kelm (@JKooP)
// C++ 14 | VS-2022
#include <iostream>
#include <vector>
#include <numeric>
enum class Circuit{ parallel, serial };
double get_total_resistance(const std::vector<double>& res, const Circuit& cir) {
const auto serial{ std::accumulate(res.begin(), res.end(), 0.0) };
const auto parallel{ 1 / std::accumulate(res.begin(), res.end(), 0.0, [](auto a, auto b) { return a + 1.0 / b; }) };
return cir == Circuit::parallel ? parallel : serial;
}
int main() {
std::cout << "Parallel: " << get_total_resistance({10, 25, 13}, Circuit::parallel) << "\n";
std::cout << "Seriell: " << get_total_resistance({10, 25, 13}, Circuit::serial) << "\n";
}
Lösung von: Jens Kelm (@JKooP)
' VBA
Enum Circuit
Parallel
Serial
End Enum
Function GetTotalResistance(res As Variant, cir As Circuit)
Dim par As Double, ser As Double
Dim r As Variant
par = WorksheetFunction.Sum(res)
For Each r In res
ser = ser + 1 / r
Next
GetTotalResistance = IIf(cir = Parallel, par, 1 / ser)
End Function
Sub Main()
Dim res As Variant
res = Array(10, 25, 13)
Debug.Print GetTotalResistance(res, Parallel)
Debug.Print GetTotalResistance(res, Serial)
End Sub
Lösung von: Jens Kelm (@JKooP)
// C++ 20
#include <iostream>
int main() {
constexpr auto get_parallel_resistance{ [] <typename ...T>(const T& ...param) { return 1 / ((1.0 / param) + ...); } };
constexpr auto get_serial_resistance{ [] <typename ...T>(const T& ...param) { return (param + ...); } };
std::cout << get_parallel_resistance(10, 25, 13) << "\n";
std::cout << get_serial_resistance(10, 25, 13) << "\n";
}
Lösung von: Jens Kelm (@JKooP)
// C++ 20
#include <iostream>
int main() {
constexpr auto parallel{ [] (auto&& ... param) { return 1 / ((1.0 / param) + ...); } };
constexpr auto serial{ [] (auto&& ... param) { return (param + ...); } };
std::cout << parallel(10, 25, 13) << "\n";
std::cout << serial(10, 25, 13) << "\n";
}
Lösung von: Jens Kelm (@JKooP)
Verifikation/Checksumme:
10 + 10 = 20
10 || 10 = 5
10 + 25 + 13 = 48
10 || 25 || 13 = (650/141) ca. 4.61
Aktionen
Neue Lösung hinzufügen
Bewertung
Durchschnittliche Bewertung: