Problem sa programom za izmeni redosleda elemenata

1

Problem sa programom za izmeni redosleda elemenata

offline
  • Pridružio: 15 Maj 2012
  • Poruke: 396

Zadatak glasi ovako:
Citat:
Napisati na jeziku C program za izmeni redosleda elemanata(tj. zamenu prvog s poslednjim, drugog s pretposlednjim itd.) zadatog celobrojnog niza.


I ja sam uradio ovako:
#include <stdio.h> #include <stdlib.h> #define MAX 50 int main() {    while(1){    int i, k, j, n, a[MAX];    printf("Duzina niza(max %d): ", MAX);    scanf("%d", &n);    if(n <= 0 || n > MAX)       break;    printf("\n\nNiz:\n\n");    for(i = 0; i < n; i++){       scanf("%d", &a[i]);       if(i % 30 == 29 || i == n - 1)          putchar('\n');    }    for(k = 0; k < n; k++)       ;    for(i = 0; i < n; i++)       for(j = k; j >= 0; j--){          register int b = a[i];          a[i] = a[j];          a[j] = b;       }       printf("\n\nUredjeni niz:\n\n");       for(i = 0; i < n; i++){          printf("%d ", a[i]);          if(i % 30 == 29 || i == n - 1)             putchar('\n');       }    }    system("PAUSE");    return EXIT_SUCCESS; }

Ali onda dolazi do jednog problema. Kada pokrenem program ne dobijam zeljene rezultate. Kako bih mogao to da resim?

Hvala unapred!Very Happy



Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
offline
  • Software developer
  • Pridružio: 06 Sep 2005
  • Poruke: 3800
  • Gde živiš: Beograd

Kada radis permutaciju, kreci se do polovine niza i uradi to sto si uradio. Ovako, ti permutujes jednom sto hoces pa onda jos jednom vratis na staro Smile
Dakle, idi do pola niza duzine da ti se ne bi dva puta permuovao isti element
Ako je uneto 6 cifara sa indexima
0 1 2 3 4 5
ti si uradio permutacije sledece
0 5
1 4
2 3
a posle toga si nastavio do kraja niza pa ih vratis u pocetno stanje Smile



offline
  • Pridružio: 15 Maj 2012
  • Poruke: 396

Ispravio sam da radi permutaciju do polovine niza, ali opet to nije to.

Kada ukucam niz od 6 brojeva, na primer 1 2 3 4 5 6 izbacuje me 2 3 4 1 5 6. Opet nesto nije u redu. U cemu je sada problem?

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

Još uvek nisi naučio da koristiš dibager? Shocked

offline
  • Pridružio: 15 Maj 2012
  • Poruke: 396

Ma, ne razumem nista, ali bas nista, kada pokrenem dibager. A na google nema nista sto moze da mi pomogne.

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

Napisano: 13 Maj 2014 20:41

Jesam li ti slao onaj dokument gde ima nešto malo objašnjeno? Very Happy

Anyway, petlja koja radi ono što tebi treba je sledeća:
for (int i = 0; i < n / 2; i++) {    int tmp = A[i];    A[i] = A[n - i - 1];    A[n - i - 1] = tmp; }Gde je n dimenzija niza. Dakle, nisu ti potrebne nikakve ugnježdene petlje.

Znači, kada ti brojač ide unapred (inkrementira se), nizom ideš unazad tako što uzimaš n - i, gde je n dimenzija niza, a i brojač.

Dopuna: 13 Maj 2014 20:45

Da li razumeš šta radi sledeća linija: for(k = 0; k < n; k++); Question

offline
  • Pridružio: 15 Maj 2012
  • Poruke: 396

Nisi mi poslao nikakav fajl za dibager.

Aha, sada mi vec ulazi u glavu kako treba kada si mi napisao ovde koja petlja mi je potrebna. Vec mi je jasnije.

I da, znam sta radi ona petlja. Nju sam iskoristio da bih posle mogao da dam promenljivi j indeks poslednjeg elementa u nizu a. To sam uradio jer sam mislio da tako mogu da zamenim redosled elemenata.

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

Koliko će k biti nakon izvršenja te petlje? Šta dobijaš time? Very Happy

offline
  • Pridružio: 15 Maj 2012
  • Poruke: 396

k ce posle petlje imati broj n - 1, gde je n promenljiva u kojoj je uneto koliko je dugacak niz brojeva.
Sada, kada razmislim i ne znam sta dobijam time. Mislio sam da ako promenljivi j dam broj k koji sam dobio posle petlje da mogu da izmenim redosled elemenata, ali sam se grdno prevario Very Happy

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

crusher ::k ce posle petlje imati broj n - 1...Zašto onda nisi napisao jednostavno k = n-1? Very Happy

Svakako, netačno. Ajde prođi kroz petlju još jednom (piši sve ako treba), pa mi reci koliko će da bude k posle izvršenja petlje. Very Happy

Inače, evo dokumenta o dibagovanju: https://www.mycity.rs/must-login.png

Ništa opširno, ali sasvim dovoljno za početak.

Ko je trenutno na forumu
 

Ukupno su 1336 korisnika na forumu :: 32 registrovanih, 3 sakrivenih i 1301 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 3466 - dana 01 Jun 2021 17:07

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: babaroga, bladesu, Brana01, DonRumataEstorski, dozorni, Fabius, Goran 0000, goxin, jackreacher011011, Karla, kjkszpj, kybonacci, ljuba, lord sir giga, Lucije Kvint, marsovac 2, Mcdado, Mihajlo, milos.cbr, minmatar34957, nemkea71, NoOneEver Dreams, RiV, S2M, slonic_tonic, ss10, Vlad000, voja64, yufighter, zdrebac, Zoca, zzapNDjuric99