Provera zadatka

1

Provera zadatka

offline
  • Pridružio: 31 Dec 2015
  • Poruke: 1390

Pozdrav! Napisao sam program koji broji koliko ima clanova podniza istih brojeva. Najbolje da objasnim primerom. Imamo niz 1 1 1 2 3 3 3 3 3 4 5. Najduzi podniz istih brojeva je taj gde su trojke, odnosno ima ih 5. To bi bilo resenje zadatka. Evo mog koda.

#include<stdio.h> main() {    int i,n,br=0,pom=0;    printf("Unesi broj elemenata niza: ");    scanf("%i",&n);    int a[20];    for(i=0;i<n;i++)    {       printf("Unesi element niza: ");       scanf("%i",&a[i]);    }    for(i=0;i<n;i++)    {       if(a[i]==a[i+1])       br++;       else       {          if(br>pom)          {             pom=br;             br=0;          }       }    }    printf("%i",pom+1);    scanf("%i"); }

Zeleo bih da nadjete kontra primer. Odnosno neki niz koji moj program ne moze dobro da obradi (ako ima, naravno).

Hvala!



Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
offline
  • Milan
  • Pridružio: 17 Dec 2007
  • Poruke: 14828
  • Gde živiš: Niš

Evo nekih brzih zapažanja:
- Korisnik unese broj manji od 1 kao n => rezultat koji dobija je nevalidan. Glupost, znam, ali što pre počneš da vodiš računa o tome, to bolje. Smile
- Granični slučaj ti nije dobar. Ako je n = 7, petlja ide do 6 i u poslednjoj iteraciji imaš proveru a[6] == a[7], a a[7] nije element tvog niza.



offline
  • Pridružio: 31 Dec 2015
  • Poruke: 1390

Za granice onda treba da umesto for(i=0;i<n;i++) bude for(i=0;i<n-1;i++), a za ovo prvo mi nije bas jasno. Milis da ako korisnik unese n=-3 na primer, nece biti validan rezultat. Pa to onda resim samo tako sto napisem poruku da n treba biti vece od 0?

offline
  • Milan
  • Pridružio: 17 Dec 2007
  • Poruke: 14828
  • Gde živiš: Niš

Tako je. Very Happy

offline
  • Programer
  • Pridružio: 23 Maj 2012
  • Poruke: 4577

Da budem đavolji advokat; na početku main() funkcije nisi definisao tip koji funkcija treba da vraća (int). Jeste da će kompajler ovo automatski uraditi, ali nikako nije dobra praksa Smile

Takođe:



Što se rešava* u par linija koda:
printf("Unesi element niza: "); while (scanf("%d", &a[i]) != 1) {     printf("Molimo unesite validan broj.\nUnesi element niza: ");     scanf("%*s"); }


Takođe, zbog čega ovo na kraju:

scanf("%i");

? Zbog toga na kraju dobijaš segmentation fault.

* ali ne u potpunosti. Kod je i dalje podložan integer overflow-u. Ostavljam ti da sam malo više istražiš o ovom problemu i vidiš kako možeš da unaprediš kod sa bezbednosnog aspekta Smile

offline
  • Milan
  • Pridružio: 17 Dec 2007
  • Poruke: 14828
  • Gde živiš: Niš

Naravno, ima tu mnogo prostora za finese i generalno diskusiju. No, problem je više algoritamski rekao bih, i sa tog aspekta pristup mu je manje više dobar. Smile

offline
  • Pridružio: 31 Dec 2015
  • Poruke: 1390

Ako unesem da je n=10, odnosno broj clanova niza je 10. I ukucam niz 1 3 2 3 1 1 1 1 1 1, program mi izbaci resenje 1. To nije tacno. Trebalo bi 6 da bude. Zasto je to tako?

offline
  • Milan
  • Pridružio: 17 Dec 2007
  • Poruke: 14828
  • Gde živiš: Niš

Debug-er u ruke pa otkrij sam. Smile

offline
  • Pridružio: 15 Maj 2009
  • Poruke: 963

Samo treba da stavis breakpoint, otvoris Watches prozor i klikces na Step Over (Next Line).

CodeBlocks
Visual Studio

offline
  • Milos
  • Pridružio: 05 Dec 2010
  • Poruke: 716
  • Gde živiš: Beograd

U delu gde pise:
if(br>pom)          {         pom=br;         br=0;          }
trebalo bi br=0 da bude van if-a jer to treba da se resetuje i ako nije veci od pom.
if(br>pom) pom=br; br=0;

Ko je trenutno na forumu
 

Ukupno su 1684 korisnika na forumu :: 151 registrovanih, 11 sakrivenih i 1522 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 19602 - dana 30 Mar 2026 00:11

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: A.R.Chafee.Jr., Adaminho1985, advokat84, Ahilius, ajo baba, aramis s, Arhiv, ArmFPGA, Asparagus, Bahuss, BAKI89, bavar357, Bobrock1, bojan_t, bojank, bojanM84, bolenbgd, Bombona, Boris BM, bounty hunters, BraneS, BSD, Bubili, carinko, ceman, CHARLIE JA., Darko8, Darth Malak, Diplomac, DjomlaHomer, djonsule, DovlaODR, draganl, DragoslavS, Dubara, ElGenius, Giskard, Goxy1, GrobarPovratak, Grochow, Hamo77, hellenic, hologram, Ikica977, immicro, InzenjerBL, ivan1973, ivan979, Ivoo, ivran064, Iwo Jima, jalos, Jester, Joint Chief, Jomini, Jovan.D, Kajzer_Soze, kaput21, Karaula, kib, kinez88, king011, king111, koliko, komenski, Kruger, laki_bb, Lazur_01, Le Banner, Levi, Litostroton, LostInSpaceandTime, louderik, luka35, M74AB3, magyar, maksi007, Manjane, Marko Marković, marko.markovic, marsi, matrix_1, max power, mgolub, Mihajlo, mikrimaus, milanpb, mino bosanac, miodrag, MiroslavD, Misirac, mladen.zovko, moldway, mux, Mzee, N.e.m.a.nj.a., Nemanja Opalić, neutrino, Nole, oddsock, ostoja, pablojepao, Papadubi, pavle_pzs, pein, Pekman, Petarvu, Petjan, pisac12, Potkozarje, Prašinar, proka1ng, proljece, PuškeiPlavuše, qurtamurta, radza1, rovac, sajbervulf, Salence74, samocitam, Savantije, Semberija, septembar, Shajlok, Sharpshooter, SK66, slowhand, sluga, Smiljkovich, Sone0883, Sonic, stegonosa, strelac07, styg, t.e.m.p.l.a.r., Tafocus, tritonus, veljko82, veljkovicdani, Vlada1389, voja64, Volkcho, vukovi, vuksa72, WELJKO, zajcev1, zodiac94, zombicar153, zubri, ČOBAN, 1107