NOVINKA - Online rekvalifikační kurz Java programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!
Avatar
Matěj Rychtařík:12.1.2018 12:05

Ahoj,
potřebuji poradit s vytvořením programu co z rezistorové řady vytvoří kombinaci která, bude nejblíže k uživatelem zadanému odporu a v jím zadané toleranci. Když nebude vhodna kombinace 2 tak půjde na 3 atd. Nemohu ale přijít na to, jak dostat program k tomu aby tyto kombinace vytvořil. Ví někdo jak na to?

 
Odpovědět
12.1.2018 12:05
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Matěj Rychtařík
DarkCoder:12.1.2018 14:39

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.

Nahoru Odpovědět
12.1.2018 14:39
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
Jakub Šilhavý:13.1.2018 20:19

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;
}
Nahoru Odpovědět
13.1.2018 20:19
Život je pes, a proto žít je psina.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 3 zpráv z 3.