Forum Sveta kompjutera

Nazad   Forum Sveta kompjutera > Test Run > Programiranje
Uputstvo Članstvo Kalendar Današnje poruke Pretraži

Programiranje Programski jezici, tehnike, alatke...

Odgovor
 
Alatke vezane za temu Vrste prikaza
Stara 31.3.2012, 0:46   #1
absonic
Član
 
Član od: 4.11.2005.
Poruke: 285
Zahvalnice: 15
Zahvaljeno 7 puta na 6 poruka
Određen forumom Pomoc oko programa u C-u

Pozdrav!
Treba da ispisem mali programcic u C-u koji radi sledece:

ucitava niz, a zatim trazi duzinu najduzeg podniza koji se sastoji od nula i ispisuje pocetnu i krajnju poziciju tog podniza.

Npr, niz je 1 2 0 0 3 0 4 0 0 0 0 8
dakle, duzina najduzeg podniza 0 jeste 4, a pocetna i krajnja pozicija su 8 i 11.

Ovde imam delic koda
Kod:
duz = 0;
	  d = 0;
		for(j=1;j<db;j++) {
			if (b[j-1]==0) {d++; kraj=j; if(d>duz)duz=d;}
			else if(b[j]!=0)d=0;
		}
Ideja je sledeca:
petlja for prolazi kroz niz, ako je tekuci element jednak nuli, duzina niza se uvecava za 1, a promenljiva kraj oznacava da je taj element poslednji. Ako je tekuca duzina veca od duzine, duzina dobija vr tekuce duzine. Zatim se proverava da li je naredni element razlicit od nule. Ako jeste, dolazimo do toga da tekucu duzinu resetujemo na nulu.

Ovo je kostur, za koji sam svestan da ne radi... Medjutim, kako sam pocetnik, i vec sat i po se mlatim sa ovim, trenutno nisam u stanju da smislim logicne ispravke za kod, te bih molio za pomoc.
absonic je offline   Odgovor sa citatom ove poruke
Stara 31.3.2012, 1:17   #2
EclipsE
Starosedelac
 
Član od: 16.4.2006.
Lokacija: Scary Movie Reputacija: ■■□
Poruke: 1.337
Zahvalnice: 378
Zahvaljeno 279 puta na 196 poruka
Slanje poruke preko Skypea korisniku EclipsE
Određen forumom Re: Pomoc oko programa u C-u

Kod:
// b = niz
int pocetak = 0, kraj = 0, duzina = 0, tmp_pocetak = 0, tmp_kraj = 0, tmp_duzina = 0;

for (int i = 0; i < db; i++)
{
    if (b[i] == 0)
    {
        if (tmp_duzina++ == 0) tmp_pocetak = i;
        tmp_kraj = i;
    }
    else
    {
        if (tmp_duzina > duzina)
        {
            pocetak = tmp_pocetak;
            kraj = tmp_kraj;
        }
        tmp_duzina = 0;
    }
}
Ovo sam napisao na najprimitivniji način na koji sam mogao

Ideja je da čuvaš najveće vrednosti u pocetak, kraj i duzina, i imaš neke pomoćne promenljive koje ćeš da koristiš pri prolasku kroz niz.

for petlja kaže sledeće:

Kod:
ukoliko je trenutni član jednak nuli:
    ukoliko je pomoćna dužina jednaka nuli, znači da je to početak niza nula pa postavljam tmp_pocetak na trenutan broj
    uvećam dužinu za 1
    postavim kraj na trenutan broj

ukoliko nije, ovo je kraj niza ili uopšte nije bio niz:
    ako je dužina niza kog sam trenutno izbrojao veća od dužine nekog prethodnog niza:
        postavi pravi početak na moj pomoćni početak
        postavi pravi kraj na moj pomoćni kraj
    postavi pomoćnu dužinu na 0
EclipsE je offline   Odgovor sa citatom ove poruke
Sledeći korisnik se zahvaljuje korisniku EclipsE na korisnoj poruci:
absonic (31.3.2012)
Stara 31.3.2012, 10:00   #3
Todors
Član
 
Član od: 16.4.2010.
Lokacija: Pančevo
Poruke: 462
Zahvalnice: 41
Zahvaljeno 68 puta na 63 poruka
Određen forumom Re: Pomoc oko programa u C-u

Ne treba ti toliko promenjivih jer možeš i sa manje da uradiš istu stvar.

