Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #define MAX_BR_EL 100
- /* spaja dva uredjena niza, na neopadajuci nacin*/
- void merge(int levi[], int desni[], int rez[], int n, int m){
- int i,j,p;
- i = j = p = 0;
- while( i < n && j < m){
- if (levi[i] < desni[j]){
- rez[p] = levi[i];
- p++; i++;
- } else if(levi[i] > desni[j]){
- rez[p] = desni[j];
- p++; j++;
- } else{
- rez[p] = levi[i];
- p++; i++;
- rez[p] = desni[j];
- p++; j++;
- }
- }
- while(i<n){
- rez[p] = levi[i];
- p++; i++;
- }
- while(j<m){
- rez[p] = desni[j];
- p++; j++;
- }
- }
- /* sortira niz, na neopadajuci nacin, koristeci mergesort algoritam otprilike :D*/
- int mergeSort(int niz[],int n){
- int levi[MAX_BR_EL],desni[MAX_BR_EL];
- int x = n,i,k;
- if (x==1){
- return niz[x-1];
- }else{
- for(i = 0; i < x/2; i++){
- levi[i] = niz[i];
- }
- k=0;
- for(i = x/2; i < x; i++,k++){
- desni[k] = niz[i];
- }
- mergeSort(levi,x/2);
- mergeSort(desni,x-x/2);
- }
- merge(levi,desni,niz,x/2,x-x/2);
- }
- /* glavni program */
- void main(){
- int niz[MAX_BR_EL];
- int i,j,n;
- while(1){
- //unos broja elemenata niza (n)
- printf("Unesi broj elemenata niza: ");
- scanf("%d",&n);
- printf("\n");
- if (n<=0 || n > MAX_BR_EL){break;}
- //unosi elemente
- for (i = 0; i < n ; i++){
- printf("Unesi %d. element niza: ",i+1);
- scanf("%d",&niz[i]);
- printf("\n");
- }
- //sortira niz
- mergeSort(niz,n);
- //ispituje da li je stepen dvojke; ako nije ispisuje poziciju i pretvara broj u nulu
- for (i = 0; i < n ; i++){
- if( niz[i] < 0 || ! stepenDvojke(niz[i])){
- printf("%d. element nije stepen dvojke; ",i+1);
- niz[i] = 0;
- }
- }
- //sve brojeve koji su jednaki nuli (nisu stepen dvojke) izbacuje iz niza
- j = 0;
- for (i = 0; i < n ; i++){
- if (niz[i] != 0){
- niz[j] = niz[i];
- j++;
- niz[i] = 0;
- }
- }
- n = j;
- //ispisuje konacni niz
- if (n == 0){
- printf("\n\nNijedan element nije bio stepen dvojke.");
- } else{
- printf("\n\nElementi koji su stepeni dvojke:\n\t");
- for (i = 0; i < n ; i++){
- printf("%d ",niz[i]);
- }
- }
- printf("\n\n");
- }
- printf("\nKRAJ");
- getchar();
- getchar();
- }
- /* funkcija koja proverava da li je broj stepen dvojke*/
- int stepenDvojke(int x){
- int y;
- if(x == 1 || x == 0){
- return 0;
- }
- while (x != 2){
- y = x;
- y /= 2;
- y *= 2;
- if (y != x){
- return 0;
- }
- x /=2;
- }
- return 1;
- }
Add Comment
Please, Sign In to add comment