Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Problemce sa nizovima u C-u

[es] :: C/C++ programiranje :: Problemce sa nizovima u C-u

[ Pregleda: 3981 | Odgovora: 9 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

sportbili

Član broj: 5083
Poruke: 16
*.InfoSky.Net



Profil

icon Problemce sa nizovima u C-u10.09.2002. u 03:25 - pre 263 meseci
Imam sledeci problem. U programu uzimam celobrojne vrednosti i smestam u
niz. Kada naidje EOF zelim da program od tog elementa pa nadalje sve
elemente niza do LENGTH-og inicijalizuje na 0, medjutim nesto ne stima.

Ovo su definicije koriscenih funkcija.
Funkcija geta(niz) puni niz podacima koje korisnik unosi,
dok bi ini(niz,i) trebalo da inicijalizuje niz pocev od i-tog elementa
medjutim to ne radi vec ti elementi dobiju slucajne vrednosti.

HELP! I jos jedno pitanje a to je sta je garbage collector?

#define LENGHT 10

int nekiniz[LENGHT];

deklaracije funkcija

main() {...}

void geta(int a[])
{
int i;
for (i=0; i<LENGTH; i++)
if (a != EOF) scanf("%d", &a);
else { ini(a, i); break; }
}


void ini(int a[], int b)
{
int i;
for (i=b; i<LENGTH; i++) a=0;
}

nekiniz[] nije globalna promenljiva nego eto neka stoji da ne bude greska
sto je nema.

Da napomenem da sam petljao cak i sa getw-om (skroz bezuspesno).
 
Odgovor na temu

Dragoslav Krunić

Član broj: 225
Poruke: 1083
*.verat.net



Profil

icon Re: Problemce sa nizovima u C-u10.09.2002. u 10:30 - pre 263 meseci
Koliko ja vidim, incijalozovao si LENGHT, ali kasnije u programu koristiš LENGTH, tj. zamenio si slova. Inače, česta greška u kucanju te reči, barem kod mene.
 
Odgovor na temu

sportbili

Član broj: 5083
Poruke: 16
*.InfoSky.Net



Profil

icon Re: Problemce sa nizovima u C-u10.09.2002. u 11:31 - pre 263 meseci
Samo sam definicije paste-ovao a ovo gore sam kucao na brzinu online,
tako da je u originalu ispravno. Nesto drugo ne valja. Ipak hvala.
 
Odgovor na temu

turncoat
Bg, Kg, Va

Član broj: 4063
Poruke: 241
*.ptt.yu

Sajt: marko.uskokovic.name


Profil

icon Re: Problemce sa nizovima u C-u10.09.2002. u 13:02 - pre 263 meseci
Sledeci kod ce delimicno da uradi to sto si hteo.
Stavio sam a[ii]!=-1 jer ne znam kako da preko tastature unesem EOF.
Trebalo bi da bude ^Z ali nece (kod mene na WinME).
U tvom kodu ne valja dodeljivanje vrednosti clanovima niza.
Ne treba a=0. vec a[ii]=0.
Samo a je pointer na prvi clan niza, mogao si da stavis i *(a+ii).

Code:

/*-------------------------  primer.c -------------------------------*/
#include <stdio.h>
#define LEN 10   /* niz ce imati 11 clanova*/

void geta(int a[]);
void ini(int a[],int);

void geta(int a[])
{
int ii;
ii=0;
scanf("%d",&a[ii]);
while ((a[ii] != -1)  && (ii!=LEN))
{    ii++;   scanf("%d", &a[ii]);   };
ini(a, ii);
}


void ini(int a[], int b)
{
int ii;
for (ii=b; ii<LEN; ii++) a[ii]=0;
}


int main()
{
int ii;
int nekiniz[LEN];  
geta(nekiniz);
for (ii=0;ii<LEN;ii++) printf ("%d  ",nekiniz[ii]);
printf("\n");
system ("PAUSE");
  return 0;
}

/*-------------------------  primer.c -------------------------------*/


[Ovu poruku je menjao turncoat dana 11.09.2002 u 01:59 AM GMT]
"Ako hoćeš da saznaš, pristani na sve"
- Džoni Štulić
 
Odgovor na temu

anon676

Član broj: 676
Poruke: 759
*.verat.net



Profil

icon Re: Problemce sa nizovima u C-u10.09.2002. u 15:02 - pre 263 meseci
garbage colection nemas u c-u, to imas u moduli 3. mnogo korisna i dobra stvar, bar sam tako cuo :)
 
