#3 AttilaA
Počkej :) pokud je v cyklu ukládáš do listu, tak se do něj uloží, na to bych dal ruku do ohně. Druhá věc je to, co říká KIIV ... zkus si po tom "přidávacím" procesu vypsat velikost toho listu. Něco jako IPlatne.size.
Příspěvky odeslané z IP adresy 88.102.250.–
Ahoj,
na bitové kopie ( to je to co potřebuješ ) jsem používal CloneZilla. Je to bootovatelné CD, nabootuješ do jednoduchého režimu a uděláš image (kopii). Koukni sem.
+ Pokud máte takového průmyslové prostředí ( no obecně to ani nemusí být průmyslové ) tak bych doporučil nějaký RAID (asi RAID 1-zrcadlení dat ), jeho podpora je dnes prakticky standartní u všech desek.(wiki)
Ahoj, normálně to maká tak jak by mělo, ale ty vycházíš z jednoho špatnýho předpokladu. Scanf/fscanf neignoruje konce řádků, tzn. ty když jsi napsal toto:
a=fscanf(fr, "$%lf", &cislo);
printf("%d\n", a);
printf("%lf\n", cislo );
a=fscanf(fr, "$%lf", &cislo);
tak je to (co se týče toho fscanf) úplně stejný, jako bys napsal toto:
a=fscanf(fr, "$%lf $%lf", &cislo);
no a z toho už jistě vidíš, že ta tvoje struktura čtení není stejná, jako je struktura toho souboru :) No a ta tvoje poznámka o newLine je teda vodítko jak to vyřešit, musíš jasně říct, že leží jenom jedno číslo na jednom řádku :)
#1 colin
To co napsal KIIV je naprosto správně, zkusím napsat příklad:
PORT B se konfiguruje pomocí bajtu kterej má alias PORTBDIR a každý bit v tom bajtu má svůj význam. Třeba první bit nastavuje, jakej bude mít PIN_B0 na tom mikru směr (0=vstup, 1=výstup), druhý pin PIN_B1 to samý atd. takže když budeš chtít mít na portu B dvě tlačítka a 6 led diod, kterýma budeš svítit, tak uděláš:
PORTBDIR = 0 // na zacatek nuly do celeho bytu
PORTBDIR = !PIN_B0 + !PIN_B1 + PIN_B2 + PIN_B3 .. //B0 + B1 vstupy, ostatní vystupy
// ty nuly se samozřejmě nastavovat nemusi, kdyz je to v predchozim kroru nulovany :)
no a potom se zaměř na bitové operace, zejména &= a |= .. tím se dá nastavit třeba jeden konkrétní bit.
Pozn.: Názvy registrů se mohou v jednotlivých typech MCU lišit :)
#1 Cooda
Délka pole není v C/C++ limitována, max pamětí.
Maximální délka řádku je taky dost abstraktní pojem, řádek je po sobě jdoucí posloupnost znaků končící (podle typu OS) znaky <CR><LF>. Tzn. jakmile ty zavoláš getline tak se přečte tolik znaků, kolik je možné. A buď se to do toho pole vejde, nebo se to tam nevejde, to je tvoje věc jak velký si ho vytvořil.
píšou že to je normálně v Debian Main repository .. koukni v Synaptic, jaký máš povolený zdroje. Víš jak?
Nebo to zkus stáhnou (ten balíček) a nainstalovat:
balíček: http://pkgs.org/debian-sid/debian-main-amd64/libsdl2-dev_2.0.0+dfsg1-1_amd64.deb.html
návod na instalaci : http://www.cyberciti.biz/faq/ubuntu-linux-how-do-i-install-deb-packages/
ale nevím jestli ti nevynadá za nějaký závislosti.
#3 Alex
http://linuxzoo.net/
tohle ti dá přístup na testovací konzoli, myslím že to je přes telnet, jsou tam pokyny. Otázka je, co potřebuješ vyzkoušet, no :)
Maj sa
Pokud je to teda Debian-based (Ubuntu, Raspbian, ArchLinux, .. ) tak můžeš normálně šáhnout do repozitářů a stáhnout si už skompilovanou knihovnu.
# sudo apt-get update // aktualizuje seznamy zdrojů (repozitáře)
# sudo apt-get install libsdl2-dev // nainstaluje knihovnu
No a to by mělo být v podstatě všechno, potom jenom do aplikace dáš import. Tady koukni třeba na example:
https://gist.github.com/exavolt/2360410
Maj sa :)
Procesor ti principiálně poskytuje základní sadu instrukcí, skládající se typicky z
- mat. instrukcí ( součet, součin, ... )
- práce s pamětí (posuny, adresace, ..)
- instrukce skoků (podmíněných, nepodmíněných, .. )
- atd..
A potom ti dá základní sadu registrů (paměťových bloků) do kterých lze ukládat data a pomocí těch instrukcí s nimi manipulovat, počítat atd. Všechno ostatní už je "jenom" využívání tohodle základního principu
#1 knizka123
To je těžká otázka, jak hodně tě to zajímá. Pokud to "chceš vědět nějak povrchově ale přesto o tom něco vědět" sou knížky od ComputerPress (takový to "mistrovství v .. ").
Já když se potřebuju cokoli učit (v téhle oblasti), dycky nakonec skončím u nějaké knížky od prof. Tanenbauma.
Hlavně tys napsal docela obecnej pojem .. ono stačí "jenom" porozumění OS jako takovému a máš čtení do konce prázdnin -> a tady na výše zmíněného narazíš určitě
#3 wicked
Now.java .. Now.class bude až přeloženej byte kód (neřeš :) )
Pro tebe je důležité následující: http://developer.android.com/reference/android/view/View.OnClickListener.html
Ve zkratce: Ty jsi ve svojí třídě napsal metodu onCreate() a updateTime(). To není nic špatnýho, ty ale MUSÍŠ (dle toho linku, co sem ti psal) implementovat (chápej napsat, udělat metodu, napsat kód metody) metodu onClick(..). No do těla té metody si můžeš napsat cokoli, třeba jenom jednoduchý výpis, v podstatě tam nemusíš napsat vůbec nic, ale ta metoda tam být musí.
public class Now extends Activity implements View.OnClickListener{
Button btn;
@Override
public void onCreate(Bundle icicle){
super.onCreate(icicle);
btn=new Button(this);
btn.setOnClickListener(this);
updateTime();
setContentView(btn);
}
private void updateTime(){
btn.setText(new Date().toString());
}
public void onClick(View v){
//tady může být cokoli
}
}
#19 Mutagen
Ho neřeš a programuj, je pravda že když se učíš programovat tak nějak koncepčně, tak k věcem co psal "pacient" stejně dojdeš, nevím kolik ti je jestli 19 tak v tom nevidím problém a když se budeš chtít programování věnovat tak se to chtě / nechtě budeš muset naučit. Pokud ti je 30 a seš programátor, tak ejhle (tomu ale nevěřím).
Hold někdo s pokorou poradí když někdo potřebu, někdo "snědl Šalamounovo hovno" a musí si na ostatních honit ego, s tím že je stejně za šaška. KAŽDOPÁDNĚ TO NEŘEŠ A PROGRAMUJ DÁL
Každé vlákno má nastaveno svoji prioritu, podle které se řídí plánovač běhu vláken. Znamená to, že jsou-li běhuschopná dvě vlákna, bude vždy předáno řízení vláknu s vyšší prioritou.
se můžu Herouta v pondělí zeptat, jestli chceš :) Vlákno určitě celé ne vždy projede, může se zaseknout na nějakém zdroji a potom ho OS přeplánuje a pustí jiné vlákno. Nicméně jsem zkusil jednu věc :
class Vlakna11 extends Thread {
private String s;
private Semaphore b;
protected Vlakna11(String s,int priorita, Semaphore b) {
super(s);
this.setPriority(priorita);
this.s = s;
this.b = b;
}
public void run()
{
b.acquire();
System.out.println(s);
}
}
class Q_15VlaknaPriorita {
public static void main(String [] args) {
Semaphore b = new Semaphore(1);
Vlakna11 vlakno1 = new Vlakna11("vlakno1",1,b);
Vlakna11 vlakno2 = new Vlakna11("vlakno2",2,b);
Vlakna11 vlakno3 = new Vlakna11("vlakno3",3,b);
Vlakna11 vlakno4 = new Vlakna11("vlakno4",4,b);
Vlakna11 vlakno5 = new Vlakna11("vlakno5",5,b);
Vlakna11 vlakno6 = new Vlakna11("vlakno6",6,b);
//uzavření semaforu dokud nebudou všechna vlákna vytv
b.acquire();
vlakno6.start();vlakno2.start();vlakno3.start();vlakno 4.start();vlakno5.start();vlakno1.start();
b.release();
}
}
všechna vlákna jsem nechal zaseknout se na semaforu a potom, až jsou všechna spuštěna a zablokována jsem semafor uvolnil. Dne mého názoru by poté mělo být odblokováno vlákno s největší prioritou. No bohužel se mi jeví že, vlákna jsou spouštěna poměrně náhodně.
Btw: Úplně se bojím kliknout na "odeslat", až mě Matěj sjede za pojmenování proměnnejch :D
#3 KIIV
Ahoj, nechci se s tebou hádat, protože si tě vážím a vím že víš ( ) ale s tím posledním co jsi napsal nesouhlasím. Slovo časově kritická znamená, že je na časovou odezvu kladen důraz a to nemusí nutně znamenat určitý čas (hard RTOS), stačí co nejmenší čas (můj případ) a proto jsem se z hlediska optimalizace ptal na to co je lepší :)
Ahoj, zajímá mě váš názor ohledně následujícího problému - jazyk C.
Mám aplikaci, která je poměrně kritická na co nejrychlejší odezvu (čti reakci) na událost řekněme stisk klávesy. Reakce bude obsloužena vláknem. A otázka zní:
1) Je lepší vlákno pustit hned na začátku app. a zaseknout ho na nějakém synchro. primitivu (mutex/bariéra), a tehdy až příjde událost tak to odblokuju, vlákno provede to co má, vrátí se na začátek a znovu zasekne?
2) Nebo jako reakce na událost vytvořit vždy nové vlákno, které provede požadovanou funkcionalitu?
Dle mého názoru je asi lepší to první, ale kdyžtak mě opravte kdybych se mýlil, popř to bylo uplně jedno :)
#3 ArcaneBeam13
Ahoj, myslím že tak jak si to psal ty to nejde .. podotýkám že já jsem to nezkoušel, ale na netu sem našel tohle: http://stackoverflow.com/questions/2760310/how-to-resolve-location-of-userprofile-programatically-in-c
Já jsem to před časem taky zkoumal přesně z důvodu co psal Roman. No našel jsem na netu pár rad že to nejde, tak sem se na to vykašlal :D
http://stackoverflow.com/questions/5309260/in-java-can-we-divide-a-class-into-multiple-files.
Ahoj .. co je struktura víš? pokud ano, tak si nadeklaruj strukturu tak, jak je požadovaná. Co je funkce určo taky víš a fuknce stejně tak, jako vrací int, char, double atd, tak umí vrátit i ukazatel na strukturu
Dokonce tady na Programujte.com je ukazka : http://programujte.com/clanek/2005041411-c-7-lekce/
možná zkus kouknout po Pythonu ..
ale myslím že KAŽDÝ programátor by měl umět v C/C++ ... nebo alespoň nějaký obsáhlejší kurz .. jde o to co psal KIIV, je to poměrně nízkoúrovnový jazyk a chtě / nechtě tě naučí jak to v počítači chodí. Tohle ti podle mě dovolí v budoucnu psát kvalitnější a optimálnější aplikace. Proč to píšu a co je můj názor - Spoustu "Javistů od narození" má syndrom "s kladivem na komára"
#6 Noneus
no dyk to tam mam :D akorát že jsem ještě vypsal na jaké je pozici .. důležitý je ten if, který tu rovnost testuje.
nebo udělej if (cis = pole[i]) {System.out.println("prvek se nachází v poli");}
jde o to že to musíš procházet v cyklu. Nebo jak napsal KIIV to převést do ArrayListu (ale to si myslím že není na místě, když se pereš s timhle :)
if (cis == pole[1]){...}
Když chceš jenom prvek na určité pozici (v tomhle případě na pozici 1 (druhý prvek)).
Tzn chceš-li zkontrolovat všechny prvky v poli, musíš v nějakém cyklu projít všechny. Asi takhle:
int pole [] = {16,19,28,31};
Random num = new Random();
int cis = num.nextInt(36);
System.out.println(cis);
for (int i = 0; i<pole.lenght; i++){
if (cis == pole[i]){
System.out.println(cis+" je v poli na "+i+" pozici");
}
}
třeba takhle .. princip je ten přístup do pole a ten jsem popsal .. taky si musíš uvědomit, že první prvek v poli je na pozici 0
Ahoj. Principiálně a velmi zjednodušeně je vlákno samostatně běžící část v rámci aplikace. Tzn že ty bys na ty tvoje pravidelně se měnící věci mohl mít vlastní vlákno a nemusel to řešit v hlavním programu.
Myslím ale, že samotná vlákna ti uplně nepomůžou, vlákna jsou dobrá pro paralelní práci (výpočty). Spíš se koukni, jestli někde nemáš nějaká cyklická čekání atd.
Ahoj, musí to být napsané v C++, C nebo třeba v Javě? Respektive: Jde ti o to aby ta aplikace fungovala a tys jí mohl hned použít? Databáze je lokální na jednom kompu, nebo to má běžet na více PC třeba v jedné firmě a databáze je sdílená??
Ahoj, principiálně jsou metody 3 (blbá a méně blbá a dobrá).
Nejblbější je čekat v nějaký doooost dlouhý smyčce a nic v ní nedělat a vyzkoušet jak dlouhá musí být, aby to trvalo 1s.
Méně blbá je na začátku si zjistit systémový čas, v nekonečném cyklu čekat a přitom kontrolovat systémový čas a po 1s vyskočit z toho cyklu
Dobrá metoda je využít nějakou systémovou(knihovní) funkci, která zajistí uspání na nějakou definovanou dobu. Myslím že sleep(), usleep(), nanosleep() by mohly být funkce které hledáš. A pro jistotu se podívej ještě na tohle , je mohlo by ti to ušetřit nějaké potíže :ú
#7 Gart
Ahoj, no vzhledem k tomu že stejný problém už tam řešili lidi od března, tak nevím. MANIFEST v tou .jar je, ale je takovej nějakej pošahanej. Skoro bych řekl že main se nachází v Cosevytiskne.main .. nicméně ani potom se mi to nepodařilo spustit a vyhodilo mi to hromadu chyb. No neodpustím si rýpnout do FEL / CVUT :P
Já ti můžu doporučit léty ověřenou klasiku od P. Herouta "Programování v jazyce JAVA", tam za funkčnost příkladů dám ruku do ohně :)
Ahoj,
Já sem z toho volaký zmetený :( Sorry, jestli budu mít nějakou blbou otázku, ale fakt sem to z tvého postu nepochopil.
- Co je to PTOS (Protected Mode)?
- To děláš pro nějaký mikročip nad Unixem, nebo?
Multitasking - no budeš muset implementovat nějaký algoritmus(FIFO, Round-Robin, RealTime..) pro přidělování procesu na precosor( plánovač ). A potom udělat správu paměti a přepnutí toho procesu (memory manager / dispatcher)
#2 sleepy
Přesně tak.
Samozřejmě se dá "opatřit" knížky jako "programování dokonalých her v Java" atd. kde v podstatě asi najdeš postupy, jak ty věci udělat.
Nicméně jak správně podotknul Sleepy, když se budeš držet toho co napsal on, tak se naučíš (dříve nebo později, podle toho kolik tomu dáš času) opravdu programovat a posune tě to dál, budeš mít kvalitní základy na kterých se dá stavět. Když tedko hnedko začneš dělat podle nějakého návodu hru, tak dřív nebo později narazíš.
Ahoj,
pokud bys měl prvky uložené v nějaké kolekci (asi nejsnazší bude ArrayList) tak samozřejmě ano, ale budeš muset to Collection.reverse zavolat nad každým tím arrayListem, kterej bude reprezentovat jeden řádek matice :)
takže třeba
ArrayList <ArrayList <Integer> > matice = new ArrayList <ArryList <Integer> >();
Ondra
- pow z knihovny Math
-
můžeš si s tim prohrát a udělat si vlastní funkci
double umocni(double _zaklad, double _exponent){ int i; double vysl = _zaklad; for( i=0; i<_exponent; i++ ){ vysl *= _zaklad; } return vysl; }
třeba, nevim :) Ale všechno si určitě nezkoušel
Ahoj,
Já strtok vůbec nepoužívám, protože jsou s nim vždycky akorát potíže. Hlavně je to "threads unsave" a jakmile jsem takhle parsoval 2 řetězce najednou, pěkně se mi to sralo .. zkus použít strtok_r nebo tak nějak, s tim se mi pracovalo mnohem líp
Ahoj,
nevíte o nějakém řešení, s jehož pomocí bych mohl přistoupit na můj server a spouštět na něm příkazy? Tzn rozběhnu u sebe na serveru "něco" na co se připojím z netu a potom budu moci používat term?
nemůžu použít Shellinabox, GateOne, zkoušel jsem Web-Console ale ta bohužel není interaktivní - tzn můžu nastavovat atd ale nemůžu spustit třeba telnet atd.
Si myslím že mu jde o to,jak to zjistí ze zdrojáku.
#5 Doomista
??wtf??
Začal bych tím, že bych stáhnul na netu sadu sadu klíčových slov pro ten který programovací jazyk a uložil to třeba jako soubory.
Spustíš tvůj program, a třeba podle přípony souboru zjistíš v jakém programovacím jazyku to je napsaný, nebo třeba si tuhle informaci vyžádáš od uživatele, to je v podstatě jedno.
Podle toho jak bude ta volba, otevřeš si ten který soubor s klíčovejma slovama a načteš si ty slova do nějaké struktury. Toje jedno jestli pole, linked-list.
Následně otevřeš ten testovanej soubor, budeš ho číst po řádkách a potom budeš muset každý řádek porovnat s tou tovjí množinou klíčových slov. No samozřejmě když najdeš shodu, vypíšeš "na řádku x je klíčové slovo Y".
To jak má vypadat ten výstup už je v podstatě na tobě jak si vymyslíš :)
- http://www.stringology.org/…ndex_cs.html
- předpoklad je že víš jak funguje huffmanův kod a máš všechno správně (což vypadá OK), ověř podle linku
Potom prostě načteš 1byte ze vstupu, koukneš do tabulky a přidáš do výstupu. Sám vidíš že původní tvůj vstup byl asi 40bytů a ten zakodováný je asi 20bytů
Dekodování?
Načetl bych celý zakodovaný text a četl ho po bitech. Vzal první bit a kouknul, jestli pro něj existuje kód, když ne tak bych vzal 2 bity a takhle musíš ke kódu adekvátní písmeno
Normálně bych kouknul jak vypadá menu PhpMyAdmin a tomu bych navrhnul textovou alternativu s tím že vždycky budeš čekat na volbu od uživatele, co si vybere.
Jestli to chápu správně tak nebudeš řešit SQL příkazy, ale vytvářet / spravovat vlastní databázi? Resp dělat téhle databázi front-end pro správu.
#2 jack
Ahoj,
myslí se to tak, že budeš číst ze souboru po jednom bytu.
Budeš mít tabulku tak velikou, jako je abeceda vstupního souboru(textu).
Tzn na 1bytu může být 2^8 možností = tabulka bude mít max 256 řádků(kdybys věděl že v textu bude čeština, můžeš si spočítat počet písmen a číslic české abecedy). Z počátku inicializovaná na nuly
Např.: přečteš byte, ten bude mít hodnotu (0x30) a v tabulce na indexu 0x30 inkrementuješ hodnotu.
Potom co pročteš celej soubor projedeš tvou tabulku, zjistíš nejčastější výskyt a koduješ písmena
Následně bych soubor projel ještě jednou s tím že bych už vytvořil i nějakej výstupní a postupně každý písmeno vzal, kouknul jakej má kód a zapsal ho do výstupu.
Složitost polynomiální, možná někdo vymyslí i něco rychlejšího :)
+ jak píše KIIV, ten 1byte nemá s max délkou výsledného kodu nic společného
Ahoj,
změříš čas před začátkem a po skončení a potom ty časy od sebe odečteš?
tuto sem našel, nezkoušel sem:
uses
SysUtils,DateUtils;
var
bt,et: TDateTime;
begin
bt := TimeOf(Now);
... // do operation whose time you want to measure
et := TimeOf(Now);
WriteLn(MilliSecondSpan(bt,et):1:16);
end.
Ahoj,
Tohle je na houby .. to je jako když chceš od nás abychom ti vypracovali nějakej ukol. Vyber si nějakej, zkus na tom chvilku pracovat, zkus si nějak odvodit obevný vztah pro parametr n.
podobná věc se řešila tady : http://programujte.com/…2754-cyklus/ , tak třeba najdeš inspiraci.
ta obrácený pyramida + kosočtverec by se podle mě hezky kreslili
jde o to že většina mě známých programovacích jazyků vrací jedinou hodnotu.
A obecně se to dělá tak jak popsal Vitamin : Definuje se struktura(objekt), která obsahuje 2 čísla. A tvoje funkce potom vrací pouze jeden tento objekt, což jsou vlastně dvě čísla.
Ondra popisuje jinou metodu .. a to sice tu, že funkce přímo mění obsah proměnných, vložených jako parametr je void. Proto si taky musí předávat hodnoty odkazem, ne hodnotu. Jinak řečeno "funkce nic nevrací, ale přepisuje parametry" což je trošku něco jiného než to na co ses ptal, ale výsledek je stejný
Ahoj
už z principu nemůžeš přece porovnávat celé číslo (i) a znak ('='), ona to ta Java asi zkousne, ale . .
A taky si rozmysli zastavovací podmínku toho while!
Rada: Jak dlouho má cyklus běžet? Dokud i není '=' .. podle toho to už musíš napsat.
Btw je hloupost předávat si to i jako vstupní parametr, když si jeho obsah stejně přepisuješ.
Btw tohle je podle mě věc na kterou bys mohl přijít sám, kdyby ses trošku zamyslel.,
Ondra
Ahoj,
zřejmě se jedná o implementaci metody "prosté síly".
konkrétně v případě a[i + j] se jedná o to, že i je pozice "1. znaku porovnávaného textu"-značí se"src" a j pozici porovnávaného bodu v řetězci B - značí se "pattern".
jinak řečeno:
- i se posouvá od 0 do (délka_řetězce - 1) // v tvém konkrétním případě je konec řetězce značen tečkou
- a[0] se porovná s prvním znakem b neboli b[0], potom a[1] s b[1] atd.. No když není nalezená shoda, posune se i = 1, b = 0 a musí se posunout na a[1+0 = 1] a zase porovnat s b[0], a[1+1 = 2] vs b[1], a[1+2 = 3] vs b[2] ..
- další krok i = 2, b = 0 - >a [2+0 = 2] vs b[0], a[2+1 = 3] vs b[1], a[2+2 = 4] vs b[1]...
- A obecně z toho vidíš že musíš porovnávat a[i + j] a b[j]
- konec samozřejmě nastává když b[j] == '.' .. neboli byl uspěšně porovnán celý pattern řetězec => byl nalezen podřetězec, případně doběhnul hlavní cyklus a shoda nebyla nalezena.
Blbě se to vysvětluje, líp se to kreslí http://www.youtube.com/watch?…
BTW: Funkcionální programování je trošku něco jínýho, ale to je tedko vedlejší:) Bazinga
ty to máš v podstatě dobře a zasekneš se na takový ptákovině :))
public static void vedlejsiDiagonalaMin(int[][] matice) {
int min = Integer.MAX_VALUE;
int pozMin = 0;
for (int i = 0; i < matice.length; i++) {
int hodnota = matice[i][matice.length-1-i];
if (hodnota < min){
min = hodnota;
pozMin = i;
}
}
System.out.println("Max. prvek na vedlejsi diagonale: ");
System.out.println("[" + pozMin + "]["+matice.lenght()-1-i+"] = " + min);
}
snad by to mělo bejt OK .. v tom if(hodnota < min) v podstatě testuješ, jestli tvoje nalezená hodnota je menší než aktuální, no když je tak je na čase aktualizovat nejmenší hodnotu(min) a v tu chvíli i aktualizuješ hodnotu pozice nejmenšího čísla. (?OK?)
Pokud se nemejlím, měl bys přepsat metodu int compateTo(Object o) u toho vkládaného objektu
tak, aby ti vracela -1,0 nebo 1 podle toho jak mají být ty dva prvky řazeny (0 = jsou stejné).
Potom můžeš využívat hledací a řadící funkce kolekcí. OK?
KIV/PPA1? :D
normálně si do každé metody zaveď
int poz_max, poz_min;
a když budeš aktualizovat ty maxima/minima tak aktualizuješ i poz_max, poz_min
+ to hledání maxima a minima můžeš provédst najednou, nemusíš na to mít 2 metody, ale OK je to cvičnej příklad.
#4 nergal
1) co s tím má co dělat učebnice základní školy?? Euklidův rozklad stejně vede na rozklad na prvočinitele
2) pouze si použil nějakou knihovní funkci, já jí napsal .. + GCD je podle mě implementovaná pouze pro BigInteger
3) OK, stačí projít celé pole, nemusí se porovnávat každý s každým
#1 Dave
Ahoj, vyšťoural jsem z nosu něco takovýho, sice to asi není tak sofistikovaný jako ten Bucovo algoritmus (kterej jsem teda nečetl, protože je moc dlouhej) ale myslím že by to mohlo fungovat. Zdroj vstupních dat si jistě zajistíš sám, já je dával natvrdo :) + samozřejmě ty velikosti pole mam prasácky statický ;)
public static int maxSpolDelitel (int a, int b){
int max = 1;
for(int i=1; i<Math.max(a,b); i++){
if(((a % i)==0)&((b % i)==0)){
max = i;
}
}
return max;
}
public static void main(String []args){
int cisla []= {10, 10, 5, 25, 10};
int max = Integer.MAX_VALUE;
for(int i = 0; i<5; i++){
for(int j = 0; j<5; j++){
if(j!=i){
max = Math.min(max, maxSpolDelitel(cisla[i], cisla[j]));
}
}
}
System.out.println(max);
}
#4 Michal
Já teda nevím proč obviňuješ Dana ze slovíčkaření.
Podle mě jsou zde z v podstatě 2 cesty jak to udělat.
- Udělat si pole a do něj cyklicky generovat čísla tak dlouho, dokud nebude plné, jak to napsal Dano
- Udělat si pole, do něj nahrnout čísla 1-9 a ty zamíchat, jak říkal KIIV
Jednodušejí to podle mě nejde.
Abych vysvětlil ten Danovo kód:
Set<Integer> zoznam = new HashSet<Integer>();
--- tohle je v podstatě pole, do něhož můžeš zadávat pouze unikátní hodnoty. To znamená že když se tam pokusíš zadat číslo, které už tam je, tak se to číslo neuloží.
Druhá možnost je udělat toto:
/*vytvorim pole*/
ArrayList arrayList = new ArrayList();
int delka=10;
/*do pole pridam cisla 1-9*/
for(int i=1; i<delka; i++){
arrayList.add(i);
}
System.out.println("Pole pred promichanim : "+arrayList);
/* pole promíchám */
arrayList.shuffle();
System.out.println("Pole po promichani : "+arrayList);
Ondra
takže třeba do trojkové soustavy to nejde?? Musíš si uvědomit že do 11 a více se musí přidávat spec. znaky
+ doufám že si uvědomuješ že při použití .charAt využíváš pozic čísel v danné soustavě .. tzn ty předpokládáš převod z HEX ->
+ chyba je podlě mě tady :
double meziVysledek = zostatok2*2;
měl bys mít = zostatok * soustava
No tak nasnadě je hned řešení že načteš všechny obrázky a začneš dělat všechny kombinace nad touhle množinou .. s tím že musíš počítat se složitostí N^N (N je počet obrazců .. a možná ještě horší, když se budou otáčet obrazce) -> jedná se NP uplný problém, který souvisí s optimalizací
Potom bych se podíval po googlu, jestli nejsou nějaký akcelerační algoritmy.
Další věc je taky ta, jestli chceš zkoumat pouze existenci tohoto jevu:
=> ??Existuje taková kombinace krabic, aby se vešla do danné oblasti??
nebo:
=> ??Jaká kombinace je nejlepší a ušetří nejvíce prostoru?? .. průšvih (bude to trvat strašně dlouho, protože musíš prohledat celý stavový prostor)
google: board optimization algorithm