Skip to content

Instantly share code, notes, and snippets.

@darkodemic
Last active June 2, 2017 16:14
Show Gist options
  • Save darkodemic/58af0e489df9f7810c4c4a2038462c1c to your computer and use it in GitHub Desktop.
Save darkodemic/58af0e489df9f7810c4c4a2038462c1c to your computer and use it in GitHub Desktop.
6 vezba priprema 1 zadatak OP
/*
*
* 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