 |
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
David92 Član


Pridružen-a: Sre 22 Feb 2012 11:22 Prispevkov: 292 Aktiv.: 1.80 Kraj: Lendava
|
Objavljeno: Tor Jan 08, 2013 2:35 pm Naslov sporočila: Programiranje - pomoč |
|
|
Pozdravljeni,
Potreboval bi pomoč pri naslednji nalogi:
Zapiši program v programskem jeziku C, ki preverja stanje najmanj obteženega bita v spremenljivki X. Če je bit postavljen, postavi drugi najmanj obtežen bit v spremenljivki Y na 1, sicer pa na 0. Spremenjeno spremenljivko Y izpiši v šestnajstiški obliki.
Spremenljivki X in Y sta tipa unsigned int! Vrednost spremenljivke Y je na začetku 0.
Mislim, da bi se moralo dat rešit z maskami, ampak pri predavanjih nisem povsem dojel snovi, pa tudi sošolci niso v kaj večjo korist. Ve kdo mogoče napisat tak program?
LP,
David _________________ "To me, defeat in anything is merely temporary.. Defeat simply tells me that something is wrong in my doing; it is path leading to success and truth." - Bruce Lee |
|
Nazaj na vrh |
|
 |
Gklemen Član


Pridružen-a: Sob 29 Nov 2008 0:06 Prispevkov: 112 Aktiv.: 0.56 Kraj: Rogatec
|
Objavljeno: Tor Jan 08, 2013 2:43 pm Naslov sporočila: |
|
|
void preveri(unsigned int x, unsigned int y)
{
if (x & 1)y |= 2; //če je bit postavljen -> postavimo drugi bit v y
else y &=~0x02; //zbrišemo drugi bit v y
printf("rezultat je %X",y); //izpišemo v šetnajstiški obliki
} |
|
Nazaj na vrh |
|
 |
David92 Član


Pridružen-a: Sre 22 Feb 2012 11:22 Prispevkov: 292 Aktiv.: 1.80 Kraj: Lendava
|
Objavljeno: Tor Jan 08, 2013 6:10 pm Naslov sporočila: |
|
|
GKlemen, študiras mogoče Elektrotehniko v MB?
LP,
David _________________ "To me, defeat in anything is merely temporary.. Defeat simply tells me that something is wrong in my doing; it is path leading to success and truth." - Bruce Lee |
|
Nazaj na vrh |
|
 |
int47 Član


Pridružen-a: Pon 15 Dec 2003 0:10 Prispevkov: 2104 Aktiv.: 8.88 Kraj: Ljubljana
|
Objavljeno: Tor Jan 08, 2013 6:28 pm Naslov sporočila: |
|
|
Y = (Y & ~2) | ((X<<1)&2); |
|
Nazaj na vrh |
|
 |
int47 Član


Pridružen-a: Pon 15 Dec 2003 0:10 Prispevkov: 2104 Aktiv.: 8.88 Kraj: Ljubljana
|
Objavljeno: Tor Jan 08, 2013 6:37 pm Naslov sporočila: |
|
|
Ker je na začetku Y=0, ni treba brisat bita v Y. Zadostuje:
Y = (X<<1)&2; |
|
Nazaj na vrh |
|
 |
David92 Član


Pridružen-a: Sre 22 Feb 2012 11:22 Prispevkov: 292 Aktiv.: 1.80 Kraj: Lendava
|
Objavljeno: Tor Jan 08, 2013 7:30 pm Naslov sporočila: |
|
|
Hvala fanta. Jaz bi to res rabil, če bi imel kdo nekaj malo časa mi razlozit te bite. Zal ne razumem preveč tega, na predavanja sem hodil, pa je blo razloženo tako, kot da smo za to že vsi slišali.
@int47: torej je dovolj, da napisem samo del, ki si ga napisal v 1. sporočilu, ali pa samo tisto kar si v 2. napisal?
LP,
David _________________ "To me, defeat in anything is merely temporary.. Defeat simply tells me that something is wrong in my doing; it is path leading to success and truth." - Bruce Lee |
|
Nazaj na vrh |
|
 |
MarkoM Član

Pridružen-a: Tor 12 Sep 2006 15:29 Prispevkov: 2825 Aktiv.: 12.37 Kraj: Lovrenc na P.
|
|
Nazaj na vrh |
|
 |
David92 Član


Pridružen-a: Sre 22 Feb 2012 11:22 Prispevkov: 292 Aktiv.: 1.80 Kraj: Lendava
|
Objavljeno: Sre Jan 09, 2013 6:54 pm Naslov sporočila: |
|
|
OK, z vašo pomočjo in prebiranjem zapiskov ter z internetom, sem napisal tole:
#include <stdio.h>
#include <stdlib.h>
void preveri(unsigned int x, unsigned int y)
{
if(x&(0x1))y=(y|(0x2));
system("PAUSE");
return 0;
}
Potreboval bi samo, če mi lahko kdo mogoče potrdi, da je ta zapis v celoti pravilen? Meni manjak funkcija MAIN, ampak nisem prepričan.
LP,
David _________________ "To me, defeat in anything is merely temporary.. Defeat simply tells me that something is wrong in my doing; it is path leading to success and truth." - Bruce Lee |
|
Nazaj na vrh |
|
 |
int47 Član


