Nizovi
Prikazujem rezultate 1 do 14 od 14

Tema: Nizovi

  1. #1
    Peruzzi nije na forumu
    је дошао тихо и ушао у легенду...
    Domaćin Peruzzi (avatar)
    Učlanjen
    03.08.2003.
    Pol
    muški
    Lokacija
    Shumadija
    Poruke
    3.924
    Reputaciona moć
    92

    Podrazumevano Nizovi

    Paz sad, treba mi sledece:

    korisnik (ili petlja, nebitno) unosi redom brojeve (sadrzane u promenljivoj a npr) u niz dok ne upise npr X ili 0

    kako ja sad da definisem taj niz kad ne znam koliko ce da bude veliki?
    da odredim maksimum na npr 30000 clanova, ne ide...mislim, moze ali nije to to

    jedino sto mi palo na pamet je da dam petlju sa brojacem a=1, ,a++ koja se izvrsava sve dok neka vrednost ne bude true (npr n==0), napravim niz sa a clanova, ucitam u a-ti clan ucitanu promenljivu n, onda taj niz iskopiram u drugi, pa ponavljanjem petlje napravim niz za jedan veci od prethodnog, iskopiram u njega sadrzaj ovog drugog (backup) niza, i dodam nov clan n i tako u krug....

    e sad tu ima jedna problem - da li ja mogu da menjam velicinu niza u petlji?
    (ono - for (i=1, i<5, i++) { int niz [i]; }
    ili se niz definise jednom i ostaje nepromenjiv?


    ebem ga sad




  2. #2
    Buduća legenda
    Učlanjen
    26.07.2005.
    Pol
    muški
    Poruke
    44.336
    Reputaciona moć
    0

    Podrazumevano Re: Nizovi

    Ebem li ga i ja Peruzzi Jel to pravis neki virus ili kriptografski kljuc?

  3. #3
    Ističe se juznivetar (avatar)
    Učlanjen
    12.02.2005.
    Pol
    muški
    Lokacija
    -
    Poruke
    2.041
    Reputaciona moć
    67

    Podrazumevano Re: Nizovi

    Kod:
    #include <iostream>
    using namespace std;
    int main()
    {
    char niz[_MAX_PATH];
    int i = 0;
    while((niz[i] != 'x') && (niz[i] != 'o'))
    {
    i++;
    cin >> niz[i];
    }
    }
    Poslednji put ažurirao/la Sucur : 24.10.2005. u 22:02

  4. #4
    Ističe se juznivetar (avatar)
    Učlanjen
    12.02.2005.
    Pol
    muški
    Lokacija
    -
    Poruke
    2.041
    Reputaciona moć
    67

    Podrazumevano Re: Nizovi

    Da i onaj sistem o povecavanju niza je nemoguc, zato sto moras deklarisaniz brojem.
    Ovo je neispravno:
    int i = 10;
    int niz[i];
    Dakle moras:
    int niz[10];
    Poz.

  5. #5
    Ističe se juznivetar (avatar)
    Učlanjen
    12.02.2005.
    Pol
    muški
    Lokacija
    -
    Poruke
    2.041
    Reputaciona moć
    67

    Podrazumevano Re: Nizovi

    E sad sam nesto testirao i ovaj _MAX_PATH je ogranicen na odredjen cifara, mozda nekoliko stotina (neznam jel koristi _MAX_PATH trenutne lokacije), tako da ti nepreostaje nista drugo nego da ogranicis niz na neki broj, recimo niz[100], pa preko if petlje, ako je taj niz pun, da pocne korisnik da ukucava u drugi niz1[100] ilil da odmah stavis neki velik broj.

  6. #6
    Primećen član
    Učlanjen
    24.11.2003.
    Poruke
    641
    Reputaciona moć
    58

    Podrazumevano Re: Nizovi


  7. #7
    Početnik _Doctor_ (avatar)
    Učlanjen
    05.10.2005.
    Lokacija
    Novi Beograd
    Poruke
    34
    Reputaciona moć
    0

    Podrazumevano Re: Nizovi

    Pazi ovako posto radish sa neogranichenim brojem elemenata onda je najprirorodnije koristiti listu (dvostruku ili jednostruku stvar je stila). A ako bash morash da radish sa nizom onda morash stalno da radish realokaciju nove memorije za niz pri dodavanju svakog novog elementa.

    NPR:

    double*& myRealloc (double* niz, int duz) {
    // Neki kod....
    }

    double *niz = NULL;
    int duz = 0;
    while(true){
    double br; cin >> br;
    if(br == 9999)break; // Recimo da ovaj broj koristish kao signal za kraj
    niz = myRealloc (niz, ++duz);
    niz[duz-1] = br;
    }

    Naravno ovo je dosta neefokasno jer stalno morash da alocirash novu memoriju pa da kopirash prethodni niz u taj novi shto dosta troshi procesorsko vreme koje je dragoceno. Tako da kada bi ja radio ovako neshto sigurno bi koristio listu. Tako da imash josh jednu varijantu; mozzesh da napunish listu potrebnim elementima pa da zatim tu listu transformishesh u niz. Nadam se da sam ti dao neku ideju.
    Poslednji put ažurirao/la _Doctor_ : 25.10.2005. u 02:08
    "Nobody is safe from me, No' not even me !"

  8. #8
    Početnik _Doctor_ (avatar)
    Učlanjen
    05.10.2005.
    Lokacija
    Novi Beograd
    Poruke
    34
    Reputaciona moć
    0

    Podrazumevano Re: Nizovi

    Sorry, nisam prochitao tvoj post do kraja. Potpuno si u pravu to je jedan od nachina da se reshi tvoj problem, samo sa jednom malom promenom a to je da napravish funkciju koja cce da ti radi reallokaciju novog niza (chitaj: da se ne ponavljam pogledaj iznad)

    pozdrav
    "Nobody is safe from me, No' not even me !"

  9. #9
    Peruzzi nije na forumu
    је дошао тихо и ушао у легенду...
    Domaćin Peruzzi (avatar)
    Učlanjen
    03.08.2003.
    Pol
    muški
    Lokacija
    Shumadija
    Poruke
    3.924
    Reputaciona moć
    92

    Podrazumevano Re: Nizovi

    Citat Original postavio Sucur
    Da i onaj sistem o povecavanju niza je nemoguc, zato sto moras deklarisaniz brojem.
    Ovo je neispravno:
    int i = 10;
    int niz[i];
    Dakle moras:
    int niz[10];
    Poz.

    zasto je int niz [i]; neispravno?

    mislim, zadajes niz tipa integer sa i clanova, pri cemu i vec ima neku vrednost

    zasto ne bi moglo?


    uostalom sad cu bas da probam


  10. #10
    Peruzzi nije na forumu
    је дошао тихо и ушао у легенду...
    Domaćin Peruzzi (avatar)
    Učlanjen
    03.08.2003.
    Pol
    muški
    Lokacija
    Shumadija
    Poruke
    3.924
    Reputaciona moć
    92

    Podrazumevano Re: Nizovi

    zasto ovaj kod ne valja?

    kad ga pokrenem izbaci mi prvi red teksta i ceka da unesem neku vrednost, i onda kad ukucam izbaci onaj windowsow illegal operation prozor

    #include <stdio.h>
    #include <tgmath.h>

    int i;
    double a,b,c,n;
    double niz[100];

    int main()
    {
    printf("Unesi broj: ");
    scanf("%d", a);
    printf("\nU koji sistem se konvertuje: ");
    scanf("%d", n);

    for (i=1; b!=0; i++)
    {
    b = fmod(a, n);
    niz [i] = b;
    a = trunc(a/n);
    }

    for (i=1; i<101; i++)
    {
    printf("%d",niz[101-i]);
    }

    return 0;
    }


    ===============================================

    Building main.obj.
    complex.h included - no complex math support!
    Building asdf.exe.
    Building projdefs.tag.
    Done.


  11. #11
    Obećava
    Učlanjen
    24.08.2003.
    Lokacija
    Novi Sad
    Poruke
    76
    Reputaciona moć
    53

    Podrazumevano Re: Nizovi

    cEPAJ PO LISTI BATO !!!!!
    Don't worry, be happy !!!

  12. #12
    Početnik _Doctor_ (avatar)
    Učlanjen
    05.10.2005.
    Lokacija
    Novi Beograd
    Poruke
    34
    Reputaciona moć
    0

    Podrazumevano Re: Nizovi

    Citat Original postavio Peruzzi
    zasto je int niz [i]; neispravno?

    mislim, zadajes niz tipa integer sa i clanova, pri cemu i vec ima neku vrednost

    zasto ne bi moglo?


    uostalom sad cu bas da probam
    To ne mozze iz prostog razloga shto "int i;" nije konstanta. Probaj sa const int i = x; i proradicce ali samo ako radish u c++ - u, dok u c - u const int i nije prava konstanta vecc ne promenljiva varijabla, pa morash napraviti pravu konstatntu a to se radi na sledecci nachin: posle svih "includova" dodash #define N 50 pa zatim negde u programu definishesh niz: int niz[N];
    Poslednji put ažurirao/la _Doctor_ : 26.10.2005. u 01:27
    "Nobody is safe from me, No' not even me !"

  13. #13
    Primećen član
    Učlanjen
    04.03.2004.
    Lokacija
    UK
    Poruke
    558
    Reputaciona moć
    56

    Podrazumevano Re: Nizovi

    e sad tu ima jedna problem - da li ja mogu da menjam velicinu niza u petlji?
    Vecina prethodnih odgovora je omashena totalno, narochito upotreba statichkih nizova.

    1. Ako to shto radish, radish u C++u, samo 2 rechi : STL i vector<T>

    2. Ako ne znash/ne zhelish STL, onda cesh morati da simulirash dinamichke nizove sam - jednostavno (re)alocirash "parche po parche" niza (recimo po 10-ak elemenata), koje kad napunish, realocirash sa dodatnom grupom elemenata, i tako u krug

  14. #14
    Primećen član
    Učlanjen
    24.11.2003.
    Poruke
    641
    Reputaciona moć
    58

    Podrazumevano Re: Nizovi

    Kod:
    Пројектовати на језику C++ апстрактну класу за збирке целих бројева. Предвидети:
    
       1. уништавање збирке,
       2. дохватање броја података у збирци (+zbirka),
       3. додавање једног податка збирци (zbirka+=broj),
       4. додавање садржаја збирке збирци (zbirka1+=zbirka2),
       5. дохватање податка са датим редним бројем (zbirka[ind]),
       6. дохватање и избацивање податка са датим редним бројем (zbirka(ind)), и
       7. писање садржаја збирке у неки излазни ток (dat<<zbirka). 
    
    Пројектовати на језику C++ класу за низове целих бројеве као изведену класу из класе за збирке. Нови подаци се додају иза последњег попуњеног места у низу. Поред могућности основне калсе предвидети:
    
       1. стварање празог низа задатог капацитета (подразумевано 10),
       2. иницијализацију низа другим низом,
       3. иницијализацију низа збирком (капацитет треба да је једнак величини збирке), и
       4. додељивање низу вредност другог низа (niz1=niz2) и збирке (niz=zbirka). 
    
    Пројектовати на језику C++ класу за листе целих бројеве као изведену класу из класе за збирке. Нови подаци се додају иза последњег елемента листе. Поред могућности основне класе предвидети:
    
       1. стварање празне листе,
       2. иницијализацију листе другом листом,
       3. иницијализацију листе збирком, и
       4. додељивање листи вредност друге листе (lista1=lista2) и збирке (lista=zbirka). 
    
    За пријављивање конфликтних ситуација (нема места у низу, индекс изван опсега) изузецима, направити одговарајуће једноставне класе.
    
    Саставити на језику C++ интерактивни главни програм са следећим операцијама:
    
        * створи одређену врсту збирке
        * додај број збирци,
        * промени вредност броја на одређеном месту,
        * извади број са одређеног места (број се брише из збирке),
        * испиши садржај збирке,
        * претвори збирку у збирку задате врсте, и
        * заврши са радом. 
    
    Напомене (садржај)
    
        * Испит траје 180 минута.
        * Решење задатка предаје се у облику три датотеке: дефиницје свих класа, дефиниције метода уз све класе и главни програм. Не стављати целокупно решење у једну датотеку.
        * Пожељно је да програм проради до краја испита.
    
    Решење задатка (поставка | садржај)
    
    // zbirka.h
    
    #ifndef _zbirka_h_
    #define _zbirka_h_
    #include <iostream.h>
    
    class Zbirka {
    public:
      virtual ~Zbirka () {}
      virtual int operator+ () const =0;
      virtual Zbirka& operator+=(int k)=0;
      friend Zbirka& operator+= (Zbirka& z1, const Zbirka& z2);
      virtual int& operator[](int ind)=0;
      virtual const int& operator[] (int ind) const =0;
      virtual int operator() (int ind)=0;
      friend ostream& operator<< (ostream& d, const Zbirka& z);
    };
    
    class GZbirkaPuna {};
    
    class GZbirkaIndeks {};
    
    #endif
    
    // zbirka.cpp
    
    #include "zbirka.h"
    
    Zbirka& operator+= (Zbirka& z1, const Zbirka& z2) {
      for(int i=0; i<+z2; i++) z1 += z2[i];
      return z1;
    }
    
    ostream& operator<< (ostream& d, const Zbirka& z) {
       d << '[';
      for (int i=0; i<+z; i++) { d << z[i]; if (i < +z-1) d << ','; }
      return d << ']';
    }
    
    // niz.h
    
    #ifndef _niz_h_
    #define _niz_h_
    #include "zbirka.h"
    
    class Niz: public Zbirka {
      int *niz, kap, vel;
      void kopiraj (const Niz& n);
      void brisi() { delete [] niz; vel = kap = 0; }
    public:
      Niz (int k=10) { niz = new int [kap=k]; vel = 0; }
      Niz (const Niz& n) { kopiraj(n); }
      Niz (const Zbirka& z) { niz = new int[kap=+z]; vel = 0; *this += z; }
      ~Niz () { brisi (); }
      Niz& operator= (const Niz& n) {
        if (this != &n) { brisi (); kopiraj (n); }
        return *this;
      }
      Niz& operator= (const Zbirka& n) {
        if (this != &n) { brisi( ); niz=new int[kap=+n]; (*this) += n;}
        return *this;
      }
      int operator+ () const { return vel; }
      Niz& operator+= (int k) {
        if (vel == kap) throw GZbirkaPuna ();
        niz[vel++] = k;
        return *this;
      }
      int& operator[] (int ind) {
        if (ind<0 || ind >=vel) throw GZbirkaIndeks ();
        return niz[ind];
      }
      const int& operator[] (int ind) const {
        if (ind<0 || ind >=vel) throw GZbirkaIndeks ();
        return niz[ind];
      }
      int operator() (int ind);
    };
    
    #endif
    
    // niz.cpp
    
    
    
    
    #include "niz.h"
    
    void Niz::kopiraj (const Niz& n) {
      niz = new int [kap=n.kap]; vel = n.vel;
      for (int i=0; i<vel; i++) niz[i] = n.niz[i];
    }
    
    int Niz::operator() (int ind) {
      if (ind<0 || ind>=vel) throw GZbirkaIndeks ();
      int k = niz[ind];
      for (int i=ind; i<vel-1; i++) niz[i] = niz[i+1];
      vel--;
      return k;
    }
    
    // lista.h
    
    #ifndef _lista_h_
    #define _lista_h_
    #include "zbirka.h"
    
    class Lista: public Zbirka {
      struct Elem {
        int broj; Elem *sled;
        Elem(int b, Elem*s=0){broj=b;sled=s;}
      };
      Elem *prvi, *posl; int vel;
      void kopiraj (const Lista &lst);
      void brisi () ;
    public:
      Lista () { prvi=posl=0; vel=0; }
      Lista (const Lista& lst){kopiraj(lst);}
      Lista (const Zbirka& z) { prvi = posl = 0; vel = 0; *this += z;}
      ~Lista () { brisi (); }
      Lista& operator= (const Lista& lst) {
        if (this != &lst) { brisi( ); kopiraj (lst); }
        return *this;
      }
      Lista& operator= (const Zbirka& lst) {
        if (this != &lst) { brisi (); *this += lst; }
        return *this;
      }
      int operator+() const { return vel; }
      Lista& operator+= (int k) {
        posl= (!prvi ? prvi : posl->sled) = new Elem(k);
        vel++;
        return *this;
      }
      int& operator[] (int ind);
      const int& operator[] (int ind) const {
        return ((Lista&)(*this))[ind];
      }
      int operator() (int ind);
    };
    
    #endif
    
    // lista.cpp
    
    #include "lista.h"
    
    void Lista::kopiraj
      (const Lista& lst) {
      prvi = posl = 0; vel = lst.vel;
      for (Elem *tek=lst.prvi; tek; tek=tek->sled)
        posl = (!prvi ? prvi : posl->sled) = new Elem (tek->broj);
    }
    
    void Lista::brisi () {
      while (prvi) {Elem *stari = prvi; prvi = prvi->sled; delete stari; }
      posl = 0; vel = 0;
    }
    
    int& Lista::operator[] (int ind) {
      if (ind<0 || ind>=vel) throw GZbirkaIndeks ();
      Elem *tek = prvi;
      for(int i=0;i<ind;i++) tek=tek->sled;
      return tek->broj;
    }
    
    int Lista::operator() (int ind) {
      if (ind<0 || ind>=vel) throw GZbirkaIndeks ();
      Elem *tek = prvi, *preth = 0;
      for (int i=0; i<ind; i++) { preth=tek; tek=tek->sled; }
      int broj = tek->broj; vel--;
      if(((!preth ? prvi : preth->sled) = tek->sled) == 0) posl = 0;
      return broj;
    }
    
    // glavni.cpp
    
    #include "niz.h"
    #include "lista.h"
    #include <iostream.h>
    
    Zbirka* nova () {
      cout << "Vrsta (N, L)? ";
      char vrs; cin >> vrs;
      switch (vrs) {
        case 'l': case 'L': return new Lista ();
        case 'n': case 'N': {
          int k; cout << "Kapacitet? "; cin >> k; return new Niz (k);
        } default: throw "Neispravna vrsta";
      }
    }
    
    int main () { Zbirka *z = new Niz;
      while (true) {
        cout <<
          "\nMoguce operacije su:\n\n"
          "1 Stvaranje nove zbirke\n"
          "2 Dodavanje broja zbirci\n"
          "3 Promena broja u zbirci\n"
          "4 Vadjenje broja iz zbirke\n"
          "5 Prikazivanje zbirke\n"
          "6 Promena vrste zbirke\n"
          "0 Kraj rada\n\n"
          "Unesite svoj izbor: ";
        int izbor; cin >> izbor;
      if (izbor == 0) break;
        try {
          switch (izbor) {
            case  1: {
              Zbirka *zz=nova (); delete z; z=zz; break;
            }case 2: {
              cout << "Broj? "; int b; cin >> b; *z += b; break;
            }case 3: {
              int i, b;
              cout<<"Indeks? "; cin>>i;
              cout<<"Broj? "; cin>>b;
              (*z)[i] = b; break;
            }case 4: { int i;
              cout<<"Indeks? "; cin>>i;
              cout << "Broj= " << (*z)(i) << endl;
              break;
            }case 5: {
              cout<<"Zbirka= " <<*z<<endl; break;
            }case  6: {
              Zbirka *zz=nova( ); *zz += *z; delete z; z=zz; break;
            }default: throw "Neispravan izbor";
          }
        } catch (GZbirkaPuna) {
          cout << "GRESKA: Zbirka je puna\n";
        } catch (GZbirkaIndeks) {
          cout << "GRESKA: Indeks izvan opsega\n";
        } catch (const char *g) {
          cout << "GRESKA: " << g << endl;
        }
      }
    }

    konkretno, klasa lista je magacin neogranicenog kapaciteta ( povezana lista)

    ovo je resen rok iz objektnog programiranja kod prof Lasla Krausa.

    pozdrav.
    Poslednji put ažurirao/la opi : 26.10.2005. u 03:45

Slične teme

  1. php i nizovi
    Autor Peruzzi u forumu Programiranje
    Odgovora: 4
    Poslednja poruka: 10.10.2007., 12:56

Pravila za slanje poruka

  • Ne možete kreirati novu temu
  • Ne možete poslati odgovor
  • Ne možete dodati priloge
  • Ne možete prepraviti svoju poruku
  •