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: 14809
  • 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: 14809
  • 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: 14809
  • 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: 14809
  • 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: 14809
  • 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 946 korisnika na forumu :: 39 registrovanih, 7 sakrivenih i 900 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: amaterSRB, Amigdala, anta, Bobrock1, bokisha253, Boris90, ccoogg123, darkojbn, Dimitrise93, djboj, dragoljub11987, flash12, FOX, GenZee, HrcAk47, ILGromovnik, jackreacher011011, Još malo pa deda, Karla, Krusarac, Lieutenant, Mlav, MrNo, nebojsag, nenad81, nikoladim, Oscar2, Parker, Pikac-47, Rakenica, Romibrat, Simon simonović, Sirius, Skywhaler, Srle993, styg, Toper, uruk, Vatreni Zmaj