#8 BDS
Podľa mňa existujú dve skupiny:
1. tí, ktorí kopírujú z internetu a ďalej neriešia lebo majú hotové zadanie
2. tí, ktorí kopírujú z internetu a snažia sa tomu aj pochopiť (napr. modifikáciou kódu atď)
Inšpirovať sa už existujúcim riešením nie je zlé pokiaľ tomu človek rozumie. A niekedy je to aj vhodné..veď načo znovu "vymýšľať koleso" keď to už raz bolo vymyslené.
Příspěvky odeslané z IP adresy 147.175.176.–
nakoniec som ten problém vyriešil ale pribudol mi ďalší
keď beriem do úvahy príklad hore a zavolám externú funkciu(upravenú):
void set_Assertion(int BID, int ID) {
if(ID != BID) {
//chcem aby sa cely program ukoncil
}
return;
}
ako dosiahnem ten cieľ aby som z tej funkcie vedel ukončiť celé vykonávanie programu?
Ahojte,
mám súbor písaný v jazyku C, ktorý obsahuje funkciu:
void set_Assertion(int BID, int ID) {
printf("ID: %d BID: %d\n",ID,BID);
return;
}
ďalej mám asemblerovský kód, z ktorého časť je:
_main:
LFB9:
.cfi_startproc
pushl %ebp
.cfi_def_cfa_offset 8
.cfi_offset 5, -8
movl %esp, %ebp
.cfi_def_cfa_register 5
andl $-16, %esp
movl $200032, %eax
call ___chkstk_ms
subl %eax, %esp
call ___main
movl $0, 200028(%esp)
jmp L9
L10:
call _rand
movl %eax, %ecx
movl $351843721, %edx
movl %ecx, %eax
imull %edx
sarl $12, %edx
movl %ecx, %eax
sarl $31, %eax
subl %eax, %edx
movl %edx, %eax
imull $50000, %eax, %eax
subl %eax, %ecx
movl %ecx, %eax
movl 200028(%esp), %edx
movl %eax, 28(%esp,%edx,4)
addl $1, 200028(%esp)
L9:
movl $6, ID
movl $4, BID
pushl ID
pushl BID
call _set_Assertion
popl BID
popl ID
cmpl $49999, 200028(%esp)
jle L10
movl $50000, 8(%esp)
movl $0, 4(%esp)
leal 28(%esp), %eax
movl %eax, (%esp)
call _quicksort
nop
leave
.cfi_restore 5
.cfi_def_cfa 4, 4
ret
.cfi_endproc
pričom inštrukcie za návestím L9
movl $6, ID
movl $4, BID
pushl ID
pushl BID
call _set_Assertion
popl BID
popl ID
som pridal do programu manuálne.
ásledne tieto dva súbory zlinkujem a spustím ale pri zavolaní funkcie call _set_Assertion sa spustí nekonečný cyklus a vypisuje stále tie isté hodnoty dookola. Vedeli by ste mi poradiť? Myslím si ,že tam bude problém niekde s registrami, že je možné, že niektoré prepíšem len akosi sa mi nedarí na to prísť
Skúšal som si pomocou pusha uložiť všetky základné registre do stacku a potom ich pomocou popa vytiahnuť ale nepomohlo to. Skúšal som aj prerušenie pomocou int $0x80 ale ani to mi nepomohlo.
Za každú radu budem vďačný.
#2 KIIV
zabudol som napísať, že je to v C.
v štruktúre sú len číselné a stringové premenné takže to asi nejaký veľký vplyv mať nebude ale keď už tak:
typedef struct block
{
char *label_name;
char *last;
int ID;
int number_of_int;
} block;
a ako som písal skúšal som kopírovanie cez strcpy čo asi nebol najlepší nápad a posledný pokus bol s realloc
blocks = (block**)realloc(blocks, (number_of_blocks + 1) * sizeof(block *));
Ahojte, mam strukturu
typedef struct block
{
//premenne
} block;
a chcem si vytvoriť pole týchto štruktúr pričom počet prvkov v tomto poli sa bude meniť(zväčšovať sa) takže si zadefinujem pole ako:
block **blocks;
a chcem počas vykonávania programu aby sa do tohto poľa pridal nový prvok keď ho vytvorím a tým pádom sa veľkosť poľa zväčšila o 1.
Skúšal som to kopírovať a skúsil som použiť aj funkcie ako memcpy ale akosi sa mi to nepodarilo.
Vedeli by ste mi poradiť?
Ďakujem.
ahojte,
ponukam moznost privyrobit si programovanim. ide o jednorazovu zalezitost. programovaci jazyk c/java. viac info fortunarichezza@mail.com
#1 Kent
public void vykonajFunkciu(param1, param2, param3){
while(prijimam pakety){
vypis();
}
}
a chybu mi hádže
Exception in thread "Thread-4" java.lang.Error: Interrupted attempt to acquire write lock
at javax.swing.text.AbstractDocument.writeLock(Unknown Source)
at javax.swing.text.AbstractDocument.insertString(Unknown Source)
at javax.swing.text.PlainDocument.insertString(Unknown Source)
at javax.swing.JTextArea.append(Unknown Source)
at view.Panel.writePacket(Panel.java:233)
at controller.Forwarder.processFrames(Forwarder.java:80)
at controller.ControllerMain$PacketListenerForReceive$1.run(ControllerMain.java:169)
vedeli by ste mi poradiť ako to vyriešiť?
Ahojte,
mám 2 thready, ktoré mi bežia a v každom z nich vytváram inštanciu triedy
thread = new Thread(){
public void run() {
Trieda t = new Trieda(arg1, arg2, arg3);
t.vykonajFunkciu(param1, param2, param3);
}
potom keď kliknem na button tak sa mi spustia obidva thready
a keď kliknem na ďalší button chcem aby sa mi prestali vykonávať..skúšal som thread.interrupt() aj thread.stop() ale hádže mi to chybu
trieda t ma funkciu vykonajFunkciu v ktorej je while cyklus a tam sa volajú ďalšie metódy:
Ahojte,
mám v programe viac threadov. Každý thread spracúva a odosiela nejaké informácie. Ja si potrebujem pre každý thread samostatne viesť štatistiku spracovaných/odoslaných informácií. Aká je najlepšia možnosť ako to spraviť keď mám viac druhov informácií, ktoré si chcem zapamätať pre spracovanie aj odoslanie každého threadu tak aby som si nemusel robiť pre každú informáciu nejakú premennú.
Napr.
thread1 - spracuje 10 jabĺčok, 5 hrušiek a 3 slivky, odošle - 3 jabĺčka, 3 hrušky a 1 slivku
thread2 - spracuje 100 jabĺčok, 300 hrušiek a 0 sliviek odošle - 150 jabĺčok, 80 hrušiek a žiadnu slivku
a na výstupe chcem mať :
thread1 in: 10,5,3 out: 3,3,1
thread2 in: 100,300,0 out: 150,80,0
matica MxN - to sa pýta vytvoriť si dvojrozmerné pole
v Pascale máš funkciu na generovanie náhodného čísla z intervalu, ktorý si zadáš(ak si dobre pamätám) - tak naplníš maticu ( 2x for cyklus )
uložiť hodnoty súčtov jednotlivých riadkov do poľa - vytvoríš si jednorozmerné pole a pomocou 2x for cyklus spočítaš súčet riadkov
zobraziť maticu a pole - matica - 2x for cyklus , pole - 1x for cyklus
#7 peter
upravil som to tak aby som mal 4 stĺpce rovnako pomenované, každá tabuľka má názov..aj zátvorky sedia, na konci som použil GROUP BY ale stále píše chybu pri UNION ALL
SELECT team_id,nazov,SUM(body_doma) + SUM(body_vonku) as body
FROM
(
(
SELECT id as team_id,name as nazov, body_doma , 0 as body_vonku --prva tabulka na vitazstva doma
FROM
(
SELECT c.id,c.name, COUNT(name) * 3 as body_doma
FROM club c
JOIN result r ON r.id_home_team = c.id
WHERE r.goal_home > r.goal_away
GROUP BY c.id
) as vit_doma
) as a
UNION ALL
(
SELECT id as team_id, team_name as nazov, 0 as body_doma, body_vonku
FROM
(
SELECT c.id,c.name as team_name, COUNT(name) * 3 as body_vonku
FROM club c
JOIN result r ON r.id_away_team = c.id
WHERE goal_home < goal_away
GROUP BY c.id
) as vit_vonku
) as b
)
GROUP BY team_id,nazov
#5 peter
skúsil som niečo takéto
SELECT id as team_id,name as nazov, body_doma
FROM
(SELECT c.id,c.name, COUNT(name) * 3 as body_doma
FROM club c
JOIN result r ON r.id_home_team = c.id
WHERE r.goal_home > r.goal_away
GROUP BY c.id) as vitazstva_doma
UNION ALL
SELECT id as team_id, team_name as nazov, body_vonku
FROM
(SELECT c.id,c.name as team_name, COUNT(name) * 3 as body_vonku
FROM club c
JOIN result r ON r.id_away_team = c.id
WHERE r.goal_home < r.goal_away
GROUP BY c.id) as vitazstva_vonku
toto mi vyhodí niečo takéto:
čo je vlastne dobre lebo mi tam hodilo tie tímy, ktoré vyhrali aj doma aj vonku ale keď chcem tie tabuľky už spojiť a spočítať body a zoradiť tak mi tam hodí chybu pri UNION ALL
SELECT team_id,nazov,SUM(body_doma) + SUM(body_vonku) as body
FROM(
(SELECT id as team_id,name as nazov, body_doma
FROM
(SELECT c.id,c.name, COUNT(name) * 3 as body_doma
FROM club c
JOIN result r ON r.id_home_team = c.id
WHERE r.goal_home > r.goal_away
GROUP BY c.id) as vit_doma) as a
UNION ALL
(SELECT id as team_id, team_name as nazov, body_vonku
FROM
(SELECT c.id,c.name as team_name, COUNT(name) * 3 as body_vonku
FROM club c
JOIN result r ON r.id_away_team = c.id
WHERE goal_home < goal_away
GROUP BY c.id) as vit_vonku) as b
Máme štvorcovú sieť. Na začiatku je súradnica 0,0. Idem na súradnice 7,3. Aká je pravdepodobnosť, že pôjdem cez súradnice 4,1?
Nejaký hint ako na toto? Ďakujem
#2 ingiraxo Ide o to, že v triede Paket si nastavím MAC adresy, veľkosť a typ. Ak je typ Ethernet tak zas v triede Ethernet(ktorá dedí od triedy Paket) si nastavím aký protokol v ňom je a IP adresy. Pointa je, že keď sa mi zanalyzuje rámec tak chcem aby mal všetky informácie(MAC adresy, veľkosť, typ, IP adresy a ďalšie)..
Ahojte,
robím program v ktorom analyzujem rámec, ktorý si odchytím pomocou programu Wireshark. Zachytený rámec môže byť typu Ethernet II, IEEE 802.3 - LLC atď..keď je typu Ethernet II tak môže byť napr IP, ARP atď.. a keď je napríklad IP môže obsahovať vnorený protokol UDP alebo TCP alebo iné . Mám vytvorenú triedu Paket v ktorej si nastavím cieľovú a zdrojovú MAC adresu a zistím akého typu daný rámec je. A potom mám ďalšie triedy Ethernet II, IEEE 802.3 - LLC..ktoré majú svoje ďalšie vlastné pridané parametre, ktore postupne dopĺňajú..takisto aj IP ARP a ostatné čo som spomenul. Ale asi niečo robím zle lebo pri dedení mi to padne. Chcel by som sa opýtať čím to bude?
//tu si načítam paket a vytvorím nový objekt
while(pcap.nextEx(header, jbuffer) == Pcap.NEXT_EX_OK){ //citam az kym nie som na konci
PcapPacket packet = new PcapPacket(header,jbuffer);
Paket paket = new Paket(frame_number,packet);
...
}
//konštruktor v triede Paket
public Paket(int frame, PcapPacket packet){
this.frame = frame;
this.packet = packet;
setAdress(packet); //nastaví MAC adresy
setSize(packet); //zistí veľkosť
setTyp(packet); //Ethernet II, IEEE 802.3..
if(getTyp().equals("Ethernet II")){
Ethernet ethernet1 = new Ethernet(frame_number,packet);
}
else if(getTyp().equals("IEEE 802.3 - LLC")){
LLC llc1 = new LLC(frame_number,packet);
}
else if(getTyp().equals("IEEE 802.3 - SNAP")){
SNAP snap1 = new SNAP(frame_number, packet);
}
else if(getTyp().equals("IEEE 802.3 - Raw")){
RAW raw1 = new RAW(frame_number, packet);
}
}
a keď je to napr EtherType Ethernet II tak idem do triedy Ethernet kde je konštruktor :
public Ethernet(int frame_number, PcapPacket packet) {
super(frame_number, packet); //vyhodi chybu
setEtherType(packet);
setIP(packet);
}
Ak by ste mi vedeli pomôcť bol by som vďačný. Vopred ďakujem.
Zabudol som dodať, že počítadlo má výstupný prenos Cout. A mám použiť JK preklápacie obvody.
Rovnice z ktorých vychádzam:
JA = CE*!U*!b*!c*!d + CE*U*b*c*d
KA = CE*!U*!b*!c*!d + CE*U*b*c*d
JB = CE*!U*!c*!d + CE*U*c*d
KB = CE*!U*!c*!d + CE*U*c*d
JC = CE*!U*!d + CE*U*d
KC = CE*!U*!d + CE*U*d
JD = CE
KD = CE
Cout = CE*!U*!a*!b*!c*!d + CE*U*a*b*c*d
a obrázok obvodu v logisime:
Ahojte, mám za úlohu vytvoriť opis správania a štruktúry 4 bitového počítadla nahor/nadol. Ak povoľovací vstup C je na 1 sa obsah počítadla inkrementuje/dekrementuje. Ak Up = 1 tak počíta nahor inak nadol.
Ak by bol niekto taký dobrý a pozrel sa mi na kód a povedal mi kde mám chybu bol by som mu vďačný.
#include "systemc.h"
SC_MODULE(obvod_NEG) {
sc_in<sc_logic> in1;
sc_in<sc_logic> in2;
sc_out<sc_logic> n_in1;
sc_out<sc_logic> n_in2;
void neg_process(){
n_in1.write(~(in1.read()));
n_in2.write(~(in2.read()));
}
SC_CTOR(obvod_NEG){
SC_METHOD(neg_process);
sensitive << in1;
sensitive << in2;
}
};
SC_MODULE_EXPORT(obvod_NEG);
SC_MODULE(obvod_NEG1) {
sc_in<sc_logic> in1;
sc_out<sc_logic> n_in1;
void neg_process(){
n_in1.write(~(in1.read()));
}
SC_CTOR(obvod_NEG1){
SC_METHOD(neg_process);
sensitive << in1;
}
};
SC_MODULE_EXPORT(obvod_NEG1);
/*SC_MODULE(prirad)
{
sc_in<sc_logic> in1;
sc_out<sc_logic> out1;
void prirad_process(){
out1.write( in1.read());
}
SC_CTOR(prirad){
SC_METHOD(prirad_process);
sensitive << in1;
}
};
SC_MODULE_EXPORT(prirad);*/
SC_MODULE(obvod_AND6)
{
sc_in<sc_logic> in1,in2,in3,in4,in5,in6;
sc_out<sc_logic> out1;
void and6_process(){
out1.write( ( in1.read() & in2.read() & in3.read() & in4.read() & in5.read() &in6.read() ) );
}
SC_CTOR(obvod_AND6)
{
SC_METHOD(and6_process);
sensitive << in1;
sensitive << in2;
sensitive << in3;
sensitive << in4;
sensitive << in5;
sensitive << in6;
}
};
SC_MODULE_EXPORT(obvod_AND6);
SC_MODULE(obvod_AND5) {
sc_in<sc_logic> in1, in2, in3, in4,in5;
sc_out<sc_logic> out1;
void and5_process(){
out1.write( ( in1.read() & in2.read() & in3.read() & in4.read() & in5.read()) );
}
SC_CTOR(obvod_AND5){
SC_METHOD(and5_process);
sensitive << in1 << in2 << in3 << in4 << in5;
}
};
SC_MODULE_EXPORT(obvod_AND5);
SC_MODULE(obvod_AND4) {
sc_in<sc_logic> in1, in2, in3, in4;
sc_out<sc_logic> out1;
void and4_process(){
out1.write( ( in1.read() & in2.read() & in3.read() & in4.read() ) );
}
SC_CTOR(obvod_AND4){
SC_METHOD(and4_process);
sensitive << in1 << in2 << in3 << in4;
}
};
SC_MODULE_EXPORT(obvod_AND4);
SC_MODULE(obvod_AND3) {
sc_in<sc_logic> in1, in2, in3;
sc_out<sc_logic> out1;
void and3_process(){
out1.write( ( in1.read() & in2.read() & in3.read() ) );
}
SC_CTOR(obvod_AND3){
SC_METHOD(and3_process);
sensitive << in1 << in2 << in3;
}
};
SC_MODULE_EXPORT(obvod_AND3);
SC_MODULE(obvod_OR2){
sc_in<sc_logic> in1,in2;
sc_out<sc_logic> out1;
void or2_process(){
out1.write( (in1.read() | in2.read() ) );
}
SC_CTOR(obvod_OR2){
SC_METHOD(or2_process);
sensitive << in1 << in2;
}
};
SC_MODULE_EXPORT(obvod_OR2);
/*SC_MODULE (jkff)
{
sc_in<bool> j, k;
sc_inout<bool> q;
//sc_in<bool> clk;
sc_in_clk clk;
void jk_flop ();
SC_CTOR (jkff) {
SC_METHOD (jk_flop);
sensitive_pos << clk;
}
};
void jkff::jk_flop()
{
sc_uint<2> temp;
temp[1] = j.read( );
temp[0] = k.read( );
switch(temp) {
case 0x1: q.write(0);
break;
case 0x2: q.write(1);
break;
case 0x3:
q.write(!q.read());
break;
default: break;
}
};*/
/*SC_MODULE (jkff)
{
sc_in<bool> j, k;
sc_inout<bool> q, qn;
//sc_in<bool> clk;
sc_in_clk clk;
void jk_flop (){
sc_uint<2> temp;
temp[1] = j.read();
temp[0] = k.read();
switch(temp) {
case 0x1: q.write(0);
break;
case 0x2: q.write(1);
break;
case 0x3:
q.write(~q.read());
break;
default: break;
}
}
SC_CTOR (jkff) {
SC_THREAD (jk_flop);
sensitive_pos << clk;
}
};
SC_MODULE_EXPORT(jkff);*/
SC_MODULE (jkff) {
sc_in<sc_logic> j, k;
sc_in_clk clk;
sc_out<sc_logic> q;
sc_out<sc_logic> qn;
void do_jk_flop ();
SC_CTOR (jkff) {
SC_METHOD (do_jk_flop);
sensitive_pos << clk;
q.initialize((sc_logic)0);
qn.initialize((sc_logic)1);
}
};
void jkff::do_jk_flop() {
if(j.read() == ((sc_logic)1) && k.read() == ((sc_logic)0)) {
q.write((sc_logic)1);
qn.write((sc_logic)0);
}
else if(j.read() == ((sc_logic)0) && k.read() == ((sc_logic)1)) {
q.write((sc_logic)0);
qn.write((sc_logic)1);
}
else if(j.read() == ((sc_logic)1) && k.read() == ((sc_logic)1)) {
q.write(qn);
qn.write(q);
}
else {
q.write(q);
qn.write(qn);
}
}
SC_MODULE(obvod_struktura){
sc_in_clk clk;
sc_in<sc_logic> c, up;
sc_out<sc_logic> vystup1, vystup2, vystup3, vystup4, cout;
//sc_out<sc_logic> vystup1n, vystup2n,vystup3n,vystup4n;
//sc_out<sc_logic> out9;
// prirad prirad1;
obvod_NEG oneg;
obvod_NEG1 oneg1;
obvod_AND3 oand31;
obvod_AND3 oand32;
obvod_AND4 oand41;
obvod_AND4 oand42;
obvod_AND5 oand51;
obvod_AND5 oand52;
obvod_AND6 oand61;
obvod_AND6 oand62;
obvod_OR2 oor21;
obvod_OR2 oor22;
obvod_OR2 oor23;
obvod_OR2 oor24;
jkff jkff1;
jkff jkff2;
jkff jkff3;
jkff jkff4;
jkff jkff5;
sc_signal<sc_logic> d[5], dneg[5];
sc_signal<sc_logic> j[5], k[5];
sc_signal<sc_logic> cneg, upn;
sc_signal<sc_logic> pom1, pom2, pom3, pom4, pom5, pom6, pom7, pom8, pom9;
sc_signal<sc_logic> pom11,pom12,pom13, pom14, pom15, pom16;
void obvod_process_struktura(){
vystup1 = d[0];
vystup2 = d[1];
vystup3 = d[2];
vystup4 = d[3];
cout = d[4];
}
SC_CTOR(obvod_struktura) : oneg ("oneg"), oneg1 ("oneg1"), oand31 ("oand31"), oand32 ("oand32"), oand41 ("oand41"), oand42 ("oand42"), oand51 ("oand51"), oand52 ("oand52"), oand61 ("oand61"), oand62 ("oand62"), oor21 ("oor21"), oor22 ("oor22"), oor23 ("oor23"), oor24 ("oor24"), jkff1 ("jkff1"), jkff2 ("jkff2"), jkff3 ("jkff3"), jkff4 ("jkff4"), jkff5 ("jkff5")
{
//negacie
oneg.in1(up);
oneg.in2(c);
oneg.n_in1(upn);
oneg.n_in2(cneg);
//stage1
oand31.in1(c);
oand31.in2(upn);
oand31.in3(dneg[3]);
oand31.out1(pom5);
oand32.in1(c);
oand32.in2(up);
oand32.in3(d[3]);
oand32.out1(pom6);
oand41.in1(c);
oand41.in2(upn);
oand41.in3(dneg[2]);
oand41.in4(dneg[3]);
oand41.out1(pom3);
oand42.in1(c);
oand42.in2(up);
oand42.in3(d[2]);
oand42.in4(d[3]);
oand42.out1(pom4);
oand51.in1(c);
oand51.in2(upn);
oand51.in3(dneg[1]);
oand51.in4(dneg[2]);
oand51.in5(dneg[3]);
oand51.out1(pom1);
oand52.in1(c);
oand52.in2(up);
oand52.in3(d[1]);
oand52.in4(d[2]);
oand52.in5(d[3]);
oand52.out1(pom2);
oand61.in1(c);
oand61.in2(upn);
oand61.in3(dneg[0]);
oand61.in4(dneg[1]);
oand61.in5(dneg[2]);
oand61.in6(dneg[3]);
oand61.out1(pom7);
oand62.in1(c);
oand62.in2(up);
oand62.in3(d[0]);
oand62.in4(d[1]);
oand62.in5(d[2]);
oand62.in6(d[3]);
oand62.out1(pom8);
// prirad1.in1(c);
// prirad1.out1(pom9);
pom9 = (sc_logic)c;
//dorobit posledny signal!!!! -> hotovo?
//stage2
oor21.in1(pom1);
oor21.in2(pom2);
oor21.out1(pom11);
oor22.in1(pom3);
oor22.in2(pom4);
oor22.out1(pom12);
oor23.in1(pom5);
oor23.in2(pom6);
oor23.out1(pom13);
oor24.in1(pom7);
oor24.in2(pom8);
oor24.out1(pom14);
pom15 = (sc_logic)pom9;
jkff1.j(pom11);
jkff1.k(pom11);
jkff1.clk(clk);
jkff1.q(d[0]);
jkff1.qn(dneg[0]);
jkff2.j(pom12);
jkff2.k(pom12);
jkff2.clk(clk);
jkff2.q(d[1]);
jkff2.qn(dneg[1]);
jkff3.j(pom13);
jkff3.k(pom13);
jkff3.clk(clk);
jkff3.q(d[2]);
jkff3.qn(dneg[2]);
jkff4.j(pom15);
jkff4.k(pom15);
jkff4.clk(clk);
jkff4.q(d[3]);
jkff4.qn(dneg[3]);
oneg1.in1(pom14);
oneg1.n_in1(pom16);
jkff5.j(pom14);
jkff5.k(pom16);
jkff5.clk(clk);
jkff5.q(d[4]);
jkff5.qn(dneg[4]);
SC_METHOD(obvod_process_struktura);
sensitive << d[0];
sensitive << d[1];
sensitive << d[2];
sensitive << d[3];
sensitive << d[4];
sensitive << dneg[0];
sensitive << dneg[1];
sensitive << dneg[2];
sensitive << dneg[3];
sensitive << dneg[4];
}
};
SC_MODULE_EXPORT(obvod_struktura);
SC_MODULE(obvod_spravanie){
sc_in_clk CLK;
sc_in<sc_logic> c,up;
sc_out<sc_logic> cout;
sc_out <sc_bv<4> > output;
sc_out <sc_logic> vystup1, vystup2, vystup3, vystup4;
void do_counter(){
while(true){
if(c == (sc_logic)1 && up == (sc_logic)1){
wait(5,SC_NS);
switch( (output.read()).to_uint()){
case 0: output="0001"; break;
case 1: output="0010"; break;
case 2: output="0011"; break;
case 3: output="0100"; break;
case 4: output="0101"; break;
case 5: output="0110"; break;
case 6: output="0111"; break;
case 7: output="1000"; break;
case 8: output="1001"; break;
case 9: output="1010"; break;
case 10: output="1011"; break;
case 11: output="1100"; break;
case 12: output="1101"; break;
case 13: output="1110"; break;
case 14: output="1111"; cout = (sc_logic)1; break;
case 15: output="0000"; cout = (sc_logic)0; break;
}
}
if(c == (sc_logic)1 && up == (sc_logic)0){
switch((output.read()).to_uint()){
case 0: output="1111"; cout = (sc_logic)1; break;
case 1: output="0000"; cout = (sc_logic)0;break;
case 2: output="0001"; break;
case 3: output="0010"; break;
case 4: output="0011"; break;
case 5: output="0100"; break;
case 6: output="0101"; break;
case 7: output="0110"; break;
case 8: output="0111"; break;
case 9: output="1000"; break;
case 10: output="1001"; break;
case 11: output="1010"; break;
case 12: output="1011"; break;
case 13: output="1100"; break;
case 14: output="1101"; break;
case 15: output="1110"; break;
}
}
}
wait();
}
SC_CTOR(obvod_spravanie){
output.initialize("0000");
cout.initialize((sc_logic)0);
SC_THREAD(do_counter);
sensitive_neg << CLK;
}
};
SC_MODULE_EXPORT(obvod_spravanie);
SC_MODULE(en_clock){
sc_in_clk CLK;
sc_out <sc_logic> clock;
void do_clock(){
if(CLK == true){
clock = (sc_logic)1;
} else {
clock = (sc_logic)0;
}
}
SC_CTOR(en_clock) {
SC_METHOD(do_clock);
sensitive << CLK;
}
};
SC_MODULE(testbench_obvod){
sc_clock CLK;
sc_signal<sc_logic> c, up, vystup1, vystup2, vystup3, vystup4, cout, clock, cout_bhv;
sc_signal<sc_bv<4> > output;
//obvod_spravanie DUT1;
obvod_struktura DUT2;
en_clock CLOCK;
void do_test(){
while (true){
c=(sc_logic)1;
wait(50,SC_NS);
up=(sc_logic)1;
wait(210,SC_NS);
up=(sc_logic)0;
wait(500,SC_NS);
}
}
SC_CTOR(testbench_obvod):
DUT1 ("DUT1"),
DUT2 ("DUT2"),
CLOCK("CLOCK"),
CLK("CLK", 20, SC_NS, 0.5, 0.0, SC_NS, true)
{
CLOCK.CLK(CLK.signal());
CLOCK.clock(clock);
DUT1.c(c);
DUT1.up(up);
DUT1.CLK(CLK.signal());
DUT1.cout(cout_bhv);
DUT1.output(output);
DUT2.c(c);
DUT2.up(up);
DUT2.clk(CLK.signal());
DUT2.vystup1(vystup1);
DUT2.vystup2(vystup2);
DUT2.vystup3(vystup3);
DUT2.vystup4(vystup4);
DUT2.cout(cout);
SC_THREAD(do_test);
}
};
SC_MODULE_EXPORT(testbench_obvod);
#5 Kit
Mám zadané aby som to písal v shell-i.
Skúsil som to spraviť cez príkaz awk ale keď si na začiatok do nejakej premennej napr velkost uložím počet napr 3 a potom dám príkaz aby vypísalo len dané riadky kde je číslo väčšie ako číslo v premennej velkost tak mi ich vypíše všetky
príkaz je
#hodnota ktoru porovnavam je v prvom stlpci
awk '$1 > $velkost'
#3 jistr
Píšem to v csh a
set pole = `prikaz`
spraví to čo má :) odtestoval som si to.
Spravil som to tak ako si napísal a ak platí podmienka tak som dal
vysledne_pole="$pole3[1]"
Ale keď to spustím tak mi to pole aj vypíše a pritom tam nemám echo.
Ahojte
mám problém pri naplnení poľa hodnotou
mám definované 3 polia
set pole = `prikaz`
set pole2 = `prikaz`
set pole3 = `prikaz`
set vysledne_pole = ()
pričom v poliach pole a pole2 mám číselné hodnoty
v cykle while prechádzam polia a testujem dve hodnoty polí v podmienke if..keď vyhovujú podmienke tak chcem aby sa do vysledne_pole uložil prvok z pole3.
ale príkazom
vysledne_pole = "$pole3[1]"
mi hádže chybu "vysledne_pole: Command not found" ..a neviem ako to spraviť inak..prečo mi to vysledne_pole berie ako príkaz..
Príklad ako vyzerajú dané polia:
pole3[1] = meno IP den mesiac cas_zaciatku cas_konca
pole[1] = cas_zaciatku
pole[2] = cas_konca
a keď je ten čas v danom intervale tak chcem aby sa do vysledne_pole uložil celý riadok z pole3[1]
Zdravím,
ak by mal niekto záujem nakódiť jednoduchú úlohu v jazyku C za odmenu tak sa môžete ozvať na mail akonym@centrum.sk
Ahojte, mám problém s kódom na prepis výrazu z infixového tvaru do postfixového. Spraví mi to pre jeden riadok ale keď mám viacriadkový vstup tak už vypíše hlúposti. Za každú radu ďakujem.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct zasobnik
{
int data[10000]; //pole pre pismenka a operatori ktore budem davat do zasobnika
int vrch; //vrch zasobnika
}zasobnik;
char vrch(zasobnik *s);
int priorita(char);
int je_prazdny(zasobnik *s);
char vyber(zasobnik *s);
void vloz(zasobnik *s, char x);
int je_plny(zasobnik *s);
void inicializacia(zasobnik *s);
int main()
{
zasobnik s;
char x;
int c;
inicializacia(&s); //inicializacia vrchu zasobnika
while ((c = getchar()) > 0)
{
if (c >= 'A' && c <= 'Z') //ak je to pismeno tak ho vypise
printf("%c", c);
else
if (c == '(') //ak je to lava zatvorka tak vlozi do zasobnika
vloz(&s, '(');
else
{
if (c == ')') //ak je to prava zatvorka tak..
while ((x = vyber(&s)) != '(') //..sa vybera zo zasobnika kym nenarazi na pravu zatvortku
printf("%c", x);
else //ak je to operator
{
while (priorita(c) <= priorita(vrch(&s)) && je_prazdny(&s) != 1) //porovna sa priorita operatoru
{
x = vyber(&s);
printf("%c", x);
}
vloz(&s, c); //vlozenie operatoru
}
}
}
while(je_prazdny(&s) != 1) //vyprazdnenie zasobnika
{
x = vyber(&s);
printf("%c", x);
}
getchar();
getchar();
return 0;
}
int priorita(char x)
{
int von;
if (x == '(')
von = 0;
if (x == '+' || x == '-') //mensia priorita vrati 1
von = 1;
if (x == '*' || x == '/' ) //vacsia priorita vrati 2
von = 2;
return von;
}
void inicializacia(zasobnik *s)
{
s->vrch = -1;
}
int je_prazdny(zasobnik *s)
{
if (s->vrch == -1) //na zaciatku bol inicializovany na -1
return(1);
else
return(0);
}
void vloz(zasobnik *s, char x)
{
s->vrch = s->vrch + 1; //posuniem vrch a
s->data[s->vrch] = x; //zapisem znak
}
char vyber(zasobnik *s)
{
int x;
x = s->data[s->vrch]; //do x aktualny znak z vrchu zasobnika
s->vrch = s->vrch - 1; //posuniem vrch o
return(x);
}
char vrch(zasobnik * s)
{
return(s->data[s->vrch]); //vrati znak ktory je na vrchu zasobnika
}
Ahojte,
mám problém so zistením počtu veľkých písmen v reťazci. Neviem kde mám chybu v mojom kóde. Tak by som bol vďačný za každú radu :)
name echo
DATA SEGMENT
vstup db 80 ;bude sa citat 80 znakov
pocet db 0 ;tu sa ulozi ich skutocny pocet
; db 80 dup(?) ; miesto pre citany retazec
DATA ENDS
INCLUDE macro.inc
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
start: MOV AX,SEG DATA
MOV DS,AX
MOV AH,0Ah
MOV DX,OFFSET VSTUP
INT 21H
XOR AX,AX
XOR CX,CX
MOV CL,POCET
ADD DX,2
MOV SI,DX
MOV BX,OFFSET VYSTUP
ZNOVA:
MOV AL,[SI]
CMP AL,41h ;41h = 'A'
JB DALEJ
CMP AL,5bh ;5Ah = 'Z'
JNB DALEJ
ADD POCET,1
CMP AL,'$'
JE KONIEC_RETAZCA
DALEJ:
INC SI ;dalsi znak
LOOP ZNOVA
KONIEC_RETAZCA:
RIADOK
MOV DL,POCET
ADD DL,'0' ;prevedenie na znak
MOV AH,02h
INT 21h
mov ah,4ch
int 21h
code ends
end start
Ahojte,
začal som sa učiť assemblery a momentálne sa snažím pochopiť registre..
keď sa príznak TF rovná 1 tak procesor pracuje krok po kroku..ale ako to vlastne funguje?..keď napíšem nejaký kód..napr:
mov ax,2; ulož 2 do registra ax
sub ax,2; odčítaj 2 od obsahu registra ax
a chcem to odkrokovať tak to napíšem ako:
mov ax,2; ulož 2 do registra ax
mov TF,1
sub ax,2; odčítaj 2 od obsahu registra ax
? alebo nejako inak?
Vopred Ďakujem za vysvetlenie