[ maximus_1 @ 04.04.2006. 15:31 ] @
Molio bih vas za pomoć oko ovog zadatka. Uspio sam ga riješiti ali ne na način kako u njemu piše da ga treba riješiti nego na svoj način, no to ipak nije dovoljno. Kako bi vi riješili sljedeći zadatak ali točno onako kako je navedeno:


Napravite C++ program koji će prvo učitati n, 0<n<100. Nakon toga program treba učitati n decimalnih brojeva, te ih ispisati od najmanjeg prema najvećem.

Program treba raditi na sljedeći način: treba koristiti polje za pohranjivanje brojeva. Nakon što učita k-ti broj, mora provjeriti je li posljednji upisani broj u polju veći od upravo učitanog broja, te ako nije, staviti upravo učitani broj na iza njega. Ako jeste, onda treba posljednji upisani broj u polju pomaknuti u sljedeći element, a upravo učitani broj se uspoređuje s pretposljednjim u polju. Ako je pretposljednji upisani broj u polju manji od upravo učitanog, onda učitani treba upisati na mjesto iza njega, a u suprotnom pretposljednji upisani broj u polju treba pomaknuti u sljedeći element polaj, a upravo učitani broj usporediti s prethodnim brojem od predposljednjeg. Ovaj se postupak ponavlja sve dok se u polju ne naiđe na broj koji je manji od upravo učitanog ili dok se ne pomaknu svi brojevi u polju za jednu poziciju dalje, i na taj se način oslobodi 0-ti element polja, te se upravo učitani element polja smješta na 0-tu poziciju.


Ovako sam ga ja riješio, no ne po navedenom postupku:

Code:

#include <iostream>
using namespace std;

int main(){
    
    int n, j, l, i = 0;
    float unos, k;
    float *polje;
    polje = new float[100];

    cout << "Upisite koliko brojeva treba poredati po velicini: ";
    cin  >> n;

    do{
        cout << "Upisite " << ++i << ". broj: ";
        cin  >> unos;
        
        polje[i - 1] = unos;
    }while(i < n);
    
    for(l = 1; l < n + 1; l++){
        for(j = 1; j < n; j++){
            if(polje[j] < polje[j - 1]){
                k = polje[j - 1];
                polje[j - 1] = polje[j];
                polje[j] = k;
            }
        }
    }

    cout << "Polje ima vrijednosti: ";

    for(i = 0; i < n; i++){
        cout << polje[i];
        if(i != n - 1){
            cout << ", ";
        }
        else
        {    
            cout << endl;
        }
    }

    delete polje;        
    return 0;
}


[Ovu poruku je menjao maximus_1 dana 04.04.2006. u 16:33 GMT+1]
[ leka @ 05.04.2006. 13:53 ] @
Sta je to "polje za pohranjivanje brojeva"? Iz tvog koda sam izvukao zakljucak da se taj termin koristi za nesto sto se i u akademskim krugovima i u narodu zove NIZ iliti NISKA (zavisno od ukusa).
Pravilo foruma je da ne resavamo domace zadatke, ALI postoji mogucnost da se IPAK pomogne oko zadat(a)ka AKKO je ocigledno da se osoba pomucila da zadatak sama resi, sto je u ovom slucaju istina. Pomoci cemo ti. Samo nazalost ja ne mogu sada da se bacim na resavanje, jer moram da idem malo iz kuce. :)
[ Goran Arandjelovic @ 06.04.2006. 14:37 ] @
Nisam napisao program, ali ti mogu reći da za gore opisani problem (ako se strogo radi kako problem nalaže) u najgorem slučaju moraš imati dva puta više rezervisane memorije nego što je veličina niza, te gore opisani način i nije baš praktičan.
[ Marko Stankovic @ 06.04.2006. 19:00 ] @
Ako sam dobro razumeo zadatak ovo bi trebalo da je resenje

Code:

#include <iostream>
#define MAX 100
using namespace std;

int main(int argc, char *argv[])
{
    
    int i=0,j=0;
    float *niz;
    int n;
    float temp;
    
    cout<<"Unesite broj elemenata: ";
    cin>>n;
    
    niz=new float[n];
    
    while(i<n){
        cout<<"Unesite "<<i+1<<". element: ";
        cin>>temp;
        j=i;
        while(j>0){
            if (niz[j-1]<temp) break;   //pitamo da li je poslednji u nizu manji od
            else niz[j]=niz[j-1];       //unesenog i ako nije pomeramo poslednji za jedno mesto
            j--;                        // i vrtimo dok ne nadjemo manji ili ne stignemo do pocetka niza
        }
        niz[j]=temp;
        i++;
    }
    
    for(i=0;i<n;i++) cout<<niz[i]<<" ";
    cout<<endl;
    
    delete niz;
    system("PAUSE");
    return EXIT_SUCCESS;
}
[ maximus_1 @ 08.04.2006. 11:48 ] @
Hvala, i ja sam napisao i dosta je sličan kod. Samo me zanima zašto ti služio ono MAX 100 i zašto return EXIT_SUCCESS;??
[ NrmMyth @ 08.04.2006. 14:30 ] @
isto ka "return 0"
[ Marko Stankovic @ 08.04.2006. 17:10 ] @
To MAX je samo simbolicka konstanta, hteo sam da proveravam da li se unet broj nalazi u opsegu od 0 do MAX, ali sam zaboravio tako da slobodno zanemari :) A za return ti je rekao NrmMyth, inace ja obicno koristim 0, ali DevC++ kreira main sa return EXIT_SUCCESS.