#78 MilanL
jo já vim GPU taky ... oni to tam dodělali od roku 2015 ...
Příspěvky odeslané z IP adresy 194.228.128.–
#69 Jerry
ještš taková drobnost, ten příklad C++/CLI co sem ti poslal tak ten samozřejmě umí i dynamicky zoomovat na určitou část a děláš to myší a je to stejný jako když kreslíš třeba v autocadu, ten zdroják je prostě delší no má ai 60000 řádků v C++ ale dost těžko ho asi zkrátíš.
#68 Kevil
no zdroják jsem ti poslal ale je to kousek zdrojáku z celýho projektu kterej má 300Mega a je to v MS VS 2008 SP1 C++/CLI pod Windows 7 x32 a bez AERA !!!!
je to přesně to co děláš, rozměry mřížky jsou max. 32000x32000 buněk a zakresluje to úsečky.
bohužel naučit programovat se asi budeš muset sám
zkus to zapsání těch 100mega úseček do grafický paměti pomocí DirectX2D
ten příklad je tady
https://stackoverflow.com/questions/12868543/how-to-use-drawline-in-c-directx-graphics
#64 Kevil
Já bejt tebou zkusil bych to DirectX12 a Direct2D
https://stackoverflow.com/questions/12868543/how-to-use-drawline-in-c-directx-graphics
protože to co mám já umí kreslit úsečky jen v mřížce o velikosti 32000x32000 těch úseček muže bejt klidně 100Milionu to je fuk prostě co se vejde do paměti
#64 Kevil
Ano chybí :)
jestli to chceš přeložit tak potřebuješ CELEJ !!! zdroják a všechno kolem a to má asi 300MB
opravdu to chceš ? Chceš se v tom patlat ?
tady je zbtek
https://uloz.to/!IPw5VEKFKDaH/common-libs-zip
zdroják se schovává do adresáře c:\ROBOMAP source code\
a jestli to chceš spustit musíš si nainstalovat kompletní (RS)
https://uloz.to/!p3nEyF5U8/robomap-x32-zip
nebo bych ti doporučoval stáhnout si VMWare Image kde je to připravený a stačí tam nakopírovat zdroják
https://uloz.to/!bUMLMxyG5Bic/windows-7-x32-sp1-ultimate-robomap-vmware12-rar
ale si blázen :)
#59 Kevil
tady máš zdroják https://uloz.to/!cj3DQ1DLeyzK/robomap-zip
k tomu co děláš ale je to v C++/CLI pro MS VS 2008 SP1.
všechno co se snažíš udělat je ve funkcích
g_ClassReg->MapViewer2D->CreateSearchingGrid();
g_ClassReg->MapViewer2D->GridWallsAssociation_All();
#59 Kevil
"zkusit najít boje které prošli oblastmi" znamená zjistit, jestli se úsečka nebo její část nachází v daném obdélníku a úsečka se vytvoří ze dvou po sobě jdoucích pozic jedné boje. Takže ideální je rozdělit onen prostor 180000x360000 na menší čtverce třeba 18000x36000 čtverců a pak pro každý čtverec zjistit, která úsečka ho prochází a procházející část úsečky k danému čtverci přidružit. Takže vlastně úsečky trajektorie bojí rozkouskuješ podle toho jak prochází jednotlivými čtverci. Takže když spočítám LBA nějakýho čtverce v rastru 18000x36000 třeba 256986 tak pak musim zjistit, jestli v tomhle čtverci je nějaká úsečka a přidružit ji k němu a až tohle všechno budu mít tak pak mužu začít vykreslovat podle toho jaké čtverce vidím. jde to rychle.
jestli chceš zkusit ten DirecxX tak tady je příklad na to Direct2D
https://stackoverflow.com/questions/12868543/how-to-use-drawline-in-c-directx-graphics
je to funkce
VOID DrawLine(HWND hwnd)
a je to DirectX11/12 to poznáš podle použití D2D1CreateFactory DirectX12 Development Kit si budeš muset nainstalovat.
#56 MilanL
pesně to co děláte sem už kdysi dávno programoval. ta oblast nebyla tak velká tedy 180000x360000 čtverců, byla jen 32000x32000, ale používal jsem tam adaptivní dělení prostoru po čtvercích a Bresenhamův algoritmus na detekci, kde se jednotlivé čáry nachází. jestli si to chcete zkusit, tak vám to někam nahraju.
#53 Kevil
já vim já jenom řikám že bys moch všech těch 35 mega dat úseček narvat do grafický karty a zobrazit si jenom výřez chápeš jo ? Protože u zobrazení zadáváš XminYmin/XmaxYmax okna co chceš zobrazit. Jestli ti de jenom o zobrazení. Protože je to jednodušší:
https://docs.microsoft.com/en-us/windows/desktop/direct2d/direct2d-quickstart
https://stackoverflow.com/questions/2603276/how-do-i-clear-a-direct2d-render-target-to-fully-transparent
grafický kartě je to jedno ona ty úsečky co nejsou vidět ořeže sama a dělá to hardwarově.
#1 hlucheucho
hele a víte že existujou aj integrovaný budiče LED ? třeba M5450 ?
http://www.st.com/content/ccc/resource/technical/document/datasheet/e1/1b/1d/f7/3c/33/40/6f/CD00020632.pdf/files/CD00020632.pdf/jcr:content/translations/en.CD00020632.pdf
#1 Tonda
tam ti ale někdo např. pan učitel musel dát nějakej návod jak se např. otevírá soubor (iostream) pomocí knihoven pro C++ a jak se čte a jaké jsou funkce s řetězci apod. musíš to někde mít napsaný v sešitě. takhle to je moc divný .. nezdá se mi to ..
musíš si oteřít soubor, číst znak po znaku a pak identifikovat daný znak např. podle ascii kodu (0..255)
https://msdn.microsoft.com/cs-cz/library/k0t5wee3.aspx
a pak udělat jeden velkej switch-case kterej ti bude přičítat jedničku hodnotě v poli, kde použiješ jen 26 prvku pole t.j. znaky a..z, A..Z, u jednotlivejch case se malý 'a' a velký 'A' zapíšou za sebe tedy case 'a', 'A'
tady to máš napsaný:
https://msdn.microsoft.com/cs-cz/library/k0t5wee3.aspx
pak už jenom procházíš to pole a zapíšeš do souboru od nejpočetnějšího po nejmíň početný prvek...
#1 hlucheucho
; Content of "U_b" before, during & after the conversion:
; (L/H stand for LOW/HIGH - Nibble)
;
; positive argument:
; adr in out
;------------------------------
; +5 L0 D(100,000)
; +4 H0 D(10,000)
; +3 A3 L1 D(1,000)
; +2 A2 H1 D(100)
; +1 A1 L2 D(10)
; &U_b A0 D(1)
; negative argument:
; adr in out
;------------------------------
; +5 '-'
; +4 L0 D(10,000)
; +3 A3 H0 D(1,000)
; +2 A2 L1 D(100)
; +1 A1 H1 D(10)
; &U_b A0 L2 D(1)
; Content of the registers during conversion:
; (main loop, "LOOP_DIGIT")
;
; R0 ... "Nibble" Pointer
; R1 ... "Digit" Pointer
; R2 ... "Nibble" Counter
; R3 ... "Digit" Counter
; positive argument:
; R0 R1 R2 R3
; +1 0 5 6
; +1 +1 5 5
; +2 +2 4 4
; +3 +3 3 3
; +4 +4 2 2
; +5 +5 1 1
; negative argument:
; R0 R1 R2 R3
; 0 0 5 5
; +1 +1 4 4
; +2 +2 3 3
; +3 +3 2 2
; +4 +4 1 1
;--------------------------------------
$XREF
$NOMOD51
B DATA 0F0H
ACC DATA 0E0H
NAME BCD
?PR?bin2bcd?BCD SEGMENT CODE
EXTRN DATA (U_b)
PUBLIC bin2bcd
RSEG ?PR?bin2bcd?BCD
USING 0
bin2bcd:
MOV A,U_b
JNB ACC.7,POSITIVE
CLR C ; negative argument
CLR A
SUBB A,U_b+3
MOV U_b+3,A
CLR A
SUBB A,U_b+2
MOV U_b+2,A
CLR A
SUBB A,U_b+1
MOV U_b+1,A
CLR A
SUBB A,U_b
JNZ ERROR ; should be ZERO
MOV R3,#5 ;"Digit" Counter
MOV R1,#U_b ;"Digit" Pointer
MOV R2,#5 ;"Nibble" Counter
MOV R0,#U_b ;"Nibble" Pointer
MOV U_b+5,#0FH ; 0x0F as '-' Character
; (will be converted for
; 7-seg. LCD)
MOV A,U_b+1 ; LSB2 LN -> 0
MOV U_b,A
ANL U_b,#0FH
ANL A, #0F0H ; should be ZERO
JNZ ERROR
MOV A,U_b+3 ; LSB0 LN -> 4
MOV U_b+4,A
ANL U_b+4,#0FH
SWAP A
MOV U_b+3,A ; LSB0 HN -> 3
ANL U_b+3,#0FH
MOV A,U_b+2 ; LSB1 LN -> 2
ANL U_b+2,#0FH
SWAP A
MOV U_b+1,A ; LSB1 HN -> 1
ANL U_b+1,#0FH
CLR A
SJMP LOOP_DIV ; everything is in place now
POSITIVE:
MOV A,U_b+1
ANL A, #0F0H ; should be ZERO
JNZ ERROR
MOV A,U_b+3 ; LSB0 LN -> 5
MOV U_b+5,A
ANL U_b+5,#0FH
SWAP A
MOV U_b+4,A ; LSB0 HN -> 4
ANL U_b+4,#0FH
MOV A,U_b+2 ; LSB1 LN -> 3
MOV U_b+3,A
ANL U_b+3,#0FH
SWAP A
MOV U_b+2,A ; LSB1 HN -> 2
ANL U_b+2,#0FH
ANL U_b+1,#0FH ; LSB2 LN -> 1
MOV R3,#6 ;"Digit" Counter
MOV R1,#U_b ;"Digit" Pointer
MOV R2,#5 ;"Nibble" Counter
MOV R0,#U_b+1 ;"Nibble" Pointer
CLR A
SJMP LOOP_DIV ; everything is in place now
LOOP_DIGIT:
MOV AR0,AR1
MOV AR2,AR3
CLR A
LOOP_DIV:
XCHD A,@R0
MOV B,#10 ; DIVISOR
DIV AB
XCHD A,@R0
MOV A,B
SWAP A ; Remainder in AKKU HIGH NIBBLE
INC R0
DJNZ R2,LOOP_DIV
MOV A,@R1 ; should be ZERO
JNZ ERROR
MOV @R1,B
INC R1
DJNZ R3,LOOP_DIGIT
END1:
RET
ERROR:
MOV A,#0FH ; 0x0F as '-' Character
MOV U_b,A
MOV U_b+1,A
MOV U_b+2,A
MOV U_b+3,A
MOV U_b+4,A
MOV U_b+5,A
END2:
RET
END
union
{
unsigned char buf[6];
long in;
} idata U_b;
void bin2bcd(void);
From fmayr@electronic.tu-graz.ac.at Thu Feb 6 10:24:30 1997
Date: Wed, 05 Feb 1997 15:36:00 +0100
From: Friedrich Mayr <fmayr@electronic.tu-graz.ac.at>
To: 8051code@keil.com
Subject: Fast LONG to BCD conversion
This function was written within the Keil C51 environment
by Dr. Roehrer (Inst. f. Elektronik, TU-Graz) and me
to be called from a C - Program as: "void bin2bcd(void)"
The following global variable (must be located in the
internal RAM of the processor, "data" or "idata" ) is
used both to pass the argument (a "long" value) to the
function, as well as to receive the result (6 digits):
union
{
unsigned char buf[6];
long in;
} idata U_b;
The purpose of the code is to convert a signed long value
to BCD - code with leading sign if needed. Values exceeding
the range of 6(-:5) Digits should all be displayed by '-'.
The usage of memory was critical because no external RAM is
present in the system, so only the Accu, B, R1, R2, R3, R4
are used aside of the digit- (and argument-) buffer "U_b".
The trick applied in the function is to use a
"small" (nibble by nibble) division and the extensive
use of the '51 - opcodes XCHD and SWAP.
This results in very fast execution.
The function can easily be modified for example
to time-calculations or extended to the full "long"
range .
#4 hlucheucho
Převod Binary to BCD se dělá taky pomocí Karnaughovy mapy pokud hledáš jak HW tak SW řešení. Ale to se učí někde ve 2.-3. ročníku na SŠ.... jinak 51 neobsahuje 2 bitový registr takže 10bitu se tak jako tak musí uložit do dvou osmibitových registru
tady je třeba hezkej kod a funguje:
http://www.8051projects.net/download-d27-binary-to-bcd.html
tady tady je něco .... něco ... něco
http://www.onarm.com/forum/19129/
a taky tady ...
https://microcontrollergarden.blogspot.cz/2013/08/8051-program-for-binary-to-bcd.html
#1 hlucheucho
To co hledáš tomu se řiká BCD
https://cs.wikipedia.org/wiki/BCD
a kod je tady
http://www.8052.com/codelib/
stačí když těch tvejch 10 bitu rozšíříš na 16 a horních 6 necháš nula.
stačí dát do googlu heslo: 8051 BCD conversion
a vyleze ti hafo odkazu
tady se to řeší
http://www.electro-tech-online.com/threads/binary-to-bcd-8051.130739/
https://okashtein.wordpress.com/2013/04/15/binary16-bit-to-bcd/
http://what-when-how.com/8051-microcontroller/data-conversion-programs-in-8051-c/
je na to aj speciální čip
https://elektronicstore.com/74185-binary-tp-bcd-converter-dip16-74-ls-74ls185.html
http://www.utm.edu/staff/leeb/DM74185.pdf
jenom tak ze zvědavosti kde že se učí 51' ka ??? SŠ elektro ?
#1 Pig
http://nora.fpf.slu.cz/~bakala/U%E8ebnice%20jazyka%20C%5B1%5D.pdf
strana 84 nebo 84, můžeš si všechno schovat do souboru a pak to zase načíst. pole asi nejspíš budeš ukládat po jednom prvku pomocí cyklu for můžeš použít jak textový tak i binární přístup. u textového dáš jedno číslo na řádku (na konci každé řádky se automaticky vloží CR+LF) a u binárního přístupu - viz str 84 doporučuju převézt číslo na řetězec a zarovnat vždy na konstantní délku řetězce např 30 znaků pomocé mezer vkládaných před číslo a přidat znaky CR+LF (0x0D+0x0A) nakonec a zpětně po načtení řetězce s konstantní délkou převézt na číslo a uložit do pole. Takže jak vidíš možností je mnoho....
http://www.zezula.net/cz/prog/string_na_int.html
#2 gna
co když ta adresa je decimálně ?
JMP DWORD PTR DS:[EAX*4+447340]
pak to bude podle tohohle na stra 16:
http://www.fi.muni.cz/usr/brandejs/Brandejs_Mikroprocesory_Intel_8086_80486_2010.pdf
trochu jinak. Záleží na obsahu DS. Bez znalosti obsahu DS se to spočítat nedá.
#1 vanasi
http://www.fi.muni.cz/usr/brandejs/Brandejs_Mikroprocesory_Intel_8086_80486_2010.pdf
strana 16 dole a další strany a pak tohle
http://www.fi.muni.cz/usr/brandejs/Brandejs_Mikroprocesory_Intel_Pentium_2010.pdf
na straně 28 a 29 a pak tady máš další manuál:
https://uloz.to/!CZjIgj0ZIsAg/intel-proc-jmp-zip
jedná se o instrukci skok na stavový segment úlohy
dále pak tady
http://masm32.com/board/index.php?topic=2724.0
co ještě chybí ?
Možnost editace odeslaného dotazu/příspěvku
a ještě jeden hezký způsob
<!DOCTYPE html>
<html>
<body>
<style>
.nav {
height: auto;
float: left;
text-align: center;
list-style: none;
position: relative; top:0px
padding: 0;
margin: 0;
background-color: lightblue;
}
</style>
<table style="width:100%; position:relative;">
<tr>
<th>Col1</th>
<th>Col2</th>
</tr>
<tr>
<td style="vertical-align: top;">
<div class="nav";>
HELLO
</div>
</br>
<div class="nav";>
HELLO
</div>
</td>
<td>
<div style="background-color: lightblue; height:50px; text-align: center;">
HELLO
</div>
<div style="background-color: lightblue;">
HELLO
</div>
<div style="background-color: lightblue;">
HELLO
</div>
<div style="background-color: lightblue;">
HELLO
</div>
</td>
</tr>
</table>
</body>
</html>
#1 visk
no problém je v tom, že téměř veškerá dokumentace je v AJ......
pro záznam zvuku se normálně používá DirectX a nějaká podpora WinAPI x32/x64 funkcí
a programuje se to v C nebo C/C++ např. jako DLL knihovna.
pro C# v řízeném kodu můžeš použít wrapper řízených knihoven CLR/CLI a to
konkrétně SlimDX nebo SharpDX nebo XNA (i novou verzi) a dále UNITY.
záleží na tom jak moc si zběhlý s DirectX. Dále to lze naprogramovat v UWP v C++/CX
nebo UWP C# nebo UWP VBas atd. vše UWA je JEN pod Windows 10.
Takže jak vidíš možností máš opravdu MNOHO.
Když zadáš do googlu heslo "capture sound from microphone DirectX" vyjedou ti stohy návodů třeba
http://stackoverflow.com/questions/17407726/capture-sound-from-microphone-using-directx-directsound
nebo můžeš zadat "UWP capture sound from microphone " a vyjedou ti návodu pro Windows 10 v C# nebo C++/CX
problém ale je že všechno je v AJ je to universální jazyk obzvláště v oblasti počítačů
s češtinou asi určitě neuspěješ... nevim jak moc seš dobrej programátor ale možná
by se vyplatilo Unity protože ho Microsoft podporuje nebo případně SharpDX nebo SlimDX
protože programovat to v NativeDirectX(9,11,12) + C/C++ je poměrně dost náročná a dlouhodobá záležitost a docela
se zapotí i zkušenej programátor.
stěžoval sis že to máš těžký co ?
koukni sem
http://programujte.com/forum/vlakno/31789-linearni-spojovy-seznam-problem/
#3 Tomáš123
jo takže takhle je to správně, děkuji
<!DOCTYPE html>
<html>
<head>
<style type="text/css">
#wrap { text-align:center; z-index:0; position: relative; }
.navbar { text-align: center; position: absolute; }
.navbar li { float: left; text-align:center; list-style:none; }
.navbar a { display: block; text-decoration:none; }
.navbar li ul { display: none; height: auto; margin:0; padding:0; }
.navbar li:hover ul { display: block; }
</style>
</head>
<body>
<div id="wrap">
<ul class="navbar">
<li><a href="#">HOME</a></li>
<li><a href="#">MAP</a>
<ul>
<li><a href="#">FIRST</a></li>
<li><a href="#">SECOND</a></li>
</ul>
</li>
</ul>
</div>
</body>
</html>
koukám ty do toho souboru můžeš aj ukládat celou strukturu
KONTAKT* ... samozřejmě po jednom záznamu. takže všechny záznamy cyklem for nebo do/while
ale pak pudou záznamy za sebou a ty už nebudeš moct editovat takovej soubor ručně např. v notepadu
přiznám se že když čtu tu poslední verzi zdrojáku tak mi to vůbec nedává smysl ale jsi statečný
když ten zdroják nebude číst tak zápočet dostaneš v pohodě .....
tady broučku
https://www.uloz.to/!152v35drQ/ucebnice-jazyka-c-rar
strana 84
použil bych asi binární přístup k souboru než textový ale to je na tobě ....
nezapomeň že musíš mít pevnou šířku dat, všechno můžeš ukládat jako "string" a na konci můžeš udělat CR+LF
takže záznam bude jméno(100znaků)přijmeni(100znaků)vek(3znaky jak ostring)atd... a nakonec CRLF
takhle můžeš přístupovat k souboru jak textově tak i binárně a po načtení např. věku jako string provedeš konverzi žetězce na int.
#1 Jerry
nějak se to napoprvé vložilo blbě ten text html
<!DOCTYPE html>
<html>
<head>
<style type="text/css">
#wrap { align: center; z-index:0; position: relative; }
.navbar { align: center; position: absolute; }
.navbar li { float: left; text-align:center; list-style:none; }
.navbar a { display: block; text-decoration:none; }
.navbar li ul { display: none; height: auto; margin:0; padding:0; }
.navbar li:hover ul { display: block; }
</style>
</head>
<body>
<div id="wrap">
<ul class="navbar">
<li><a href="#">HOME</a></li>
<li><a href="#">MAP</a></li>
<ul>
<li><a href="#">FIRST</a></li>
<li><a href="#">SECOND</a></li>
</ul>
</ul>
</div>
</body>
</html>
Co je špatně na tomhle ?? FIRST a SECOND se má zobrazit jenom když se klikne na MAP ale ono je to vidět pořád ... sakryš ....
<!DOCTYPE html>
<html>
<head>
<style type="text/css">
#wrap { align: center; z-index:0; position: relative; }
.navbar { align: center; position: absolute; }
.navbar li { float: left; text-align:center; list-style:none; }
.navbar a { display: block; text-decoration:none; }
.navbar li ul { display: none; height: auto; margin:0; padding:0; }
.navbar li:hover ul { display: block; }
</style>
</head>
<body>
<div id="wrap">
<ul class="navbar">
<li><a rel="nofollow" href="#">HOME</a></li>
<li><a rel="nofollow" href="#">MAP</a></li>
<ul>
<li><a rel="nofollow" href="#">FIRST</a></li>
<li><a rel="nofollow" href="#">SECOND</a></li>
</ul>
</ul>
</div>
</body>
</html>
#20 Staon
Staone .... bez urážky :))))))))))) nedivim se že česká ekonomika je v prdeli a máme nejnižší platy v EU :)
..........ineární spojový seznam neboli v angličtině LinkedList (přeloženo do češtiny SPOJOVY SEZNAM) nebo také jinak řečeno sekvenční binární strom nebo také sekvenční non-AVL tree má 2 formy a to jednostranně zřetězený (vžitý název v .NET List a to s nebo bez [Int32] indexeru) a nebo oboustraně zřetězený (vžitý název v .NET je LinkedList) viz zde
http://www.stoimen.com/blog/2012/06/22/computer-algorithms-binary-search-tree-data-structure/.
v české literatuře to asi nenajdeš
pěkně si to užij :)
#7 Radek K.
no :) tak s takhle komplikovanou úlohou si asi budeš muset poradit sám :)
a co že to studuješ ? a kde ? ty asi budeš studovat v prvním ročníku nějaký nukleární umělointeligentní mimozemské inženýrství na Harvardu co ? :)))))) tak přeju hodně štěstí :)))) v tom studiu .... jo a že pozdravuju vaší "pančelku" :))))
jo a .......... lineární spojový seznam neboli v angličtině LinkedList (přeloženo do češtiny SPOJOVY SEZNAM) nebo také jinak řečeno sekvenční binární strom nebo také sekvenční non-AVL tree má 2 formy a to jednostranně zřetězený (vžitý název v .NET List a to s nebo bez [Int32] indexeru) a nebo oboustraně zřetězený (vžitý název v .NET je LinkedList) viz zde
http://www.stoimen.com/blog/2012/06/22/computer-algorithms-binary-search-tree-data-structure/.
v české literatuře to asi nenajdeš
pěkně si to užij :)
#5 Radek K.
dejme tomu, že by sis mohl upravit strukturu _uzel tak, že kromě kromě jména, příjmení atd. by si onen link pojmenovaný jako "další" zrušil a místo něj vložil dva a to "_uzel *fwLink" a "_uzel *bwLink". Tím by sis vytvořil obousměrně slinkovaný lineární seznam neboli také non-AVL-tree neboli také sekvenční binární strom. Operace přidání, mazání atd. se zde prování VYRAZNE jednodušeji.
v tom programu co si napsal je tolik chyb že to nemá smysl nějak diskutovat.... to bysme tu byli rok :)
třeba řádek
adresar = init_adresar(); nemuže bejt uvnitř CASE 1 ale má bejt ještě před "do" jinak to nemá smysl...
dále oro strukturu _seznam nemá smysl přidělovat paměť dynamicky protože je tam JEN jednou takže to může být statická struktura a pak odkaz na jej9 prvky je pomocí tečkové notace nikoliv pomocí ->
atd. atd. ...
Codelight neznám a mám jenom MS VS cože je samé :)
navíc MS VS Comunity je zadara
https://www.visualstudio.com/post-download-vs/?sku=community&clcid=0x409&telem=ga
no to chce předělat celej kod co si napsal ... tak to je
Co myslíš tím "dostali jsme vzorové kódy ???.... " to jako že pan učitel vám dal funkce init_adresar, serad_adresar, atd a taky struktury typedef struct kontakt atd ... ??? Přiznám se, že ten zdroják co si tu dal je totální zmatlanina. Funkce serad_adresar je napsana špatně a nebude nikdy fungovat. Vubec struktura Adresar jak se použitá je kardinalni volovina. Nechce se mi to číst. Podle mě vás tohle nemoch nikdo učit. To je na trestní oznámení. :))) totální vostuda. Nevim v čem to píšeš. Předpokládejme že máš MS-VisualStudio-2015up3. Koukni sem: https://uloz.to/!wybTcOhmXzwM/consoleapplication1-zip máš tam naprogramovaný všechno co potřebuješ.
Strukturu t_treeItem můžeš rozšířit o další prvky např char* jmeno, char* prijmeni, char* telefon. Dále pak rozšíříš funkci Add( int t_value ) na další vkládané promněnné tedy t_jmeno, t_prijmeni, t_telefon a přidáš je stejně jako je to podle vzoru jak se přidává t_value do value. Zjistíš délku vkládaného řetězce, pak nezapomeneš alokovat paměť pomocí malloc a přidáš délku řetězce + 1 protože řetězec musí končit znakem ASCII NULA neboli \0. Z proměnné t_jmeno překopirujes do item->jmeno pomocí strcpy. atd. atd. ...
#8 visk
podle tohohle je to NUget https://www.nuget.org/…ages/NAudio/
takže v menu tools to nainstaluješ jako Nuget balíček ne ? jak jinak ?
návodů na internetu je hromada třeba tady
http://superuser.com/questions/73675/how-do-i-install-a-vsix-file-in-visual-studio
tenhle je hezkej
https://blogs.msdn.microsoft.com/saraford/2010/03/11/how-to-install-visual-studio-extensions/
öno stačí do ggoglu zadat heslo "how to install vsix" a vyleze ti hromada návodů
#18 Staon
stanislav dvořák, dekompozice a rekurzivní algoritmy, grada 1992, isbn 80-85424-76-2, strana 393-393., je to forma nevyváženého tedy non-AVL binárního stromu, taky se tomu dá říkat lineární zřetězený seznam viz Jan Rychlík, programovací techniky, koop, 1993, isbn 80-85828-05-7, strana 28, každý uzel - node - má 2 linky a to fwLink a bwLink, ale sou vánoce opravdu se nechci handrkovat vo kravinu mě osobně je to úplně jedno jak se tomu bude řikat, já sem sem na forum přišel protože sem potrřeboval pomoct s SQL a tak sem si řek že na oplátku zase pomůžu já někomu abych nevypadal jak vyžírka když mi někdo na moji otázku odpověděl, jinak ten celej program neni až tak dlouhej, vychází cca na 600 řádků t.j 10 stran A4 když se to vytiskne, sem zvědavej co ten nebožák student splodí
Vánocééééééééééé Vánocééééééééééé Vánocééééééééééé Vánocééééééééééé
oléééééééééééé Vánocééééééééééé
dostanu dáréék bude kaprrrrrr wou wou
každopádně to zadání psal totální mamlas
no problém bych viděl v tom, že on to po tobě asi u ústního zkoušení bude chtít ..... což je blbý....
takže to asi budeš muset nacvakat sám ... ale jak řikám všechno to důležitý už tam máš stačí to jenom rozhodit do jednotlivých funkcí např. InitBT (detekuje zda už strom existuje zalozi novy firstitem atd) deleteBT (smaze strom) Append a Add( pridaji polozku na konec nebo na zacatek pokud strom je prazdny),Insert ( vlozi int hodnotu za nejakou existujici hodnotu) IndexOf (vrati pointer na existujici prvek nebo NULL pokud prvek neexistuje - to je ten enumerator a prohledava se cely strom od zacatku), Delete(smaze existujici prvek dany hodnotu int pokud existuje), DeleteFirst (smaze prvni pokud to jde), DeleteLast(smaze posledni pokud to jde) , FindALL je stejný jako IndexOf ale zrusis tu podminku If, Sort (setridi seznam A-Z nebo Z-A styl)
kdybys na to hodil bobek a chtěl to risknout tak uěláme výměnu já tobě semestrálku a ty mě tohle:
https://www.alza.cz/dvd-r-medium-verbatim-d54961.htm?catid=18848915
jinak si mužeš stěžovat (možná to budeš muset dát písemně doporučeným dopisem) na napřiměřenost ulohy pokud si např. v prvním semestru prvního rocniku protože tohle je na prvaky moc. Pokud si treba ve 3 a vyšším semestru a už si absolvoval 2 semestry výuky programování pak už asi stížnost bude braná jako neoprávněná.
Jinak k tomu bodu 4 tvé ulohy .... no .. GarbageCollector s tim nema nic společnýho protože v NativeC/C++ neni a kdyby byl tak GC je tak agresivni, že k odstranení "odpadu" dochází téměř ihned a navic je možné použít příkaz System::GC::Collect (viz google) a vyčištění si vynutit ale ten je jen v jazyce C++/CLI a C# (resp. ve všech co podporujou CLI/CLR) pro .NET což se tě netýká. Navíc je to spojené s memory managementem windows a do toho se vůbec ani nedá nějak hlouběji zasahovat - microsoft to nepovolil.
jenom k tý poznámce na konci_
Poznámky:
Předpokládejte, že prvky v seznamu (tabulce) jsou řazeny vzestupně. Je to přirozené[1]?
[1] Tabulky bývají setříděné.
tabulku lze setřídit ... ale někdo ten kod musi napsat... přehazuje se jak pointer tak i hodnota Value, takze je to slozitejsi
#1 Honza
já sem se teď koukal eště jednou na to zadání a máš tam aj mazat položky... takže bych nechal oboustranně zřetězenej protože se to pak dělá výrazně líp a o těch pár řádků navíc se to už neposere... jinak budeš muset dohledávat předchozí prvek
budeš muset napsat eště funkci Hledej - tu sem tam nenapsal - na hledání prvku v tom seznamu co vrátí pointer na t_treeItem kde ta hodnota je to je jenom jednoduchej enumerátor n2co ve smyslu:
while ( enum->MoveNext() ) {
if ( enum->GetPtr()->Value == hledanahodnota ) {
..........
return enum->GetPtr();
}
}
#7 Honza
to šlo ale objem práce je přibližně stejnej protože potebuješ naprogramovat
stejnej počet obslužných funkcí takže je to fuk.
ale všechno co potřebuješ už tam máš napsaný .... vytvoření, vložení, mazání
pokud to chceš udělat jednosměrný stačí vynechat t_treeItem *bwLink = NULL; a k němu příslušné řádky
obslužného kodu
to co chceš je oboustraně zřetězený sekvenční binární strom. je to dost práce no
typedef struct t_treeItem
{
int value;
bool endElement;
t_treeItem *fwLink = NULL;
t_treeItem *bwLink = NULL;
t_treeItem *self = NULL;
} treeItem;
treeItem *item = NULL;
// dulezite globalni RIDICI promenne
treeItem *firstItem = NULL;
treeItem *lastItem = NULL;
{
// funkce pridani prvku do sekvencniho binarniho stromu - bud na prvni misto pokud
// je strom prazdny nebo na posledni misto pokud neni prazdny
// pridani prveho prvku do sekvencniho binarniho stromu
if (firstItem == NULL ) {
item = new treeItem();
item->value = 0; // zadana hodnota uzivatelem / nejaka
item->fwLink = NULL;
item->bwLink = NULL;
item->self = item;
firstItem = item;
lastItem = item;
} else // pridani noveho prvku za posledni prvek sekvencniho binarniho stromu.
{
item = new treeItem();
item->value = 0; // zadana hodnota nejaka
// zalinkujeme novy prvek sekvencniho binarniho stromu
item->fwLink = NULL;
item->bwLink = lastItem->self; // spojeni na predchoziho
item->self = item;
// vytvorime spojeni v retezci posledniho prvku na prave vytvoreny item
lastItem->fwLink = item;
// firstItem = item; // nemeni se zde leda ze bychom mazali prvni prvek
lastItem = item; // meni se pokazde kdyz pridavame za posledni prvek seznamu
}
// podobne napr odebrani prvku
/*
// pokud mazes prvni prvek t.j. firstItem == item pak
item->fwLink->bwlink = NULL;
firstItem = item->fwLink->self;
delete( item );
// pokud mazes prvek item ktery je jiny nez prvni a posledni t.j. item != lastItem AND item != firstItem;
item->fwLink->bwlink = item->bwLink; nebo taky item->bwLink->self; coz je to same
item->bwLink->fwlink = item->fwLink; nebo taky item->fwLink->self; coz je to same
delete( item );
// pokud mazes posledni prvek t.j. lastItem == item pak
item->bwLink->fwlink = NULL;
lastItem = item->bwLink->self;
delete( item );
//stejnym zpusobem se pak udela vlozeni prvku kdekoliv ve uprostred strome t.j. musim vedet
// ZA jaky item vkladam nebo PRED jaky vkladam
{
item = new treeItem();
item->value = 0; // zadana hodnota nejaka
// zalinkujeme novy prvek sekvencniho binarniho stromu NEKAM ... pozor poradi prikazu je dulezite
item->fwLink = ten_za_ktery_vkladam->fwLink;
item->bwLink = ten_za_ktery_vkladam->self;
ten_za_ktery_vkladam->fwLink->bwLink = item; nebo taky ten_pred_ktery_vkladam->bwLink = item; coz je to same
ten_za_ktery_vkladam->fwLink = item;
item->self = item;
// vytvorime spojeni v retezci posledniho prvku na prave vytvoreny item
lastItem->fwLink = item;
// firstItem nemeni se
// lastItem nemeni se
}
*/
}//
#7 Jerry
a jeste ta sekvence porovnani :) prvku rad
for (i = 0; i < linesArrayCount; ++i) {
for (k = 0; k < linesArrayCount; ++k) {
if (i != k) { // porovnej radu kdyz to neni ta sama
if (linesArray[i].sequenceCount == linesArray[k].sequenceCount) { // pocet cisel v obou radach i a k je stejny lze porovnat
identityCount = 0;
for (l = 0; l < linesArray[i].sequenceCount; ++l) {
if (linesArray[i].sequence[l] == linesArray[k].sequence[l]) {
identityCount = identityCount + 1;
}// if
}// for l
if (identityCount == 0) {
rady i a k jsou rozdilne
}// if
}//if
}// if (i != k)
}// for k
}// for
ty nepíšeš jednu zásadní věc a to je jestli tochceš v dynamických proměnných nebo statických
pokud to druhé je to jednodušší a to výrazně. a pak taky kdo má dělat to roztřídění čísel z řádků do proměnných nebo jestli si to můžeš udělat ručně.
já bych to v Céčku (statické prom.) udělal tak, že když máš více řádků textu a na každém řádku jsou jen číslice
oddělené mezerou - aspoň tak to chápu, a první číslo na každém řádku má být master a další čísla jsou jen posloupnost čísle pak bych si vytvořil strukturu.
typedef struct t_lineItem
{
int master;
int sequence[20]={0}; // max. 20 císel na řádku + císlo master
int sequenceCount; // = 20
bool validSeq[20]={0}; // rika zda existuje cislo na radku
} lineItem;
a pak pole struktur
t_lineItem linesArray[100];
a to bych vyplnil hodnotami čísel na řádcích:
linesArray[0].master = 1;
linesArray[0].sequenceCount = 20;
linesArray[0].sequence[0] = 1; atd... atd. atd...
tohle ale funguje tak, že počet čísel na řádku je pevný a stejně tak je dán i max. počet řádků.
pokud počet čísel na řádku je proměnný pak budeš muset používat proměnnou validSeq ktera rika jestli
cislo na danem radku existuje nebo ne a pochopitlne musis znat predem max. pocet cisel oddelenych mezerou na radku
přiznám se že sem vůbec nepochopil to zadání ....
nemáš náhodu někde originál ????
#1 Marcel
a co tohle ? je tohle lepší ?
// ConsoleApplication1.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
typedef struct t_point
{
double x;
double y;
} Point;
void test(t_point(*t_p_array_point), int t_count) {
for (int i = 0; i < t_count; i++) {
printf("%d %g %g \n", i, (*(t_p_array_point+i)).x, (*(t_p_array_point+i)).y);
}// for
}// void test(t_point* t_p_point[], int t_count)
int main()
{
const int max_records = 100;
t_point array_point[ max_records ] = {NULL};
t_point(*p_array_point) = NULL;
//*****************************************
//
for (int i = 0; i < max_records; i++) {
array_point[i].x = i;
array_point[i].y = i;
}// for
//
p_array_point = &array_point[0];
test(p_array_point, max_records);
//
for (int i = 0; i < max_records; i++) {
//delete( array_point[i] );
}// for
scanf("...");
return 0;
}// int main()
#1 Marcel
nemělo by to bejt třeba takhle ?
// ConsoleApplication1.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
typedef struct t_point
{
double x;
double y;
} Point;
void test(t_point* t_p_point[], int t_count) {
for (int i = 0; i < t_count; i++) {
printf("%d %g %g \n", i, t_p_point[i]->x, t_p_point[i]->y);
}// for
}// void test(t_point* t_p_point[], int t_count)
int main()
{
const int max_records = 100;
t_point* array_point[ max_records ] = {NULL};
//*****************************************
//
for (int i = 0; i < max_records; i++) {
array_point[i] = new t_point();
array_point[i]->x = i;
array_point[i]->y = i;
}// for
//
test(array_point, max_records);
//
for (int i = 0; i < max_records; i++) {
delete( array_point[i] );
}// for
scanf("...");
return 0;
}// int main()
Jaký je rozdíl mezi:
SELECT Customers.CustomerName, Orders.OrderID
FROM Customers
INNER JOIN Orders
ON Customers.CustomerID=Orders.CustomerID
ORDER BY Customers.CustomerName;
a
SELECT Customers.CustomerName, Orders.OrderID
FROM Customers, Orders
WHERE Customers.CustomerID=Orders.CustomerID
ORDER BY Customers.CustomerName;
já bych řek že výsledek je ten samej ne ?