Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Manipulacija s nizovima C++

[es] :: C/C++ programiranje :: C/C++ za početnike :: Manipulacija s nizovima C++

[ Pregleda: 2582 | Odgovora: 13 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

DARK_MESSIAH
Student

Član broj: 302569
Poruke: 22
82.118.4.*



+6 Profil

icon Manipulacija s nizovima C++18.12.2012. u 20:59 - pre 137 meseci
Treba mi pomoć da "skontam" ove fazone sa nizovima, tj. npr. kako ubaciti jedan niz u drugi, jedan niz u drugi na određenu poziciju, kako ubaciti jedan element u neki niz na određenu poziciju itd.....
Pa ako možete da mi napišete neki primjer sa objašnjenjem ili da mi preporučite neki link (mada sam ja tražio :( )
Hvala
 
Odgovor na temu

Nedeljko
Nedeljko Stefanović

Član broj: 314
Poruke: 8632
*.3gnet.mts.telekom.rs.



+2789 Profil

icon Re: Manipulacija s nizovima C++19.12.2012. u 13:41 - pre 137 meseci
Ako preciziraš šta ti konkretno nije jasno (neki primer), verovatno će neko odgovoriti.
Nije bitno koji su zaključci izvučeni, već kako se do njih došlo.
 
Odgovor na temu

DARK_MESSIAH
Student

Član broj: 302569
Poruke: 22
82.118.4.*



+6 Profil

icon Re: Manipulacija s nizovima C++20.12.2012. u 18:35 - pre 137 meseci
Pa evo konkretno: Implementirati funkciju void umetni(int *nizA, int *nizB, int duzinaA, int duzinaB, int pozicija) koja će nizB umetnuti u nizA na zadanoj poziciji (umetnuti ispred prvog elementa ukoliko je pozicija manja od 2, odnosno iza zadnjeg ako je pozicija veća od dužine nizA).
Npr.
nizA: 1 4 7 4 2 8 8 5 3
nizB: 2 6 3 1 8
pozicija: 3

nizA: 1 4 2 6 3 1 8 7 4 2 8 8 5 3

Ja sam pokušavao uraditi, ali ne ispadne mi dobar rezultat. Logika je da prebacim u novi niz brojeve iz nizA do unešene pozicije. Nakon toga kopiram članove nizB i na kraju članove iz nizA, tj. one koji su ostali. I onda ispišem taj novi niz.
Međutim, ono što ne kontam dobro su te pozicije elemenata u nizu i unošenje članova iz jednog niza u drugi... kako postaviti u for petlji one uslove... Šta npr. znači for(int i = 0; i < duzB; i++)
novi[i + pozicija - 1] = nizB

 
Odgovor na temu

Nedeljko
Nedeljko Stefanović

Član broj: 314
Poruke: 8632
*.3gnet.mts.telekom.rs.



+2789 Profil

icon Re: Manipulacija s nizovima C++20.12.2012. u 22:20 - pre 137 meseci
Mislim da bi taj rezultat trebalo da se dobije sa pozicijom 2, a ne 3, jer u C/C++ indeksi idu od nule. Naravno, moguće je uraditi i tako kako si napisao. Takođe, ne vidi se kako se vraća rezultat. Čudno bi bilo da se kopira u niz A, jer u njemu može da ne bude dovoljno mesta. Recimo da rezultat treba da bude novi niz koji se vraća kao rezultat funkcije (tj. da funkcija nije void).

Code (cpp):

int* umetni(int a[], int b[], int duzina_a, int duzina_b, int pozicija)
{
    int *rezultat = new int[duzina_a + duzina_b];
    int pozicija_a = 0, pozicija_b = 0, pozicija_rezultat = 0;

    while (pozicija_a < pozicija) {
        rezultat[pozicija_rezultat] = a[pozicija_a];
        ++pozicija_a;
        ++pozicija_rezultat;
    }

    while (pozicija_b < duzina_b) {
        rezultat[pozicija_rezultat] = b[pozicija_b];
        ++pozicija_b;
        ++pozicija_rezultat;
    }

    while (pozicija_a < duzina_a) {
        rezultat[pozicija_rezultat] = a[pozicija_a];
        ++pozicija_a;
        ++pozicija_rezultat;
    }

    return rezultat;
}
 

Nije bitno koji su zaključci izvučeni, već kako se do njih došlo.
 
Odgovor na temu

DARK_MESSIAH
Student

Član broj: 302569
Poruke: 22
82.118.4.*



+6 Profil

icon Re: Manipulacija s nizovima C++20.12.2012. u 23:18 - pre 137 meseci
To je i mene bunilo, ali mora ići drugi niz na tačno onu poziciju koja se unese bez obzira što nizovi počinju od 0. I druga stvar je da funkcija mora striktno biti void (jbg, ispitni zadatak :D) A sad kako ovo riješiti da ostane nizA, mislim također da je nemoguće... mora ovako to biti neki treći niz :S
Jest da mi ovo još loše ide, ali mislim da je to to što se tiče ovog zadatka bar :D.
@Nedeljko, u svakom slučaju, hvala ti na pomoći. ;)
Code (cpp):
#include <iostream>
using namespace std;
void umetni(int *nizA, int *nizB, int duzA, int duzB, int pozicija){
    if(pozicija < 2) pozicija = 1;
    else if(pozicija > duzA) pozicija = duzA + 1;
int *nizC = new int[duzA + duzB];
for(int i = 0; i < pozicija - 1; i++)
    nizC[i] = nizA[i];

for(int i = 0; i < duzB; i++)
nizC[pozicija + i - 1] = nizB[i];

for(int i = pozicija - 1; i <duzA ; i++)
nizC[i + duzB] = nizA[i];
 for(int i = 0; i < duzA + duzB; i++)
    cout << nizC[i] <<"  ";
}
int main(){
    int pozicija;
cout <<"Unesite duzinu prvog niza: " << endl;
int duzina1;
cin >> duzina1;
int *nizA = new int[duzina1];
for(int i = 0; i < duzina1; i++){
    cout << "Unesite " << i + 1 << ". element niza: " << endl;
    cin >> nizA[i];}
cout << "Unesite duzinu drugog niza: " << endl;
int duzina2;
cin >> duzina2;
int *nizB = new int[duzina2];



for(int i = 0; i < duzina2; i++){
    cout << "Unesite " << i + 1 << ". element niza: " << endl;
    cin >> nizB[i];
}
cout << "Unesite poziciju na koju zelite ubaciti nizB u nizA: " << endl;
cin >> pozicija;
umetni(nizA, nizB, duzina1, duzina2, pozicija);

return 0;
}
 
 
Odgovor na temu

Nedeljko
Nedeljko Stefanović

Član broj: 314
Poruke: 8632
*.3gnet.mts.telekom.rs.



+2789 Profil

icon Re: Manipulacija s nizovima C++20.12.2012. u 23:39 - pre 137 meseci
E, onda ovako:

Code (cpp):

void umetni(int *a, int *b, int duzina_a, int duzina_b, int pozicija)
{
    --pozicija;

    for (int i = duzina_a + duzina_b - 1; i >= pozicija + duzina_b; --i) {
        a[i] = a[i - duzina_b];
    }
   
    for (int i = 0; i < duzina_b; ++i) {
        a[i + pozicija] = b[i];
    }
}
 

Nije bitno koji su zaključci izvučeni, već kako se do njih došlo.
 
Odgovor na temu

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 4901
*.dynamic.sbb.rs.

Jabber: xfiles@elitesecurity.org


+638 Profil

icon Re: Manipulacija s nizovima C++22.12.2012. u 20:14 - pre 137 meseci
Kod ovakvih i sličnih zadataka, gde postoji neki izvor i neko odredište, a koji mogu doći u koliziju, dobra praksa je pre samog izvršenja, najbolje u samoj funkciji, ispitati neke preduslove, tipa: if ( (nizA != nizB) && (duzinaB !=0)) { /*...izvršenje...*/ }.
 
Odgovor na temu

DARK_MESSIAH
Student

Član broj: 302569
Poruke: 22
82.118.4.*



+6 Profil

icon Re: Manipulacija s nizovima C++23.12.2012. u 23:18 - pre 137 meseci
Šta fali ako je nizA = nizB ? :S... Je li se to podrazumijeva da imaju iste članove?
 
Odgovor na temu

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 4901
*.3gnet.mts.telekom.rs.

Jabber: xfiles@elitesecurity.org


+638 Profil

icon Re: Manipulacija s nizovima C++24.12.2012. u 07:27 - pre 137 meseci
Ako je "nizA == nizB", to znači da se radi o istoj adresi. Dakle, ne samo da "imaju iste članove", već je to jedan isti blok podataka, a ne dva odvojena.

To znači da se može dogoditi (u zavisnosti od način realizacije funkcije), da "izvor" podataka (za koji se podrazumeva da je read-only) bude uništen premeštanjem bloka podataka "odredišta". Ako se ovo predvidi, može se lako zaobići pravljenjem privremenih buffera.


Možda je ovo trenutak da pročitaš i čemu služi dodavanje ključne reći "const" unutar argumenata funkcije, verovatno si već viđao. U principu, radi se o napomeni kompajleru koji podaci ne smeju da budu promenjeni, ali isto tako je i napomena nekom programeru kako da realizuje funkciju na način kako je predvideo team leader :)
 
