|
[ SanelD @ 14.03.2005. 08:43 ] @
| Potrebna mi je pomoč u vezi zadatka iz C programskog jezika. Dakle, dobio sam da uradim zadatak u C jeziku, ali mi izgleda zaista komplikovano (programiranje mi nije jaca strana).
Zadatak:
Napisati program u programskom jeziku "C", koji će u bilo kojem "C" programu koji mu se preda kao parametar analizirati upotrebu konstanti.
Analiza podrazumijeva:
- ispis linije na kojoj počinje i na kojoj završava naredba,
- sintaksnu analizu, ukoliko postoji neka greška - linija koda i ispis greške
- program napisati u više funkcija koje su napisane u odvojenim datotekama
- uz program priložiti testni primjer
Pokušavao sam na nekoliko nacina ovo uraditi, ali (pretpostavljate) neuspjesno. Bio bi veoma zahvalan na pomoci.
Unaprijed hvala |
[ filmil @ 14.03.2005. 09:04 ] @
Citat: Bio bi veoma zahvalan na pomoci.
Pošalji nam šta si pokušao da napraviš kako bi se odatle krenulo.
f
[ SanelD @ 14.03.2005. 09:17 ] @
Sve je to na samom pocetku, i ne pomijera se. :(
Ali imam jedan slican zadatak, koji sam uspio naci. Prilično je slican mome zadatku.
To je na papiru, pa ce mmu trebati malo da ga otkucam
[ zvrba @ 14.03.2005. 12:29 ] @
Zadatak kao takav je jako nedorecen i _jako_ tezak ako ga se shvati doslovno.
Citat: SanelD
Napisati program u programskom jeziku "C", koji će u bilo kojem "C" programu koji mu se preda kao parametar analizirati upotrebu konstanti.
Sto je konstanta? Npr.:
Code:
#define a 3.14
const int b = 2.14;
float f(void) {
return a+b*1.14;
}
Sto je prema zadatku ovdje konstanta? 1.14? a? b? sve troje?
Citat:
- ispis linije na kojoj počinje i na kojoj završava naredba,
Koja naredba? Sto je sa compound naredbama (unutar {})?
Citat:
- sintaksnu analizu, ukoliko postoji neka greška - linija koda i ispis greške
C jezik kakav je, sintaksna analiza nije uvijek moguca bez semanticke analize. Ovaj posao radi kompajler. Kompajler pise TIM od nekoliko profesionalnih programera, nikako pocetnika.
Citat:
Bio bi veoma zahvalan na pomoci.
Unaprijed hvala
Ne mogu ti pomoci jer zadatak nije dovoljno definiran. Tko god da je zadao ovakav zadatak - NESPOSOBAN JE. Bilo kao programer, bilo kao profesor, a mozda i oboje istovremeno.
[ SanelD @ 15.03.2005. 08:17 ] @
Ja sam dobio takav zadatak, pa sam ga i doslovno napisao. Iskreno ovdje mi je malo toga jasno.
Zadatak koji sam dobio kao primjer zapravo i nije ono sto bi meni moglo pomoc.
Citat: Tko god da je zadao ovakav zadatak - NESPOSOBAN JE. Bilo kao programer, bilo kao profesor, a mozda i oboje istovremeno.
Osoba koja ima oko 70 godina i ujedno je ucila asambler u svoje vrijeme, stvarno bi se mogao s tobom složiti.
Meni bi dobro dosla bilo kakva pomoc.
[ drazen_tb @ 15.03.2005. 14:37 ] @
pazi ovako, #define int a; ti je samo makro,tj. gdje god naidje u kodu c umjesto a vrijednost koju si ti definisao po tipu i po vrijednosti dakle ideja rijesenja slijedi:
taj kod koji ti je proslijedjen kao parametar posmatraj kao jednu datoteku.
Citas red po red, postavis odredjene brojace kako bi znao u kom redu se nalazis.
Poredis slova sve dok ne otkrijes gdje se nalazi <#define blabla ili const a vrijednost> dakle nasao si gdje su defiinisani. Sledece sto treba da pamtis jeste promjenjliva koja se nalazi kao argument ovim makroima i dalje u tekstu da tragas za njima i naravno da ispisujes pronadjene rezultate!
PS: nadam se da je ovo bilo od pomoci, a ako nije javi se da ti napisem kod kada budem imao vremena!
[ SanelD @ 16.03.2005. 09:29 ] @
Citat: PS: nadam se da je ovo bilo od pomoci, a ako nije javi se da ti napisem kod kada budem imao vremena!
Naravno da je od pomoci
Usput, uradio sam nesto i kod profesora je proslo mada i sam znam da neradi kako treba ali sta je tu je. :)
Hvala svima koji su mi pomogli
[ zvrba @ 16.03.2005. 11:52 ] @
Citat: drazen_tb:
Citas red po red, postavis odredjene brojace kako bi znao u kom redu se nalazis.
Ne mozes citati red po red jer je dozvoljeno spajanje redova sa \, npr:
Code:
#define ABCD -12
int x=12*AB\
CD;
Citat:
Sledece sto treba da pamtis jeste promjenjliva koja se nalazi kao argument ovim makroima i dalje u tekstu da tragas za njima i naravno da ispisujes pronadjene rezultate!
Ne radi ni ovo, npr. sljedeci primjer:
Code:
int f1(int a)
{
const int x = 14;
return x*a;
}
int f2(int a)
{
int x = a+a;
return x*x;
}
U funkciji f2 x vise nije konstanta koja ima vrijednost 14 nego obicna varijabla.
Kao sto rekoh, za ispravno rjesenje treba potpuna sintaksna i semanticka analiza - a to radi iskljucivo kompajler.
[ leka @ 16.03.2005. 16:02 ] @
Ja nisam od onih koji ce na ucitelja, nastavnika, profesora (sta god) da baca drvlje i kamenje cim mu nesto u zivotu zapne. Cilj postojanja tih ljudi nije da te nauci svemu sto bi ti trebalo da znas, vec da te uputi i da ti kaze odakle sta, i kada, treba da naucis. Ako ti sam ne sednes i naucis to sto ti je ta osoba rekla, onda si sam kriv sto nesto ne znas.
Misljenja sam da nastavnici NE MORAJU uslovno biti dobro programeri da bi od djaka napravili programere. - Glavno, MNOGO vaznije je da oni budu dobri pedagozi.
Smeo bih da dam desnu ruku da je originalna postavka zadatka drugacija od Sanelove interpretacije (procitati na pocetku ove diskusije). Cak i da nije, jasno je iz aviona sta taj program treba da radi, i kako da radi, kao i kako treba da se realizuje (u vise modula).
S obzirom da znam kakvo je skolstvo, i s obzirom da sam i ja nekada bio djak i da znam kako je djacima MNOGO lakse kriviti ucitenje/nastavnike/profesore, siguran sam da je to i ovde slucaj - jedan lenji djak dolazi po N+prvi put na ES da mu se resi zadatak koji bi on da je bio malo pazljiviji i malo samo vise radio, znao i mogao i da razume i da ga resi.
[ drazen_tb @ 16.03.2005. 19:26 ] @
zvrba
------------------------------------------------------------------------------
Code:
int f1(int a)
{
const int x = 14;
return x*a;
}
int f2(int a)
{
int x = a+a;
return x*x;
}
U funkciji f2 x vise nije konstanta koja ima vrijednost 14 nego obicna varijabla.
------------------------------------------------------------------------------
GLUPOST!!!!
Pa valjda tolko znas da ti C nece dozvoliti da dva puta definises istu stvar razlicitim tipovima u istom programu!!!
Problem je bio da se ispise linija koda gdje pocinje i zavrsava sto znaci spajanje redova ne pije vode, moze da ispise sve!!!
I ko to koristi spajanje redova ????
[ igac @ 16.03.2005. 22:28 ] @
x je var. u 2 razlicite fja samim tim to su dve POTPUNO razlicite varijable... a ko ne koristi \ za spajanje redova? (pogotovo kod #definea... jest da je ranije bilo problema kada kompajler naidje na to ali koliko sam primjetio nema ih vise, sve radi kao sat...)
[ drazen_tb @ 18.03.2005. 08:30 ] @
a joj
kao sto rekoh const je makro sto znaci normalni ljudi ih koriste i definisu u samom zaglavlju programa, tj koriste globalne promjenjljive kako tokom citavog programa nebi morali pisati recimo 3.1415... vec samo napise x. taj x se definise samo jednom i poslije ga nemozes mijenjati, nece dozvoliti!
[ zvrba @ 18.03.2005. 10:05 ] @
Citat: drazen_tb: a joj
kao sto rekoh const je makro sto znaci normalni ljudi ih koriste i definisu u samom zaglavlju programa, tj koriste globalne promjenjljive kako tokom citavog programa nebi morali pisati recimo 3.1415... vec samo napise x. taj x se definise samo jednom i poslije ga nemozes mijenjati, nece dozvoliti!
const NIJE makro. const je varijabla sa alociranim prostorom (dakle, ima adresu) i moze imati bilo eksternal bilo internal linkage. ako ima internal linkage, tada u svakom source fajlu mozes imati varijablu istog imena razlicitih vrijednosti i tipova.
makro zamjenjuje pretprocesor prije nego sto uopce dodje do kompajlera i ako kazes nesto tipa
Code:
#define A 3.14
kompajler NEMA POJMA da u programu postoji "globalna varijabla" imena A. stovise, moguce mu je i promijeniti vrijednost na prljavi nacin (jednostavno novi #define; pretprocesor ce samo dati warning) ili prvo napraviti
Code:
#undef A
#define A 26
To je nesto sto ne mozes napraviti sa const.
Nesto sto ne mozes napraviti sa makroom a mozes sa konstantom je npr. uzimanje adrese:
Code:
f(&A)
nece raditi jer A nema alociran prostor nego je obicna konstanta (kako god da je f definiran).
A tvoj pojam "normalnih ljudi" je izgleda bitno ogranicen tvojim znanjem C-a.
[ neo01 @ 25.03.2005. 18:11 ] @
Citat: Napisati program u programskom jeziku "C", koji će u bilo kojem "C" programu koji mu se preda kao parametar analizirati upotrebu konstanti.
Analiza podrazumijeva:
- ispis linije na kojoj počinje i na kojoj završava naredba,
- sintaksnu analizu, ukoliko postoji neka greška - linija koda i ispis greške
- program napisati u više funkcija koje su napisane u odvojenim datotekama
- uz program priložiti testni primjer
Vecu glupost od zadatka nisam video. Koliko sam razumeo, on hoce:
Da ti napises jedan C program koji ce kao parametar imati drugi C program (sto bi sigurno znacilo da se predaje source code, a ne kompajlirani C)
Analiza mu je totalno konfuzna i nejasna i zahteva dodatna pitanja:
Citat: - ispis linije na kojoj počinje i na kojoj završava naredba,
Sta on pod ovim podrazumeva? Da ti napravis program koji ce da trazi i identifikuje naredbe i potom ispise lokaciju istih, gde ih je nasao, i njenu punu sadrzinu?!
Citat: - sintaksnu analizu
Kakve su ovo nebuloze???! Zar ovo vec ne radi sam kompajler?
Citat: - program napisati u više funkcija koje su napisane u odvojenim datotekama
Ovo je jasnije.
Citat: - uz program priložiti testni primjer
Ok, ali neka on prvo objasni sta podrazumeva pod prvim i drugim delom te analize???
[ SanelD @ 26.03.2005. 08:46 ] @
U potpunosti se slažem s tobom neo01. Zadatak ne da je nejasan nego je blago rečeno glup.
Zato sam se i ja napravio glup, i napravi jos gluplji program koji je samo prividno radio, sve u svemu, prosao je kod prof. sto je i najvažnije.
P.S. Hvala bogu pa ga nije kompajlirao  
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|