#9 Anonym
Je to ta jak píše brucak vše přímo v jednom cyklu.
#10 brucak
Pro zjednodušení jsme dali oběma velikost původního.
Pole budou typu int, vždyť do nich nic jiného nevkládáš.
V podmínce kde testuješ sudé a liché, tak před zvýšením indexu vezmeš číslo z původního a vložíš ho na index daného pole sudých nebo lichých čísel.
Jinak snaž se dodržovat odsazení tělo for by mělo být také odsazno, kod je nečitelný, stejně tak by bylo fajn jednotné uzávorkování.
#7 JirkaEr
Počáteční hodnoty -1 netuším k čemu by byly
Nadeklaruješ si dvě prázdná pole - pro zjednodušení o velikoti původnícho smíšeného. Ke každému si také uděláš index na další volnou pozici.
Dále už jen původní pole projedeš cyklem a dle dělitelnosti vkládáš čísla do patřičného pole a index inkrementuješ.
Pokud bude nějaký problém, už by byla vhodná dílčí inplmentace.
K výrobě všeobecně hledej Multi-Project Wafer, např.:
http://www.europractice-ic.com/prototyping.php
http://www.esilicon.com/products-and-services/multi-project-wafer-services
#11 crash969
"zkonstruovala" Pod tím si představuješ co, pouhou fyzickou výrobu, nebo i vymyšlení komplet logiky? U nás se můžeš poptat třeba v ASICentru.
Jinak pro běžné smrtelníky výrobci nabízejí sdílenou výrobu, ale musíš si počkat až se zaplní celá plocha waferu. Další problém je že při převodu na ASIC se musíš hodně přizpůsobit jejich technologii a často používat standardní bloky. V neposlední řadě zapouzdření neřeší, takže si musíš ještě zařídit kdo to nabonduje a zapouzdří. Pokud něco konkrétního najdu, ozvu se.
Víš jak se ty operátory schovají? Pokud ne, co takhle si to vyhledat? Tvým žádaným vzorem je tabulka pro 2 vstupy.
Výsledek co sestavíš ti tu jistě kdokoliv zkontroluje.
PS: Promiň, my se nebojíme, my víme že jsi neschopný.
Takže ty tu metodu setPartner jen píšeš, ale dále nepoužívaš. Tak ji opravíš jen aby byla funkční.
public void setPartner(Dancer partner) throws NullPointerException, DancerException {
if(partner == null)
throw new NullPointerException("partner");
if( (partner.hasPartner() != false) || (this.hasPartner() != false) )
throw new DancerException("Dancer already has a partner.");
if(this.isMale() == partner.isMale())
throw new DancerException("Dancers have the same gender.");
this.partner = partner;
partner.partner = this;
}
Teď s tou vyjímkou jsem si všimnul, že jsi původně zamýšlel ji mít definovavou jako
public class DancerException extends Exception
{
public DancerException() {
super("Dancer exception.");
}
public DancerException(String message) {
super(message);
}
}
#5 dawnMist
Jsi to nepochopil, to setPartner voláš jen pro jednoho a přiřazení tomu druhému je v rámci té metody, máš přístupné veškeré instanční proměnné obou partnerů. To ti také zmiňuje ta poznámka.
A asi jsem ti v tom teď udělal trošku guláš.... tady máš použítí dvou tanečníků, kdy se je snažím dát dohromady. Vyvolá to vyjímku "DancerException" se zprávou "Dancer exception." Pokud máš už správně opravenou tu metodu.
public static void main(String[] args) {
Dancer A = new Dancer(1, false);
Dancer B = new Dancer(2, false);
try {
A.setPartner(B);
} catch (DancerException e){
System.out.println(e.getMessage());
} catch (NullPointerException e) {
System.out.println(e.getMessage());
}
}
Já pozn. chápu tak, že jde o to aby jsi neimplementoval metodu následovně
void setPartner(Dancer Partner){
...
Partner.setPartner(this);
...
}
Takže v tvém případě nezacyklí.
ad chyba: Dej to do try{}
...obdobně s tou instancí tom máš i unsetPartner, kam si ani žádného druhého partnera nepředáváš.
Jinak k přehlednosti a štěstí že to nedělá neplechu bych si dával pozor na užívání pojmenování instanční proměnné "partner" a pojmenování předaného parametru "partner" do metody jako v případě setPartner()
V metodě setPartner špatně přistupuješ k instanci nad kterou je metoda volaná. Instance nad kterou je volaná metoda je v this. Opakuje se ti to tam vícekrát např. následující podmínka
if( (partner.hasPartner() != false) || (partner.partner.hasPartner() != false) )
...by měla vypadat takhle
if( (partner.hasPartner() != false) || (this.hasPartner() != false) )
A když vyvoláš podmínku, tak ji musíš příslušně zachytit...
try {
partner1.setPartner(Partner2);
} catch (DancerException e) {
//zpracování DancerException
} catch (NullPointerException e) {
// zpracování NullPointerException
}
#1 Keyzio
Máš proměnnou MAX, když budeš načítat první číslo tak si ho do ní uložíš. A když budeš načítat další, tak porovnáš zda je právě zadané větší než MAX, když bude uložíš si ho také do MAX.
Nevím co konkrétně řešíš, ale co se stane když bude n => 30? nebo n je právě tak omezeno?
K výpočtu potřebuješ jen zadaný a předcházející bod. Budeš mít cyklus, který bude probíhat tak dlouho dokud nezadá uživatel bod [0,0]. V každém průchodu při načítání si poslední bod uložíš do předposledního a do posleního si načteš nový právě zadaný. Pak se můžeme zabývat dalším
#7 noki
To se to kopíruje :-) Tak se nesnaž pochopit cizí program, který je rozpracovaný a stejně ani to načítání není ok v celém vláknu. ...co takhle si to napsat sám?
Uvědom si že nevíš kolik bude bodů, ale víš že potřebuješ vždy jen zadaný a předcházející. Takže vždy při načítání si poslední bod uložíš do předposledního a do posleního si načteš nový. Až budeš mít tohl funkční tak si můžeš uvědomit jak dojít k tomu zda došlo k průniku osy. Jako třetí krok si příslušný průsečík vypočítáš.
#21 Kubas88
no nepochopil, brání ti něco tu funkci použít takhle?
void kvadrant(float x1, float x2, float y1, float y2)
{
if ((x1>0 && x2<0)││(x1<0 && x2>0))
{
//vypocet pruseciku osy y => do rovnice přímky dosaď x = 0
}
else if ((y1>0 && y2<0)││(y1<0 && y2>0))
{
//vypocet pruseciku osy x => do rovnice přímky dosaď y = 0
}
}
Tak snad v tom případě takhle ne?
if (kvadrant(poleX[index],poleX[index-1],poleY[index],poleY[index-1]) == true)
{
cout<<vypocetPrusecik(poleX[index],poleX[index-1],poleY[index],poleY[index-1]);
}
A pokud to chceš takhle používat... potom stejně musíš kontrolovat zda průnik konkrétní osy je na tvé úsečce a to v té funkci resp. v odpovídajících podmínkách víš.
#16 Kubas88
a ten problém je jaký? Jediné co vidím je následující podmínka, proměnná kvadrant neexistuje... výstup z funkce kvadrant() si ani nikam neukládáš. Mimo to že jsi zjistil průsečík s konkrétní osou jak jsem naznačil, by jsi měl spíše řešit v té funkci.
kvadrant(poleX[index],poleX[index-1],poleY[index],poleY[index-1]);
if (kvadrant == true)
{
cout<<vypocetPrusecik(poleX[index],poleX[index-1],poleY[index],poleY[index-1]);
}
aha těch 2 dvou jsem si nevšimnul ani mě to netrklo podle té metody. Jsem myslel že pole pro 2 tam má deklarované prozatím...
V tom případě tu metodu podle toho co píše Dano a volat ji budeš tedy takhle
studenti[0].vratLepsiPrumer(studenti[1]);
K vypsání studentů, kvůli rozšiřitelnosti bych udělal ten cyklus, nebo pro teď můžeš tak
System.out.print(studenti[0]);
System.out.print(studenti[1]);
#4 K4BlOs
Odledně lepšího průměru, přepiš si tu metodu aby přijímala pole studentů, které v cyklu projdeš. V něm budeš hledat nelepší průměr a když na něj narazíš tak si někam uložíš index. Následně si pomocí indexu z pole vybereš studenta a vrátíš co potřebuješ. btw princip jsi už používat u maximálního výkytu...
Kam s tím.... zkusil bych to logicky, když ti cyklus umožní zaindexovat do pole postupně všechny prvky, tak kam by jsi to dal? Mimo to prázdný cyklus toho asi moc neudělá.
#7 Kubas88
Ještě si nejsem jistý tím polem, když nevíš kolik bodů budeš mít a obzvášť když pro výpočet ti stačí poslední a předposlední.
Protnutí os x a y musíš mít v podmínce zvlášť, tvou podmínku ponecháme stranou...
// Ax, Bx - x-osová souř. pro poslední a předchozí zadaný bod
if((Ax > 0 && Bx < 0) || (Ax < 0 && Bx > 0))
{
// průnik osy Y
}
#11 K4BlOs
Zda je seřazené pole nebo ne v použitém algoritmu nemá žádný vliv.
Jak říkáš první for vezme číslo na pozici "i" a druhý do porovná se všemi násludujícími. Když při dalším opakování bude porovnávat číslo na "i+i" tak potřebuješ "v" nastavit na 1 a ne přičítat k tomu co ti tam zůstalo z předcházejícího.
Jinak výsledek tak jak to máš... počet je uložený v "max" a index prvku v poli odpovídající výskytu max je v "v"
oprava: index čísla s maximálním výskytem máš v "h"
#3 Kubas88
Vždyť vše je na tvé volbě, jak si to uděláš, ale první co potřebuješ je ta rovnice přímky y = ax + b. Častěji se značí jako y = kx + q. To máš jednu funkci, další můžeš mít na zjištění půniků osou a jeho případný výpočet jak uvádí ondra.holub.
Pokud nevíš jak na tu rovnici přímky TADY to máš, vše je jen o tužce, papíru a vyjádření toho co potřebuješ ;-)
edit: oprava.... vlastně rovnici přímky potřebuješ jen tehdy když dojde k průniku osy.
#40 K4BlOs
Hlavní je pořádně si přečíst zadání a pochopit ho, trošku mou myšlenku zkazila ta metoda, která má i vypisovat posloupnost. Vyjasni si tu nesrovnalost co se má zadávat a co vypisovat. Tady to máš na N prvků z posloupnosti, jen si doformátuj ten výstup.
import java.util.*;
public class XXX {
public static Scanner sc = new Scanner(System.in);
static int[] dalsiClen(int[] pole){
int[] nove;
// vytvoří nové
if(pole == null){
// pole je null -> nové s jedním prvkem {0}
nove = new int[1];
nove[0] = 0;
} else if (pole.length == 1) {
// pole mělo jeden prvek -> další bude mít 2 {0,1}
nove = new int[2];
nove[0] = 0;
nove[1] = 1;
} else {
// pole mělo x, další bude x+1 prvků
nove = new int[pole.length+1];
//překopíruje stávající členy
for (int i = 0; i < pole.length; i++) {
nove[i] = pole[i];
}
// nebo tak
//System.arraycopy(pole, 0, nove, 0, pole.length);
// vypočítá poslední člen
nove[pole.length] = nove[pole.length-1]+nove[pole.length-2];
}
// vypíše aktuálně známý počet členů
for (int j = 0; j < nove.length; j++) {
System.out.print(nove[j] + " ");
}
System.out.println();
// vrátí pole doplněné o další člen
return nove;
}
public static void main(String[] args) {
int pole[] = null;
System.out.print("Zadejte pocet clenu: ");
int clen = sc.nextInt();
System.out.println("---Vysledky---");
// spočítá N členů
for (int i = 0; i < clen; i++) {
// 1 volání -> 1 další člen + výpis
pole = dalsiClen(pole);
}
}
}
#38 K4BlOs
Tak jednotlivým prvkům se dostaneš stejným způsobem jako do nich zapisuješ. Tahle třeba vypíšeš celou posloupnost.
for (int i = 0; i < posloupnost.length; i++) {
System.out.println(posloupnost[i]);
}
Jinak koukam že ta metoda nemá být jen počítací, takže to trochu mění věc.
PS používej na kod příslušné prostředky ikona "<?"
#32 K4BlOs
tohle snad pomůže
#27 K4BlOs
no já jsem to trošku zamotal do sebe... dalsiClen bude vypadat následovně
static int[] dalsiClen(int[] pole){
// délka původního
int length = pole.length;
// vytvoří nové
int[] nove = new int[length+1];
//překopíruje stávající prvky
for (int i = 0; i < pole.length; i++) {
nove[i] = pole[i];
}
// nebo tak
//System.arraycopy(pole, 0, nove, 0, pole.length);
// vypočítá poslední člen, !!! length je délka původního !!!
nove[length] = nove[length-1]+nove[length-2];
// vrátí nové
return nove;
}
V mainu budeš mít vytvořené to pole o 3 prvních, které budeš předávat dané metodě.
int pole[] = {0,1,1};
Ale další členy potřebuješ vypočítat pro n > 3, takže pro první 3 to volání dalsiClen přeskočíš a jen vypíšeš to co máš...
#25 K4BlOs
Každopádně první 3 hodnoty 0, 1, 1 musíš zadat do pole v programu. A pak příslušně voláš metodu pro výpočet dalšího, ve které žádné "n" nenačítáš, vytvoříš nové o 1 delší než stávající předané metodě
int[] nove = new int[pole.length+1];
následně ve foru nebo pomocí System.arraycopy() překopíruješ stávající hodnoty. Nakonec spočteš poslední hodnotu, to je jen hra s indexy a vrátíš to nové.
#1 CHARGER
Na obrázku znázorněné úhly jsou shodné ( na hodnoty nehleď jsou zaokrouhlené ) a ty ten co je uvnitř čtverce jsi schopný spočítat jako tg(uhlu) = (a/2)/a. Pak tedy můžeš spočítat druhou odvěsnu trojúhelníka co je mimo čtverec tg(uhlu) = x/(a/2). Následně už znáš průměr kružnice = a + x
Takže předpokládejme že máš načtené rozměry matic. Budeš pokračovat jejich alokací a naplněním. Například...
int **A;
A = (int**)malloc(radkyA * sizeof(int*)); // vytvoří "řádky"
for(i=0; i<radkyA; ++i)
{
A[i] = (int*)malloc(sizeof(int) * sloupceA_radkyB); // na každém řádku "vytvoří sloupce"
for(j=0; j<sloupceA_radkyB; ++j)
{
A[i][j] = rand() % 11; // matici naplní
}
}
obdobně s příslušnými počty pro matici B a pro C také, jen doporučuji použít calloc(), ta ji rovnou vynuluje. Pak už jen výpočet, ten máš ok.
Jak dál? To je prosté nesnažit se poslepovat program z nějkého kódu o kterém skoro nemám ponětí... A ještě lépe nejprve si stanovit přesné požadavky na daný program. Až to budeš mít, můžeš si napsat načtení příslušné matice a pro kontrolu správnosti načtená data vypsat.
edit: omlouvám se on ten problém bude na mé straně v mém chápání zadání :-(
#5 mike.hudek
jo ten hlupák jsem já, kde jsem bral v potaz jen polovinu zadání. Je tomu skutečně tak že bude 0 v S4 a 1 v S5. Avšak to má další dusledky na to tam hodnotu udržet, tedy z mého pohledu například "zdvojením" stavů S0 - S4 pro oba výstupy.
Závěr je tu jasný ptát se. Každopádně bych sem nemotal pole, prostě je to matice o rozmšrech 4x4. Ohledně slova, to se v šifrování běžně používá, takže to není slovo ve smyslu posloupnosti alfanumerických znaků..., ale 1 a 0. Stejně tak jako slovo slovo se v některých případech jako označní 16bitů.
Ono pokavaď se upravuje jen ta jedna instance i pro přehlednost by bylo lepší upravit metodu setAverageCircle a volat ji nad tou instancí circ3. A pak v ní this.set....
circ3.setAverageCircle(Circle const & circ1, Circle const & circ2);
...mohl by jsi se podívat, jaký jakým způsobem si vyjádří tvou gramatiku ANTLR. Tutorial pro eclipse najdeš na http://vimeo.com/groups/29150/videos/
edit: Teď mi došlo že je to tutoriál pro Javu, ale snad to k něčemu bude
#1 LordFaltus
vyjímka nabízí takovéto řešení....
protected void SetInt(int cislo)
{
if (this.progressBar1.InvokeRequired)
{
SetIntDelegate d = new SetIntDelegate(SetInt);
this.Invoke(d, cislo);
}
else
{
this.progressBar1.Value = cislo;
}
}
void Inkrement()
{
int i = 0;
while (i != max)
{
i++;
SetInt(i);
}
i = 0;
SetInt(i);
}
private void button2_Click(object sender, EventArgs e)
{
if (pracovni.ThreadState == ThreadState.Background || pracovni.ThreadState == ThreadState.WaitSleepJoin)
{
MessageBox.Show("Zastav inkrementaci");
pracovni.Suspend();
}
}
private void button3_Click(object sender, EventArgs e)
{
if (pracovni.ThreadState == ThreadState.Suspended)
{
MessageBox.Show("Opet bez");
pracovni.Resume();
}
}
Jinak vlákno může být ve více stavech ačkoli na venek "běží". A v návrhu použité příkazy suspend a resume jsou zastaralé kompilátor by se měl ozvat.
Lepší řešení je to na které odkazuje ingiraxo
Problém máš v souboru program.cpp, kde v konstruktoru deklaruješ nové ukazatele. Ale zde máš inicializovat ukazatele z definice objektu...
#include "program.h"
okno::okno (QWidget* parent):QWidget (parent)
{
textik=new QLabel ("textik co se zmeni");
tlacitko=new QPushButton ("zmen text");
editbox=new QLineEdit ();
layout=new QHBoxLayout ();
connect (tlacitko,SIGNAL (clicked()),this,SLOT (zmentext()));
layout->addWidget (textik);
layout->addWidget (editbox);
layout->addWidget (tlacitko);
setLayout (layout);
}
void okno::zmentext ()
{
textik->setText(editbox->text());
}
Jinak bych se poohlédnul po nějakém editoru, který ti umožní UI naklikat. Například Qt Creator ho obsahuje.