Odgovor na temu

leka
Dejan Lekić
senior software engineer, 3Developers
Ltd.
London, UK

Član broj: 234
Poruke: 2534
*.racasse.se

Sajt: dejan.lekic.org


+2 Profil

icon Re: Problemce sa nizovima u C-u10.09.2002. u 16:38 - pre 263 meseci
Jos jedan pocetnicki problem izgleda... Te vrednosti koje te bude NISU slucajne! :) Tu vrednosti koje se nalaze u memoriji na adresama koje odgovaraju elementima niza koji nameravas da koristis u svom programu. O cemu se radi...
Recimo da zelis da koristis niz iaMojNiz koji ima 5 elemenata, i uradis dakle nesto tipa
Code:

int iaMojNiz[4];

Nakon ove linije se zna da isMojNiz niz pocinje od adrese 0xbabadeda (pretpostavka, ovo se nikad ne zna :), ali sama linija NIJE OBRISALA podatke koji su na toj adresi (na toj adresi pocinje prvi element niza iaMojNiz!) bili pre izvrsavanja te linije. Dakle, prostim recima stari podaci su jos tu, u memoriji. Zbog toga kad se odmah nakon ove linije ovaj niz odstampa sa recimo:
Code:

int ii;
for (ii = 0; ii < 5; ++ii)
  printf("Element %d : %d\n", ii, iaMojNiz[ii]);

dobice se rezultat koji je nemoguce predvideti. Evo sta sam ja dobio:
Code:

Element 0 : 2293640
Element 1 : -1
Element 2 : 2293644
Element 3 : 575
Element 4 : 2293664

Neko od vas kad bi iskompajlirao programcic (na kraju cu dati i kod) koji ovo stampa i kada bi ga startovao na svom kompjuteru dobio bi totalno drugacije rezultate...

A evo i koda:
Code:

#include <stdio.h>
#include <string.h>

int main(void)
{
    int iaMojNiz[4];
    
    int ii;
    for (ii = 0; ii < 5; ++ii)
        printf("Element %d : %d\n", ii, iaMojNiz[ii]);

    getch();
    return 0;
}


(Dev-C++ projekat cu da zalepim uz poruku.)


Dejan Lekic
software engineer, MySQL/PgSQL DBA, sysadmin
Prikačeni fajlovi
 
Odgovor na temu

Dragi Tata
Malo ispod Kanade

Član broj: 1958
Poruke: 3906
199.171.112.*



+6 Profil

icon Re: Problemce sa nizovima u C-u10.09.2002. u 17:31 - pre 263 meseci
Citat:
dARKmIND:
garbage colection nemas u c-u, to imas u moduli 3. mnogo korisna i dobra stvar, bar sam tako cuo :)


"Đubretar" imaš u većini OO jezika, uključujući Javu i C#, a imaš ga i u Lisp-u.

Što se rada sa memorijom tiče postoje dva različita pristupa:

1) Lisp pristup: "Memorija je previše bitna stvar da bismo pustili programera da upravlja njome."

2) C pristup: "Memorija je previše bitna stvar da bismo pustili kompjuter da upravlja njome."

Moja malenkost je pristalica pristupa br 2), ali ima dosta onih koji više vole 1) i ti su ljubitelji garbage collector-a - programa koji "čisti" memoriju koja više nije u upotrebi.

Mada se u mnogim knjigama može naći tvrdnja kako GC povećava produktvinost programeru, jer ga oslobađa brige o čišćenju memorije, empirijska istraživanja nisu donela potvrdu ovakvog mišljenja. Međutim, dokazano je da programi rađeni u GC jezicima zahtevaju mnogo više memorije i CPU resursa (sporije rade) nego isti takvi programi rađeni u jezicima bez GC-a.

