|
Programiranje Programski jezici, tehnike, alatke... |
|
Alatke vezane za temu | Vrste prikaza |
|
31.3.2012, 0:46 | #1 |
Član
Član od: 4.11.2005.
Poruke: 285
Zahvalnice: 15
Zahvaljeno 7 puta na 6 poruka
|
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; } 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. |
31.3.2012, 1:17 | #2 |
Starosedelac
|
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; } } 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 |
Sledeći korisnik se zahvaljuje korisniku EclipsE na korisnoj poruci: | ||
absonic (31.3.2012) |
31.3.2012, 10:00 | #3 |
Član
Član od: 16.4.2010.
Lokacija: Pančevo
Poruke: 462
Zahvalnice: 41
Zahvaljeno 68 puta na 63 poruka
|
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; } } |
31.3.2012, 13:53 | #4 |
Član
Član od: 4.11.2005.
Poruke: 285
Zahvalnice: 15
Zahvaljeno 7 puta na 6 poruka
|
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) |
31.3.2012, 18:19 | #5 |
Starosedelac
Član od: 8.4.2006.
Lokacija: Beograd
Poruke: 2.590
Zahvalnice: 919
Zahvaljeno 585 puta na 364 poruka
|
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 |
31.3.2012, 18:55 | #6 |
Član
Član od: 4.11.2005.
Poruke: 285
Zahvalnice: 15
Zahvaljeno 7 puta na 6 poruka
|
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? |
Bookmarks sajtovi |
|
|
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 |