Příklad 6.1
Vytiskněte prvních 100 prvočísel.
V proměnné pocet
máme uloženo, kolik
prvočísel počínaje číslem 2 se má
vytisknout. Proměnná i
slouží jako řídicí proměnná cyklu,
proměnná jePrvocislo
nabývá v programu
logických hodnot true
a false
.
Proměnná n
nabývá postupně hodnot
1, 3, 5, 7, 9, ... tedy pouze lichá čísla, neboť sudá čísla s výjimkou
čísla 2 nejsou prvočísly a nemá význam je testovat.
Do pole p
potom budeme postupně ukládat všechna nalezená
prvočísla. Tedy
p[0]=2,
p[1]=3,
p[2]=5,
p[3]=7,
p[4]=11, ... ,
p[96]=509,
p[97]=521,
p[98]=523,
p[99]=541
.
Každé testované
číslo n
potom budeme postupně dělit těmito prvky pole.
Proměnná max
plní
funkci jakési zarážky, neboť v ní máme uložen maximální index již zaplněné
části pole.
<SCRIPT> var pocet=100; var i, jePrvocislo; var n=1; var max=0; var p=new Array(pocet); p[0]=2; // první uložené prvočíslo bude 2 while (max<pocet-1) { n+=2; jePrvocislo=true; // předpokládáme, že n bude prvočíslo i=0; while ((i<=max) && jePrvocislo) if (n%p[i]==0) // je n dělitelné p[i] beze zbytku? jePrvocislo=false; // ano je, nemůže být tedy prvočíslo else i++; // není, zvýšíme i a zkoušíme dál if (jePrvocislo) { // je testované číslo n prvočíslo? max++; // ano je, zvýšíme index zarážky max p[max]=n; // a uložíme sem číslo n } } for (i=0; i<max; i++) // všechna čísla uložená v poli document.write(p[i]+", "); // vytiskneme document.write(p[max]); // za posledním číslem už nebude čárka </SCRIPT>
Pokuste se zamyslet nad tím, jak by šel tento algoritmus generování prvočísel zefektivnit.
Příklad 6.2
Symbol čárového kódu nalezneme dnes prakticky na každém zboží, které si zakoupíme v obchodě. Kód EAN-13 je čárový kód pevné délky obsahující 13 numerických znaků. Prvních 12 číslic určuje zemi původu, výrobce a číslo výrobku (např. všechny výrobky pocházející z České republiky začínají číslem 859, ze Slovenské republiky 858 atd). Poslední 13. číslice je tzv. kontrolní číslice, která slouží k určení, zda se čárový kód přečetl v pořádku. Číslici kontrolního součtu vypočteme tak, že
Příklad výpočtu kontrolní číslice pro kód 859123412345:
Součet číslic na sudých pozicích: 5 + 1 + 3 + 1 + 3 + 5 = 18
Vynásobení třemi: 18 · 3 = 54
Součet číslic na lichých pozicích: 8 + 9 + 2 + 4 + 2 + 4 = 29
Součet obou hodnot 54 + 29 = 83
Přičtení kontrolní číslice tak, aby součet byl dělitelný deseti: 83 + 7 = 90
Kontrolním znakem bude tedy číslice 7, výsledný čárový kód bude 8591234123457.
<SCRIPT> function ean13(form) { if (form.vstup.value.length!=12) { alert("Pozor!\nUveďte všech 12 počátečních číslic čárového kódu!"); form.vysledek.value="CHYBA!"; return; } var k=1; var suma=0; for (var i=0; i<12; i++) { suma=suma+parseInt(form.vstup.value.substring(i,i+1))*k; k=4-k; } var kontrCislice=(10-(suma%10))%10; form.vysledek.value=form.vstup.value+kontrCislice; } </SCRIPT> <B>Výpočet kontrolní číslice čárového kódu EAN-13</B> <FORM> <INPUT type="text" name="vstup" size="13" maxlength="12"> <INPUT type="button" value="Vypočti" onclick="ean13(this.form)"> <INPUT type="reset" value="Smaž"> <INPUT type="text" name="vysledek" size="14" readonly> </FORM>
Příklad 6.3
Vytvořte jednoduchou kalkulačku, která umožní zadat a vyhodnotit určitý aritmetický výraz.
<SCRIPT> function Pridej(znak) { document.kalkulacka.displej.value+=znak; } function Smaz() { document.kalkulacka.displej.value=""; } function Vyhodnot() { document.kalkulacka.displej.value=eval(document.kalkulacka.displej.value); } </SCRIPT> <FORM name="kalkulacka"> <TABLE border="5" bgcolor="silver" cellpadding="5" align="center"> <TR align="center"> <TD colspan="4" bgcolor="gray"> <INPUT type="text" name="displej" size="30"> <TR align="center"> <TD><INPUT type="button" value=" 7 " onclick="Pridej('7')"> <TD><INPUT type="button" value=" 8 " onclick="Pridej('8')"> <TD><INPUT type="button" value=" 9 " onclick="Pridej('9')"> <TD><INPUT type="button" value=" + " onclick="Pridej('+')"> <TR align="center"> <TD><INPUT type="button" value=" 4 " onclick="Pridej('4')"> <TD><INPUT type="button" value=" 5 " onclick="Pridej('5')"> <TD><INPUT type="button" value=" 6 " onclick="Pridej('6')"> <TD><INPUT type="button" value=" - " onclick="Pridej('-')"> <TR align="center"> <TD><INPUT type="button" value=" 1 " onclick="Pridej('1')"> <TD><INPUT type="button" value=" 2 " onclick="Pridej('2')"> <TD><INPUT type="button" value=" 3 " onclick="Pridej('3')"> <TD><INPUT type="button" value=" * " onclick="Pridej('*')"> <TR align="center"> <TD><INPUT type="button" value=" 0 " onclick="Pridej('0')"> <TD><INPUT type="button" value=" ( " onclick="Pridej('(')"> <TD><INPUT type="button" value=" ) " onclick="Pridej(')')"> <TD><INPUT type="button" value=" / " onclick="Pridej('/')"> <TR align="center"> <TD><INPUT type="button" value=" C " onclick="Smaz()"> <TD><INPUT type="button" value=" . " onclick="Pridej('.')"> <TD colspan="2"> <INPUT type="button" value=" = " onclick="Vyhodnot()"> </TABLE> </FORM>
Dále se pokuste tuto kalkulačku doplnit pamětí. Asi nejsnadnějším způsobem je nadefinovat další textové pole, které bude trvale zobrazovat obsah paměti. Toto textové pole umístěte do stejného formuláře v jakém jsou všechny ostatní prvky kalkulačky. Poté nadefinujte příslušná tlačítka pro práci s pamětí: MS (Memory Store), MR (Memory Read) a MC (Memory Clear). Kliknutím na tlačítko MS se pouze zkopíruje obsah textového pole displeje do textového pole paměti, funkce spojená s tlačítkem MR zkopíruje obsah paměti do displeje. Tlačítko MC vloží do textového pole paměti prázdný řetězec obdoba funkce Smaz(). Pokud i tento úkol bude pro vás příliš jednoduchý, vytvořte pamětí několik, mezi kterými se uživatel bude moci přepínat. Dále se pokuste vytvořit tlačítko BACK, které umožní vrátit naposled provedenou akci.
Příklad 6.4
Naprogramujte hru "Přidej/uber". Počítač vygeneruje náhodné celé číslo z intervalu 1 až 100 a cílem uživatele je toto číslo uhodnout. Při každém zadání počítač vypisuje, zda je třeba přidat či ubrat. Po uhodnutí čísla program vypíše toto číslo a celkový počet pokusů uživatele.
<SCRIPT> function HadejCislo() { var pocetPokusu=0; var zadaneCislo=0; var nahodneCislo=Math.random(); // náhodné reálné č. z intervalu 0 až 1 nahodneCislo=Math.ceil(nahodneCislo*100); // převod na int. 1 až 100 while (zadaneCislo!=nahodneCislo) { pocetPokusu++; zadaneCislo=prompt("Zadej číslo od 1 do 100."); if (zadaneCislo>nahodneCislo) { alert("Uber!"); } if (zadaneCislo<nahodneCislo) { alert("Přidej!"); } if (zadaneCislo==nahodneCislo) alert(" *** GRATULUJI ***\n\nČíslo "+nahodneCislo+ " jsi uhodl na "+pocetPokusu+". pokus."); } } </SCRIPT> <B>HÁDEJ ČÍSLO</B><BR> Klikni na tlačítko <I>Nová hra</I> a hádej celé číslo od 1 do 100. <FORM> <INPUT type="button" value="Nová hra" onclick="HadejCislo()"> </FORM>
Příklad 6.5
Napište skript, který "odvysílá" zadaný text v Morseově abecedě. Pro zjednodušení předpokládejte, že vstupní abeceda obsahuje jen anglická písmena a mezeru.
<SCRIPT> function vysilej() { znakyNorm = "ABCDEFGHIJKLMNOPQRSTUVWXYZ "; znakyMorse = new Array( ".-", "-...", "-.-.", "-..", ".", // A, B, C, D, E, "..-.", "--.", "....", "..", ".---", // F, G, H, I, J, "-.-", ".-..", "--", "-.", "---", // K, L, M, N, O, ".--.", "--.-", ".-.", "...", "-", // P, Q, R, S, T, "..-", "...-", ".--", "-..-", "-.--", // U, V, W, X, Y, "--..", " " // Z, mezera ); document.morseovka.vystup.value = ""; // smaž výstupní text. pole textVstup = document.morseovka.vstup.value; // zjisti vstupní text textVystup = ""; for (i = 0; i < textVstup.length; i++) { znak = textVstup.charAt(i); // vezmi znak na i-té pozici znak = znak.toUpperCase(); // převeď ho na velké písmeno pozice = znakyNorm.indexOf(znak); // zjisti pozici znaku v znakyNorm if (pozice == -1) { // takový znak tam není alert("Nepovolený znak " + znak + " ve vstupním textu!"); return; // skonči } else // pozice znaku v řetězci znakyNorm odpovídá indexu pole textVystup += znakyMorse[pozice] + "|"; // vypiš prvek pole s indexem } // pozice a oddělovač document.morseovka.vystup.value = textVystup; // zobraz výst. řetězec } </SCRIPT> <FORM name="morseovka"> <B>Napište text, který chcete odvysílat</B><BR> povolené znaky: a, b, c, ... , y, z, mezera<BR> <TEXTAREA name="vstup" cols="50" rows="3"></TEXTAREA><BR> <INPUT type="button" value="Převeď" onClick="vysilej()"> <INPUT type="reset" value="Smaž"><BR> <TEXTAREA name="vystup" cols="50" rows="3" readonly></TEXTAREA> </FORM>
Příklad 6.6
Napište skript, který bude počítat součet dvou čtvercových matic A a B řádu n.
<SCRIPT> n=3; function soucet() { var A=new Array(n); for (i=0; i<n; i++) A[i]=new Array(n); var B=new Array(n); for (i=0; i<n; i++) B[i]=new Array(n); var C=new Array(n); for (i=0; i<n; i++) C[i]=new Array(n); for (i=0; i<n; i++) for (j=0; j<n; j++) { A[i][j]=parseFloat(document.matice1.elements[n*i+j].value); B[i][j]=parseFloat(document.matice1.elements[n*i+j+n*n].value); C[i][j]=A[i][j]+B[i][j]; document.matice1.elements[2*n*n+n*i+j+1].value=C[i][j]; } } </SCRIPT> <FORM name="matice1"> <TABLE> <TR> <TH>Matice A <TH> <TH>Matice B <TH> <TH>Matice C = A + B <TR> <TD> <TABLE> <SCRIPT> for (i=0; i<n; i++) { document.write("<TR>") for(j=0; j<n; j++) document.write("<TD><input type='text' size='3'>") } </SCRIPT> </TABLE> <TD><B>+</B> <TD> <TABLE> <SCRIPT> for (i=0; i<n; i++) { document.write("<TR>") for(j=0; j<n; j++) document.write("<TD><input type='text' size='3'>") } </SCRIPT> </TABLE> <TD> <INPUT type="button" value=" = " onclick="soucet()"> <TD> <TABLE> <SCRIPT> for (i=0; i<n; i++) { document.write("<TR>") for(j=0; j<n; j++) document.write("<TD><input type='text' size='3' readonly>") } </SCRIPT> </TABLE> </TABLE> </FORM>
Příklad 6.7
Napište skript, který bude počítat součin dvou čtvercových matic A a B řádu n.
<SCRIPT> n=3; function soucin() { var A=new Array(n); for (i=0; i<n; i++) A[i]=new Array(n); var B=new Array(n); for (i=0; i<n; i++) B[i]=new Array(n); var C=new Array(n); for (i=0; i<n; i++) C[i]=new Array(n); for (i=0; i<n; i++) for (j=0; j<n; j++) { A[i][j]=parseFloat(document.matice2.elements[n*i+j].value); B[i][j]=parseFloat(document.matice2.elements[n*i+j+n*n].value); } for (i=0; i<n; i++) for(j=0; j<n; j++) { C[i][j]=0; for(k=0; k<n; k++) C[i][j]+=A[i][k]*B[k][j]; document.matice2.elements[2*n*n+n*i+j+1].value=C[i][j]; } } </SCRIPT> <FORM name="matice2"> <TABLE> <TR> <TH>Matice A <TH> <TH>Matice B <TH> <TH>Matice C = A x B <TR> <TD> <TABLE> <SCRIPT> for (i=0; i<n; i++) { document.write("<TR>") for(j=0; j<n; j++) document.write("<TD><input type='text' size='3'>") } </SCRIPT> </TABLE> <TD><B>x</B> <TD> <TABLE> <SCRIPT> for (i=0; i<n; i++) { document.write("<TR>") for(j=0; j<n; j++) document.write("<TD><input type='text' size='3'>") } </SCRIPT> </TABLE> <TD> <INPUT type="button" value=" = " onclick="soucin()"> <TD> <TABLE> <SCRIPT> for (i=0; i<n; i++) { document.write("<TR>") for(j=0; j<n; j++) document.write("<TD><input type='text' size='3' readonly>") } </SCRIPT> </TABLE> </TABLE> </FORM>
Náhled: