Forum » Programiranje » zlobni C ali kako sprogramirat sledeč program =)
zlobni C ali kako sprogramirat sledeč program =)
charlotte ::
Se že vnaprej opravičujem za dolg prispevek ampak drugač pač ni šlo. V glavnem, trenutno možgani delajo 150 na uro, ampak v parih dneh vsega ne bom zmogu sam (mam še bolj švoh znanje iz programiranja )
Stringbuffer (C) ----> kaj to provzaprov natančneje sploh dela v JAVI? Sicer pa:
Napišite program, ki implementira podatkovno strukturo StringBuffer iz Jave in tako omogoča enostavno delo z nizi tudi v programskem jeziku C. Implementirati je potrebno naslednje funkcije:
a. konstruktorje:
o stringbuffer()
o stringbuffer(kapaciteta)
b. destruktor (ki zbriše niz in sprosti pomnilnik)
c. metode:
o append(niz)
o append(znak)
o charAt(indeks)
o deleteCharAt(indeks)
o indexOf(niz)
o insert(odmik, niz)
o length()
o reverse()
o setCharAt(indeks,znak)
Dolžina niza, ki ga shranimo v to strukturo, naj ne bo omejena (edina omejitev je pomnilniški prostor, ki nam je na voljo). Vse funkcije naj kot parameter prejmejo kazalec na to podatkovno strukturo. Za predstavitev nizov (struktura stringbuffer) uporabite polje, katerega velikost se dinamično spreminja.
Delovanje napisanih funkcij preverite v programu, v katerem jih uporabite za shranjevanje prebranih vrstic iz tekstovne datoteke. Vrstice v datoteki so poljubno dolge, zato jih berite znak po znak in sproti zapisujte v stringbuffer. Vsako prebrano vrstico iz datoteke obrnite in jo zapišite v nov stringbuffer, katerega kapaciteta je enaka dolžini prebrane vrstice. Nato oba stringbufferja izpišite tudi na zaslon (stdout). V prebrani vrstici vsak 10. znak nastavite na vrednost 'X' in izpišite tako spremenjen niz. Nato preverite, ali niz vsebuje znak a (veliki ali mali). V tem primeru iz niza zbrišite vse znake 'a' in 'A' ter na njihovo mesto vstavite niz "007", na konec niza pa dodajte niz ":end.". Če niz ne vsebuje znaka a, na začetek niza dodajte "brez a:". Izpišite tudi ta spremenjeni niz in nato še prazno vrstico. Ime datoteke je podano kot argument programa.
Primer datoteke:
To je prva vrstica, ki se bo zapisala v en niz. Konec.
Potem pa pride druga vrstica.
Pa tretja ...
itd.
In tudi zadnja.
Primer izpisa za zgornjo datoteko:
To je prva vrstica, ki se bo zapisala v en niz. Konec.
.cenoK .zin ne v alasipaz ob es ik ,acitsrv avrp ej oT
To je prvX vrstica,Xki se bo Xapisala vXen niz. KXnec.
To je prvX vrstic007,Xki se bo X007pis007l007 vXen niz. KXnec.:end.
Potem pa pride druga vrstica.
.acitsrv agurd edirp ap metoP
Potem pa Xride drugX vrstica.
Potem p007 Xride drugX vrstic007.:end.
Pa tretja ...
... ajtert aP
Pa tretjaX...
P007 tretj007X...:end.
itd.
.dti
itd.
brez a:itd.
In tudi zadnja.
.ajndaz idut nI
In tudi zXdnja.
In tudi zXdnj007.:end.
Vse to je treba nardit v C-ju. Vsakršna pomoč je hudo dobrodošla, če kdo kak kos kode napiše, lepo lepo prosim da dopiše komentar. Drugače pa vsaka razlaga glede stringbuffra, zgoraj omenjenih metod, konstruktorjev in destruktorjev toplo zaželjena. Da mal dobim občutek s čim se sploh matram zadnje dni. HVALA ZA POMOČ
Stringbuffer (C) ----> kaj to provzaprov natančneje sploh dela v JAVI? Sicer pa:
Napišite program, ki implementira podatkovno strukturo StringBuffer iz Jave in tako omogoča enostavno delo z nizi tudi v programskem jeziku C. Implementirati je potrebno naslednje funkcije:
a. konstruktorje:
o stringbuffer()
o stringbuffer(kapaciteta)
b. destruktor (ki zbriše niz in sprosti pomnilnik)
c. metode:
o append(niz)
o append(znak)
o charAt(indeks)
o deleteCharAt(indeks)
o indexOf(niz)
o insert(odmik, niz)
o length()
o reverse()
o setCharAt(indeks,znak)
Dolžina niza, ki ga shranimo v to strukturo, naj ne bo omejena (edina omejitev je pomnilniški prostor, ki nam je na voljo). Vse funkcije naj kot parameter prejmejo kazalec na to podatkovno strukturo. Za predstavitev nizov (struktura stringbuffer) uporabite polje, katerega velikost se dinamično spreminja.
Delovanje napisanih funkcij preverite v programu, v katerem jih uporabite za shranjevanje prebranih vrstic iz tekstovne datoteke. Vrstice v datoteki so poljubno dolge, zato jih berite znak po znak in sproti zapisujte v stringbuffer. Vsako prebrano vrstico iz datoteke obrnite in jo zapišite v nov stringbuffer, katerega kapaciteta je enaka dolžini prebrane vrstice. Nato oba stringbufferja izpišite tudi na zaslon (stdout). V prebrani vrstici vsak 10. znak nastavite na vrednost 'X' in izpišite tako spremenjen niz. Nato preverite, ali niz vsebuje znak a (veliki ali mali). V tem primeru iz niza zbrišite vse znake 'a' in 'A' ter na njihovo mesto vstavite niz "007", na konec niza pa dodajte niz ":end.". Če niz ne vsebuje znaka a, na začetek niza dodajte "brez a:". Izpišite tudi ta spremenjeni niz in nato še prazno vrstico. Ime datoteke je podano kot argument programa.
Primer datoteke:
To je prva vrstica, ki se bo zapisala v en niz. Konec.
Potem pa pride druga vrstica.
Pa tretja ...
itd.
In tudi zadnja.
Primer izpisa za zgornjo datoteko:
To je prva vrstica, ki se bo zapisala v en niz. Konec.
.cenoK .zin ne v alasipaz ob es ik ,acitsrv avrp ej oT
To je prvX vrstica,Xki se bo Xapisala vXen niz. KXnec.
To je prvX vrstic007,Xki se bo X007pis007l007 vXen niz. KXnec.:end.
Potem pa pride druga vrstica.
.acitsrv agurd edirp ap metoP
Potem pa Xride drugX vrstica.
Potem p007 Xride drugX vrstic007.:end.
Pa tretja ...
... ajtert aP
Pa tretjaX...
P007 tretj007X...:end.
itd.
.dti
itd.
brez a:itd.
In tudi zadnja.
.ajndaz idut nI
In tudi zXdnja.
In tudi zXdnj007.:end.
Vse to je treba nardit v C-ju. Vsakršna pomoč je hudo dobrodošla, če kdo kak kos kode napiše, lepo lepo prosim da dopiše komentar. Drugače pa vsaka razlaga glede stringbuffra, zgoraj omenjenih metod, konstruktorjev in destruktorjev toplo zaželjena. Da mal dobim občutek s čim se sploh matram zadnje dni. HVALA ZA POMOČ
charlotte ::
Sam mam trenutn spisan prototip destruktorja in prbližen kako zrihtat da bo omejitev samo pomnilnik
Mavrik ::
ključne besede: dinamičina alokacija pomnilnika
The truth is rarely pure and never simple.
charlotte ::
A to kej v tem smislu?
struct elem {
int v;
struct elem *nasl;
};
struct elem *dodaj(struct elem *p, int vrednost){
struct elem *novi;
novi = (struct elem *)malloc(sizeof(struct elem));
novi->v = vrednost;
novi->nasl = p;
return novi;
}
void izpis(struct elem *p) {
struct elem *tmp = p;
while(tmp != NULL){
printf("%4d", tmp->v);
tmp = tmp-> nasl; }
printf("\n");
}
int main(){
struct elem *zac = NULL;
zac = dodaj(zac, 17);
izpis(zac);
}
struct elem {
int v;
struct elem *nasl;
};
struct elem *dodaj(struct elem *p, int vrednost){
struct elem *novi;
novi = (struct elem *)malloc(sizeof(struct elem));
novi->v = vrednost;
novi->nasl = p;
return novi;
}
void izpis(struct elem *p) {
struct elem *tmp = p;
while(tmp != NULL){
printf("%4d", tmp->v);
tmp = tmp-> nasl; }
printf("\n");
}
int main(){
struct elem *zac = NULL;
zac = dodaj(zac, 17);
izpis(zac);
}
charlotte ::
Okej najdu sem že kr nekej uporabnih metod, kako jih implementirat v program morm še pogruntat, me pa zanima če kdo ve ime metode, al pa če ve kak bi naredu da bi ti program obrnu string,
recimo:
Slo-tech
hcet-olS
recimo:
Slo-tech
hcet-olS
robbe ::
Narediš novo polje znakov z velikostjo stringa, katerega misliš obrnit. Potem greš pa z for zanko od zadnjega konca stringa do začetka, zraven pa pišeš od začetka-proti koncu v nov string. In string je obrjen.
charlotte ::
OK. Imam nek program pa bi ga rad pognal (linux OS), Zdej mam mapo in mam notr datoteke:
- krneki.c
- krneki.h
- datoteka (navadn teks)
- spetkrneki.c
- spetkrneki.h
- main.c
Zdej .h končnica pomen kokr vem header datoteko, v eni od njih so deklarirane vse funkcije programa, .c so pač datoteke ki jih spišeš za C jezik. Uspel mi je prevest datoteko main, sm pojma nimam kako naj poženem stvar da mi bo delal kot celota.
- krneki.c
- krneki.h
- datoteka (navadn teks)
- spetkrneki.c
- spetkrneki.h
- main.c
Zdej .h končnica pomen kokr vem header datoteko, v eni od njih so deklarirane vse funkcije programa, .c so pač datoteke ki jih spišeš za C jezik. Uspel mi je prevest datoteko main, sm pojma nimam kako naj poženem stvar da mi bo delal kot celota.
BigWhale ::
$ gcc -o foo main.c krneki.c spetkrneki.c
$ ./foo
Pa oprosti, ker beremo tole bolj poredko kot na 20 minut... Se bomo bolj potrudili za drugic! Obljubimo! Vsi skup! ;>
$ ./foo
Pa oprosti, ker beremo tole bolj poredko kot na 20 minut... Se bomo bolj potrudili za drugic! Obljubimo! Vsi skup! ;>
charlotte ::
Hvala ti, ne bi težil če neb blo nujno A to mora bit do pike ista pot? Mislm kaj pomen tist foo? Pa pred prvo in drugo vrstico $gcc...... in $./.... mora bit obakrat pot do mape kjer so te datoteke?
fiction ::
Lahko bi tudi prevedel vsako datoteko posebej z:
gcc -c -o main.o main.c
gcc -c -o krneki.o krneki.c
gcc -c -o spetkrneki.o spetkrneki.c
In potem vse skupaj se povezal v izvrsljiv program z:
gcc -o whatever main.o krneki.o spetkrneki.o
Whatever ali foo ali pa kakorkoli hoces, je pac ime izvrsljivega programa.
$ je ukazni poziv (tega ni treba tipkati).
Namesto main.c bi lahko pisal tudi v stilu direktorij/main.c ampak
glede na to, da pozenes gcc v tistem direktoriju kjer so datoteke ti
tega ni treba.
./ime je konstrukt za zagon izvrsljive datoteke v trenutnem direktoriju.
Ce napises "ime" se bo poskusal najti in pognati program ime v direktorijih, ki so navedeni
v PATH spremenljivki okolja. "." pomeni trenuten direktorij - tako eksplicitno
pozenes program "ime" v trenutnem direktoriju. Lahko bi rekel tudi /home/whatever/whatever/ime
ali pa kaj podobnega. Ce bi v PATH vkljucil ".", bi lahko pognal vse skupaj tudi samo kot "ime"
(ampak to ni najbolj pametno narediti).
Uf, kako sem se razpisal... ceprav sem najprej hotel reci samo RTFM, kar bi bilo
najbrz edino pravilno pri tej lenobi. :)
gcc -c -o main.o main.c
gcc -c -o krneki.o krneki.c
gcc -c -o spetkrneki.o spetkrneki.c
In potem vse skupaj se povezal v izvrsljiv program z:
gcc -o whatever main.o krneki.o spetkrneki.o
Whatever ali foo ali pa kakorkoli hoces, je pac ime izvrsljivega programa.
$ je ukazni poziv (tega ni treba tipkati).
Namesto main.c bi lahko pisal tudi v stilu direktorij/main.c ampak
glede na to, da pozenes gcc v tistem direktoriju kjer so datoteke ti
tega ni treba.
./ime je konstrukt za zagon izvrsljive datoteke v trenutnem direktoriju.
Ce napises "ime" se bo poskusal najti in pognati program ime v direktorijih, ki so navedeni
v PATH spremenljivki okolja. "." pomeni trenuten direktorij - tako eksplicitno
pozenes program "ime" v trenutnem direktoriju. Lahko bi rekel tudi /home/whatever/whatever/ime
ali pa kaj podobnega. Ce bi v PATH vkljucil ".", bi lahko pognal vse skupaj tudi samo kot "ime"
(ampak to ni najbolj pametno narediti).
Uf, kako sem se razpisal... ceprav sem najprej hotel reci samo RTFM, kar bi bilo
najbrz edino pravilno pri tej lenobi. :)
charlotte ::
Hvala fiction, na zagovoru bo pač tesna, in če bo program tak bi ga pač rad znau pognat, sej sem se že sam pozanimal, ampak ko od nekoga druzga še slišm sm bolj sigurn.
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | Makefile in c++Oddelek: Programiranje | 3082 (2122) | Looooooka |
» | [C] kazalčni seznamOddelek: Programiranje | 3109 (2923) | MrBrdo |
» | C strukture, kazalci naloga pomocOddelek: Programiranje | 1469 (1364) | DavidJ |
» | [NALOGA][C] fri-vsp - strukture (struct)Oddelek: Programiranje | 1560 (1401) | Vesoljc |
» | C problemčekOddelek: Programiranje | 1074 (877) | OwcA |