[ lammas @ 26.03.2008. 15:31 ] @
Dat je niz A od N različitih celih brojeva (N<=100). Napisati program kojim se niz A transformiše tako da se na prvo mesto postavi najveći element, najveći od preostalih na poslednje mesto, sledeći po veličini na drugo mesto, sledeći na pretposlednje, itd. do sredine niza. Korišćenje pomoćnih nizova nije dozvoljeno. Transformisan niz ispisati.
Primer: Ulaz: n= 5 A: 13, -2, 34, 18, 9 Izlaz: A: 34, 13, -2, 9, 18

Imam okruzno takmicenje iz informatike pa mi je potrebna pomoc
[ savkic @ 27.03.2008. 01:14 ] @
> Dat je niz A od N različitih celih brojeva (N<=100). Napisati program kojim se niz A transformiše tako da se na prvo mesto postavi najveći
> element, najveći od preostalih na poslednje mesto, sledeći po veličini na drugo mesto, sledeći na pretposlednje, itd. do sredine niza.
> Korišćenje pomoćnih nizova nije dozvoljeno. Transformisan niz ispisati.
> Primer: Ulaz: n= 5 A: 13, -2, 34, 18, 9 Izlaz: A: 34, 13, -2, 9, 18

Radi iz više prolaza (posebna funkcija), prosledi se mesto na koje treba postaviti nađeni najveći broj (prvo, poslednje, drugo...) u datom opsegu (u prvom krugu čitav niz, u drugom sve osim prvog, u trećem osim prvog i poslednjeg...)

> Imam okruzno takmicenje iz informatike pa mi je potrebna pomoc

Za srednju, pretpostavljam da je ovo zadatak sa nekog od prethodnih takmičenja?
[ srki @ 27.03.2008. 10:53 ] @
Evo nesto sklepano na brzinu a na tebi je da proveris i ispravis greske ako ih ima:

Code:

#include <iostream>
#include <algorithm>
#include <vector>
#include <functional>
using namespace std;

int main() {
  vector<int> brojevi;
  int x;

  //procitaj niz (sa ctrl+z ga prekidas)
  while (cin >> x) {
   brojevi.push_back(x);
  }

  //sortiraj u obrnutom redosledu ceo niz
  sort(brojevi.begin(), brojevi.end(), greater<int>());

  for ( vector<int>::iterator i = brojevi.begin() + 1, j = i + 1; 
       j <  brojevi.end();
       ++i , j+=2) {
     swap(*i, *j);
  }

  //sortiraj u normalnom redosledu drugu polovinu niza
  sort(brojevi.begin() + brojevi.size()/2, brojevi.end());

  copy( brojevi.begin(), brojevi.end(), ostream_iterator< int > ( cout, " " ) );

}


Evo ovde mozes online da vidis kako radi a mozes i da sam prepravljas i testiras online:
http://codepad.org/5ifseedb

Ako te mrzi sam da unosis brojeve onda samo umesto koda za unos brojeva ukucaj:
Code:
generate_n(back_inserter(brojevi),10,rand);


Na takmicenjima obavezno koristi vec gotove stvari koje imas u C-u i C++-u kao sto je sortiranje niza, pretraga stringova itd... I u Pascalu takodje imas vec definisan qsort(). Nauci te stvari i onda neces gubiti vreme na implementaciji trivijalnih stvari.
[ lammas @ 27.03.2008. 15:33 ] @
auuu,ipak sam ja pocetnik za ovakav source code.Nego jer zna neko,ili da li je uopste moguce,da ja najveci broj izbrisem iz memorije,odnosno iz niza?
[ srki @ 27.03.2008. 21:22 ] @
Potrudi se da razumes kod, znacice ti i bices dosta produktivniji i brzi a pravices mnogo manje gresaka jer ne moras da vodis racuna o alokaciji i oslobadjanju memorije.
[ srki @ 27.03.2008. 22:53 ] @
Citat:
Nego jer zna neko,ili da li je uopste moguce,da ja najveci broj izbrisem iz memorije,odnosno iz niza?


Najbolje je da koristis liste.

Code:

list<int> brojevi;

//ubacis brojeve... 

brojevi.remove(max_element(brojevi.begin(), brojevi.end()));   


Ako ne zelis da se petljas sa C++ kodom onda postavi ovo pitanje na http://www.elitesecurity.org/f233-za-pocetnike

[Ovu poruku je menjao srki dana 28.03.2008. u 07:18 GMT+1]
[ lammas @ 28.03.2008. 08:32 ] @
Srki,hvala