IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: JavaScript - zložitejšie funkcie - príklady 14

Aktivity
Avatar
Dušan Fajnor:20.5.2023 18:59

Tak Dušan si robil domácu úlohu a nevedel si spomenúť na kód umožnujúci zamedzenie prázdneho enterovania, ktoré by v podmienke fungoval, ako nesprávne zadané údaje, či dosšlo k nejakej chybe a pod.

Zkusil jsem:

/* ************************************ */
/* Priklady14E-SK - zložitejšie funkcie */
/* ************************************ */
//
// Na sklade v obchode s kancelárskymi potrebami majú 54 ceruziek, 27 pier, 6 balíkov papiera a 14 diárov. Vypýtaj si od študentov, koľko a čo ich potrebujú. Následne vypočítaj, koľko toho na sklade zostane, prípadne koľko toho treba objednať u dodávateľa.
//
console.log("Priklady14E-SK - zložitejšie funkcie:");
console.log("");
//
let kancelarskePotrebyCeruzky = prompt("Koľko kusov ceruziek potrebujete?");
let kancelarskePotrebyPera = prompt("Koľko kusov pier potrebujete?");
let kancelarskePotrebyPapiere = prompt("Koľko kusov balíov papiera potrebujete?");
let kancelarskePotrebyDiare = prompt("Koľko kusov diárov potrebujete?");
//
let kancelarskePotrebyCeruzkyNaSklade = 54;
let kancelarskePotrebyPeraNaSklade = 27;
let kancelarskePotrebyPapiereNaSklade = 6;
let kancelarskePotrebyDiareNaSklade = 14;
//
function porovnajMnožstvoTovaru(kancelarskePotreby){
    return kancelarskePotreby;
}
//
function zistiDopyt(potreby, kancelarskePredmetyNaSklade, kancelarskePredmety){
    let mnozstvoTovaru = porovnajMnožstvoTovaru(potreby);
    let dopyt = mnozstvoTovaru;
    let zostaneObjednat = !0;
    //
    if(kancelarskePredmetyNaSklade > potreby){
        zostaneObjednat = "Na sklade je dostatok tovaru " + kancelarskePredmety + " o počte: " + kancelarskePredmetyNaSklade + " versus dopyt o počte: " + dopyt + " a netreba ho objednať.";
    } else if(kancelarskePredmetyNaSklade < potreby){
        zostaneObjednat = "Na sklade je nedostatok tovaru " + kancelarskePredmety + " o počte: " + kancelarskePredmetyNaSklade + " versus dopyt o počte: " + dopyt + " a treba ho objednať a doplniť tak stav v sklade o: " + dopyt + " plus " +  kancelarskePredmetyNaSklade + " kusov " + kancelarskePredmety;
    } else if (kancelarskePredmetyNaSklade == potreby){
        zostaneObjednat = "Na sklade je akurát toľko tovaru " + kancelarskePredmety + " o počte: " + kancelarskePredmetyNaSklade + " versus dopyt o počte: " + dopyt + ", koľko ho je potreba a treba ho objednať a doplniť tak stav v sklade o: " + dopyt + " kusov " + kancelarskePredmety;
    } else{
        // Doplniť prázdné enetrovanie
        zostaneObjednat = "Ups, niečo sa pokazilo! Nezadal si správne množstvo objednávky, skús to ešte raz!";
    }
    console.log(zostaneObjednat);
}
zistiDopyt(kancelarskePotrebyCeruzky, kancelarskePotrebyCeruzkyNaSklade, "ceruziek");
zistiDopyt(kancelarskePotrebyPera, kancelarskePotrebyPeraNaSklade, "pier");
zistiDopyt(kancelarskePotrebyPapiere, kancelarskePotrebyPapiereNaSklade, "balíkov papiera");
zistiDopyt(kancelarskePotrebyDiare, kancelarskePotrebyDiareNaSklade, "diárov");
//
// Od študentov sme si vypýtali ich objednávku a uložili ich do premennych kancelárské potreby. Za pomoci funkcií sme porovnávali množstvo tovaru a zisťovali tak dopyt v podmienke if. Do konzoly sme si vypísali koľko je nasklade tovaru, akyý je dopyt a koľko treba ešte objednať, prípadne doplniť sklad.
//
/* ************************************ */
/* Priklady14E-EN - zložitejšie funkcie */
/* ************************************ */
//
// Na sklade v obchode s kancelárskymi potrebami majú 54 ceruziek, 27 pier, 6 balíkov papiera a 14 diárov. Vypýtaj si od študentov, koľko a čo ich potrebujú. Následne vypočítaj, koľko toho na sklade zostane, prípadne koľko toho treba objednať u dodávateľa.
//
console.log("");
console.log("Priklady14E-EN - zložitejšie funkcie:");
console.log("");

