Korisnički Kontrolni Panel
Pogledajte svoj profil
Pogledajte svoje postove
ČPP
Prijavite se

Matematički forum na kojem možete da diskutujete o raznim matematičkim oblastima, pomognete drugima oko rešavanja zadataka, a i da dobijete pomoć kada vam zatreba


















Index stranica OSTALE MATEMATIČKE OBLASTI MATEMATIKA U INFORMATICI MATEMATIKA U PROGRAMIRANJU

[Pascal] Okreni niz

[Pascal] Okreni niz

Postod Miladin Jovic » Ponedeljak, 12. Januar 2015, 17:43

Ovo je bilo traženo u okvru procedure na današnjem kolokvijumu. To sam zapamtio, ceo zadatak nisam.
Definisati proceduru Okreniniz (mi to možemo raditi kao ceo program) koja za [inlmath]n_1,n_2\quad(n_1,n_2<n)[/inlmath] okreće podniz između [inlmath]n_1[/inlmath] i [inlmath]n_2[/inlmath] i to uraditi bez formiranja novog niza (primer [inlmath]1\quad 2\quad 3\quad 4\quad 5[/inlmath], ako su [inlmath]n_1=2[/inlmath] i [inlmath]n_2=4[/inlmath] kao rezultat se dobija [inlmath]1\quad 4\quad 3\quad 2\quad 5[/inlmath]).
Ja kao prvo, nisam razumeo šta zapravo ova procedure treba da radi, jer su rekli da je ovaj primer koji su naveli specijalan slučaj, i da cilj procedure nije zamena mesta [inlmath]n_1[/inlmath] i [inlmath]n_2[/inlmath]. Pa sam onda ovako tu proceduru interpretirao ovako: Ako okrećemo podniz niza [inlmath]1\quad 2\quad 3\quad 4\quad 5[/inlmath] između [inlmath]1[/inlmath] i [inlmath]4[/inlmath], ja sam prvo uradio zamenu mesta [inlmath]1[/inlmath] i [inlmath]4[/inlmath], a potom sam podniz [inlmath]2\quad 3[/inlmath] gledao kako bih pročitao sa desna na levu stranu , a to bi bilo [inlmath]3\quad 2[/inlmath], pa kao krajnji ishod imamo [inlmath]4\quad 3\quad 2\quad 1\quad 5[/inlmath]. Znam da ovo tumačenje nije dobro, ali kako bi bilo ispravno tumačenje, jer je, barem po mom mišljenu, ovaj zadatak nerazumno sastavljen, a i pri tom je naveden specijalni slučaj( tj. kada između [inlmath]n_1[/inlmath] i [inlmath]n_2[/inlmath] imamo samo jedan element) iz kog, barem ja, ne mogu da uočim pravilnost okretanja niza.
Evo kod za moje tumačenje:

Kôd: Obeleži sve
program Okreniniz;
  type niz=array[1..50] of integer;
  var a:niz;
    i,n,n1,n2,t,p,q:integer;
  begin
    write('Unesite n:');
    readln(n);
    write('Unesite n1:');
    readln(n1);
    write('Unesite n2:');
    readln(n2);
    For i:=1 to n do readln(a[i]);
    p:=n1;
    q:=n2;
    For i:=1 to n div 2 do
      begin
        t:=a[p];
        a[p]:=a[q];
        a[q]:=t;
        p:=p+1;
        q:=q-1;
      end;
    For i:=1 to n do write(a[i],' ');
  end.
Zaslužni forumaš
 
Postovi: 370
Zahvalio se: 243 puta
Pohvaljen: 123 puta

Sharuj ovu temu na:

Share on Facebook Facebook Share on Twitter Twitter Share on MySpace MySpace Share on Google+ Google+

Re: [Pascal] Okreni niz

Postod ubavic » Ponedeljak, 12. Januar 2015, 21:58

Koliko ja vidim tvoj način tumačenja je dobar. Ovako bi ta procedura trebalo da radi (ako se niz "okreće" između članova [inlmath]n_a[/inlmath] i [inlmath]n_b[/inlmath]):
[dispmath]\begin{array}{|c|ccccccccccccc|}\hline
\mathrm{niz} & \cdots & n_{a-2} & n_{a-1} & n_a & n_{a+1} & n_{a+2} & \cdots & n_{b-2} & n_{b-1} & n_b & n_{b+1} & n_{b+2} & \cdots\\ \hline
f(\mathrm{niz}) & \cdots & n_{a-2} & n_{a-1} & n_b & n_{b-1} & n_{b-2} & \cdots & n_{a+2} & n_{a+1} & n_a & n_{b+1} & n_{b+2} & \cdots \\ \hline
\end{array}[/dispmath]

Pošto ne znam Pascal, nisam baš siguran da li petlja dobro funkcioniše.
Korisnikov avatar
ubavic  OFFLINE
Zaslužni forumaš
 
Postovi: 529
Lokacija: Zrenjanin
Zahvalio se: 348 puta
Pohvaljen: 515 puta

