Diskuze: Nalezení kombinace odporů
V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.
Zobrazeno 3 zpráv z 3.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.
Program sestavíš za pomoci dvou celočíselných proměnných a dvou celočíselných jednorozměrných polí. První celočíselná proměnná představuje aktuální hodnotu odporu a na začátku ji inicializuješ na nulu. Druhá celočíselná proměnná představuje hodnotu odporu který požaduješ. První celočíselné jednorozměrné pole představuje seznam hodnot odporů, které jsou platné v rámci odporové řady. Toto pole je inicializováno tak aby bylo seřazeno od největšího odporu k nejmenšímu. Druhé celočíselné jednorozměrné pole představuje seznam odporů, které tvoří výsledný odpor. V cyklu testuješ aktuální hodnotu odporu na přesah a bereš postupně hodnoty odporů z prvního celočíselného pole které si následně poznamenáváš do druhého. Cyklus ukončuješ tehdy kdy hodnota aktuálního odporu je stejná nebo v toleranci s požadovaným odporem.
Zhruba asi nějak takhle...
#include <iostream>
#include <algorithm>
#include <cmath>
#define N 4
#define EPSILON 0.000001
using namespace std;
double odpory[N] = { 1.1, 2.1, 5.8, 10.14 };
double kombinace[N];
int index = 0;
double odpor = 9.2;
double aktualni = 0.0;
double tolerance = 0.3;
bool nalezeno = false;
double pom;
bool splneno(double tol) {
if (tol < tolerance || abs(tol-tolerance) < EPSILON)
return true;
return false;
}
int main() {
sort(odpory, odpory + N);
for (int i = N-1; i >= 0; i--) {
pom = aktualni + odpory[i];
if (splneno(abs(pom-odpor))) {
nalezeno = true;
kombinace[index++] = odpory[i];
break;
}
else if (pom > odpor)
continue;
else if (pom < odpor) {
kombinace[index++] = odpory[i];
aktualni = pom;
}
}
if (nalezeno == false)
cout << "Nenalezeno!" << endl;
else
for (int i = index-1; i >= 0; i--)
cout << kombinace[i] << endl;
return 0;
}
Zobrazeno 3 zpráv z 3.