Last active
June 2, 2017 16:14
-
-
Save darkodemic/58af0e489df9f7810c4c4a2038462c1c to your computer and use it in GitHub Desktop.
6 vezba priprema 1 zadatak OP
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
* | |
* Zadatak 1. | |
* Napisati program na jeziku C koji od 20 celih brojeva, ucitanih sa tastature, formira niz od brojeva koji su u opsegu od 0 do 100 | |
* a onda ciklicno premesta elemente zadatog niza za m mesta udesno (m je broj zadat preko tastature) | |
* | |
*/ | |
#include <stdio.h> | |
#include <stdlib.h> | |
#define MIN 0 | |
#define MAX 100 | |
#define ARRLENGTH 20 | |
void reverse(int arr[], int sz) { | |
int i, j; | |
for (i = 0, j = sz; i < j; i++, j--) { | |
int tmp = arr[i]; | |
arr[i] = arr[j]; | |
arr[j] = tmp; | |
} | |
} | |
void rotate(int array[], int size, int amt) { | |
// Ovde se mozemo da primimo i negativne vrednosti onda je rotacija u drugom smeru. Mozemo samo da promenimo main da podrzimo i to | |
if (amt < 0) { | |
amt = size + amt; | |
} | |
// Pravimo 3 promene tj. rotiramo deo niza sa sledecim delom niza umesto element po element ovako je elegantnije i brze | |
reverse(array, size - amt - 1); | |
reverse(array + size - amt, amt - 1); | |
reverse(array, size - 1); | |
} | |
int main() { | |
// unsigned zato sto ne zelimo da korisnik moze da unese negativan broj za nesto sto ne moze | |
// A nula je jer zelimo posle da proverimo da li korisnik budala i samo pritisao enter umesto da nesto unese | |
// Ja ne volim onu varijantu sa do-while loop-om | |
unsigned int m = 0; | |
// Niz za karaktere | |
int array[ARRLENGTH]; | |
// Ako je original ima maximum ARRLENGTH karaktera ni novi niz ne moze da ima vise od toga | |
int newArray[ARRLENGTH]; | |
// Brojac za novi niz | |
int j = 0; | |
//Popunjavanje niza | |
printf("Uneti niz: \n"); | |
for (int i = 0; i < ARRLENGTH; i++) { | |
printf("Unesite %d. element: ", i + 1); // +1 Radi estetike | |
scanf("%d", &array[i]); | |
// Proveravamo da li je broj u trazenom opsegu ako jeste cuvamo ga u nov niz | |
// Pretpostavka je da ukljucujemo i granice tj u ovom slucaju 0 i 100 | |
if (array[i] <= MAX && array[i] >= MIN) { | |
newArray[j++] = array[i]; | |
} | |
} | |
// Nakon ovoga imamo popunjena oba niza , za sad nam samo ovaj drugi newArray treba i njega mrdamo levo desno | |
printf("Uneti M: "); | |
scanf("%d", &m); | |
if (m <= 0) { | |
perror("Unet nevazeci broj M."); | |
exit(1); | |
} | |
printf("Originalni: "); | |
for (int i = 0; i < ARRLENGTH; i++) { | |
printf("%d ", array[i]); | |
} | |
printf("\nLimitovan : "); | |
for (int i = 0; i < j; i++) { | |
printf("%d ", newArray[i]); | |
} | |
// Sada imamo sve i mozemo pocti sa pomeranjem/rotiranjem | |
rotate(newArray, j, m); | |
printf("\nRotiran : "); | |
for (int i = 0; i < j; i++) { | |
printf("%d ", newArray[i]); | |
} | |
return 0; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment