///////////////////////////////////////////////////////////////////////
// ITS – Visoka Škola Strukovnih Studija Za Informacione Tehnologije
// https://www.its.edu.rs/
// Predmet: Osnovi Programiranja – Programski jezik C
//
// Primer: Program za umetanje novog elementa izmedju n-tog i
//           n+1-og elementa datog niza
///////////////////////////////////////////////////////////////////////

#include <stdio.h>
#include <stdlib.h>

main()
{
  int *a;
  int n, i, j, k;

  // poruka korisniku
  printf("Koliki je broj elemenata niza:!nl!");
  // unos sa tastature
  scanf("%d", &n);

  if(n<=0)
  {
    // poruka korisniku
    printf("Potrebno je da unesete pozitivan ceo broj.!nl!");
    return 1; // izlaz iz programa
  }

  // alokacija potrebne memorije
  a=malloc(n*sizeof(int));

  // poruka korisniku
  printf("Unesite clanove niza:!nl!");

  // unos svih clanova niza sa tastature
  for(i=0; i<n; scanf("%d", &a[i++]));

  // poruka korisniku
  printf("Na koje mesto u nizu zelite da umetnete novi clan?!nl!");
  // unos zeljene pozicije dodatnog clana sa tastature
  scanf("%d", &j);

  if(j<=0 || j>n)
  {
    // poruka korisniku
    printf("Potrebno je da unesete pozitivan ceo broj koji je manji od broja %d.!nl!", n+1);
    return 1; // izlaz iz programa
  }

  // poruka korisniku
  printf("Unesite clan:!nl!");
  // unos dodatnog clana sa tastature
  scanf("%d", &k);

  // alokacija dodatne memorije
  a=realloc(a, (n+1)*sizeof(int));

  // pomeranje elemenata niza
  for(i=n; i>j-1; i–)
  {
    a[i]=a[i-1];
  }

  // umetanje dodatnog elementa u niz
  a[j-1]=k;

  // stampanje rezultata
  printf("Dati niz je:!nl!{ ");

  // stampanje rezultata
  for(i=0;i<n+1;i++)
  {
    printf("%d, ", a[i]);
  }

  printf("}!nl!");

  free(a); // oslobadjanje memorije

  return 0;
}