#1 Tomáš
Ano
Příspěvky odeslané z IP adresy 93.181.78.–
#1 Roman
Sice nevím, kde je v této úloze nutné použít derivaci, ale budiž.(asi dílčí úloha)
1.Tedy jestliže má být tečna paraboly rovnoběžná s nějakou přímkou, pak její směrnice musí být stejná se směrnicí této přímky.
2.Tato tečna musí mít s parabolou pouze jeden společný bod.
Pak: x^2-2x+3=3x+q
D=25+4(q-3)=0, q=-13/4 a rovnice tečny je: y=3x-13/4
#1 holly24
Hledej platónská tělesa např. https://en.wikipedia.org/wiki/Platonic_solid
#1 kuba
Podle mě: je-li trojúhelník pravoúhlý, pak pokud není rovnoramenný není pořeba psát, že je obecný.
Při pravoúhlosti a rovnoramennosti je pořeba toto vypsat.
Poznámka: platí: 1. Učitel má vždy pravdu.
2. Nemá-li učitel pravdu, platí tvrzení č.1.
#3 anonym
Stáhni si a nainstaluj freewre PSPad (http://www.pspad.com/cz/download.php), načti ten tvůj soubor,
nastav délku řádku na 100 znaků (možná, že už bude), zapni číslování řádků a poslední číslice na
řádku 10000 bude milióntá číslice toho tvého Mersenova prvočísla.
Mně vychází číslice 2
#3 peter
Proč ho mateš nějakým výpočtem hodnoty cos(12).
Otázka zní: "... z intervalu <– 90°; 360°>. Do odpoveďového hárka zapíšte súčet koreňov tejto rovnice z daného intervalu."
Tedy řešení (z grafu y=cosx)
-12,12,360-12=348 a tedy součet kořenů je: -12+12+348=348 st
#1 Petr
1.
2.
3.
Poznámky:
U všech grafů tam nepiš x=h
U 1. dej místo y t
#1 Ing.Dutá_Hlava
Počet nul na konci u faktoriálu je roven počtu pětek v rozkladu daného čísla (nuly jsou 5x2)
Stačí tedy podělit 50/5 = 10
Ještě tam jsou však nuly od čísla 5 na druhou = 25. Pak 50/25=2
(pokud by číslo bylo větší než 125, museli bychom dělit i číslem125, obecně 5^k, k=1,2,...)
Tedy 50! má na konci 10+2=12 nul
#11 KIIV
Ty asi neumíš číst. Nejdříve si je potřeba přečíst zadání. Tam se píše "Vojtech si myslel prirodzené číslo s navzajom rôznymi ciframi a napísal ho na papier." Já jsem se pouze vyjadřoval k tomu, že dané přirozené číslo může obsahovat i nulu. To že nulu obsahovat nesmí, s tím že to není přirozené číslo, sem "zatáhl" peter v příspěvku č.5. Já jsem se ho jenom zeptal, kde přišel na to, že nula v myšleném čísle být nemůže.
#9 peter
0 jako číslo není přirozené číslo (i když se někdy do přirozených čísel také počítá).
Ovšem jako číslice, ze kterých se skládají čísla samozřejmě existuje. Kdyby tomu tak nebylo, pak by neexistovala přirozená čísla obsahující tuto číslici. (cheš snad polemizovat o tom, že 10 není přirozené číslo?)
A protože v zadání se píše "Vojtech si myslel prirodzené číslo s navzajom rôznymi ciframi a napísal ho na papier." (cifra znamená v češtině číslice)
Číslice 0 nemůže být v tomto příkladu pouze na koci čísla, protože např. pak by vyhovovalo i číslo 10+01=11
#5 peter
Proč myslíš, že myšlené číslo nemůže obsahovat 0?
V zadání se o tom nic nepíše. (Tam se píše, že si myslel přirozené číslo, s různými číslicemi)
0 je také číslice a 1032 je rozhodně přirozené číslo stejně jako 2301 a 3333
Jinak tvé číslo 1897 vyhovuje také zadání ovšem není rozhodně nejmenší
#2 peter
Přečetl jsi si pořádně zadání?
Asi ne, protože bys nemohl odpovědět jak jsi odpověděl.
Chceš snad říct, že (když pominu ta jednociferná přirozená čísla) 12+21=33 obsahuje stejné číslice jako 12?
atd.
Podle mě je řešení takovéto:
1. Jednociferná, dvouciferná ani tříciferná čísla to nemohou být. (že to tak je si zkus odvodit sám)
2. Pak nejmenším 4 ciferným číslem vyhovujícím zadání je:
1032 neb 1032+2301=3333 (obě čísla jsou přirozená, jejich součet obsahuje pouze číslici 3, která se vyskytuje i v myšleném čísle 1032)
Úloha bude mít asi trochu jiné zadání než nám tady napsal Jozef, protože takových čísel je opravdu hodně.(já si myslím, že zapomněl napsat, které číslice to mají být)
Např. 1043 1054, 1065, 1076, 1087, 1098 atd.
#4 Ignác
Podívej se na https://cs.wikipedia.org/wiki/Dokonal%C3%A9_%C4%8D%C3%ADslo
a zjistíš, že pro p=3 je jediné.
#1 Martin
Nejdříve si uvědomit, že
Připojen obrázspojnice středů 2 dotýkajících se kružnic prochází bodem dotyku.
Podívat se na obrázek a napsat Pythagorovy věty pro trojúhelníky SP1P a SP1B a ty potom od sebe odečíst.
Dostaneš rovnici pro r v závislosti na a (délce strany čtverce)
Z ní vypočítat r (vyjde ti r=a/4)
#1 Ignác
co znamená "...ktorého rozklad na súčin prvočísel ma práve tri nie nutne činitele..."
Nemělo by to být spíš "...ktorého rozklad na súčin prvočísel ma práve tri nie nutne různé činitele..."
Pokud to tak je, pak takovým číslem je 28
28=2*2*7=2^2*7^1 (počet dělitelů včetně čísel 1 a 28 je: (2+1)*(1+1)=3*2=6)
1+2+4+7+14+28=56=2*28
#1 luky
Dole máš obrázek a vypočítaný (obecně) obsah jednoho trojúhelníku. Další dva spočítáš obdobně, pro obsah lichoběžníku použiješ vzoreček co je na obrázku také napsán. Výpočet vychází z podobnosti trojúhelníků ABC a SIC a poměru délek SL LI.
Nezapomeň ve výsledku uvést jednotky
#1 Hans
Program je dobře, pouze musíš počítat s hodnotu argumentu v radiánech (ne ve stupních)
Tedy když zadáš úhel ve stupních, pak stačí doplnit řádek (za načtení x - readln(x))
x := x*pi/180;
a už to bude pracovat perfektně
Ještě jedna malá poznámka k přehlednosti. Aby ten kdo bude program používat věděl co se po něm chce, bylo by dobré mu to na začátku sdělit.
Tedy na začátek napsat:
WriteLn(' Program na vypocet funkce sinus');
Write(' Zadej hodnotu uhlu ve stupnich ');
ReadLn(x);
#3 Romanzdk
1. v hlavním tělu nemáš nikde použitou tu nadefinovanou proceduru nacteni
2. do souboru udaje.txt je potřeba napsat na prvni radek hodnoty r s tedy 3 2 (oddělené mezerou)
3. nevím, ale místo inc použij raději succ(j) succ(j)
4. hlavní tělo by potom mělo vypadat:(včetně deklarace proměnných)
var i,delka_trasy:integer;
matice:tMatice;
begin
nacteni('udaje.txt',matice);
delka_trasy:=0;
for i:=1 to max do
delka_trasy:=delka_trasy+matice[i,1];
writeln(delka_trasy);
readln;
end.
#1 Romanzdk
Zkus se podívat třeba na http://www.jenseneboj.com/pascal/chromcak/data/matice.htm
#1 Ivetkah
1. Aby vzájemný úhel dvou bočních hran pravidelného jehlanu byl 90 st. je jasné, že základna jehlanu musí být rovnostranný trojúhelník. (součet úhlů musí být menší než 360st.-3*90=270, pro čtyřboký jehlan by součet byl 360 st a výška takového jehlanu by byla nulová)
2. Podívej se na obrázek jak takový jehlan vypadá
Tr. PBV je pravoúhlý rovnoramenný s délkou ramen 15 cm
3. Z pravoúhlého tr. PSV vypočítáš pomocí Pythagorovy věty výšku jehlanu (znáš přeponu, a jednu odvěsnu, která má délku 1/3 výšky rovnostranného trojúhelníka o straně 30 cm)
4. Pak už objem jehlanu
Mělo by ti vyjít V=30^3*sqrt(2)/24 =1590.99026 cm^3
#1 hazard
Chápej to tak, že je to vzoreček na výpočet integrálu.
To první je integrál, který máš počítat, to druhé je rozklad na parciální zlomky, a to třetí je výpočet 2 integrálů (z druhého výrazu s využitím toho, že logaritmus podílu je rozdíl logaritmů)
Poznámka: ještě by nakonec chtělo připsat integrační konstantu (třeba c, protože se jedná o neurčitý intagrál)
#2 peter
Ty jsi ten příklad 1 asi hodně zkomlikoval. Já tedy zadání chápu tak, že máme vytvořit 6-ti místné číslo, kede jsou 3 různá sudá čísla a tři různá lichá čísla (6-ti místné číslo začínající nulou už není 6-ti místné, ale pouze 5-ti místné, tzn., že 0 na začátku být nemůže)
#1 Pepa321
Zkus se podívat http://forum.matematika.cz/viewtopic.php?id=77400
Ano, ale přeji ti úspěšný den při výpočtu.
Podívej se sem jak to vychází.
http://www.wolframalpha.com/input/?i=integrate%20%28x%2B1%29%2F%28x^2%2B7*x-3%29^3%20dx
Jde také použít rekurentních vzorců. (např. viz. Přehled užité matematiky od Rektoryse)
#1 ukulele
Taku substituciu bych nevyužil.
Zkus zapřemýšlet čemu se rovná (-x-3)^6 ....=(x+3)^6
Podívej se na rozklad na parciální zlomky (metoda dosazovací)
(x-2)^5/(x+3)^6=A/(x+3)+B/(x+3)^2+C/(x+3)^3
+D/(x+3)^4+E/(x+3)^5+F/(x+3)^6
Mělo by ti vyjít: A=1,B=-25,C=250,D=-1250,E=3125,F=-3125
#1 ukulele
Pro derivaci funkce zadané imlicitně platí: Mělo by se značit F
y'=-(dF/dx)/(dF/dy), kde dF/dx-značí parciální derivaci fce podle x a dF/dy podle y (dF/dy<>0)
Jestli jste parciální derivace nebrali, tak pokud děláš parciální derivaci podle x bereš y jako "konstantu" a podle y zase x jako "konstantu" (zjednodušeně řečeno)
Tak tedy nejdříve spočítáš y pro x=0 - vyjde y=3/4 (máš tedy bod (0,3/4))
Pak spočítáš y' (podle vzorečku) a dosadíš za x=0 a y=3/4
Mělo by ti vyjít f'(0)=27/128 (a to je směrnice tečny v daném bodě)
#3 Bogus
Obecně:
v1=|x1-x2| + |y1-y2| + |z1-z2|
v2=0
když |x1-x2| = a pak
v2 = 2*min(y1,y2,z1,z2,a-y1,a-y2,a-z1,a-z2)
když |y1-y2| = a pak
v2 = 2*min(x1,x2,z1,z2,a-x1,a-x2,a-z1,a-z2)
když |z1-z2| = a pak
v2 = 2*min(x1,x2,y1,y2,a-x1,a-x2,a-y1,a-y2)
v = v1+v2
kde min(...) značí minimální číslo z čísel v závorce) může vyjít i 0, pokud body veží na protilehlých hranách jedné stěny
#1 Matěj Andrle
Jestliže jsou úhlopříčky rovnoběžné se souřadnicovými osami, pak jsou na sebe kolmé. A úhlopříčky jsou na sebe kolmé pouze u kosočtverce. ( navíc se samozřejmě půlí)
Znáš-li délky úhlopříček a leží-li (jak píšeš) jeden bod opsaného obdélníka v počátku souřadné soustavy (třeba ten levý), pak souřadnice vrcholů budou A=(0,f/2),B=(e/2,0), C=(e,f/2), D=(e/2,f), kde e je úhlopříčka AC a f úhlopříčka BD
#8 alex_laco
Máš begin...end kde nemusí být, a naopak tam kde musí být tak je nemáš. A opravdu před else se středník nepíše.
Ykus to takhle:
if (A>B) then
if (B>C) then
begin
A1:=C;
B2:=B;
C3:=A;
end
else
if (A>C) then
begin
A1:=B;
B2:=C;
C3:=A;
end
else
begin
A1:=B;
B2:=A;
C3:=C;
end
else
if (B<C) then
begin
A1:=A;
B2:=B;
C3:=C;
end
else
if (A>C) then
begin
A1:=A;
B2:=C;
C3:=B;
end
else
begin
A1:=C;
B2:=A;
C3:=B;
end;
#1 Markos
Souřadnice u vektoru dává smysl.
Vektor a=(-5,8) je vektor, který má počátek v bodu (0,0) a koncov7 bod v bodu (-5,8) v kartézské soustavě souřadnic.
Aby vektorybyly kolmé pak jejich úhel je 90 st. a tedy kosinus tohoto úhlu je nula. To nastane, když jejich skálární součin je roven nule. (tedy a1*b1+a2*b2=0)
Pak tedy kolmý vektor dostaneme pouhým přehozením souřadnic vektoru původního s tím, že změníme jedno znaménko.
Pro nás tedy bude kolmý vektor b=(8,5)
Teď už zbývá jenom ho "zkrátit" tak, aby měl délku 6 (to je, aby přepona v pravoúhlém tr. měla délku 6)
Pak vektor b=(8k,5k) kde k spočítáš z rovnice 64k^2+25k^2=36 -> k=+-6/sqrt(89)
tg(alfa)=3/sqrt(3)=sqrt(3) -> alfa=60 st.
#8 sleepy
1. Jenom taková malá otázka ke slovenštině. Vy na Slovensku opravdu "myslíte" s měkkým i ?
S tupým úhlem žádný problém není (i když nevím o jakém tupém úhlu píšeš). Jak jsem opět psal v příspěvku č.3, tak úloha bude mít 0 nebo 1 nebo 2 řešení v závislosti na tom, jaké hodnoty jsou zadány.
Předpokládejme, že jsou zadány hodnoty a,b,va (to můžeme - na všeobecnosti řešení se nic nemění) Potom c^2=a^2+b^2 - 2*a*sqrt(b^2-v^2) a c^2=a^2+b^2 + 2*a*sqrt(b^2-v^2)
Pak pro b<v úloha nemá řešení, pro b=v má 1 řešení (je to pravoúhlý trojúhelník) a pro b>v budou 2 řešení (jedno s mínus tou ocmocninou a druhé s plus odmocninou), Až nyní bude to druhé řešení s tupým úhlem.
#1 Rodney
2 otázky.
1.Proč nejdříve načítáš do a[i,j] matici 10x10 a pak pak teprve v obsluze bt_nactiClick to plníš na matici mxn
To se dá udělat najednou přímo v tom bt_nactiClick.
Matici Tmat natypuj jako Tmat=array of array of integer;
a pak matici a urči velikost takto: SetLength(a,m,n); a tu teprve naplň (tato matice začíná indexy 0)
for i:=0 to m-1 do
for j:=0 to n-1 do
a[i,j]:=random(10)+1; a pak samozřejmě ji zobraz ve StringGridu.
To bude mít tu výhodu, že při každém zmáčknutí bt_nactiClick se ti matice naplní jinými čísly.
2. Což je horší to je použití funkce soucet. Ta je napsána dobře, ale její použití špatně.
Pro výpis součtů si přidej do Stringridu ještě jeden řádek. a pak součty jednotlivých sloupců vypisuj
třeba takto: (ve funkci součet je také potřeba změnit cyklus na:)
for i:=0 to m-1 do
if a[i,j] mod 2=0 then
Result := Result+a[i,j];
procedure TForm1.bt_soucetClick(Sender: TObject);
begin
for j := 0 to n-1 do
sg.cells[j,n] := IntToStr(soucet(j,a);
end;
#4 sleepy
1.Nikdo netvrdil, že to nejde i pomocí dvou Pythagorových vět. Otázka však byla, jak to vypočítat co nejjednodušeji. A tak jak to navrhuješ to není nejjednodušší řešení.
2. Ona totiž kosinová věta je "zobecněním" Pythagorovy věty. (pro úhel 90 st je kosinus roven nule a pak c^2=a^2+b^2-2a*b*cos(90)=a^2+b^2)
#4 pigin
Ta tvá funkce na součet je nějaká divná. Zadáváš do ní i a pak sním počítáš v cyklu. Naopak proměnná j je pořád nastavená na nulu, takže by mě zajímalo co vlastně sčítáš. Pokud chceš sčítat jednotlivé sloupce, pak to napiš takto (i s stím, že budeš sčítat jenom sudá čísla-to se dělá tak, že pokud číslo mod 2=0 tak je číslo sudé)
function soucet(j:integer; var a:Tmatice):integer; //sčítá sudá čísla v řádku j
var i:integer;
begin
Result := 0;
for i := 1 to m do
if a[i,j] mod 2=0 then
Result := Result+a[i,j];
end;
#1 pigin
To bude nejspíš tím, že v proceduře generujClick používáš globální proměnné m,n (i když tam máš chybu, místo m máš 2xn-to první for i:=1 to n do změň na for i:=1 to m do) a ty jsou zatím nastavené na nulu, a to proto, že v proceduře pripravClick používáš ty samé proměnné, ale pouze uvnitř té procedury. Odstranění bude jednoduché. V proceduře pripravClick odstraň řádek var m,n:integer; a pak se už použijí m,n jako globální.
Navíc si myslím, že StringGrid počítá řádky i sloupce od nuly a tak jak to máš napsané,(pokud tedy máš FixedCol a FixedRow nastavené na 1) tak ti to bude plnit matici, která bude mít pouze m-1 řádků a n-1 sloupců. Tedy chtělo by to změnit
sg.RowCount:=m; a sg.ColCount:=n; na sg.RowCount:=m+1; sg.ColCount:=n+1;
a také sg.Width:=n*sg.DefaultColWidth+n+4; a sg.Height:=m*sg.DefaultRowHeight+m+4; na
sg.Width:=(n+1)*sg.DefaultColWidth+n+4; a sg.Height:=(m+1)*sg.DefaultRowHeight+m+4;
Pokud ovšem máš FixedCol a FixedRow nastavené na 0, pak proceduru pripravClick nech jak je a potom v proceduře generujClick počítej m i n od 0 do m-1 respective do n-1.
Třeba takto:
type
TMatice=array of array of Extended;
function VyRadky(z,kam: Integer; A: TMatice): TMatice;
var m: Integer;
por1,por2: TMatice;
begin
m := Length(A[0]);
SetLength(por1,1,m);
SetLength(por2,1,m);
por1[0] := A[z];
por2[0] := A[kam];
A[kam] := por1[0];
A[z] := por2[0];
Result := A;
end;
//Zde můžeš vyměňovat odkudkoliv kamkoliv (pokud první s posledním, pak
//z=0,kam=Length(A)-1)
#1 Zdenco
Třeba takto:
var x,y: Real;
function Expon(x: Real): Real;
begin
Result := exp(x)+2;
end;
begin
WriteLn(' --------- Exponencialni funkce --------');
WriteLn(' Zadavej x, pro x=-100 se program ukonci');
WriteLn;
x := 0;
while x<>-100 do
begin
Write(' Zadej x: ');
ReadLn(x);
y := Expon(x);
WriteLn(' x=',Format('%0.12g',[x]),', y=',Format('%0.12g',[y]));
WriteLn;
end;
end.
#6 kejta
Tak jsem zkoušel ještě jednou tu tvou funkci function Prestupny (Rok: integer): boolean;
a kdybys ji napsal takto:
function Prestupny (Rok: integer): boolean;
begin
Prestupny := (Rok mod 4=0)and((Rok mod 100<>0)or(Rok mod 400=0));
end;
tak by to fungovalo.
#6 kejta
Nejdříve k té funkci
function Prestupny (Rok: integer): boolean;
Podle deklarace má být výstupem logická hodnota tedy (True nebo False (také možno 1 nebo 0)
A ty tam děláš nějaké vyhodnocování, které ovšem není v podmínce.
Tedy zkus to takhle:
function Prestupny (Rok: integer): boolean;
begin
if ((Rok mod 4 =0) and (Rok mod 100<>0)) or (Rok mod 400=0)then
Prestupny := True
else
Prestupny := False;
end;
k programu:
Co myslíš, že ti to bude počítat? (až ti to projde přes funkci Prestupny)
V každém kroku zjistíš, zda je tento rok přestupný nebo není a pak do proměnné Pocet dní vložíš 366 nebo 365.
To znamená, že na konci budeš mít v proměnné Pocet dni buď (Rok2-Rok1)*366 (pokud ten poslední rok bude přestupný) nebo (Rok2-Rok1)*365 (pokd nebude) a to jistě nechceš.
Aby ti to dělalo dobře pak musíš cyklus udělat takto:
PocetDni:=0;
for i := Rok1 to Rok2 do
if Prestupny(i) then
PocetDni := PocetDni+366
else
PocetDni := PocetDni+365;
Ještě poznámka:
Jestli chceš zjistit kolik dní uplynulo od prvního data do druhého data (a to jistě chceš), pak počítej jen celé roky mezi hodnotami Rok 2 a Rok1 (a zbytek už spočítáš z měsíců a dní Rok1 a Rok2), tedy v cyklu použij
PocetDni:=0;
for i := Rok1+1 to Rok2-1 do
if Prestupny(i) then
PocetDni := PocetDni+366
else
PocetDni := PocetDni+365;
#9 Trebor
Třeba takhle:
program uloha;
{$APPTYPE CONSOLE}
uses
SysUtils;
var vstup,vysledok,pokr,konec: Integer;
anone: String;
begin
pokr := 0; //Promenna pro moznost pokracovani
WriteLn( '-------------------Moje prvni uloha--------------------'); //Uvodni vypis
WriteLn;
while pokr=0 do
begin
Write(' Zdej cislo: ');
ReadLn(vstup);
vysledok := vstup+1;
WriteLn(' Vysledek je: ',vysledok); //Vypis vysledku
konec := 0; //Promena indikujici zda bylo napsano
// ano (a) nebo ne (n)
repeat //Opakujeme vyzvu, dokud nenapisme a nebo n
WriteLn;
Write(' Nove cislo? [a/n] '); //Chceme-li nove napiseme a
ReadLn(anone);
if (anone='n')or(anone='N')or(anone='a')or(anone='A') then
konec := 1
else
begin
WriteLn;
WriteLn(' Musis zadat a nebo n');
end;
until konec<>0;
if (anone='n')or(anone='N') then //V pripade ze napiseme n + ENTER -
// program skonci
pokr := 1;
end;
end.
#14 adelka17
Tady je jen pro kontrolu cely program
program Usecky;
{$APPTYPE CONSOLE}
uses
SysUtils;
var i: Integer; //definovani promenych
Ax,Ay,Bx,By,Cx,Cy,Dx,Dy,a,b,t,s,xp,yp: Real;
PB: array[1..8] of Real; //pole aby se daly souradnice nacist
begin
{trochu matematiky - usecky zadane parametricky:
prvni usecka x=Ax+(Bx-Ax)*s, y=Ay+(By-Ay)*s, s=<0,1>
druha usecka x=Cx+(Dx-Cx)*t, y=Cy+(Dy-Cy)*t, t=<0,1>
aby se usecky protinaly uvnitr musi byt pro prusecik s,t v danem intervalu}
WriteLn ('--------------------- Prusecik usecek -----------------------');
WriteLn;
Write(' Zadej x-ove a y-ove souradnice bodu A,B,C,D: '); //sem zadas hodnoty x-ovych a y-ovych
for i := 1 to 8 do //hodnot bodu oddelenych mezerou
begin
Read(PB[i]); //nacitani techto bodu
end;
Writeln;
Ax := PBodu[1]; Ay := PBodu[2]; //prirazeni hodnot promenym Ax az Dy
Bx := PBodu[3]; By := PBodu[4];
Cx := PBodu[5]; Cy := PBodu[6];
Dx := PBodu[7]; Dy := PBodu[8];
a := (Cx-Ax)*(By-Ay)-(Bx-Ax)*(Cy-Ay); //vypocitani pomocnych hodnot
b := (Bx-Ax)*(Dy-Cy)-(Dx-Cx)*(By-Ay);
if b=0 then //podminka rovnobeznosti
WriteLn (' False (rovnobezky)') //vypsani, ze se neprotinaji (rovnobezky)
else
begin //vypocitaní parametru pro usecku CD
t := a/b; //kdyz se protinaji
xp := Cx+(Dx-Cx)*t; //x-ova souradnice pruseciku
yp := Cy+(Dy-Cy)*t; //y-ova souradnice pruseciku
if (Bx-Ax)=0 then //podminka aby se nedelilo nulou-usecka AB je "svisla"
s := (yp-Ay)/(By-Ay) //vypocitaní parametru pro usecku AB
else
s := (xp-Ax)/(Bx-Ax); //v pruseciku
if (t>=0)and(t<=1)and(s>=0)and(s<=1) then //podminka protnuti se uvnitr usecek
WriteLn (' True') //protinaji se uvnitr
else
WriteLn (' False (ruznobezky-vne)'); //protinaji se vne
end;
ReadLn;
ReadLn; //ceka na Enter a program ukonci
end.
#1 adelka17
Ještě malé doplnění
Do programu: zavedeš proměnné a,b,t,s,xp,yp: Real;
Pak si spočítáš: a := (Cx-Ax)*(By-Ay)-(Bx-Ax)*(Cy-Ay);
b := (Bx-Ax)*(Dy-Cy)-(Dx-Cx)*(By-Ay);
když b=0 pak
se neprotínají (jsou rovnoběžné)
jinak
t := a/b;,
xp := Cx+(Dx-Cx)*t;
yp := Cy+(Dy-Cy)*t;
když (Bx-Ax)=0 pak
s := (yp-Ay)/(By-Ay)
jinak
s := (xp-Ax)/(Bx-Ax);
když (t>=0) a zároveň (t<=1) a zároveň (s>=0) a zároveň (s<=1) pak
se protínají
jinak
se neprotínají (jsou sice různoběžné, ale protínají se vně)
#1 adelka17
To co píše #6 KIIV je sice pravda, ale jsou tam úskalí v programování pro dělení nulou.
Lepší je to počítat přes parametrické rovnice úseček, a sledovat, zda parametr, třeba druhé rovnice je v intervalu <0,1>.
Do programu: zavedeš proměnné a,b,t: Real;
Pak si spočítáš: a := (Cx-Ax)*(By-Ay)-(Bx-Ax)*(Cy-Ay);
b := (Bx-Ax)*(Dy-Cy)-(Dx-Cx)*(By-Ay);
když b=0 pak
se neprotínají (jsou rovnoběžné)
jinak spočítáš t := a/b;
když (t>=0) a zároveň (t<=1) pak
se protínají
jinak
se neprotínají (jsou sice různoběžné, ale protínají se vně)
#12 Jan
Já jsem ti napsal jenom tělo programu. To co tam je předtím a zatím jsem neřešil. Hláška znamená, že ti asi někde chybí end.
Celý program vypadá takto: (u mě v Lazarusu jako konzolová aplikace)
program Ruleta;
{$mode objfpc}{$H+}
uses
{$IFDEF UNIX}{$IFDEF UseCThreads}
cthreads,
{$ENDIF}{$ENDIF}
Classes, SysUtils, CustApp
{ you can add units after this };
type
{ TMyApplication }
TMyApplication = class(TCustomApplication)
protected
procedure DoRun; override;
public
constructor Create(TheOwner: TComponent); override;
destructor Destroy; override;
procedure WriteHelp; virtual;
end;
{ TMyApplication }
procedure TMyApplication.DoRun;
var
ErrorMsg: String;
begin
// quick check parameters
ErrorMsg:=CheckOptions('h','help');
if ErrorMsg<>'' then begin
ShowException(Exception.Create(ErrorMsg));
Halt;
end;
// parse parameters
if HasOption('h','help') then begin
WriteHelp;
Halt;
end;
{ add your program here }
// stop program loop
Terminate;
end;
constructor TMyApplication.Create(TheOwner: TComponent);
begin
inherited Create(TheOwner);
StopOnException:=True;
end;
destructor TMyApplication.Destroy;
begin
inherited Destroy;
end;
procedure TMyApplication.WriteHelp;
begin
{ add your help code here }
writeln('Usage: ',ExeName,' -h');
end;
var
Application: TMyApplication;
eura,pokr,sazka,barva,hod: Integer;
chyba: LongInt;
{$IFDEF WINDOWS}{$R Ruleta.rc}{$ENDIF}
begin
WriteLn(' ----------------- Ruleta ---------------');
eura := 100;
pokr := 1;
Randomize;
WriteLn;
Writeln(' Mas k dispozici 100 eur');
while (pokr=1)and(eura>0) do
begin
repeat //Dokud se nezada cislo porad opakujeme zadani
WriteLn;
Write(' Zadej kolik eur chces vsadit: ');
{$I-} ReadLn(sazka); {$I+} //Osetreni spatnych vstupu-napr.pismena nebo desetinna cisla
chyba := IOResult;
if chyba<>0 then
WriteLn(' Sazka musi byt cele cislo');
until chyba=0;
if (sazka<=0)or(sazka>eura) then //Pokud zadame cislo vetsi nez kolik mame
repeat //tak to nedovolime
WriteLn(' Sazka musi byt vetsi nez nula a mensi nez kolik mas eur');
Writeln(' Mas k dispozici ',eura,' eur');
WriteLn;
Write(' Zadej kolik eur chces vsadit: ');
ReadLn(sazka);
until (sazka>0)and(sazka<=eura);
repeat //Dokud se nezada cislo porad opakujeme zadani
WriteLn;
Write(' Zadej zda sazis na sude nebo liche (0-sude,1-liche}: ');
{$I-} ReadLn(barva); {$I+} //Osetreni spatnych vstupu-napr.pismena nebo desetinna cisla
chyba := IOResult;
if chyba<>0 then
WriteLn(' Musis zadat cislo 0 nebo 1');
until chyba=0;
if (barva<0)or(barva>1) then //Pokud nezadame 0 nebo 1 tak to nedovolime
repeat
WriteLn(' Musis zadat 0 nebo 1');
WriteLn;
Write(' Zadej zda sazis na sude nebo liche (0-sude,1-liche}: ');
ReadLn(barva);
until (barva=0)or(barva=1);
//pogram
hod := Random(37);
if hod=0 then
eura := eura-sazka
else
if ((hod mod 2=0)and(barva=0))or((hod mod 2=1)and(barva=1)) then
eura := eura+sazka
else
eura := eura-sazka;
WriteLn;
WriteLn(' Padlo cislo ',hod,' a mas k dispozici ',eura,' eur');
if eura>0 then
begin
repeat //Dokud se nezada cislo porad opakujeme zadani
WriteLn;
Write(' Nova sazka? (1-ano(pokracovat),0-ne (konec)}: ');
{$I-} ReadLn(pokr); {$I+} //Osetreni spatnych vstupu-napr.pismena nebo desetinna cisla
chyba := IOResult;
if chyba<>0 then
WriteLn(' Musis zadat cislo 0 nebo 1');
until chyba=0;
if (pokr<0)or(pokr>1) then //Pokud nezadame 0 nebo 1 tak to nedovolime
repeat
WriteLn(' Musis zadat 0 nebo 1');
WriteLn;
Write(' Nova sazka? (1-ano(pokracovat),0-ne (konec)}: ');
ReadLn(pokr);
until (pokr=0)or(pokr=1);
end
else
begin
WriteLn;
WriteLn(' Uz nemas zadna eura, tak ahoj');
WriteLn(' Pro ukonceni stiskni Enter');
ReadLn;
end;
end;
Application:=TMyApplication.Create(nil);
Application.Title:='My Application';
Application.Run;
Application.Free;
end.
#8 DB
Můj komentář rozhodně není od věci. Stroj ti to může nakrásně zhodnotit na 100%, on totiž posuzuje pouze jestli tam nemáš syntaktické chyby, a to jaké hodnoty za a,b,c dosazuješ samozřejmě neví.
Ono stačí si do tvého programu dosatit např. a=1, b=2, c=10 a uvidíš jak ti to spadne na výpočtu S.
A ještě ke komentářům: Komentáře slouží ktomu, aby někdo jiný, který čte tvůj kód věděl co právě děláš. Když mu ovšem za podmínku do komentáře napíšeš tu samou podmínku, tak z toho určitě nebude moudřejší. Ovšem, kybys mu tam napsal, že se vyhodnotí, zda jsou např. všechny strany větší než nula, pak by to smysl mělo.
#8 Jan
var
Application: TMyApplication;
eura,pokr,sazka,barva,hod: Integer;
chyba: LongInt;
{$IFDEF WINDOWS}{$R Ruleta.rc}{$ENDIF}
begin
WriteLn(' ----------------- Ruleta ---------------');
eura := 100;
pokr := 1;
Randomize;
WriteLn;
Writeln(' Mas k dispozici 100 eur');
while (pokr=1)and(eura>0) do
begin
repeat //Dokud se nezada cislo porad opakujeme zadani
WriteLn;
Write(' Zadej kolik eur chces vsadit: ');
{$I-} ReadLn(sazka); {$I+} //Osetreni spatnych vstupu-napr.pismena
chyba := IOResult;
if chyba<>0 then
WriteLn(' Sazka musi byt cislo');
until chyba=0;
if (sazka<=0)or(sazka>eura) then //Pokud zadame cislo vetsi nez kolik mame
repeat //tak to nedovolime
WriteLn(' Sazka musi byt vetsi nez nula a mensi nez kolik mas eur');
Writeln(' Mas k dispozici ',eura,' eur');
WriteLn;
Write(' Zadej kolik eur chces vsadit: ');
ReadLn(sazka);
until (sazka>0)and(sazka<=eura);
repeat //Dokud se nezada cislo porad opakujeme zadani
WriteLn;
Write(' Zadej zda sazis na sude nebo liche (0-sude,1-liche}: ');
{$I-} ReadLn(barva); {$I+} //Osetreni spatnych vstupu-napr.pismena
chyba := IOResult;
if chyba<>0 then
WriteLn(' Musis zadat cislo 0 nebo 1');
until chyba=0;
if barva>1 then //Pokud nazadame 0 nebo 1 tak to nedovolime
repeat
WriteLn(' Musis zadat cislo 0 nebo 1');
WriteLn;
Write(' Zadej zda sazis na sude nebo liche (0-sude,1-liche}: ');
ReadLn(barva);
until (barva=0)or(barva=1);
//pogram
hod := Random(37);
if hod=0 then
eura := eura-sazka
else
if ((hod mod 2=0)and(barva=0))or((hod mod 2=1)and(barva=1)) then
eura := eura+sazka
else
eura := eura-sazka;
WriteLn;
WriteLn(' Padlo cislo ',hod,' a mas k dispozici ',eura,' eur');
if eura>0 then
begin
repeat //Dokud se nezada cislo porad opakujeme zadani
WriteLn;
Write(' Nova sazka? (1-ano(pokracovat),0-ne (konec)}: ');
{$I-} ReadLn(pokr); {$I+} //Osetreni spatnych vstupu-napr.pismena
chyba := IOResult;
if chyba<>0 then
WriteLn(' Musis zadat 0 nebo 1');
until chyba=0;
if pokr>1 then //Pokud nazadame 0 nebo 1 tak to nedovolime
repeat
WriteLn(' Musis zadat 0 nebo 1');
WriteLn;
Write(' Nova sazka? (1-ano(pokracovat),0-ne (konec)}: ');
ReadLn(pokr);
until (pokr=0)or(pokr=1);
end
else
begin
WriteLn;
WriteLn(' Uz nemas zadna eura, tak ahoj');
WriteLn(' Pro ukonceni stiskni Enter');
ReadLn;
end;
end;
#4 DB
Jenom poznámka: (k matematické části programu)
Podmínku (trojúhelníková nerovnost) if ((a+b<c) || (a+c<b) || (b+c<a) ) { cout << "Trojuhelnik nelze sestrojit.\n";
je potřeba dát před výpočet obsahu trojúhelníka, jinak při jejím nesplnění ti program spadne právě při výpočtu obsahu. Obsah je vždy větší než nula.
#1 Michal
1)Ck(n)=n!/((n-k)!*k!)
Pak dostaneme: n!/((n-3)!*3!)+n!/((n-4)!*4!)=5
n*(n-1)*(n-2)/6+n*(n-1)*(n-2)*(n-3]/24=5
n*(n-1)*(n-2)*(4+(n-3))=120
(n+1)*n*(n-1)*(n-2)=120
Tato rovnice 4.stupně jde vyřešit (pro přirozená čísla) následující úvahou
120=5*4*3*2 -> n+1=5 a tedy n=4. Odpověď a)
2) Platí Vk(n)=n!/(n-k)!, V'k(n)=n^k
a) bez opakování V5(6)=6!/(6-5)!=6!/1!=6!=720
b) s opakováním V'5(6)=6^5=7776
3) (x+2)^3=(x+2)*(x^2-2*x+4)
1. x=-2
2. (x+2)^2=x^2-2*x+4
x^2+4*x+4=x^2-2*x+4
6*x=0 -> x=0
#1 zdenek
Zkus to takto:
program kostka;
uses crt;
var n,pokr,konec:Integer;
anone:string;
begin
pokr := 0; // promenna pro moznost pokracovani
WriteLn('---- Hod kostkou ----');
Randomize;
while pokr=0 do
begin
n := Random(6)+1; // vygeneruje cislo 1-6
WriteLn;
WriteLn(' Hodil jsi cislo ',n);
WriteLn;
konec := 0;
repeat // opakujeme vyzvu, dokud nenapisme a nebo n
Write(' Novy hod? [a/n] '); // chceme-li hazet dale napiseme a
ReadLn(anone);
if (anone='n')or(anone='N')or(anone='a')or(anone='A') then
konec := 1
else
begin
WriteLn;
WriteLn(' Musis zadat a nebo n');
end;
until konec<>0;
if (anone='n')or(anone='N') then // v pripade ze napiseme n - program skonci
pokr := 1;
end;
end.
#2 Maestro23
Co třeba takto:
var i,j,c: Integer;
m1,m2,m3: array [1..5] of array [1..5] of Integer;
begin
WriteLn(' --- Soucet odpovidajicich si prvku matic ---');
WriteLn;
Randomize;
//naplneni matic m1,m2 a soucet odpovidajicich prvku v m3
for i := 1 to 5 do
for j := 1 to 5 do
begin
c := Random(10); //nahodne cislo od 0 do 9
m1[i,j] := c;
c := Random(10);
m2[i,j] := c;
m3[i,j] := m1[i,j]+m2[i,j];
end;
WriteLn;
WriteLn(' matice 1:');
//vypis matic m1
for i := 1 to 5 do
begin
for j := 1 to 5 do
Write(m1[i,j]:2);
WriteLn;
end;
WriteLn;
WriteLn(' matice 2:');
//vypis matic m2
for i := 1 to 5 do
begin
for j := 1 to 5 do
Write(m2[i,j]:2);
WriteLn;
end;
WriteLn;
WriteLn(' matice 3:');
//vypis matic m3
for i := 1 to 5 do
begin
for j := 1 to 5 do
Write(m3[i,j]:3);
WriteLn;
end;
//po stisknuti Enteru program skonci
ReadLn;
end.
#3 Tomáš Bělunek
Zkus to takto:
program Prog1_14;
{$APPTYPE CONSOLE}
uses
SysUtils;
type Tmatice = array of array of Integer;
Tsuma = array of Integer;
var m,n,i,j:Integer;
ps,poms: String;
matice: Tmatice;
suma: Tsuma;
procedure Nacti;
var f:text;
i,j:Integer;
begin
Assign(f,'vstup.txt');
Reset(f);
while not eof(f) do
readln(f,ps);
Close(f);
m := 1;
for i := 1 to Length(ps) do
begin
poms := ps[i];
if poms=' ' then
m := m+1;
end;
Assign(f,'vstup.txt');
Reset(f);
Read(f,n);
SetLength(matice,n,m);
for i := 2 to n+1 do
begin
for j := 0 to m-1 do
begin
Read(f,matice[i-2,j]);
end;
Readln(f);
end;
Close(f);
end;
begin
Nacti;
WriTeLn(' Soucet hodnot ve sloupcich matice:');
WriTeLn;
WriTeLn(' ',n);
WriTeLn;
SetLength(suma,m);
for i := 0 to n-1 do
begin
for j := 0 to m-1 do
begin
Write(' ',matice[i,j]:4);
end;
WriTeLn;
end;
WriTeLn;
WriTeLn(' Vysledek (soucty ve sloupcich):');
WriTeLn;
for i := 0 to m-1 do
begin
for j := 0 to n-1 do
suma[i] := suma[i]+matice[j,i];
Write(' ',suma[i]);
end;
WriTeLn;
ReadLn;
end.
#12 KidaCZE
Tady je.
http://ulozto.cz/xcEovwwJ/kvadr-zip
#1 Peto
Co třeba takto:
var i: Integer;
F: array[1..15] of Integer;
begin
WriteLn('------- Fibonacciho posloupnost --------');
WriteLn;
F[1] := 0; F[2] := 1;
Write(F[1],',',F[2]);
for i := 3 to 15 do
begin
F[i] := F[i-1]+F[i-2];
Write(',',F[i]);
end;
WriteLn;
ReadLn;
end.
#1 Maro
program Milionar;
{$APPTYPE CONSOLE}
uses
SysUtils;
var n: Integer;
pv,p: Extended;
begin
WriteLn;
WriteLn(' ----------------- Milionar ------------------');
WriteLn;
Write(' Zadej pociatocny vklad (pv v eurech): '); //zadani pocatecniho vkladu
ReadLn(pv);
Write(' Zadej percento urocenia (p v percentach-pouze cislo): '); //zadani uroku
ReadLn(p);
WriteLn;
n := Round(ln(1000000/pv)/ln(1+p/100)+0.5); //vypocet poctu roku, 0.5 pricteno aby se zaokrouhlovalo vzdy nahoru
WriteLn(' Milionarem budem za ',n,' rokov');
ReadLn;
end.
#1 Tabb
Máš dvě možnosti jak to spočítat.(pro jednoduchost položíme a=1-to lze, protože počítáme úhel přes nějakou geometrickou funkci a to je vždy nějaký poměr, kde by se délka vykrátila)
1. Z obrázku (přes funkci tangens)
JB=sqrt(1+1/4)=sqrt(5)/2, JX=1, BY=1/4
Z podobnosti trojúhelníků JKX a BKY se dá lehce spočítat velikost úsečky BK (označme ji x)
JX/BY=(JB+x)/x a tedy 1/(1/4)=(sqrt(5)/2+x)/x ..... x=sqrt(5)/6
a pak tg(fi)=1/(sqrt(5)/2+sqrt(5)/6)=3/(2sqrt(5)) a fi=33.85451 stupně.
nebo
2. Jako úhel dvou přímek přes jejich směrové vektory (označme je s1 a s2)
Vyjádříš parametrické rovnice obou přímek
přímka 1 x=0+t, y=1/2-1/2*t, z=1-3/4*t a tedy směrový vektor s1=(1,-1/2,-3/4)=(s11,s12,s13) (s11=1,první souřadnice vektoru s1 atd)
přímka 2 x=0+t, y=1/2-1/2*t, z=0+0*t a tedy směrový vektor s1=(1,-1/2,0)=(s21,s22,s23)
cos(fi)=s1*s2/(velikost9s1)*velikost(s2))=(s11*s21+s12*s22+s13*s23)/sqrt((s11^2+s12^2+s13^2)(s21^2+s22^2+s23^2))
cos(fi)=(1+1/4+0)/sqrt((1+1/4+9/16)(1+1/4+0)) a pak fi=33.85451 stupně.
#1 Tabb
Máš dvě možnosti jak to spočítat.(pro jednoduchost položíme a=1-to lze, protože počítáme úhel přes nějakou geometrickou funkci a to je vždy nějaký poměr, kde by se délka vykrátila)
1. Z obrázku (přes funkci tangens)
JB=sqrt(1+1/4)=sqrt(5)/2, JX=1, BY=1/4
Z podobnosti trojúhelníků JKX a BKY se dá lehce spočítat velikost úsečky BK (označme ji x)
JX/BY=(JB+x)/x a tedy 1/(1/4)=(sqrt(5)/2+x)/x ..... x=sqrt(5)/6
a pak tg(fi)=1/(sqrt(5)/2+sqrt(5)/6)=3/(2sqrt(5)) a fi=33.85451 stupně.
nebo
2. Jako úhel dvou přímek přes jejich směrové vektory (označme je s1 a s2)
Vyjádříš parametrické rovnice obou přímek
přímka 1 x=0+t, y=1/2-1/2*t, z=1-3/4*t a tedy směrový vektor s1=(1,-1/2,-3,4)=(s11,s12,s13) (s11=1,první souřadnice vektoru s1 atd)
přímka 2 x=0+t, y=1/2-1/2*t, z=0+0*t a tedy směrový vektor s1=(1,-1/2,0)=(s21,s22,s23)
cos(fi)=s1*s2/(velikost9s1)*velikost(s2))=(s11*s21+s12*s22+s13*s23)/sqrt((s11^2+s12^2+s13^2)(s21^2+s22^2+s23^2))
cos(fi)=(1+1/4+0)/sqrt((1+1/4+9/16)(1+1/4+0)) a pak fi=33.85451 stupně.
#1 Tabb
Máš dvě možnosti jak to spočítat.(pro jednoduchost položíme a=1-to lze, protože počítáme úhel přes nějakou geometrickou funkci a to je vždy nějaký poměr, kde by se délka vykrátila)
1. Z obrázku (přes funkci tangens)
JB=sqrt(1+1/4)=sqrt(5)/2, JX=1, BY=1/4
Z podobnosti trojúhelníků JKX a BKY se dá lehce spočítat velikost úsečky BK (označme ji x)
JX/BY=(JB+x)/x a tedy 1/(1/4)=(sqrt(5)/2+x)/x ..... x=sqrt(5)/6
a pak tg(fi)=1/(sqrt(5)/2+sqrt(5)/6)=3/(2sqrt(5)) a fi=33.85451 stupně.
nebo
2. Jako úhel dvou přímek přes jejich směrové vektory (označme je s1 a s2)
Vyjádříš parametrické rovnice obou přímek
přímka 1 x=0+t, y=1/2-1/2*t, z=1-3/4*t a tedy směrový vektor s1=(1,-1/2,-3,4)=(s11,s12,s13) (s11=1,první souřadnice vektoru s1 atd)
přímka 2 x=0+t, y=1/2-1/2*t, z=0+0*t a tedy směrový vektor s1=(1,-1/2,0)=(s21,s22,s23)
cos(fi)=s1*s2/(velikost9s1)*velikost(s2))=(s11*s21+s12*s22+s13*s23)/sqrt((s11^2+s12^2+s13^2)(s21^2+s22^2+s23^2))
cos(fi)=(1+1/4+0)/sqrt((1+1/4+9/16)(1+1/4+0) a pak fi=33.85451 stupně.
#6 crazy
Příkaz case musí být ukončen end; A navíc máš špatně znak pro přiřazení místo = má být :=
Tedy
case m of
1: w := 0 - 25 - 31;
2: w := 0 - 25;
3: w := 0 + 3;
4: w := 0 + 3 + 31;
5: w := 0 + 3 + 31 + 30;
6: w := 0 + 3 + 31 + 30 + 31;
7: w := 0 + 3 + 31 + 30 + 31 + 30;
8: w := 0 + 3 + 31 + 30 + 31 + 30 + 31;
9: w := 0 + 3 + 31 + 30 + 31 + 30 + 31 + 31;
10: w := 0 + 3 + 31 + 30 + 31 + 30 + 31 + 31 + 31;
11: w := 0 + 3 + 31 + 30 + 31 + 30 + 31 + 31 + 31 + 31;
12: w := 0 + 3 + 31 + 30 + 31 + 30 + 31 + 31 + 31 + 31 + 30;
else
write(' Zle cislo mesiaca ');
end;
#4 yaqwsx
Píšeš, že neznámé jsou A a J.
Jestli dobře vidím pak z první rovnice jde úplně lehce vyjádřit A.
A protože ve druhé rovnici je J pouze v první mocnině (jestli dobře vidím-a to úplně na konci), pak i ono jde vypočítat lehounko dosazovací metodou.
Zajímalo by mně tedy jaké jsou ty tvé 3 uspořádané dvojice [A,J]
Je-li ovšem T nějaký parametr nejde o jednu soustavu, ale o dvě (T<0, T>0, T se nule rovnat nemůže)
Pokud by byly neznámé A,T pak by to byla ovšem jiná úloha.