Uostalom, memorija je samo jedan od resursa koji programi upotrebljavaju, a GC ne samo da ne čisti ostale, nego otežava njihovo čišćenje.

Ako je neko posle ove moje tirade zaključio da nisam "zaljubljen" u GC, taj je potpuno u pravu :)
 
Odgovor na temu

sportbili

Član broj: 5083
Poruke: 16
*.dial.InfoSky.Net



Profil

icon Re: Problemce sa nizovima u C-u10.09.2002. u 19:56 - pre 263 meseci
Citat:
leka:
Jos jedan pocetnicki problem izgleda... Te vrednosti koje te bude NISU slucajne! :) Tu vrednosti koje se nalaze u memoriji na adresama koje odgovaraju elementima niza koji nameravas da koristis u svom programu. O cemu se radi...


Dalo se primetiti da se slicne vrednosti ponavljaju. Medjutim nije problem u tome
koje se vrednosti javljaju jer su skroz uselles vec kako njih zameniti bilo kojom
drugom, u konkretnom slucaju nulom.

- U medjuvremenu problem resen - kao da ga nije ni bilo. Svasta. Pogledaj poruku ispod. *:-)

Citat:

Nakon ove linije se zna da isMojNiz niz pocinje od adrese 0xbabadeda (pretpostavka, ovo se nikad ne zna :), ali sama linija NIJE OBRISALA podatke koji su na toj adresi (na toj adresi pocinje prvi element niza iaMojNiz!) bili pre izvrsavanja te linije. Dakle, prostim recima stari podaci su jos tu, u memoriji.


Kapiram nego me interesuje kako su ti podaci tu i dospeli? Posto su evidentan junk. Da li ih kompajler generise ili os ili ko/sta?

POZ

[Ovu poruku je menjao sportbili dana 10.09.2002 u 08:08 PM GMT]
 
Odgovor na temu

sportbili

Član broj: 5083
Poruke: 16
*.dial.InfoSky.Net



Profil

icon Re: Problemce sa nizovima u C-u10.09.2002. u 20:07 - pre 263 meseci
Citat:
turncoat:
Sledeci kod ce delimicno da uradi to sto si hteo.
Stavio sam a!=-1 jer ne znam kako da preko tastature unesem EOF.
Trebalo bi da bude ^Z ali nece (kod mene na WinME).


Zbog EOF-a je int c da bi mogao da poredi sa njim.

Citat:

U tvom kodu ne valja dodeljivanje vrednosti clanov
ima niza.
Ne treba a=0. vec a[ i ]=0.
Samo a je pointer na prvi clan niza, mogao si da stavis i *(a+i).


[ i ] je tag za italic na forumu tako da si me u prvi mah zbunio sa "ne treba a=0 vec a=0" :-)) . Uf bre :-) u "originalnom" sorsu sam uredno stavio a[ i ], UZMEM I
ISKOMPAJLIRAM DOK OVO PISEM I RADI.

Imam duhove u kompu :-) Znaci niti je LENGHT niti je a=0 vec nesto drugo bilo
po sredi. Inace radim pod Win2000 i sa edit-om kucam C pa u istom prozoru
kompajliram sa Borland C/C++ 3.1. Postoji mogucnost da je on recimo nesto izbagovao, jer ja sors NISAM menjao od tada (da li je win nesto baferovao ko zna).

U svakom slucaju hvala i tebi i ostalima koji su odgovorili na ovaj topic.
 
Odgovor na temu

leka
Dejan Lekić
senior software engineer, 3Developers
Ltd.
London, UK

Član broj: 234
Poruke: 2534
*.telia.com

Sajt: dejan.lekic.org


+2 Profil

icon Re: Problemce sa nizovima u C-u11.09.2002. u 01:21 - pre 263 meseci
Ti podaci su u memoriji ostali nakon nekog programa... Nikada se ne zna kog programa, zasto su tu ostali i tako dalje...
Dejan Lekic
software engineer, MySQL/PgSQL DBA, sysadmin
 
Odgovor na temu

[es] :: C/C++ programiranje :: Problemce sa nizovima u C-u

[ Pregleda: 3981 | Odgovora: 9 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.