Odgovor na temu

DARK_MESSIAH
Student

Član broj: 302569
Poruke: 22
82.118.4.*



+6 Profil

icon Re: Manipulacija s nizovima C++24.12.2012. u 21:37 - pre 137 meseci
Zavidim vam obojici na znanju :D.
Ako možete još da mi preporučite šta bih mogao raditi da malo uvježbam dodatno C++. Neki site sa praktičnim projektima ili tako nešto? Ovo na faxu je po meni čista formalnost. Ne vidim neku svrhu od ovih implementacija :/.
 
Odgovor na temu

cikin
ucenik

Član broj: 293755
Poruke: 99
*.dynamic.isp.telekom.rs.



+1 Profil

icon Re: Manipulacija s nizovima C++03.01.2013. u 23:37 - pre 136 meseci
Code:
#include<stdio.h>
int novi(int a[],int b[],int na,int nb,int c[])
{
int i =0,j=0,m=0;
for(i,j;i<na;)
{
if(a[i]>b[j])
{
c[m++]=b[j];
j++;}
else
if(a[i]<b[j])
{
c[m++]=a[i];
i++;}
else
c[m++]=a[i];
}
return m;
}
int main()
{
int a[]={1,2,5,40};
int b[]={3,7,12};
int c[20];int i;
int na=sizeof(a)/sizeof(int);
int nb=sizeof(b)/sizeof(int);
int x=novi(a,b,na,nb,c);
for(i=0;i<x;i++)
printf("%d\n",c[i]);
}
zanima me samo sto mi izbaci "Segmentation fault"-ako moze neko tacno da kaze zasto.... inace nema veze za ovo za for(posto je u a veci zadnji broj)... inace zadatak brojevi su poredjani u rastucem sad treba urediti nov niz tako da i on bude u rastucem
 