Pridružen-a: Pon 15 Dec 2003 0:10 Prispevkov: 2104 Aktiv.: 8.88 Kraj: Ljubljana
|
Objavljeno: Sre Jan 09, 2013 7:07 pm Naslov sporočila: |
|
|
Če je zapis pravilen, ali ne lahko preveriš s prevajalnikom in simulacijo.
Glede na tekst naloge manjka:
Citiram: |
Spremenjeno spremenljivko Y izpiši v šestnajstiški obliki. |
Prevajalnik se bo pritožil vsaj še zaradi manjkajoče main() funkcije.
Če hočeš, da se funkcija "void preveri(unsigned int x, unsigned int y)" izvede, jo moraš klicati v main(), ali kakšni drugi funkciji, ki jo kličeš iz main(). |
|
Nazaj na vrh |
|
 |
David92 Član


Pridružen-a: Sre 22 Feb 2012 11:22 Prispevkov: 292 Aktiv.: 1.80 Kraj: Lendava
|
Objavljeno: Sre Jan 09, 2013 7:55 pm Naslov sporočila: |
|
|
Hvala int47.
#include <stdio.h>
#include <stdlib.h>
void preveri(unsigned int x, unsigned int y)
{
if(x&(0x1))y=(y|(0x2));
}
void main()
{
int x;
int y;
preveri(x,y);
printf("Rezultat je %X \n",y); //izpišemo v šetnajstiški obliki
system("PAUSE");
return 0;
}
Je zdaj pravilno? Ne samo zapis, ampak celoten program, ki ga zahteva naloga?
LP,
David _________________ "To me, defeat in anything is merely temporary.. Defeat simply tells me that something is wrong in my doing; it is path leading to success and truth." - Bruce Lee |
|
Nazaj na vrh |
|
 |
David92 Član


Pridružen-a: Sre 22 Feb 2012 11:22 Prispevkov: 292 Aktiv.: 1.80 Kraj: Lendava
|
Objavljeno: Sre Jan 09, 2013 8:08 pm Naslov sporočila: |
|
|
Ko preverim v Devcpp, dobim: 28FF48
kar se mi zdi velika številka za šestnajstiški zapis:
Hexa: 28FF48
Deca: 2686792
Binary: 1010001111111101001000
LP,
David _________________ "To me, defeat in anything is merely temporary.. Defeat simply tells me that something is wrong in my doing; it is path leading to success and truth." - Bruce Lee |
|
Nazaj na vrh |
|
 |
David92 Član


Pridružen-a: Sre 22 Feb 2012 11:22 Prispevkov: 292 Aktiv.: 1.80 Kraj: Lendava
|
Objavljeno: Sre Jan 09, 2013 8:19 pm Naslov sporočila: |
|
|
Se opravičujem za tolko postov, ampak ni tipke Uredi.
Sem popravil ves program v to obliko:
void main()
{
int x=5;
int y=0;
if(x&(0x1))y=(y|(0x2));
printf("Y v sestnajstiski obliki je %X \n",y); //izpišemo v šetnajstiški obliki
system("PAUSE");
return 0;
}
In sedaj je izpis Y=2, kar pa je pravilno!
Upam, da ni samo naklučje.
LP,
David _________________ "To me, defeat in anything is merely temporary.. Defeat simply tells me that something is wrong in my doing; it is path leading to success and truth." - Bruce Lee |
|
Nazaj na vrh |
|
 |
int47 Član


Pridružen-a: Pon 15 Dec 2003 0:10 Prispevkov: 2104 Aktiv.: 8.88 Kraj: Ljubljana
|
Objavljeno: Čet Jan 10, 2013 8:30 pm Naslov sporočila: |
|
|
David92 je napisal/a: |
Ko preverim v Devcpp, dobim: 28FF48
kar se mi zdi velika številka za šestnajstiški zapis: |
Kot si že ugotovil, X in Y na nista bila definirana.
Problem je tudi, da funkcija preveri(), dobi kopijo parametrov.
X in Y v preveri() nista ista, kot X in Y v main. Po izhodu iz preveri() je njuna vrednost izgubljena.
-Vrednost Y lahko sporočiš v main z return(Y);
-Funkcijo popraviš, da namesto parametra sprejme kazalec na parameter.
-Ali, ne čisto v C stilu, uporabiš globalne spremenljivke. |
|
Nazaj na vrh |
|
 |
David92 Član


Pridružen-a: Sre 22 Feb 2012 11:22 Prispevkov: 292 Aktiv.: 1.80 Kraj: Lendava
|
Objavljeno: Čet Jan 10, 2013 10:10 pm Naslov sporočila: |
|
|
@int: Na koncu sem objavil brez funkcije preveri. Ampak z main.
Je tako vredu?
LP,
David _________________ "To me, defeat in anything is merely temporary.. Defeat simply tells me that something is wrong in my doing; it is path leading to success and truth." - Bruce Lee |
|
Nazaj na vrh |
|
 |
int47 Član


Pridružen-a: Pon 15 Dec 2003 0:10 Prispevkov: 2104 Aktiv.: 8.88 Kraj: Ljubljana
|
Objavljeno: Čet Jan 10, 2013 10:39 pm Naslov sporočila: |
|
|
Če ni zahtevano, da se preverjanje izvrši v funkciji in zadeva deluje, potem je. |
|
Nazaj na vrh |
|
 |
|
|
Ne, ne moreš dodajati novih tem v tem forumu Ne, ne moreš odgovarjati na teme v tem forumu Ne, ne moreš urejati svojih prispevkov v tem forumu Ne, ne moreš brisati svojih prispevkov v tem forumu Ne ne moreš glasovati v anketi v tem forumu Ne, ne moreš pripeti datotek v tem forumu Ne, ne moreš povleči datotek v tem forumu
|
Uptime: 493 dni
Powered by phpBB © 2001, 2005 phpBB Group
|