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

[Zadatak] Brisanje svakog drugog elementa niza

[es] :: C/C++ programiranje :: C/C++ za početnike :: [Zadatak] Brisanje svakog drugog elementa niza

[ Pregleda: 5537 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Juka88
student, TVZ
Salvonski Brod

Član broj: 174695
Poruke: 3
*.adsl.net.t-com.hr.



Profil

icon [Zadatak] Brisanje svakog drugog elementa niza03.03.2008. u 21:42 - pre 195 meseci
Code:

#include <iostream.h>
#include <stdlib.h>
#include <stdio.h>

using namespace std;
int main()
{
      int MAX;
      scanf("%d", &MAX);
      int *niz, zbroj, i;
      niz=new int(MAX)

      zbroj=0;

      for (i=0; i<MAX; i++)
      {
          printf("Unesite broj:");       //unos niza
          scanf("%d", &niz[i]);
      }

      for(i=MAX-1; i>=0; i--){      //ispis niza naopacke
           printf("%d,",niz[i]);
      }

      printf("\n");
      for(i=MAX-1; i>=0; i=i-2){               //zbroj neparnih clanova niza
           printf("%d,",niz[i]);
           zbroj = zbroj + niz[i];
      }
      printf("\nZbroj svih elemenata na neparnim mjestima je: %d\n", zbroj);
      system("PAUSE");
      return 0;
}


Ovo je kod. Zanima me kako se moze izbrisati neki elemenat niza bez upotrebe drugog pomocnog niza.
recimo da korisnik unese deset elemenata niza i ja zelim izbrisati recimo svaki drugi elemenat niza i onda ispisati taj promjenjeni niz.
Moze li se to uciniti nekako pomocu pointera?
Ako da kako? cijelo poslijepodne sam pokusavao ali neuspjesno.
 
Odgovor na temu

Eurora3D Team
Nebojsa - Programer & Vodja tima
Beograd

Član broj: 120376
Poruke: 900
91.148.114.*



+7 Profil

icon Re: [Zadatak] Brisanje svakog drugog elementa niza04.03.2008. u 01:42 - pre 195 meseci
Ovako mozes da "izbacis" svaki drugi.
Ustvari elementi su ispremestanji u petlji a niz ostaje sa istim brojem elemenata.
Code:

#include <iostream>

// 1 2 3 4 5 6 7 8 9
// 1 3 5 7 9
using namespace std;
int main()
{
    int *niz=new int[100]; // npr 100
    int n=0;
    //
    cout << "Upis\n";
    while (n<9)
    {
        cin >> niz[n];
        n++;
    }
    //
    cout << "Promena\n";
    cout << "... \n";
    n=1;
    while (n<5)
    {
        niz[n]=niz[n*2]; // premestanje
        n++;
    }
    //
    cout << "Ispis\n";
    n=0;
    while (n<5) // sad imamo upola manje
    {
        cout << niz[n] << endl;
        n++;
    }
    //
    system("PAUSE");
    return 0;
}

 
Odgovor na temu

Juka88
student, TVZ
Salvonski Brod

Član broj: 174695
Poruke: 3
*.adsl.net.t-com.hr.



Profil

icon Re: [Zadatak] Brisanje svakog drugog elementa niza04.03.2008. u 02:53 - pre 195 meseci
hvala na trudu,shvatio sam.
 
Odgovor na temu

Eurora3D Team
Nebojsa - Programer & Vodja tima
Beograd

Član broj: 120376
Poruke: 900
91.148.112.*



+7 Profil

icon Re: [Zadatak] Brisanje svakog drugog elementa niza04.03.2008. u 20:17 - pre 195 meseci
Nista i drugi put

[Ovu poruku je menjao Eurora3D Team dana 05.03.2008. u 16:23 GMT+1]
 
Odgovor na temu

Juka88
student, TVZ
Salvonski Brod

Član broj: 174695
Poruke: 3
*.adsl.net.t-com.hr.



Profil

icon Re: [Zadatak] Brisanje svakog drugog elementa niza07.03.2008. u 00:16 - pre 195 meseci
e, napokon sam saznao kako da rjesim svoj problem pomocu pokazivaca.Rjesenje je vezana lista.
Trebalo mi je malo vise vremena da skuzim to posto sam tek presao s Pascala na C++ ali sada sam rjesio problem.

Code:

#include "stdafx.h"  //tu su mi ukljucene neke stvari poput <stdio.h> , ...
using namespace std;

struct polje
  {  char ime[20];    // Ime do 20 znakova
     int godine;          // Godine
     float visina;     // Visina
     polje *nxt;       // pokazivac na sljedece polje
  };


polje *start_ptr = NULL;
polje *trenutni;         // trenutni pokazivac sluzi za pomicanje po listi
int opcija = 0;


void dodavanje_na_kraj()
  {  
     polje *temp, *temp2;   // Pokazivaci
     temp = new polje;      // Rezerviramo mjesto za novo polje

     cout << "Please enter the name of the person: ";        //Punimo polje podatcima
     cin >> temp->ime;
     cout << "Please enter the age of the person : ";
     cin >> temp->godine;
     cout << "Please enter the height of the person : ";
     cin >> temp->visina;
     temp->nxt = NULL;                        //temp pokatuje na NULL

     // Postavljamo vezu do trenutnog polja(temp)
     if (start_ptr == NULL)            //ako ne postoji neko polje start pokazuje na temp i trenutni je start
        { start_ptr = temp;
          trenutni = start_ptr;
        }
     else            //inace
        { 
            temp2 = start_ptr;   //ako start_ptr ne pokazuje na NULL tada novo polje dolazi na mjesto starta
         // Nije NULL - lista je prazna!
         while (temp2->nxt != NULL)   //i  dok ne dodje do NULL
           {  
               temp2 = temp2->nxt;      // pomice se do sljedece karike u nizu
           }
         temp2->nxt = temp;  //temp2 pokazuje na temp
       }
  }



void dodavanje_na_pocetak()
  {  
     polje *temp, *temp2;   // Pokazivaci
     temp = new polje;      // Rezerviramo mjesto za novo polje

     cout << "Please enter the name of the person: ";        //Punimo polje podatcima
     cin >> temp->ime;
     cout << "Please enter the age of the person : ";
     cin >> temp->godine;
     cout << "Please enter the height of the person : ";
     cin >> temp->visina;
     temp->nxt = NULL;                        //temp pokatuje na NULL

     // Postavljamo vezu do trenutnog polja(temp)
     if (start_ptr == NULL)            //ako ne postoji neko polje start pokazuje na temp i trenutni je start
        { start_ptr = temp;
         
        }
     else            
        { 
            temp->nxt = start_ptr;  //sada sljedeci element polja pokazuje na on sto pokazuje start_ptr 
            start_ptr = temp;        //a start_ptr vratimo na to polje 
            trenutni = start_ptr;
       }
  }


void  prikazi_listu()
  {  
     polje *temp;
     temp = start_ptr;
     cout << endl;
     if (temp == NULL)
        cout << "Lista je prazna!" << endl;
     else
        { while (temp != NULL)
            {  // ispisujemo ime, godine i visinu
              cout << "Ime : " << temp->ime << " ";
              cout << "Godine : " << temp->godine << " ";
              cout << "Visina : " << temp->visina;
              if (temp == trenutni)
                cout << " <-- trenutno polje";
              cout << endl;
              temp = temp->nxt;

        }
     cout << "Kraj liste!" << endl;
        }
  }



void brisanje_polja_s_pocetka()
   { 
     polje *temp;
     temp = start_ptr;
     start_ptr = start_ptr->nxt;
     delete temp;
     trenutni = start_ptr;
   }



void brisanje_polja_s_kraja()
   { 
     polje *temp1, *temp2;
     if (start_ptr == NULL)
          cout << "Lista je prazna!" << endl;
     else
        { 
          temp1 = start_ptr;
          if (temp1->nxt == NULL)
             { delete temp1;
               start_ptr = NULL;
             }
          else
             { while (temp1->nxt != NULL)
                { temp2 = temp1;
                  temp1 = temp1->nxt;
                }
               delete temp1;
               temp2->nxt = NULL;
             }
        trenutni = start_ptr;
        }
   }


void brisanje_trenutnog_polja()
   { 
     polje *temp1, *temp2;
     if (start_ptr == NULL)
          cout << "Lista je prazna!" << endl;
     else
        { 
          temp1 = start_ptr;
          if (temp1->nxt == NULL)
             { delete temp1;
               start_ptr = NULL;
             }
          else
          { if(trenutni == start_ptr){
              brisanje_polja_s_pocetka();
             }
            else{
              
              if(trenutni->nxt != NULL){
                while (temp1->nxt <= trenutni)
                { temp2 = temp1;
                  temp1 = temp1->nxt;
                }
               temp2->nxt = temp1->nxt;
               delete temp1;
               trenutni=start_ptr;
              }
          else brisanje_polja_s_kraja();
            }
          }
        }
   }



void pomicanje_pokazivaca_naprjed ()
   { if (trenutni->nxt == NULL)
      cout << "NA kraju liste si." << endl;
     else
      trenutni = trenutni->nxt;
   }



void pomicanje_pokazivaca_nazad ()
   { if (trenutni == start_ptr)
      cout << "Na pocetku liste si" << endl;
     else
      { polje *predhodni;     // Declare the pointer
        predhodni = start_ptr;

        while (predhodni->nxt != trenutni)
          { predhodni = predhodni->nxt;
          }
        trenutni = predhodni;
      }
   }



void main()
  {  start_ptr = NULL;
     do
    {
      prikazi_listu();
      cout << endl;
      cout << "Izaberite opciju : " << endl;
      cout << "0. Izlaz iz programa." << endl;
      cout << "1. Dodaj polje na kraj liste." << endl;
      cout << "2. Dodaj polje na pocetak liste." << endl;
      cout << "3. Izbrisi polje na pocetku liste." << endl;
      cout << "4. Izbrisi polje s kraja liste." << endl;
      cout << "5. Izbrisi trenutno polje." << endl;
      cout << "6. Pomakni trenutni pokazivac naprijed za jedno polje." << endl;
      cout << "7. Pomakni trenutni pokazivac nazad jedno polje." << endl;
      cout << endl << " >> ";
      cin >> opcija;                 //ucitava opciju

      switch (opcija)
        {
          case 1 : dodavanje_na_kraj(); break;
          case 2 : dodavanje_na_pocetak(); break;
          case 3 : brisanje_polja_s_pocetka(); break;
          case 4 : brisanje_polja_s_kraja(); break;
          case 5 : brisanje_trenutnog_polja(); break;
          case 6 : pomicanje_pokazivaca_naprjed(); break;
          case 7 : pomicanje_pokazivaca_nazad();
        }
    }
     while (opcija != 0);
  }
  




stavio sam ovo ovdje, mozda nekome bude korisno.
Ako kome treba pojasnjenje neka pita.
 
Odgovor na temu

dmilicev
Dragan Milicev

Član broj: 3501
Poruke: 10
*.3gnet.mts.telekom.rs.



+1 Profil

icon Re: [Zadatak] Brisanje svakog drugog elementa niza12.07.2017. u 12:41 - pre 81 meseci
Code:
 
/*

  Brisanje svakog k-tog elementa niza.

*/

#include <stdio.h>

// Prikazuje niz sa brClanova integer-a
void prikazi_niz( char *tekst, int niz[], int brClanova )
{
    int i;

    printf("\n%s", tekst );

    for(i=0;i<brClanova;i++)
        printf("%3d", niz[i] );

    printf("\n");
}

// Brise svaki drugi element niza niz[] koji ima n integera.
void obrisi_svaki_drugi_element_niza_v1( int niz[], int *n )
{
    int i, NoviBrojClanova=0;

    for(i=0;i<*n;i++){
        printf("\n %d %% 2 = %d \n",i,i%2);
        if( i%2 == 0 )
            niz[NoviBrojClanova++] = niz[i];
    }
    *n = NoviBrojClanova; // smanjujemo broj clanova niza n na NoviBrojClanova
}

// Brise svaki drugi element niza niz[] koji ima n integera.
void obrisi_svaki_drugi_element_niza_v2( int niz[], int *n )
{
    int i, NoviBrojClanova=0;

    for(i=0;i<*n;i+=2)
        niz[NoviBrojClanova++] = niz[i];

    *n = NoviBrojClanova; // smanjujemo broj clanova niza n na NoviBrojClanova
}

// Brise svaki k-ti element niza niz[] koji ima n integera.
void obrisi_svaki_k_ti_element_niza_v1( int niz[], int *n , int k )
{
    int i, NoviBrojClanova=0, IndeksZaBrisanje=k-1; // jer je k redni broj elementa

    printf("\n Brisemo svaki %d. clan niza. \n",k);

    for(i=0;i<*n;i++)
        if( i == IndeksZaBrisanje )
            IndeksZaBrisanje += k;
        else
            niz[NoviBrojClanova++] = niz[i];

    *n = NoviBrojClanova; // smanjujemo broj clanova niza n na NoviBrojClanova
}

// Brise svaki k-ti element niza niz[] koji ima n integera.
int obrisi_svaki_k_ti_element_niza_v2( int niz[], int *n , int k )
{
    int i, NoviBrojClanova=1;   // jer nema smisla brisati 1. clan niza

    printf("\n Brisemo svaki %d. clan niza. \n",k);

    if ( k < 2 )    // tada brisanje nema smisla
        return 1;

    for(i=1;i<*n;i++)   // // i=1 jer nema smisla brisati 1. clan niza
        if( (i+1)%k != 0 )  // indeks i pretvaramo u redni broj i+1
            niz[NoviBrojClanova++] = niz[i];

    *n = NoviBrojClanova; // smanjujemo broj clanova niza n na NoviBrojClanova
    return 0;
}


int main(void)
{
    int niz[] = {1,2,3,4,5,6,7,8,9};

    int n = sizeof(niz) / sizeof(int);  // broj elemenata niza

    printf("\n n = %d \n",n);
    prikazi_niz(" Originalni niz je:   ",niz,n);

//    obrisi_svaki_drugi_element_niza_v1(niz,&n);

//    obrisi_svaki_drugi_element_niza_v2(niz,&n);

//    obrisi_svaki_k_ti_element_niza_v1(niz,&n,3);

    obrisi_svaki_k_ti_element_niza_v2(niz,&n,3);

    printf("\n n = %d \n",n);
    prikazi_niz(" Obradjeni niz je: ",niz,n);

    return 0;
}
 
Odgovor na temu

[es] :: C/C++ programiranje :: C/C++ za početnike :: [Zadatak] Brisanje svakog drugog elementa niza

[ Pregleda: 5537 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

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