Odgovor na temu

Nedeljko
Nedeljko Stefanović

Član broj: 314
Poruke: 8632
*.3gnet.mts.telekom.rs.



+2789 Profil

icon Re: Manipulacija s nizovima C++04.01.2013. u 06:59 - pre 136 meseci
Prvo da ispravimo gramatičke i pravopisne greške:
Citat:
Zanima me samo što mi izbaci "Segmentation fault". Ako može neko tačno da kaže zašto. Inace, nema veze za ovo za for (posto je u a veci zadnji broj). Inace, zadatak glasi: spojiti dva rastuća niza brojeva u jedan rastući niz.

Drugo, program je napisan jako neuredno, tj. teško za čitanje. Ako koristiš Code::Blocks okruženje, u Plugins meniju imaš opciju "Source code formatter (AStyle)", pa je koristi.

E, sad, program puca zato što u drugoj else grani ne povećavaš i za jedan, pa onda taj uslov biva stalno ispunjen, zbog čega se m stalno povećava za 1, dok ne pređe opseg niza c.

To nije jedina greška u programu. Program zapravo treba da glasi:
Code (c):

#include <stdio.h>

int novi(int a[], int b[], int na, int nb, int c[])
{
    int i = 0, j = 0, m = 0;

    while (i < na && j < nb) {
        if (a[i] > b[j]) {
            if (m == 0 || b[j] > c[m - 1]) {
                c[m++] = b[j++];
            } else {
                ++j;
            }
        } else {
            if (m == 0 || b[j] > c[m - 1]) {
                c[m++] = a[i++];
            } else {
                ++i;
            }
        }
    }

    while (i < na) {
        if (m == 0 || a[i] > c[m - 1]) {
            c[m++] = a[i++];
        } else {
            ++i;
        }
    }

    while (j < nb) {
        if (m == 0 || b[j] > c[m - 1]) {
            c[m++] = b[j++];
        } else {
            ++j;
        }
    }

    return m;
}

