studentski servis Login | Gost nalog
BRZI LINKOVI
BUDITE OBAVEŠTENI

Unesite podatke i svakih 15 dana na Vašu adresu stizaće
ITS studentske novosti

STUDENTI O ITS-u

"U februaru 2008. godine sam konkurisao za poziciju .Net Developera (programera početnika) u firmi Pexim Solutions. Polagao sam pet različitih testova, da bi me pozvali na poslednji razgovor. Dobio sam mnogo bolji posao - Build Engineera za koju je jedan od uslova bio dve godine radnog iskustva na istoj poziciji, tako da se nisam ni usudjivao da konkurišem. Ocenili su da cu moći, uz maksimalnu ozbiljnost i pomoć starijih kolega, da opravdam njihovo poverenje i dobro obavljam poslove na toj poziciji, sve to zahvaljujući znanju i iskustvu koje sam stekao radeći i studirajući na ITS-u."


Pogledajte ostale utiske studenata>>>
SINIŠA RISTOVIĆ, STUDENT

PROGRAMSKI JEZIK C - PRIMER 067

///////////////////////////////////////////////////////////////////////
// ITS - Visoka Škola Strukovnih Studija Za Informacione Tehnologije
//
http://www.its.edu.rs/
// Predmet: Osnovi Programiranja - Programski jezik C
//
// Primer: Program koji izracunava broj i ispisuje pozicije elemenata matrice
//            realnih brojeva (tipa float) koji su jednaki aritmetickoj sredini
//            svojih suseda (maksimalno 8 suseda)                              
///////////////////////////////////////////////////////////////////////

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


float** unosElemenata(float **matrica, int a, int b);
void ispisMatrice(float **matrica, int a, int b);
int izracunaj(float **matrica, int a, int b);
void ispisRezultata(float **matrica, int a, int b);
void oslobadjanjeMemorije(float **matrica, int x);

main()
{
  while(1)
  {
    float **matrica=NULL;
    int x, y;
 
    // poruka korisniku
    printf("\nUnesite broj redova (x) i broj kolona (y),\n(za kraj unesite x = 0)\nx = ");
    scanf("%d", &x);
    if(x == 0) // uslov za izlazak iz beskonacne petlje
      break;
    if(x < 0) // da li je broj redova manji od nule
    {
      printf("Broj redova mora biti veci od 0.\n");
      break;
    }
    // upis broja kolona
    printf("y = ");
    scanf("%d", &y);
    if(y<0) // da li je broj kolona manji od nule
    {
      printf("Broj kolona mora biti veci od 0.\n");
      break;
    }

    matrica = unosElemenata(matrica, x, y);
    if(matrica == NULL) // da li je doslo do greske u alokaciji memorije
      break;
  
    ispisMatrice(matrica, x, y);
// poziv funkcije ispisMatrice()

    // stampanje broja elemenata, koji su jednaki aritmetickoj sredini svojih suseda, preko poziva funkcije izracunaj()
    printf("\nU datoj matrici ima ukupno %d elemenata,\nkoji su jednaki aritmetickoj sredini svojih suseda.\n\n", izracunaj(matrica, x, y));

    ispisRezultata(matrica, x, y); // poziv funkcije ispisRezultata()

    oslobadjanjeMemorije(matrica, x); // poziv funkcije za oslobadjanje memorije
  }
}

// funkcija za unos svih elemenata matrice
float** unosElemenata(float **matrica, int a, int b)
{
  int i, j, k;
  float temp = 0;

  matrica = malloc(a * sizeof(float*)); // alokacija memorije
 
  if(matrica==NULL) // u slucaju neuspele alokacije
  {
    printf("Doslo je do greske u alokaciji memorije.\n");
    return matrica;
  }

  printf("Unesite elemente matrice:\n");
  for(i=0; i<a; i++)
  {
    *(matrica + i) = malloc(b * sizeof(float));
// alokacija memorije

    if(*(matrica + i)==NULL) // u slucaju neuspele alokacije
    {
      printf("Doslo je do greske u alokaciji memorije.\n");
      for(k=0; k<i; k++) // oslobadjanje memorije
        free(*(matrica + k));
      free(matrica);
      matrica = NULL;
      return matrica;
    }

    for(j=0; j<b; j++)
    {
      // unos elementa matrice
      printf("[%d, %d] = ", i+1, j+1);
      scanf("%f", &temp);
      *(*(matrica+i)+j) = temp;
    }
  }

  return matrica;
}

// funkcija za stampanje svih elemenata matrice
void ispisMatrice(float **matrica, int a, int b)
{
  int i, j;

  for(i=0; i<a; i++)
  {
    for(j=0; j<b; j++)
    {
      printf("%10.2f ", *(*(matrica+i)+j)); // stampanje svakog elementa matrice
    }

    printf("\n");
  }
}

