www.elektronik.si Seznam forumov www.elektronik.si
Forum o elektrotehniki in računalništvu
 
 PomočPomoč  IščiIšči  Seznam članovSeznam članov  SkupineSkupine  StatisticsStatistika  AlbumAlbum  DatotekeFilemanager DokumentacijaDocDB LinksPovezave   Registriraj seRegistriraj se 
  PravilaPravila  LinksBolha  PriponkePriponke  KoledarKoledar  ZapiskiZapiski Tvoj profilTvoj profil Prijava za pregled zasebnih sporočilPrijava za pregled zasebnih sporočil PrijavaPrijava 

Programiranje - pomoč
Pojdi na stran 1, 2  Naslednja
 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Naloge, izpiti, seminarske
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
David92
Član
Član



Pridružen-a: Sre 22 Feb 2012 11:22
Prispevkov: 292
Aktiv.: 1.80
Kraj: Lendava

PrispevekObjavljeno: Tor Jan 08, 2013 2:35 pm    Naslov sporočila:  Programiranje - pomoč Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Gklemen
Član
Član



Pridružen-a: Sob 29 Nov 2008 0:06
Prispevkov: 112
Aktiv.: 0.56
Kraj: Rogatec

PrispevekObjavljeno: Tor Jan 08, 2013 2:43 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
David92
Član
Član



Pridružen-a: Sre 22 Feb 2012 11:22
Prispevkov: 292
Aktiv.: 1.80
Kraj: Lendava

PrispevekObjavljeno: Tor Jan 08, 2013 6:10 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
int47
Član
Član



Pridružen-a: Pon 15 Dec 2003 0:10
Prispevkov: 2104
Aktiv.: 8.88
Kraj: Ljubljana

PrispevekObjavljeno: Tor Jan 08, 2013 6:28 pm    Naslov sporočila:   Odgovori s citatom

Y = (Y & ~2) | ((X<<1)&2);
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
int47
Član
Član



Pridružen-a: Pon 15 Dec 2003 0:10
Prispevkov: 2104
Aktiv.: 8.88
Kraj: Ljubljana

PrispevekObjavljeno: Tor Jan 08, 2013 6:37 pm    Naslov sporočila:   Odgovori s citatom

Ker je na začetku Y=0, ni treba brisat bita v Y. Zadostuje:

Y = (X<<1)&2;
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
David92
Član
Član



Pridružen-a: Sre 22 Feb 2012 11:22
Prispevkov: 292
Aktiv.: 1.80
Kraj: Lendava

PrispevekObjavljeno: Tor Jan 08, 2013 7:30 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
MarkoM
Član
Član



Pridružen-a: Tor 12 Sep 2006 15:29
Prispevkov: 2825
Aktiv.: 12.37
Kraj: Lovrenc na P.

PrispevekObjavljeno: Tor Jan 08, 2013 7:39 pm    Naslov sporočila:   Odgovori s citatom

http://en.wikipedia.org/wiki/Bitwise_operations_in_C
To bi znalo pomagati.
Sicer je pa najbolje poskusiti. Vseeno kateri C prevajalnik, ker rezultate naj bi dali vsi enake.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
David92
Član
Član



Pridružen-a: Sre 22 Feb 2012 11:22
Prispevkov: 292
Aktiv.: 1.80
Kraj: Lendava

PrispevekObjavljeno: Sre Jan 09, 2013 6:54 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
int47
Član
Član



Pridružen-a: Pon 15 Dec 2003 0:10
Prispevkov: 2104
Aktiv.: 8.88
Kraj: Ljubljana

PrispevekObjavljeno: Sre Jan 09, 2013 7:07 pm    Naslov sporočila:   Odgovori s citatom

Č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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
David92
Član
Član



Pridružen-a: Sre 22 Feb 2012 11:22
Prispevkov: 292
Aktiv.: 1.80
Kraj: Lendava

PrispevekObjavljeno: Sre Jan 09, 2013 7:55 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
David92
Član
Član



Pridružen-a: Sre 22 Feb 2012 11:22
Prispevkov: 292
Aktiv.: 1.80
Kraj: Lendava

PrispevekObjavljeno: Sre Jan 09, 2013 8:08 pm    Naslov sporočila:   Odgovori s citatom

Ko preverim v Devcpp, dobim: 28FF48

kar se mi zdi velika številka za šestnajstiški zapis:

Hexa: 28FF48
Deca: 2686792
Binary: 1010001111111101001000

Sad

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
David92
Član
Član



Pridružen-a: Sre 22 Feb 2012 11:22
Prispevkov: 292
Aktiv.: 1.80
Kraj: Lendava

PrispevekObjavljeno: Sre Jan 09, 2013 8:19 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
int47
Član
Član



Pridružen-a: Pon 15 Dec 2003 0:10
Prispevkov: 2104
Aktiv.: 8.88
Kraj: Ljubljana

PrispevekObjavljeno: Čet Jan 10, 2013 8:30 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
David92
Član
Član



Pridružen-a: Sre 22 Feb 2012 11:22
Prispevkov: 292
Aktiv.: 1.80
Kraj: Lendava

PrispevekObjavljeno: Čet Jan 10, 2013 10:10 pm    Naslov sporočila:   Odgovori s citatom

@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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
int47
Član
Član



Pridružen-a: Pon 15 Dec 2003 0:10
Prispevkov: 2104
Aktiv.: 8.88
Kraj: Ljubljana

PrispevekObjavljeno: Čet Jan 10, 2013 10:39 pm    Naslov sporočila:   Odgovori s citatom

Če ni zahtevano, da se preverjanje izvrši v funkciji in zadeva deluje, potem je.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Naloge, izpiti, seminarske Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Pojdi na stran 1, 2  Naslednja
Stran 1 od 2

 
Pojdi na:  
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