Umetanje

1

Umetanje

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

Imam jedan problem sa jednim zadatkom. Trebam da umetnem elemente jednog niza u drugi niz izmedju k-tog i k+1-tog elementa. Evo kako sam ja poceo, ali nikako ne uspevam da ga lepo napisem.

#include <stdio.h> #include <stdlib.h> int main() {    while(1){    int a[51], b[105], k, i, n, n1;    printf("Broj elemenata prvog i drugog niza: ");    scanf("%d %d", &n, &n1);    if(n <= 0 || n1 <= 0)       break;    printf("\nElementi prvog niza: ");    for(i = 0; i < n; i++)       scanf("%d", &a[i]);    printf("\nElementi drugog niza: ");    for(i = 0; i < n1; i++)       scanf("%d", &b[i]);    printf("\nk: ");    scanf("%d", &k);    for(i = 0; i < n; i++)       b[k++] = a[i];    printf("\nUredjen niz: ");    for(i = 0; i < n + n1; i++)       printf("%d ", b[i]);    printf("\n\n\n");    }    system("PAUSE");    return EXIT_SUCCESS; }

Mozete li mi pomoci i reci gde gresim i kako da ispravim?

Pokusao sam da pronadjem gresku preko dibagera, ali jos nisam to dobro savladao tako da mi i ne ide bas dobro.



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

Umetanje elemenata u niz podrazumeva redimenzionisanje niza. Ako imaš niz od 10 elemenata u koji umećeš niz od 5 elemenata nakon umetanja dobijaš niz od 15 elemenata. Dakle, to bi bio ispravan način. Ako si radio dinamičku alokaciju, iskoristi to. Zatim, kod umetanja moraš ostatak prvog niza od pozicije k da pomeriš za n1 pozicija. Taj korak prethodi umetanju, a posle toga petlja koju si napisao može da završi posao.

Svakako, ovo su elementarne stvari. Stavi to na papir i prođi kroz par primera. Kada shvatiš šta treba da uradiš onda ćeš videti da je prelako... Very Happy



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

Znam da sve to treba da se uradi, ali ne znam kako da to pretvorim u kod. Pokusavao sam sve zivo da ostatak prvog niza pomerim napred, ali mi nikako ne ide. Kako bih to trebao da uradim?Very Happy

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

Jedna petlja, od k do n-1, A[i+n1] = A[i] i to je sve.

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

Ne kapiram. Gde treba da stoji ta petlja i kako da izgleda?

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

vasa.93 ::Zatim, kod umetanja moraš ostatak prvog niza od pozicije k da pomeriš za n1 pozicija. Taj korak prethodi umetanju, a posle toga petlja koju si napisao može da završi posao.A drugo pitanje - wtf?

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

Napisano: 20 Jul 2014 14:12

Ma ne kapiram kako bih trebao da ostatak prvog niza od pozicije k pomerim za n1 pozicija. Kako to da uradim?

Dopuna: 20 Jul 2014 15:05

vasa.93 ::Jedna petlja, od k do n-1, A[i+n1] = A[i] i to je sve.

Ja ne kapiram ovo uopste. Gde trebam da stavim a[i+n1] = a[i]?

Dopuna: 20 Jul 2014 15:29

Ne kapiram sta znaci ovo od k do n - 1. Kako da to pretvorim u kod?Very Happy

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

Zezaš me? Shocked Govorim o običnoj for petlji, for(i=k;i<n;i++)...

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

Ali opet nece. Opet ne ispisuje dobre rezultate. Evo, pogledaj ceo kod:

#include <stdio.h> #include <stdlib.h> int main() {    while(1){    int a[51], b[105], k, i, n, n1;    printf("Broj elemenata prvog i drugog niza: ");    scanf("%d %d", &n, &n1);    if(n <= 0 || n1 <= 0)       break;    printf("\nElementi prvog niza: ");    for(i = 0; i < n; i++)       scanf("%d", &a[i]);    printf("\nElementi drugog niza: ");    for(i = 0; i < n1; i++)       scanf("%d", &b[i]);    printf("\nk: ");    scanf("%d", &k);    for(i = k; i < n - 1; i++)       a[i+n1] = a[i];    for(i = 0; i < n; i++)       b[k++] = a[i];    printf("\nUredjen niz: ");    for(i = 0; i < n + n1; i++)       printf("%d ", b[i]);    printf("\n\n\n");    }    system("PAUSE");    return EXIT_SUCCESS; }

Gde sada gresim?

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

Grešiš u tome što menjaš oba niza, totalno bespotrebno. Ja sam niz A uzeo kao primer, nisam ga poistovetio sa tvojim nizom a. Pre svega odluči koji ćeš niz da umećeš, i u koji ćeš niz da umećeš elemente. Menjaš jedino niz u koji umećeš elemente!

Imaš niz 1, 2, 3, 4, 5 (dimenzija mu je n1=5) u koji hoćeš da umetneš niz 8, 9 (n2=2) počevši od pozicije 3 (posmatrajmo sada sa logičke strane, znači pod pozicijom podrazumevam poziciju u nizu počevši od 1. U ovom slučaju na poziciji 3 je broj tri (k je 3-1=2). Najpre treba pomeriti sve elemente prvog niza za dva (n2) mesta. To postižeš prvom petljom. Tada dobijaš ovakav niz: 1, 2, _, _, 3, 4, 5. Nakon toga samo prepišeš ceo drugi niz počevši odpozicije k. To postižeš drugom petljom i to je cela poenta.

Ko je trenutno na forumu
 

Ukupno su 949 korisnika na forumu :: 30 registrovanih, 6 sakrivenih i 913 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, Bane san, Ben Roj, Bubimir, djuradj, GandorCC, Georgius, HogarStrashni, janbo, kenny74, kolle.the.kid, Kubovac, kunktator, Leonov, proka89, Prometeus, raptorsi, Srle993, stagezin, stegonosa, suton, TalicniTom, Tila Painen, tubular, vathra, Vlada1389, Vlada78, zbazin, Zerajic, zziko