Samo sam malo izmenio tvoj kod i već lepše izgleda .

Kod:
int kraj = 0, duzina = 0, tmp_duzina = 0;

for (int i = 0; i < db; i++)
{
    if (b[i] == 0)
    {
        tmp_duzina++;
    }
    else
    {
        if (tmp_duzina > duzina)
        {
            duzina = tmp_duzina;
            kraj = i;
        }
        tmp_duzina = 0;
    }
}
Ako ti treba početak to je (kraj - duzina) .
Todors je offline   Odgovor sa citatom ove poruke
Sledećih 2 korisnika se zahvaljuje korisniku Todors na korisnoj poruci:
absonic (31.3.2012), EclipsE (31.3.2012)
Stara 31.3.2012, 13:53   #4
absonic
Član
 
Član od: 4.11.2005.
Poruke: 285
Zahvalnice: 15
Zahvaljeno 7 puta na 6 poruka
Određen forumom Re: Pomoc oko programa u C-u

Veliko hvala, ljudi!
Ako jos negde zapnem, pitam ovde

EDIT:
Todos, sada sam isprobao ovaj kod, i javlja se mali problem. Kada je niz nula na kraju,
tipa 1 2 3 0 0 2 0 0 0 0, program ga ne konstatuje, tj izbacuje da je najduzi niz nula duzine 2?

EDIT 2:
uspeo sam da resim problem tako sto sam izmenio sledeci deo
Kod:
for (int i = 0; i <= db; i++)

Poslednja ispravka: absonic (31.3.2012 u 17:39)
absonic je offline   Odgovor sa citatom ove poruke
Stara 31.3.2012, 18:19   #5
zokocx
Starosedelac
 
Član od: 8.4.2006.
Lokacija: Beograd
Poruke: 2.590
Zahvalnice: 919
Zahvaljeno 585 puta na 364 poruka
Određen forumom Re: Pomoc oko programa u C-u

Sa tom promenom operatora u uslovu for petlje (< ba <=) pristupas i 12 elementu niza (probijas index), a ako kojim slucajem je to null terminator '\0' onda se i to racuna ako nije takav niz mozes da dobijes neku gresku u toku izvrsenja a i nemoras.

Mozda najsigurnije resenje je da dodas posle bloka for petlje
Kod:
if(tmp_duzina > duzina)
duzina = tmp_duzina
jer tmp_duzina sadrzi duzinu podniza ali ne udje u else da to dodeli prom. duzina.
zokocx je offline   Odgovor sa citatom ove poruke
Sledećih 2 korisnika se zahvaljuje korisniku zokocx na korisnoj poruci:
absonic (31.3.2012), EclipsE (31.3.2012)
Stara 31.3.2012, 18:55   #6
absonic
Član
 
Član od: 4.11.2005.
Poruke: 285
Zahvalnice: 15
Zahvaljeno 7 puta na 6 poruka
Određen forumom Re: Pomoc oko programa u C-u

Dada, sigurnija varijanta.

Sad, još jedno pitanje:
imam niz 1 2 3 4 5 6 7 8 9 10
pošto jezik c indeksee elemenata niza računa od 0, broj 4 bi mi bio na poziciji 3 ili 4?
absonic je offline   Odgovor sa citatom ove poruke
Odgovor

Bookmarks sajtovi


Vaš status
Ne možete postavljati teme
Ne možete odgovarati na poruke
Ne možete slati priloge uz poruke
Ne možete prepravljati svoje poruke

BB kod: uključeno
Smajliji: uključeno
[IMG] kod: uključeno
HTML kod: isključeno


Slične teme
tema temu započeo forum Odgovora Poslednja poruka
Procena računara alien Šta da kupim? 6942 17.12.2023 10:28
PASTE teksta, pomoc hitno potrebna Kobilic Kvarovi 4 31.10.2011 15:48
Virus POMOC Kobilic otpaTci 11 9.5.2011 19:21
Potrebna mi pomoc! Snakebite 2D radovi 4 30.4.2009 1:08
Kako postici anonimnost kod koriscenja P2P programa The Finest Serbian Since '82 Internet tehnologije 31 7.8.2007 1:35


Sva vremena su po Griniču +2 h. Sada je 19:51.


Powered by vBulletin® verzija 3.8.7
Copyright ©2000–2024, vBulletin Solutions, Inc.
Hosted by Beograd.com