Halloweenská akce! Na stránce s dobitím bodů zadej dole kód STRASIDELNYCH20 a získej porci +20% bodů zdarma!
Akce končí 31.10. o půlnoci.
Avatar
Matěj Rychtařík:12. ledna 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. ledna 12:05
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Matěj Rychtařík
DarkCoder:12. ledna 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. ledna 14:39
"„Učíš-li se proto, aby sis zapamatoval, zapomeneš. Učíš-li se proto, abys porozuměl, zapamatuješ si."
Avatar
Jakub Šilhavý:13. ledna 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. ledna 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.