let officeItemPencil = prompt("Koľko kusov ceruziek potrebujete?");
let officeItemPen = prompt("Koľko kusov pier potrebujete?");
let officeItemPaper = prompt("Koľko kusov balíov papiera potrebujete?");
let officeItemDiary = prompt("Koľko kusov diárov potrebujete?");
//
let officeItemPencilAvailable = 54;
let officeItemPenAvailable = 27;
let officeItemPaperAvailable = 6;
let officeItemDiaryAvailable = 14;
//
function compareTheAmountOfGoods(officeItem){
    return officeItem;
}
//
function findOutTheDemand(needs, officeItemsInStock, ofiiceItems){
    let amountOfGoods = compareTheAmountOfGoods(needs);
    let demand = amountOfGoods;
    let remainsToBeOrdered = !0;
    //
    if(officeItemsInStock > needs){
        remainsToBeOrdered = "Na sklade je dostatok tovaru " + ofiiceItems + " o počte: " + officeItemsInStock + " versus dopyt o počte: " + demand + " a netreba ho objednať.";
    } else if(officeItemsInStock < needs){
        remainsToBeOrdered = "Na sklade je nedostatok tovaru " + ofiiceItems + " o počte: " + officeItemsInStock + " versus dopyt o počte: " + demand + " a treba ho objednať a doplniť tak stav v sklade o: " + demand + " plus " +  officeItemsInStock + " kusov " + ofiiceItems;
    } else if (officeItemsInStock == needs){
        remainsToBeOrdered = "Na sklade je akurát toľko tovaru " + ofiiceItems + " o počte: " + officeItemsInStock + " versus dopyt o počte: " + demand + ", koľko ho je potreba a treba ho objednať a doplniť tak stav v sklade o: " + demand + " kusov " + ofiiceItems;
    } else{
        // Doplniť prázdné enetrovanie
        remainsToBeOrdered = "Ups, niečo sa pokazilo! Nezadal si správne množstvo objednávky, skús to ešte raz!";
    }
    console.log(remainsToBeOrdered);
}
findOutTheDemand(officeItemPencil, officeItemPencilAvailable, "ceruziek");
findOutTheDemand(officeItemPen, officeItemPenAvailable, "pier");
findOutTheDemand(officeItemPaper, officeItemPaperAvailable, "balíkov papiera");
findOutTheDemand(officeItemDiary, officeItemDiaryAvailable, "diárov");
//
// Od študentov sme si vypýtali ich objednávku a uložili ich do premennych kancelárské potreby. Za pomoci funkcií sme porovnávali množstvo tovaru a zisťovali tak dopyt v podmienke if. Do konzoly sme si vypísali koľko je nasklade tovaru, akyý je dopyt a koľko treba ešte objednať, prípadne doplniť sklad.
//

Chci docílit: Postupným robením domácich úloh sa dostať pod kožu JavaSriptu. Ale, je to ale dlhá pesnička, nakoľko jeden program trvá Dušanovi aj 5hod.

 
Odpovědět
20.5.2023 18:59
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:13.6.2023 10:53
  1. nemam pristup k tem zadanim, to je placena sluzba.
  2. Jak to myslis, s entrovanim?
function ask(name) {return prompt("Koľko kusov "+names[name]+" potrebujete?");}

var names = {tuzky: 'tuzky', pera: 'pera', gumy:'gumy'};
var sklad = {tuzky: 11, pera: 23, gumy:30}
var need = {tuzky: 0, pera: 0, gumy:0}
type = 'tuzky'; need[type] = ask(type);
type = 'pera'; need[type] = ask(type);
type = 'gumy'; need[type] = ask(type);

U programovani je dobre, abys mel co nejvic kodu podobneho. Zvysuje to prehlednost a moznost komprimace zipem, treba.. Pripadne, abys to psal spolecne, mel funkci, ktera vyresi objednavku jedne kategorie zbozi.

 
Nahoru Odpovědět
13.6.2023 10:53
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:13.6.2023 11:05

Nebo, myslis, jako, kdyz z prompt dostanes cislo spatne (text), co s tim?
Pomoci replace z toho odstranis vsechny znaky, ktere nejsou cislo. A pak tam zustane cislo nebo prazdny retezec. Takze pradno je spatne a nula mozna je take spatne? Pozor, melo by to vracet string, takze je treba to prevest jeste na cislo

value = prompt("Koľko kusov potrebujete?");
value = value.replace(/\D+/g, '');
value = value * 1; // nebo value.toInt() nebo neco takoveho
if (value == '' || value == '0') alert('chybna objednavka')
 
Nahoru Odpovědět
13.6.2023 11:05
Avatar
Odpovídá na Peter Mlich
Dušan Fajnor:13.6.2023 13:19

No mal som na mysli, že keď užívateľ zadá do prompt enter, malo by to vyhodiť chybnú hlášku. Ale, ako pozerám, ten replace, mi asi postačí.

 
Nahoru Odpovědět
13.6.2023 13:19
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:13.6.2023 14:18