Re: [Pascal] Okreni niz

Postod Miladin Jovic » Ponedeljak, 12. Januar 2015, 22:51

Ja kad unesem, recimo, u program sa ovim kodom [inlmath]1\quad 2\quad 3\quad 4\quad 5[/inlmath], ako radimo između [inlmath]1[/inlmath] i [inlmath]4[/inlmath], dobijam [inlmath]4\quad 3\quad 2\quad 1\quad 5[/inlmath]. Je li to dobro?
Zaslužni forumaš
 
Postovi: 370
Zahvalio se: 243 puta
Pohvaljen: 123 puta

Re: [Pascal] Okreni niz

Postod ubavic » Ponedeljak, 12. Januar 2015, 23:07

Dobro je. Mada to ti ne garntuje da je i kod dobar.
Sad kad malo bolje pogledam kod čini mi se da je OK.
Korisnikov avatar
ubavic  OFFLINE
Zaslužni forumaš
 
Postovi: 529
Lokacija: Zrenjanin
Zahvalio se: 348 puta
Pohvaljen: 515 puta

Re: [Pascal] Okreni niz

Postod Miladin Jovic » Ponedeljak, 12. Januar 2015, 23:12

Verovatno ima neku grešku, kad su mi pregledali kod rekli su mi da ovo nije tačno.
Zaslužni forumaš
 
Postovi: 370
Zahvalio se: 243 puta
Pohvaljen: 123 puta

Re: [Pascal] Okreni niz

Postod Daniel » Utorak, 13. Januar 2015, 02:25

Ovaj zadatak baš i nije za ovaj forum, budući da se u njemu ne pojavljuje ništa od matematike, već samo programiranje kao takvo. Ali, budući da se još uvek nešto sećam Paskala, valjda ću moći da pomognem.

Da, kôd ima grešku. Pogrešno je to što se kroz petlju prolazi [inlmath]\left(n\:\mathrm{div}\:2\right)[/inlmath] puta. Broj prolazaka kroz petlju treba da bude [inlmath]\frac{n2-n1}{2}[/inlmath] ako je [inlmath]n2-n1[/inlmath] parno, odnosno [inlmath]\frac{n2-n1+1}{2}[/inlmath] ako je [inlmath]n2-n1[/inlmath] neparno. Objedinjeno, to znači da se kroz petlju prolazi [inlmath]\left(n2-n1+1\right)\:\mathrm{div}\:2[/inlmath] puta.

Promenljive [inlmath]p[/inlmath] i [inlmath]q[/inlmath] su suvišne. Sve operacije koje si primenjivao na [inlmath]p[/inlmath] i [inlmath]q[/inlmath], mogao si primenjivati i direktno na [inlmath]n1[/inlmath] i [inlmath]n2[/inlmath].

Ja bih takođe dodao i [inlmath]\mathtt{IF-THEN}[/inlmath] uslov kojim se vrši provera da li je [inlmath]n1<n2[/inlmath] i da li je [inlmath]n2\le n[/inlmath], kako ne bi došlo do nekih nepredviđenih događaja. :)

Dakle, moj predlog za kôd bi izgledao ovako:

Kôd: Obeleži sve
program Okreniniz;
  type niz=array[1..50] of integer;
  var a:niz;
    i,n,n1,n2,t:integer;
  begin
    write('Unesite n:');
    readln(n);
    write('Unesite n1:');
    readln(n1);
    write('Unesite n2:');
    readln(n2);
      if (n1<n2) and (n2<=n) then
        begin
          For i:=1 to n do readln(a[i]);
          For i:=1 to (n2-n1+1) div 2 do
            begin
              t:=a[n1];
              a[n1]:=a[n2];
              a[n2]:=t;
              n1:=n1+1;
              n2:=n2-1;
            end;
          For i:=1 to n do write(a[i],' ');
        end
      else
        writeln('Neispravan unos');
  end.
I do not fear death. I had been dead for billions and billions of years before I was born, and had not suffered the slightest inconvenience from it. – Mark Twain
Korisnikov avatar
Daniel   ONLINE
Administrator
 
Postovi: 7681
Lokacija: Beograd
Zahvalio se: 4039 puta
Pohvaljen: 4110 puta

Re: [Pascal] Okreni niz

Postod Miladin Jovic » Utorak, 13. Januar 2015, 08:02

Da, tako je , i ja sam to posle video. Hvala na odgovoru.
Zaslužni forumaš
 
Postovi: 370
Zahvalio se: 243 puta
Pohvaljen: 123 puta


Povratak na MATEMATIKA U PROGRAMIRANJU

Ko je OnLine

Korisnici koji su trenutno na forumu: Nema registrovanih korisnika i 1 gost


Index stranicaTimObriši sve kolačiće boarda
Danas je Utorak, 20. Avgust 2019, 01:13 • Sva vremena su u UTC + 1 sat [ DST ]
Pokreće ga phpBB® Forum Software © phpBB Group
Prevod – www.CyberCom.rs