int main()
{
    int a[] = {1, 2, 5, 40};
    int b[] = {3, 7, 12};
    int c[(sizeof(a) + sizeof(b))/sizeof(int)];
    int i;
    int na = sizeof(a)/sizeof(int);
    int nb = sizeof(b)/sizeof(int);
    int x = novi(a, b, na, nb, c);

    for(i = 0; i < x; ++i) {
        printf("%d\n", c[i]);
    }

    return 0;
}
 

Nije bitno koji su zaključci izvučeni, već kako se do njih došlo.
 
Odgovor na temu

cikin
ucenik

Član broj: 293755
Poruke: 99
*.dynamic.isp.telekom.rs.



+1 Profil

icon Re: Manipulacija s nizovima C++07.01.2013. u 00:33 - pre 136 meseci
opet ja i opet nizovi....Data su dva niza, i treba napraviti niz od clanova koji su isti za niz "a" i niz "b"... (ovo sto sam na kraju stavio u petlji da je i manje od x nije vazno),zanima me sto mi stalno izbacuje ove brojeve("adrese"?)...
Code:
#include<stdio.h>
void upor(int a[],int b[],int c[]) 
  {
       int j,i,k=0;
        for(j=0;j<10;j++)
         for(i=0;i<10;i++)
           if(a[j]==b[i])
           {c[k++]=b[i];
             break;
            } 
       c[k++]='\0';
     }
int main()

int i;char e;
int a[10];
int b[10];
int c[20];
  for(i=0;i<10;i++)
  { printf("unesi s[%d]",i);
    scanf("%d",&a[i]);
    scanf("%c",&e); printf("\n");
   }
  for(i=0;i<10;i++) 
  { printf("unesi s[%d]",i);
    scanf("%d",&b[i]);scanf("%c",&e);
    printf("\n");
  } 

upor(a,b,c); 
for(i=0;i<10;i++)
   printf("c [%d] je %d\n",i,&c[i]);
}



 
Odgovor na temu

Nedeljko
Nedeljko Stefanović

Član broj: 314
Poruke: 8632
*.3gnet.mts.telekom.rs.



+2789 Profil

icon Re: Manipulacija s nizovima C++07.01.2013. u 18:03 - pre 136 meseci
Zato što u printf naredbi treba argumente da prenosiš po vrednosti, a ne po adresi. Makni onaj ampersant.
Nije bitno koji su zaključci izvučeni, već kako se do njih došlo.
 
Odgovor na temu

[es] :: C/C++ programiranje :: C/C++ za početnike :: Manipulacija s nizovima C++

[ Pregleda: 2582 | Odgovora: 13 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.