Prompt je velmi stara funkce, ktera se vicemene uz moc nepouziva. Treba jen jako potvrzeni nejake udalosti (smazani zaskrtnutych souboru, treba). Pokud to neni v zadani, ze mas pouzit prompt (coz ti asi priklad zjednodusi), tak bych si vyrobil normalni html formular.

Editováno 13.6.2023 14:18
 
Nahoru Odpovědět
13.6.2023 14:18
Avatar
JsonKody
Člen
Avatar
Odpovídá na Peter Mlich
JsonKody:20.7.2023 10:04

console.log je taky velmi stara funkce, spatny argument .. prompt je naprosto v pohode ;)

 
Nahoru Odpovědět
20.7.2023 10:04
Avatar
JsonKody
Člen
Avatar
JsonKody:20.7.2023 10:07

funkce

function porovnajMnožstvoTovaru(kancelarskePotreby){
    return kancelarskePotreby;
}

a

function compareTheAmountOfGoods(officeItem){
    return officeItem;
}

nedavaji zadny smysl protoze jenom vrati argument tak jak byl zadan, k cemu ho pak davat do funkce kdyz ho muzu proste rovnou napsat? Jako treba fuknce "vratCislo"
vratCislo(5) .. vrati 5 .. to muzu proste rovnou napsat 5

 
Nahoru Odpovědět
20.7.2023 10:07
Avatar
JsonKody
Člen
Avatar
JsonKody:20.7.2023 10:30

kdybych neco takoveho mel programovat .. pro zabavu .. sel bych asi podobnou cestou -> funkce maji byc co nejvic obecne a co nejmene konkretni ...

tady si to muzes vyzkouset -> Repl.it

const goods = [{
        name: "Pens",
        stock: 0,
        needed: 0,
    },
    {
        name: "Papers",
        stock: 0,
        needed: 0,
}]

/**
 * Vrati objekt dle jmena
 */
function getStuff(name) {
    return goods.find(g => g.name === name)
}

/**
 * Nastavi dle jmena polozku 'needed'
 */
function setNeeded(name) {
    const stuff = getStuff(name)
    if(stuff) {
        stuff.needed = prompt(`How many ${name} do you need?`);
    }
}

setNeeded("Pens")
setNeeded("Papers")

console.dir(goods)

Kdybys pouzil Typescript, dalo by se to cele nadefinovat tak ze by ti IDE pomahalo a "vedelo" by jake jsou validni nazvy .. napr. "Pens" .. "Papers" a cokoli jineho by byla chyba zadat - to je velmi sikovne ;)

 
Nahoru Odpovědět
20.7.2023 10:30
Avatar
JsonKody
Člen
Avatar
Odpovídá na JsonKody
JsonKody:20.7.2023 11:41

aaahaaa .. ty sis pojmenoval ty funkce asi proto aby jsi v kodu videl co to ma delat ze? :)

function zistiDopyt(potreby, kancelarskePredmetyNaSklade, kancelarskePredmety){
    let mnozstvoTovaru = porovnajMnožstvoTovaru(potreby);

to jsem nikdy nevidel, je to zajimava myslenka ale v podstate je to spatne - mel by sis rovnou ten argument funkce pojmenovat tak aby ti daval smysl.

Pokud jde o ten prompt je to v pohode jestli si trenujes JS nebo tak .. jestli je to kod nekam do realne aplikace tak bych pouzil formular jak rikal Peter Mlich.

 
Nahoru Odpovědět
20.7.2023 11:41
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:20.7.2023 15:04

Takze, po noha a mnoha prispevcich jsi dospel k temuz, ze prompt se bezne pro tento pripad prilis nehodi. Spis zjednodusuje skolni priklady.

 
Nahoru Odpovědět
20.7.2023 15:04
Avatar
JsonKody
Člen
Avatar
Odpovídá na Peter Mlich
JsonKody:21.7.2023 13:34

Taky jsem chtel ten puvodni komentar smazat ale vypada to ze to tady nejde.
Ja puvodne predpokladal ze je to nejake cviceni JS podle toho jak ten kod vypada :)
ale jestli to chce nekde realne pouzivat tak to je jina ..

 
Nahoru Odpovědět
21.7.2023 13:34
Avatar
JsonKody
Člen
Avatar
JsonKody:21.7.2023 13:38

kazdopadne ma v title napsano "príklady 14" a pokud jde o cviceni, je prompt naprosto v pohode :)
Koukni treba na javascript.info - asi nejlepsi vyukovy material o JS na svete, ten taky vsude pouziva prompt,
protoze na obyc testovani algoritmu je to rychle a prakticke.

 
Nahoru Odpovědět
21.7.2023 13:38
Avatar
Odpovídá na JsonKody
Dušan Fajnor:22.7.2023 12:08

Ano islo len o príklady

 
Nahoru Odpovědět
22.7.2023 12:08
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 13 zpráv z 13.