// funkcija za izracunavanje broja elemenata, koji su jednaki aritmetickoj sredini svojih suseda
int izracunaj(float **matrica, int a, int b)
{
  int i, j, temp=0, broj=0;
// temp - za racunanje broja trazenih elemenata, broj - za broj suseda datog elementa
  float temp1 = 0; // za racunanje sume suseda datog elementa

  for(i=0; i<a; i++)
  {
    for(j=0; j<b; j++)
    {
      if((i-1)>=0) // da li postoji red iznad
      {
        temp1 += *(*(matrica + (i-1)) + j);
        broj += 1;

        if((j-1)>=0) // da li postoji kolona levo
        {
          temp1 += *(*(matrica + (i-1)) + (j-1));
          broj += 1;
        }

        if((j+1)<b) // da li postoji kolona desno
        {
          temp1 += *(*(matrica + (i-1)) + (j+1));
          broj += 1;
        }
      }

      if((i+1)<a) // da li postoji red ispod
      {
        temp1 += *(*(matrica + (i+1)) + j);
        broj += 1;

        if((j-1)>=0) // da li postoji kolona levo
        {
          temp1 += *(*(matrica + (i+1)) + (j-1));
          broj += 1;
        }

        if((j+1)<b) // da li postoji kolona desno
        {
          temp1 += *(*(matrica + (i+1)) + (j+1));
          broj += 1;
        }
      }

      if((j-1)>=0) // da li postoji kolona levo
      {
        temp1 += *(*(matrica + i) + (j-1));
        broj += 1;
      }

      if((j+1)<b) // da li postoji kolona desno
      {
        temp1 += *(*(matrica + i) + (j+1));
        broj += 1;
      }

      if(broj>0)
      {
        temp1 /= broj;
// izracunavanje aritmeticke sredine suseda datog elementa
      }

      if(*(*(matrica + i) + j) == temp1)
        temp += 1; // izracunavanje broja elemenata, koji su jednaki aritmetickoj sredini svojih suseda
   
      temp1 = 0;
      broj = 0;
    }
  }

  return temp;
}

// funkcija za stampanje pozicija elemenata, koji su jednaki aritmetickoj sredini svojih suseda
void ispisRezultata(float **matrica, int a, int b)
{
  int i, j, temp=0, broj=0;
  float temp1 = 0;

  for(i=0; i<a; i++)
  {
    for(j=0; j<b; j++)
    {
      if((i-1)>=0)
// da li postoji red iznad
      {
        temp1 += *(*(matrica + (i-1)) + j);
        broj += 1;

        if((j-1)>=0) // da li postoji kolona levo
        {
          temp1 += *(*(matrica + (i-1)) + (j-1));
          broj += 1;
        }

        if((j+1)<b) // da li postoji kolona desno
        {
          temp1 += *(*(matrica + (i-1)) + (j+1));
          broj += 1;
        }
      }

      if((i+1)<a) // da li postoji red ispod
      {
        temp1 += *(*(matrica + (i+1)) + j);
        broj += 1;

        if((j-1)>=0) // da li postoji kolona levo
        {
          temp1 += *(*(matrica + (i+1)) + (j-1));
          broj += 1;
        }

        if((j+1)<b) // da li postoji kolona desno
        {
          temp1 += *(*(matrica + (i+1)) + (j+1));
          broj += 1;
        }
      }

      if((j-1)>=0) // da li postoji kolona levo
      {
        temp1 += *(*(matrica + i) + (j-1));
        broj += 1;
      }

      if((j+1)<b) // da li postoji kolona desno
      {
        temp1 += *(*(matrica + i) + (j+1));
        broj += 1;
      }

      if(broj>0)
      {
        temp1 /= broj; // izracunavanje aritmeticke sredine suseda datog elementa
      }

      if(*(*(matrica + i) + j) == temp1)
        printf("[%d, %d]\n", i+1, j+1); // stampanje pozicije elementa, koji je jednak aritmetickoj sredini svojih suseda
   
      temp1 = 0;
      broj = 0;
    }
  }
}

// funkcija za oslobadjanje dinamicki alocirane memorije
void oslobadjanjeMemorije(float **matrica, int x)
{
  int i;

  if(matrica != NULL)
  {
    for(i=0; i<x; i++)
    {
      if(*(matrica + i) != NULL)
        free(*(matrica + i));
    }
    free(matrica);
  }
}

 



Upisni rok je otvoren!

Upis generacije 2010/2011 je u toku. Prijavite se na vreme >>

ITS TV
Studenti i diplomci
ITS studentski kanal>>> Profesori i nastavni tim

ITS nastavnički kanal>>>

PITAMO VAS
Kada birate školu koju ćete upisati, Vama je najvažnije:

Savremenost programa
Mogućnost zaposlenja
Društvo i kolege
Visina školarine
Lakoća završetka
Lično interesovanje za oblast školovanja

 
garancija