30
Fakultet Elektrotehnike | [email protected] Osnovi računarstva II 1 UZORCI

Osnovi programiranja

Embed Size (px)

DESCRIPTION

osnovi programiranja fakultet elektrotehnike prva godina drugi semestar

Citation preview

Page 1: Osnovi programiranja

Fakultet Elektrotehnike | [email protected]

O

sno

vi ra

ču

na

rstv

a II

1

UZORCI

Page 2: Osnovi programiranja

Fakultet Elektrotehnike | [email protected]

O

sno

vi ra

ču

na

rstv

a II

2

5

5 4 5

5 4 3 4 5

5 4 3 2 3 4 5

5 4 3 2 1 2 3 4 5

1. Zadatak

Napisati program koji na ekran računara ispisuje dati uzorak proizvoljnog broja redova uz pomoć petlji. Broj redova zadaje korisnik.( Dat je primjer za 5 redova ).

#include<stdio.h>void main(){ int i,j; int red; printf("Unesite broj redova: "); scanf("%d",&red); for(i=0;i<red;i++){ for(j=1;j<red-i;j++) putchar(' '); for(j=0;j<=i;j++) printf("%d",j+1); for(j=0;j<i;j++) printf("%d",i-j); putchar('\n'); }}

2. Zadatak

Napisati program koji na ekran računara ispisuje dati uzorak proizvoljnog broja redova uz pomoć petlji. Broj redova zadaje korisnik.( Dat je primjer za 4 redova ).

#include <stdio.h>void main(){

int i;int k;int br_red;printf("Unesite broj redova: ");scanf("%d",&br_red);for(i=1;i<=br_red;i++) {

for(k=1;k<=br_red-i;k++)putchar(' ');

for(k=1;k<i;k++)printf("%d",k);

putchar('1');for(k=i-1;k>=1;k--)

printf("%d",k);putchar('\n');

}}

3. Zadatak

Napisati program koji na ekran računara ispisuje dati uzorak proizvoljnog broja redova uz pomoć petlji. Broj redova zadaje korisnik.( Dat je primjer za 5 redova ).

#include <stdio.h>void main(){

int i;int k;int br_red;printf("Unesite broj redova: ");scanf("%d",&br_red);for(i=1;i<=br_red;i++) {

for(k=1;k<=br_red-i;k++)putchar(' ');

for(k=i;k>=1;k--)printf("%d",k);

for(k=2;k<=i;k++)printf("%d",k);

putchar('\n');}

}

4. Zadatak

Napisati program koji na ekran računara ispisuje dati uzorak proizvoljnogbroja redova uz pomoć petlji. Broj redova zadaje korisnik.( Dat je primjer za 5 redova ).

#include<stdio.h>void main(){ int i,j; int red; printf("Unesite broj redova: "); scanf("%d",&red); for(i=0;i<red;i++){ for(j=1;j<red-i;j++) putchar(' '); for(j=red;j>=red-i;j--) printf("%d",j); for(j=red-i;j<red;j++) printf("%d",j+1); putchar('\n'); }}

1

1 1 1

1 2 1 2 1

1 2 3 1 3 2 1

1 2 3 4 1 4 3 2 1

1

1 2 1

1 2 3 2 1

1 2 3 4 3 2 1

1 2 3 4 5 4 3 2 1

1

2 1 2

3 2 1 2 3

4 3 2 1 2 3 4

5 4 3 2 1 2 3 4 5

Page 3: Osnovi programiranja

Fakultet Elektrotehnike | [email protected]

O

sno

vi ra

ču

na

rstv

a II

3

5. Zadatak

Neka program od korisnika učita veliko slovo i na izlazu (ekranu) odštampa trougao po datom pravilu. Primjer trougla za učitano slovo 'E'.

#include<stdio.h>void main(){ char znak; int i,j; printf("Unesite veliko slovo: "); scanf("%c",&znak); for(i='A';i<=znak;i++) { for(j=znak;j>i;j--) putchar(' '); for(j='A';j<=i;j++) putchar(j); for(j=i-1;j>='A';j--) putchar(j); putchar('\n'); }}

6. Zadatak

Napisati program koji na ekran računara ispisuje dati uzorak proizvoljnog broja redova uz pomoć petlji. Broj redova zadaje korisnik.( Dat je primjer za 5 redova ).

#include <stdio.h>#include <math.h>int main() { int i,j,n; printf("Unesite broj redova\n"); scanf("%d",&n); for(i=0;i<n;i++) { for(j=0;j<n-i;j++) printf(" "); for(j=0;j<=i;j++) printf("%c",'A'+j); for(j=1;j<=i;j++) printf("%c",'A'+i-j); printf("\n"); }}

7. Zadatak

Neka program od korisnika učita veliko slovo i na izlazu (ekranu) odštampa trougao po datom pravilu. Primjer trougla za učitano slovo 'E'.

#include<stdio.h>void main()

char slovo, i, j;printf("Unesite veliko slovo: ");scanf("%c", &slovo);for(i='A'; i<=slovo; i++){

for(j=1; j<=slovo-i; j++)putchar(' ');

for(j=i; j>'A'; j--)putchar(j);

for(j='A'; j<=i; j++)putchar(j);

printf("\n");}

}

8. Zadatak

Napisati program koji na ekran računara ispisuje dati uzorak proizvoljnog broja redova uz pomoć petlji. Broj redova zadaje korisnik.( Dat je primjer za 5 redova ).

#include<stdio.h>void main(){ int i,j,k; int n; printf("Unesite broj do kojeg zelite ispis: "); scanf("%d",&n); for(i='A';i<='A'+n;i++)

{ for(k=1;k<='A'+n-i;k++) putchar(' '); for(j='A';j<=i-1;j++) putchar('A'); putchar(i); for(j='A';j<i;j++) putchar('B'); putchar('\n'); }}

A

A B A

A B C B A

A B C D C B A

A B C D E D C B A

A

A B B

A A C B B

A A A D B B B

A A A A E B B B B

A

B A B

C B A B C

D C B A B C D

E D C B A B C D E

A A B A A B C B A A B C D C B AA B C D E D C B A

Page 4: Osnovi programiranja

Fakultet Elektrotehnike | [email protected]

O

sno

vi ra

ču

na

rstv

a II

4

9. Zadatak

Napisati program koji na ekran računara ispisuje dati uzorak proizvoljnog broja redova uz pomoć petlji. Nije dozvoljeno koristiti naredbe tipa printf() i sl. (Dat je primjer uzorka za 5 redova.)

#include<stdio.h>void main(){ char znak; int i,j; printf("Unesite veliko slovo: "); scanf("%c",&znak); for(i='A';i<=znak;i++) { for(j='A';j<=i;j++) printf(" "); for(j=i;j<=znak;j++) putchar(j); for(j=znak-1;j>=i;j--) putchar(j); putchar('\n'); }}

10. Zadatak

Napisati program koji na ekran računara ispisuje dati uzorak proizvoljnog broja redova uz pomoć petlji. Broj redova zadaje korisnik.( Dat je primjer za 5 redova ).

#include <stdio.h>void main(){

int i;int k;int br_red;printf("Unesite broj redova: ");scanf("%d",&br_red);for(i=1;i<=br_red;i++){

for(k=1;k<=br_red-i;k++)putchar(' ');

for(k=1;k<=i;k++)putchar('A');

for(k=1;k<=i;k++)putchar('B');

putchar('C');putchar('\n');

}}

11. Zadatak

Napisati program koji na ekran računara ispisuje dati uzorak proizvoljnog broja redova uz pomoć petlji. Broj redova zadaje korisnik.( Dat je primjer za 5 redova ).

#include<stdio.h>void main() { int n, i, j; printf("Unesite sirinu uzorka: "); scanf("%d", &n); for(i=1; i<n; i++) { for(j=1; j<=i; j++) putchar('*'); putchar('\n'); } for(i=n; i>=1; i--) { for(j=1; j<=i; j++) putchar('*'); putchar('\n'); }}

12. Zadatak

Napisati program koji na ekran računara ispisuje dati uzorak proizvoljnog broja redova uz pomoć petlji. Broj redova zadaje korisnik.( Dat je primjer za 5 redova ).

#include <stdio.h>void main(){

int i;int k;int br_red;printf("Unesite broj redova: ");scanf("%d",&br_red);for(i=1;i<=br_red;i++){

for(k=1;k<i;k++)printf("%d",k);

for(k=br_red;k>=i;k--)printf("%d",k);

putchar('\n');}

}

A B C

A A B B C

A A A B B B C

A A A A B B B B C

5 4 3 2 1

1 5 4 3 2

1 2 5 4 3

1 2 3 5 4

1 2 3 4 5

** ** * ** * * ** * * * * * * * * * * ** **

A B C D E D C B AA B C D E D C B AA B C D E D C B AA B C D E D C B AA B C D E D C B A

Page 5: Osnovi programiranja

Fakultet Elektrotehnike | [email protected]

O

sno

vi ra

ču

na

rstv

a II

5

13. Zadatak

Napisati program koji na ekran računara ispisuje dati uzorak proizvoljnog broja redova uz pomoć petlji. Broj redova zadaje korisnik.

#include <stdio.h>void main(){

int i;int k;int br_red;printf("Unesite broj redova: ");scanf("%d",&br_red);for(i=1;i<=br_red;i++) {

for(k=i;k<=br_red;k++)printf("%d",k);

for(k=1;k<=i;k++)printf("%d",k);

for(k=i+1;k<=br_red;k++)printf("%d",k);

for(k=1;k<=i-1;k++)printf("%d",k);

putchar('\n');}

}

14. Zadatak

Napisati program koji na ekran računara ispisuje dati uzorak proizvoljnog broja redova uz pomoć petlji. Broj redova zadaje korisnik.

#include <stdio.h>void main(){

int i;int k;int br_red;printf("Unesite broj redova: ");scanf("%d",&br_red);for(i=1;i<=br_red;i++){

for(k=1;k<=i;k++)printf("%d",br_red);

for(k=br_red-i;k>=0;k--)printf("%d",k);

for(k=1;k<=br_red-i;k++)printf("%d",k);

for(k=1;k<=i;k++)

printf("%d",br_red);putchar('\n');

}}

15. Zadatak

Napisati program koji na ekran računara ispisuje dati uzorak proizvoljnog broja redova uz pomoć petlji. Broj redova zadaje korisnik.

#include <stdio.h>void main(){

int i;int k;int br_red;printf("Unesite broj redova: ");scanf("%d",&br_red);for(i=1;i<=br_red;i++) {

putchar('0');for(k=1;k<i;k++)

printf("%d",k);for(k=1;k<=br_red-i;k++)

putchar('0');printf("%d",br_red);for(k=1;k<=br_red-i;k++)

putchar('0');for(k=i-1;k>0;k--)

printf("%d",k);putchar('0');putchar('\n');

}}

4 3 2 1 0 1 2 3 4

4 4 2 1 0 1 2 4 4

4 4 4 1 0 1 4 4 4

4 4 4 4 0 4 4 4 4

0 0 0 0 4 0 0 0 0

0 1 0 0 4 0 0 1 0

0 1 2 0 4 0 2 1 0

0 1 2 3 4 3 2 1 0

1 2 3 4 1 2 3 4

2 3 4 1 2 3 4 1

3 4 1 2 3 4 1 2

4 1 2 3 4 1 2 3

Page 6: Osnovi programiranja

Fakultet Elektrotehnike | [email protected]

O

sno

vi ra

ču

na

rstv

a II

6

16. Zadatak

Napisati program koji na ekran ispisuje slijedeći uzorak proizvoljne širine, tj. znak do koga se ispisuje uzorak unosi korisnik sa tastature. Primjer za slovo 'E'.

#include<stdio.h>#include<ctype.h>void main(){ char ZNAK; int i,j; printf("Unesite veliko slovo: "); scanf("%c",&ZNAK); if(ZNAK>='a'&& ZNAK<='z') ZNAK=toupper(ZNAK); printf("______________\n\n"); for(i='A';i<=ZNAK;i++)

{ for(j=ZNAK;j>i;j--) putchar(j); for(j='A';j<i;j++) putchar(j); for(j=i;j>='A';j--) putchar(j); for(j=i+1;j<=ZNAK;j++) putchar(j); putchar('\n'); }}

17. Zadatak

Napisati program koji na ekran računara ispisuje dati uzorak proizvoljnog broja redova uz pomoć petlji. Broj redova zadaje korisnik.

#include<stdio.h>int main(void){ int i,j,n; printf("Unesi broj redova:\n"); scanf("%d",&n); for(i=1;i<=n;i++) { for(j=1;j<=n-i;j++) printf("-"); for(j=1;j<=i;j++)

printf("+"); for(j=1;j<i;j++) printf("+"); for(j=1;j<=n-i;j++) printf("-"); printf("\n"); } for(i=1;i<=n-1;i++) { for(j=1;j<=i;j++) printf("-"); for(j=1;j<n-i;j++) printf("+"); for(j=1;j<=n-i;j++) printf("+"); for(j=1;j<=i;j++) printf("-"); printf("\n"); }}

18. Zadatak

Napisati program koji na ekran računara ispisuje dati uzorak proizvoljnog broja redova uz pomoć petlji. Broj redova zadaje korisnik.

#include<stdio.h>int main(void){ int i,j,n; printf("\nUnesi broj redova:"); scanf("%d",&n); for(i=1;i<=n;i++){ for(j=1;j<=n-i;j++) putchar(' '); for(j=1;j<=i;j++) putchar('*'); for(j=1;j<i;j++) putchar('*'); putchar('\n'); }}

E D C B A B C D E

E D C A B A C D E

E D A B C B A D E

E A B C D C B A E

A B C D E D C B A

Page 7: Osnovi programiranja

Fakultet Elektrotehnike | [email protected]

O

sno

vi ra

ču

na

rstv

a II

7

19. Zadatak

Napisati program koji na ekran računara ispisuje dati uzorak proizvoljnog broja redova uz pomoć petlji. Broj redova zadaje korisnik.

#include<stdio.h>int main(void){ int i,j,n; printf("Unesi broj redova:\n"); scanf("%d",&n); for(i=1;i<=n;i++) { for(j=1;j<=n-i;j++) putchar('O'); for(j=1;j<=i;j++) putchar('X'); for(j=1;j<i;j++) putchar('X'); for(j=1;j<=n-i;j++) putchar('O'); putchar('\n'); }}

O O O O X O O O O

O O O X X X O O O

O O X X X X X O O

O X X X X X X X O

X X X X X X X X X

Page 8: Osnovi programiranja

Fakultet Elektrotehnike | [email protected]

O

sno

vi ra

ču

na

rstv

a II

8

FUNKCIJE, POKAZIVAČII

NIZOVI

Page 9: Osnovi programiranja

Fakultet Elektrotehnike | [email protected]

O

sno

vi ra

ču

na

rstv

a II

9

20. Zadatak

Napisati rekurzivnu funkciju prototipa int aniz(int a0, int d, int n);koja računa n-ti član aritmetičkog niza. N-ti član aritmetičkog niza se računa prema formuli:

#include <stdio.h>int aniz(int a0, int d, int n) { if (n == 0) return a0; else return d + aniz(a0, d, n-1);}int main () { int a0, d, n, nclan; while (1) { printf ("\nUpisite nulti clan, diferenciju i indeks"

"zadanog clana :");scanf ("%d %d %d", &a0, &d, &n);if (n < 0) break;nclan = aniz (a0, d, n);printf ("\n %d. clan aritmetickog niza, s nultim "

"clanom %d i diferencijom %d: %d \n", n, a0,d, nclan);

}printf ("\nNegativni indeks clana %d\n", n);return 0;

}

21. Zadatak

Napisati funkviju koja ima prototip void naopako(char *); a vrši inverziju redoslijeda slova u zadatoj riječi.

#include <stdio.h>#define MAX 20void naopako(char *);void main() {

char unos[MAX];printf("Unesite rijec:");gets(&unos);

naopako(&unos);printf("Rijec naopako: %s\n",unos);

}

void naopako(char *niz){char tmp[MAX];int n,k,i=0;while ((tmp[i]=niz[i])) {

i++;}n=0;for(k=i-1; k>=0;k--) {

niz[n]=tmp[k];n++;

}}

22. Zadatak

Napisati i testirati fnkciju prototipa unsigned long bit_count (unsigned long value); koja vraća broj binarnih jedinica u binarnoj reprezentaciji broja value.

#include<stdio.h>unsigned long bit_count(unsigned long value);void main(){ int num_bit; num_bit=bit_count(79); printf("%d\n",num_bit); }unsigned long bit_count(unsigned long value) { int count=0; while(value=0) { if(value&1) count++; value>>1; } return count; }

Page 10: Osnovi programiranja

Fakultet Elektrotehnike | [email protected]

O

sno

vi ra

ču

na

rstv

a II

10

23. Zadatak

Napisati funkciju koja ima prototip void zamijeni(double *,double *); a vrši zamjenu varijabli tipa double.

#include<stdio.h>void zamijeni(double *,double *);void main(void) { double x=9,y=7; printf("prije pozivanja funkcije\nx=%lf\ty=%if\n",x,y); zamijeni(&x,&y); printf("poslije pozivanja funkcije\nx=%lf\ty=%if\n",x,y); }void zamijeni(double *a,double *b) { double pom; pom=*a; *a=*b; *b=pom; }

24. Zadatak

Napisati funkciju čiji je prototip dat sa float suma_niza ( float *,int n);Koja nalazi sumu elemenata niza realnih brojeva.

#include<stdio.h>float suma_niza ( float *,int n);void main (void){ int i=0,n; float niz[20]; printf("Unesite zeljeni broj elemenata niza (max"

"20):\n"); scanf("%d",&n); printf("Unesite elemente niza: \n"); for(i;i<n;i++) scanf("%f",&niz[i]); printf("Suma elemenata niza je :%f\n",suma_niza(niz,n)); }float suma_niza (float *niz,int n) { int i=0; float suma=0; while(i<n) { suma+=*(niz+i); i++;

} return suma; }25. Zadatak

Napisati funkciju duzinastr koja nalazi duzinu stringa. Funkcija prihvata jedan parametar, a to je pokazivač na početak stringa. Funkcija vraća duzinu stringa. Funkciju je potrebno realizovati bez korištenja funkcije strlen().

#include <stdio.h>int duzina(char *);void main(){ char string [100]; printf ("\nUnesite jedan string: "); scanf ("%s", string); getchar(); printf ("\nDuzina stringa je: %d\n",duzina(string));}int duzina(char* string) {

int d=0;while (*string++!='\0') d++;return d;

}

26. Zadatak

Napisati funkciju int psuma(int *, int *);koja nalazi parcijalnu sumu elemenata niza cijelih brojeva. Takođe, napisati i glavni program koji demonstrira rad ove funkcije.

#include<stdio.h>#define VELICINA 10int psuma(int *, int *);void main(){ int niz[VELICINA]; int i,suma; int rbr1,rbr2; int *prvi,*zadnji; printf("Unesite elemente niza cijelih brojeva:\n"); for(i=0;i<VELICINA;i++) { scanf("%d",&niz[i]); } printf("Unesite redne brojeve elemenata niz za koje se" "racuna parcijalna suma:\n"); scanf("%d %d",&rbr1,&rbr2);

Page 11: Osnovi programiranja

Fakultet Elektrotehnike | [email protected]

O

sno

vi ra

ču

na

rstv

a II

11

prvi=niz+rbr1-1; zadnji=niz+rbr2-1; suma=psuma(prvi,zadnji); printf("Parcijalna suma niza je: %d\n",suma); }int psuma(int*start, int*kraj) { int rezultat=0; while(start<=kraj) { rezultat+=*start; start++; } return rezultat; }

27. Zadatak

Napisati funkciju void sortiranje(int *, int );koja sortira niz cijelih brojeva, a zatim napisati odgovarajući program koji koristi tu funkciju.

#include<stdio.h>#define MAX 10void sortiranje(int *, int );void main(){ int niz[MAX]; int i,n; printf("Unesite dimenzije niza:\n"); scanf("%d",&n); printf("Unesite niz:\n"); for(i=0;i<n;i++) scanf("%d",&niz[i]); sortiranje(niz,n); printf("sortirani niz"); for(i=0;i<n;i++) printf("%d",niz[i]); printf("\n"); }void sortiranje(int*niz,int n) { int temp,k,i; for(i=0;i<n;i++) temp=niz[i]; k=i; while(niz[k-1]>temp && k>0) { niz[k]=niz[k-1]; k--; } }

28. Zadatak

Napisati funkciju koja vraća broj znakova (osim null znak) u unesenom stringu, pri čemu se ne smiju koristiti funkcije iz biblioteke <string.h>.

#include<stdio.h>int slength(char*s);void main(){ char rijec[30]; printf("Unesite jednu rijec:\n"); gets(rijec); printf("Duzina unesene rijeci je %d\n",slength(rijec));}int slength(char*s){ char*p=s; while(*p++); return(p-s-1); }

29. Zadatak

Napisati funkciju double *najveci(double [],int N);

#include <stdio.h>#define MAX 10double *najveci(double [],int N);void main(){

double niz[MAX];double *pnajveci;int br_elemenata;int i;do{

printf("Unesite broj elemenata niza. Maksimalno je %d“ “elemnata.\n",MAX);

scanf("%d",&br_elemenata);}while((br_elemenata<1) || (br_elemenata>10));for(i=0; i<br_elemenata;i++){

printf("Unesite %d clan niza: ",i+1);scanf("%lf",&niz[i]);

}pnajveci=najveci(niz,br_elemenata);printf("Najveci clan niza je: %lf\n",*pnajveci);

Page 12: Osnovi programiranja

Fakultet Elektrotehnike | [email protected]

O

sno

vi ra

ču

na

rstv

a II

12

}double *najveci(double f_niz[],int N){

int i;double *pnajveci;pnajveci = f_niz;for(i=1;i<N;i++){

if (*(f_niz+i) > *pnajveci)*pnajveci = *(f_niz+i);

}return pnajveci;

}

30. Zadatak

Napisati funkciju koja vraća pokazivač na najveći član cjelobrojnog niz. U glavnom programu unijeti niz te pozvati funkciju i ispisati najveći član.

#include<stdio.h>#define MAX 100int *najveci(int *, int);void main() { int A[MAX]; int i,n,*pmax; do{ printf("Unesite dimenziju niza: "); scanf("%d", &n); } while(n<=0 || n>MAX); printf("Unesite elemente cjelobrojnog niza: \n"); for(i=0;i<n;i++){ printf("Unesite %d. clan niza: ",i+1); scanf("%d", &A[i]); } pmax=najveci(A,n); printf("\nNajveci clan cjelobrojnog niza je %d", *pmax);}int *najveci(int *A, int x){ int *pmax; int i; pmax=A; for(i=0;i<x;i++) { if(*pmax<A[i]) pmax=&A[i]; } return pmax;}

31. Zadatak

Fibonaccijevi brojevi se definiraju na sljedeći način: F(n)=F(n-1)+F(n-2),F(0)=0,F(1)=1 Napisati funkciju čiji je prototip dat sa long int fibonacci(long int n); koja računa vrijednost Fibonaccijevog broja n. Rad funkcije testirati u glavnom programu.

#include <stdio.h>long int fibonacci(long int n);void main(){

long int n,fib; printf("Unesite n za koje zelite ispisati fiboncijev "

"broj:" );scanf("%ld",&n);fib=fibonacci(n);printf("Fibonacijev broj je: %ld\n",fib);

}long int fibonacci(long int n){

long int i,rez,f0=0,f1=0;rez = 1;switch(n){case 0:

return 0;break;

case 1:return 1;break;

default:for(i=2;i<n;i++){

f0=rez;rez+=f1;f1=f0;

}return rez;}

}

Page 13: Osnovi programiranja

Fakultet Elektrotehnike | [email protected]

O

sno

vi ra

ču

na

rstv

a II

13

32. Zadatak

Napisati funkciju čiji je prototip dat sa int EX_ILI(int x,int y); koja prihvata dva argumenta x i y čije vrijednosti mogu biti 1 ili 0. Data funkcija treba simulirati rad ekskluzivnog ILI kola. Rad funkcije testirati u glavnom programu.

#include <stdio.h>int EX_ILI(int x, int y);void main(){

int x,y;do{

printf("Unesite X: ");scanf("%d",&x);

}while (x<0 || x>1);do{

printf("Unesite Y: ");scanf("%d",&y);

}while (y<0 || y>1 );printf("Ekskluzivno ili: %d\n",EX_ILI(x,y));

}int EX_ILI(int x, int y){

int rez;rez = !x & y | x & !y;return rez;

}

33. Zadatak

Napisati funkciju čiji je prototip dat sa double skal_pro (double a[], double b[], int n);koja izračunava skalarni proizvod dva vektora a i bdimenzija 1xn. U glavnom programu testirati napisanu funkciju.

#include <stdio.h>double skal_pro(double a[],double b[],int n);void main(){

double a[20],b[20];int dim;int i;printf("Unesite dimenziju vektora: ");scanf("%d",&dim);printf("Unesite clanove vektora a:\n");for (i=0;i<dim;i++){

scanf("%lf",&a[i]);printf("Unesite clanove vektora b:\n");

}for (i=0;i<dim;i++){

scanf("%lf",&b[i]);printf("Skalarni proizvod je: %lf\n",

skal_pro(a,b,dim));}

}double skal_pro(double a[],double b[],int n){

int i;double pro=0;for(i=0;i<n;i++)

pro+=a[i]*b[i];return pro;

}

34. Zadatak

Napisati funkciju čiji je prototip dat sa double stepen(double x,int n); koja računa x podignuto na cjelobrojni stepen n, tj. xn. Napisati i glavni program u kojemu ispitati rad napisane funkcije za proizvoljne vrijednosti baze x i eksponenta n.

#include <stdio.h>double stepen(double x,int n);void main(){

double x,rez;int n;printf("Unesite bazu: ");scanf("%lf",&x);printf("Unesite stepen: ");scanf("%d",&n);rez=stepen(x,n);printf("Rezultat je: %lf\n",rez);

}double stepen(double x,int n){

int i;double rez=x;for(i=2;i<=n;i++){

rez*=x;}return rez;

}

Page 14: Osnovi programiranja

Fakultet Elektrotehnike | [email protected]

O

sno

vi ra

ču

na

rstv

a II

14

35. Zadatak

Napisati funkciju čiji je prototip dat sa: char *spoji(char* s, char *t); koja spaja stringove s i t tako da na kraj stringa s nadoveže string t. Vraćena vrijednost iz funkcije je pokazivač na rezultujući string. (Napomena: Nije dozvoljeno korištenje funkcija iz <string.h>.)

#include<stdio.h>char *spoji(char *s,char *t);void main(){ char string1[50]; char string2[50]; printf("Unesite prvi string:"); gets(string1); printf("Unesite drugi string:"); gets(string2); printf("Rezultujuci string je: %s\n", spoji(string1,string2));}char *spoji(char *s,char *t) { int i=0,j=0; while(s[i]) i++; while((s[i]=t[j])) { i++; j++; } s[i]='\0'; return s;}

36. Zadatak

Učitati dvije riječi. U glavnom programu ispisati zbroj njihovih duljina. Duljinu riječi izračunati u funkciji.

#include<stdio.h>int zbroj (char *p1, char *p2){

int i, br = 0;for (i=0;i<100;i++){

if (*(p1+i)=='\0')break;

br++;}for (i=0;i<100;i++){

if (*(p2+i)=='\0')break;

br++;}return br;

}void main(){

char r1[100], r2[100];int br;printf ("\nUpiši prvu riječ: ");scanf ("%s", r1);printf ("\nUpiši drugu riječ: ");scanf ("%s", r2);br = zbroj (r1,r2);if (br==0)

printf("\nNije upisana ni jedna riječ.");else

printf("\nZbroj duljina riječi sadrži %d.", br);}

37. Zadatak

Napisati program koji učitava sa standardnog ulaza string od manje 50 znakova. Ukoliko se u unesenom stringu nalazi znak *, formirati i ispisati na ekran računara novi string koji sadrži sve znakove učitanog stringa do datog znaka *.

#include<stdio.h>void main(){ int i=0; char str[50],s[50]; printf("\nUnesite string:"); gets(str); for(i=0;str[i]!='*';i++){ s[i]=str[i]; s[i+1]='\0'; } printf("Novoformirani string je %s\n",s);}

Page 15: Osnovi programiranja

Fakultet Elektrotehnike | [email protected]

O

sno

vi ra

ču

na

rstv

a II

15

38. Zadatak

Napisati funkciju čiji je prototip dat sa: int str_cmp(char* s,char *t); koja provjerava da li su stringovi s i t leksikografski jednaki. Ukoliko su stringovi jednaki funkcija vraća vrijednost –1, a u suprotnom vraća indeks prvog znaka gdje se stringovi razlikuju. U glavnom programu unijeti dva proizvoljna stringa, te provjeriti rad napisane funkcije. Za svaki mogući slučaj obezbijediti prikladan ispis.

#define MAX 10#include <stdio.h>int str_cmp(char *s, char *t);void main(){

char s1[MAX],s2[MAX];int iRet;printf("Unesite prvi string: ");gets(s1);printf("Unesite drugi string: ");gets(s2);iRet = str_cmp(s1,s2);switch (iRet){case -1:

printf("Stringovi su leksikografski jednaki\n");

break;default:

printf("Stringovi se razlikuju od indeksa" "%d\n",iRet);

}}int str_cmp(char *s, char *t){

int i=0;while((s[i] == t[i]) && s[i] && t[i])

i++;if (s[i] == t[i])

return -1;return i;

}

39. Zadatak

Napisati funkciju čiji je prototip dat sa: void ukloni_razmake (char* str); koja iz primljenog stringa str uklanja razmake. Na primjer, ako se funkciji proslijedi string " Ja Sam Student " nakon izlaska iz funkcije ovaj string treba da izgleda "JaSamStudent". U glavnom programu testirati napisanu funkciju.

#include <stdio.h>void ukloni_razmake(char *str);void main(){

char uneseni[100];printf("Unesite string za konverziju: ");gets(uneseni);ukloni_razmake(uneseni);printf("Nakon ukalanjanja razmaka string

izgleda:\n%s\n",uneseni);

}void ukloni_razmake(char *str){

int i=0,j=0,br=0;char pom;while(str[i]!='\0'){

if(str[i]==' ')br++;

else{pom=str[i];str[j]=pom;j++;

}i++;}str[j]='\0';

}

Page 16: Osnovi programiranja

Fakultet Elektrotehnike | [email protected]

O

sno

vi ra

ču

na

rstv

a II

16

40. Zadatak

Napisati funkciju sa prototipon int rijeci (char *) kao rezultat vraća broj riječi u stringu. U slučaju pojavljivanja većeg broja uzastopnih praznih mjesta tretirati ih kao jedno prazno mjesto. Takođe napisati I glavni program koji će demonstrirati rad funkcije.

#include <stdio.h>int broj_rijeci(char *);void main(){ char str [100]; int brojac; printf ("\nUnesite jednu recenicu: "); gets(str); brojac=broj_rijeci(str); printf ("\nBroj rijeci u stringu je: %d\n",brojac);}int broj_rijeci(char* str){ int brojac = 0; int razmak = 1; while (*str != NULL){ if ((*str == ' ') || (*str == '\t')){ if (! razmak){ brojac++; razmak = 1; } }else razmak = 0; str++; } if (! razmak) brojac++; return brojac;}

41. Zadatak

Napisati funkciju zamijeni koja kao parametar uzima pokazivač na string , a koja zamjenjuje sva prazna mjesta znakom '-' i vraća broj takvih zamijenjenih mjesta. Napisati program koji demonstrira rad ove funkcije.

#include <stdio.h>int zamijeni(char *);void main(){ char recenica [100]; int n; printf ("\nUnesite jednu recenicu: ");

gets(recenica); n=zamijeni(recenica); printf ("\nIzmijenjena recenica: \n%s \nBroj praznih" " mjesta je: %d\n", recenica,n);}int zamijeni(char *recenica){ int n = 0; while (*recenica != 0){ if ((*recenica == ' ')){ n++; *recenica = '-'; } recenica++; } return n;}

42. Zadatak

Napisati funkciju čiji je prototip dat sa: char izbaci(char* str, int n);koja iz stringa str izbacuje znak koji se u stringu nalazi na mjestu i, a kao povratnu vrijednost vraća izbačeni znak. Npr. ukoliko se funkciji proslijedi string "petak" i broj 4, nakon provedenog izbacivanja string treba glasiti "peta", a vraćena vrijednost 'k'. (Napomena: Nije dozvoljeno korištenje funkcija iz <string.h>.)

#include <stdio.h>char* izbaci(char *, int );void main(){ char p [100]; int n,c; printf ("\nUnesite jedan string: "); scanf ("%s", p); getchar(); printf ("\nNa kojem mjestu treba znak izbaciti: "); scanf ("%d", &c); n=c-1; izbaci(p,n); printf ("\nString ima slijedeci izgled: %s\n",p);}char* izbaci(char* p, int n) {

while (p[n+1] != '\0')p[n++]=p[n+1];

p[n]='\0';return p;

}

Page 17: Osnovi programiranja

Fakultet Elektrotehnike | [email protected]

O

sno

vi ra

ču

na

rstv

a II

17

43. Zadatak

Napisati funkciju sa prototipom int prebroji(char *, char); koja kao rezultat vraća broj pojavljivanja datorg karaktera u stringu. Ukoliko se dati karakter ne nalazi u stringu funkcija vraća -1. Takođe napisati glavni program koji će demonstrirati rad kreirane funkcije.

#include <stdio.h>int prebroji(char *, char );int main(){

char string[80],znak;printf ("\nUnesite jednu rijec: ");scanf ("%s", string);getchar();printf ("\nKoji karakter treba prebrojati: ");scanf ("%c", &znak);

if(*string==znak) printf ("\n\nBroj karaktera %c je: %d\n", znak, prebroji(string,znak)); else printf("\n\t\t-1\n\n}");}int prebroji(char* string, char znak){

int b=0;while(*string!='\0'){

if (*string==znak)b++;

string++;}return b;

44. Zadatak

Napisati funkciju brsamoglasnika koja nalazi dužinu stringa. Funkcija prihvata jedan parametar, a to je pokazivač na početak stringa. Funkcija vraća broj pojavljivanja samoglasnika u stringu. Funkciju treba realizovati bez korištenja funkcije strlen(). (samoglasnici su: A, E, I, O i U)

#include <stdio.h>int duzina(char* string) {

int d=0;while (*string++!='\0') d++;return d;

}int samogl(char* string) {

int s=0;while (*string!='\0') { if (*string=='a' || *string=='e' ||*string=='i'||

*string=='o' || *string=='u' || *string=='A'|| *string=='E' || *string=='I' || *string=='O'|| *string=='U')

s++;string++;

}return s;

}int main(){

char a[80],c;printf ("\nUnesite jednu rijec: ");scanf ("%s", a);getchar();printf ("\n\nUnesena rijec sadrzi %d karaktera\n"

"Broj samoglasnika je: %d\n", duzina(a), samogl(a));

return 0;}

Page 18: Osnovi programiranja

Fakultet Elektrotehnike | [email protected]

O

sno

vi ra

ču

na

rstv

a II

18

MATRICE I DATOTEKE

Page 19: Osnovi programiranja

Fakultet Elektrotehnike | [email protected]

O

sno

vi ra

ču

na

rstv

a II

19

45. Zadatak

#include <stdio.h>void main(){

FILE * dat1;char rijec[100];char slovo;printf("Unesite rijec(maksimalno 100 karaktera): ");gets(rijec);if ((dat1=fopen("datoteka.txt","w"))==NULL){

printf("Datoteku neije moguce otvoriti \n");return;

}fputs(rijec,dat1);fclose(dat1);if ((dat1=fopen("datoteka.txt","r"))==NULL){

printf("Datoteku neije moguce otvoriti \n");return;

}while(fscanf(dat1,"%c",&slovo) !=EOF)

printf("%c\n",slovo);}

46. Zadatak

U binarnoj datoteci brojevi.bin nalaze se upisani brojevi tipa double. Unaprijed se ne zna koliko ih ima. Napisati program koji će pronaći sumu i srednju vrijednost zapisanih brojeva. Na ekranu ispisati izračunate vrijednosti.

#include <stdio.h>void main(){

FILE * dat1;double broj;int count=0;double suma=0;double srednja;if ((dat1=fopen("brojevi.bin","rb"))==NULL){

printf("Datoteku nije moguce otvoriti \n");return;

}while(fread(&broj,sizeof(double),1,dat1) !=0){

count++;suma+=broj;

}fclose(dat1);printf("Suma brojeva u datoteci je: %lf\n",suma);

srednja=suma/count;printf("Srednja vrijednost brojeva u datoteci je:

%lf\n",srednja);}

47. Zadatak

Napisati program koji će u binarnu datoteku "Datoteka.bin" upisati matricu realnih brojeva A proizvoljnih dimenzija MxN (maks. 10×10). Matricu potom treba pročitati iz datoteke te pronaći i na ekran računara ispisati sve elemente matrice čija je apsolutna vrijednost manja od 10.

#include <stdio.h>#include <math.h>#define MAX 10void main(){

int i,j,n,m;float A[MAX][MAX];float sum_gd=0,sum_sd=0;FILE * dat1;do{

printf("Unesite stvarne dimenzije matrice:\n");scanf("%d",&m);scanf("%d",&n);

}while(n<1 || n>MAX || m<1 || m>MAX);

printf("Unesite elemente matrice:\n");for(i=0;i<m;i++){

for(j=0;j<n;j++){printf("A[%d][%d]=",i,j);scanf("%f",&A[i][j]);

}}if ((dat1=fopen("datoteka.bin","wb"))==NULL){

printf("Datoteku nije moguce otvoriti \n");return;

}for(i=0;i<m;i++){

for(j=0;j<n;j++){fwrite(&A[i][j],sizeof(float),1,dat1);

}}fclose(dat1);

if ((dat1=fopen("datoteka.bin","rb"))==NULL){printf("Datoteku nije moguce otvoriti \n");

Page 20: Osnovi programiranja

Fakultet Elektrotehnike | [email protected]

O

sno

vi ra

ču

na

rstv

a II

20

return;}for(i=0;i<m;i++){

for(j=0;j<n;j++){fread(&A[i][j],sizeof(float),1,dat1);

}}fclose(dat1);

for(i=0;i<m;i++){for(j=0;j<n;j++){

if(abs(A[i][j])<10) printf("A[%d][%d]=%f\n",i,j,A[i][j]);

}}

}

48. Zadatak

Program koji računa sumu rubnih elemenata martice.

#include <stdio.h>#define A 5#define B 5int main() { float mat[A][B],suma; int i,j; for (i=0; i<A; i++) { for (j=0; j<B; j++) { printf ("Unesite element mat[%d][%d]: ",i,j); scanf ("%f", &mat[i][j]); } } suma=0; for (i=0; i<A; i++) suma += mat[i][0]+mat[i][B-1]; for (i=1; i<B-1; i++) suma += mat[0][i]+mat[A-1][i]; printf ("Suma rubova je: %.3f\n", suma); return 0;}

49. Zadatak

Napisati program koji će za učitanu kvadratnu matricu realnih brojeva maksimalnih dimenzija 10×10 naći sume elemenata na glavnoj i sporednoj dijagonali matrice. Nakon toga treba kreirati binarnu neformatizovanu datoteku matrica.dat i u datoteku zapisati sljedeće vrijednosti prema navedenom redoslijedu: dimenzija matrice, elementi matrice po redovima, suma elemenata na glavnoj dijagonali te suma elemenata na sporednoj dijagonali matrice.

#include <stdio.h>#define MAX 10void main(){

int i,j,n;float A[MAX][MAX];float sum_gd=0,sum_sd=0;FILE * dat1;do{

printf("Unesite stvarne dimenzije matrice:");scanf("%d",&n);

} while(n<1 || n>MAX);

printf("Unesite elemente matrice:\n");for(i=0;i<n;i++){

for(j=0;j<n;j++){printf("A[%d][%d]=",i,j);scanf("%f",&A[i][j]);

}}for(i=0;i<n;i++){

sum_gd+=A[i][i];//glavna dijagonalasum_sd+=A[i][n-i-1];//sporedna dijagonala

}if ((dat1=fopen("matrica.dat","wb"))==NULL){

printf("Datoteku nije moguce otvoriti \n");return;

}fwrite(&n,sizeof(n),1,dat1);for(i=0;i<n;i++){

for(j=0;j<n;j++){fwrite(&A[i][j],sizeof(float),1,dat1);

}}fwrite(&sum_gd,sizeof(sum_gd),1,dat1);fwrite(&sum_sd,sizeof(sum_sd),1,dat1);fclose(dat1);

}

Page 21: Osnovi programiranja

Fakultet Elektrotehnike | [email protected]

O

sno

vi ra

ču

na

rstv

a II

21

50. Zadatak

U binarnoj datoteci osobe.bin nalaze se zapisi oblika

mbr (long)prezime i ime (40+1 znak)godine starosti (int)

Redni broj zapisa odgovara matičnom broju (ako ne odgovara, zapis je prazan). Napisati program koji će na ekran računara ispisati prezime i ime najstarije osobe.

#include <stdio.h>#include <string.h>typedef struct{

long mbr;char prezime_ime[41];int starost;

}OSOBA;

void main(){

FILE*dat1;OSOBA procito;OSOBA najstarija;najstarija.starost=0;if ((dat1=fopen("osobe.bin","rb"))==NULL){

printf("Datoteku nije moguce otvoriti \n");return;

}while(fread(&procito,sizeof(OSOBA),1,dat1) != 0){

if (procito.starost > najstarija.starost ){

strcpy(najstarija.prezime_ime ,procito.prezime_ime );

najstarija.starost=procito.starost ;najstarija.mbr =procito.mbr ;

}}printf("Najstarija osoba je: %s sa %d

godina",najstarija.prezime_ime ,najstarija.starost );}

51. Zadatak

Napisati program koji će za učitanu kvadratnu matricu cijelih brojeva max.dim 10×10 naći transponovanu matricu i takvu novu matricu zapisati u binarnu neformatizovanu datoteku matrica.dat u kojoj je prvi zapis broj tipa int koji predstavlja dimenziju matrice, a zatim slijede članovi matrice po redovima.

#include <stdio.h>#define DATOTEKA "matrica.dat"#define MAXDIM 10void main(){ FILE *fi; int A[MAXDIM][MAXDIM]; int At[MAXDIM][MAXDIM]; int n,i,j; printf("Unesite dimenzije matrice:"); scanf("%d",&n); printf("Unesite elemente matrice:\n"); for(i=0;i<n;i++) { for(j=0;j<n;j++) { printf("A[%d][%d]=",i,j); scanf("%f",&A[i][j]); } } for(i=0;i<n;i++) { for(j=0;j<n;j++) At[i][j]=A[i][j]; } fi=fopen(DATOTEKA, "wb"); fwrite(&n, sizeof(int), 1, fi); for(i=0;i<n;i++) for(j=0;j<n;j++) fwrite(&At[i][j], sizeof(int), 1, fi); fclose(fi);}

Page 22: Osnovi programiranja

Fakultet Elektrotehnike | [email protected]

O

sno

vi ra

ču

na

rstv

a II

22

52. Zadatak

Napisati program koji učitava matricu realnih brojeva tipa float proizvoljnih dimenzija M×N, te nalazi i na ekran računara ispisuje sumu onih elemenata matrice čija je suma indeksa neparan broj. Maksimalne dimenzije ograničiti na 10×10.

#include <stdio.h>#define MAXDIM 10void main(){ float A[MAXDIM][MAXDIM]; float suma_nep=0; int i,j,m,n; printf("Unesite dimenzije matrice:"); scanf("%d%d",&m,&n);

printf("Unesite elemente matrice:\n"); for(i=0;i<m;i++) { for(j=0;j<n;j++) { printf("A[%d][%d]=",i,j); scanf("%f",&A[i][j]); } } for(i=0;i<m;i++) { for(j=0;j<n;j++) { if((i+j)%2==1) suma_nep+=A[i][j]; } } printf("Trazena suma je: %.3f\n", suma_nep);}

53. Zadatak

Napisati program koji učitanu matricu cijelih brojeva, proizvoljnih dimenzija (ograničenih na 50×45), presložiti njen sadržaj na način da se izostave redovi čija suma iznosi nula.

#include<stdio.h>#define NRMAX 50#define NSMAX 45void main(){ int m, n, x[NRMAX][NSMAX], i, j, k, suma; do{ printf("Unesite dimenzije polja (max" "50x45): "); scanf("%d %d", &m, &n); } while(m <=0 || m >= NRMAX || n <=0 || n > NSMAX); printf("Unesite elemente polja po redovima: \n"); for(i = 0; i < m; i++) { for(j = 0; j < n; j++) scanf("%d", &x[i][j]); } for(k = 0; k < m; k++) { for(suma = 0, j = 0; j < n; j++) suma += x[k][j]; if(suma == 0) { for(i = k+1; i < m; i++) { for(j = 0; j < n; j++) x[i-1][j] = x[i][j]; } m--; k--; } } printf("Preslozena matrica bez redova cija je" "suma nula:\n"); for(i = 0; i < m; i++) { for(j = 0; j < n; j++) printf("%4d", x[i][j]); printf("\n"); } }

Page 23: Osnovi programiranja

Fakultet Elektrotehnike | [email protected]

O

sno

vi ra

ču

na

rstv

a II

23

54. Zadatak

Data je binarna datoteka matrica.bin u koju je upisana kvadratna matrica brojeva tipa float u slijedećem formatu:¤ prvi zapis je tipa int i predstavlja broj redova odnosno broj kolona kvadratne matrice¤ zatim slijede elementi matrice po redovima Učitati matricu iz datoteke u memoriju, izračunati trag matrice (suma elemenata na glavnoj dijagonali) i ispisati na ekran računara sve elemente i trag matrice.

#include <stdio.h>#define N 10void main(){ FILE *f; int i,n,j; float trag=0, A[N][N]; if ((f=fopen("matrica.bin","rb"))==NULL){ printf("Datoteku nije moguce otvoriti! \n"); return; } fread(&n, sizeof(int), 1, f); for(i=0;i<n;i++){ for(j=0;j<n;j++){ fread(&A[i][j], sizeof(float), 1, f); } } fclose(f); for(i=0;i<n;i++){ for(j=0;j<n;j++){ if((i+j)%2==1) printf("%10.4f ", A[i][j]); } printf("\n"); } for(i=0;i<n;i++) trag += A[i][j]; printf("Suma dijagonalnih elemenata matrice je:%f\n",

trag);}

55. Zadatak

Napisati program koji za dva unesena niza cijelih brojeva (od max. 10 elemenata) računa ukupan broj parova za isti indeks imaju jednake elemente.

#include<stdio.h>#define MAX 10void main(){ int A[MAX],B[MAX]; int i,n,br=0; do{ printf("\nUnesite duzinu niza:"); scanf("%d", &n); } while(n<=0 || n>10); printf("Unesite elemente prvog niza:"); for(i=0;i<n;i++) scanf("%d",&A[i]); printf("\nUnesite elemente drugog reda"); for(i=0;i<n;i++) scanf("%d",&B[i]); for(i=0;i<n;i++){ if(A[i]==B[i]) br++; } printf("Nizovi A i B imaju ukupno %d parova" "koji za isti index imaju jednake elemente\n",br);}

56. Zadatak

Unijeti matricu realnih brojeva 10×10 i naći sumu elemenata koji se nalaze na neparnoj sumi redova i kolona.

#include<stdio.h>#define MAXDIM 10void main(){ float A[MAXDIM][MAXDIM]; float sum_nep=0; int i,j,m,n; printf("Unesite stvarne dimenzije matrice (max.10): "); scanf("%d%d", &m,&n); printf("Unesite elemente matrica:\n"); for(i=0;i<m;i++){ for(j=0;j<n;j++){ printf("A[%d][%d]=",i,j); scanf("%f", &A[i][j]);

Page 24: Osnovi programiranja

Fakultet Elektrotehnike | [email protected]

O

sno

vi ra

ču

na

rstv

a II

24

} } for(i=0;i<m;i++){ for(j=0;j<n;j++){ if((i+j)%2==1) sum_nep+=A[i][j]; } } printf("suma neparnih brojeva je: %.3f",sum_nep);}

57. Zadatak

Napisati program koji učitava kvadratnu matricu realnih brojeva tipa float maksimalnih dimenzija 10×10, te ispisuje najveći element po apsolutnoj vrijednosti k-tog reda (k-definira korisnik) u slijedećem formatu xxxxx.xx.

#include<stdio.h>#define MAX 10void main(){ float A[MAX][MAX]; int i,j,n,k; float maxel; do{ printf("Unesite dimenzije kvadratne matrice: "); scanf("%d", &n); } while(n<=0 || n>MAX); printf("Unesite elemente matrice:\n"); for(i=0;i<n;i++){ for(j=0;j<n;j++){ printf("A[%d][%d]=",i,j); scanf("%f", &A[i][j]); } } printf("Unesite u kojem trazite najveci element po apsolutnoj vrijednosti:"); scanf("%d", &k); maxel=A[k-1][0]; for(i=0;i<n;i++){ if(fabs(maxel)<fabs(A[k-1][i])) maxel=A[k-1][i]; } printf("\n Najveci element %d reda po apsolutnoj" "vrijednosti je %8.2f", k, maxel);}

58. Zadatak

Napisati program koji učitava s tastature tačno četiri prirodna broja, a zatim od tih brojeva formira matricu dimenzija 2x2. Ukoliko je determinanta matrice različita od nule, program u binarnu datoteku matrica.dat treba upisatimatricu, a ukoliko je determinanta matrice jednaka nuli, program u istu datoteku treba upisati nulu.

#include<stdio.h>void main(){ int mat[2][2]; int i,j; float det; FILE *fp; printf("Unesite matricu:"); for(i=0;i<2;i++);{ for(j=0;j<2;j++){ scanf("%d", &mat[i][j]); } } det=mat[1][0]*mat[0][1]-mat[0][1]*mat[1][0]; fp=fopen("matrica.dat","wb"); if(det!=0.0){ for(i=0;i<2;i++){ for(j=0;j<2;j++){ fwrite(&mat[i][j], sizeof(int),1,fp); } } } else{ det=0.0; fwrite(&det, sizeof(float),1,fp); } fclose(fp);}

Page 25: Osnovi programiranja

Fakultet Elektrotehnike | [email protected]

O

sno

vi ra

ču

na

rstv

a II

25

59. Zadatak

Kvadratna matrica predstavlja magični kvadrat ako je suma brojeva u svakom retku i svakoj koloni matrice jednaka. Napisati program koji učitava s tastature prirodni broj N i kvadratnu matricu cijelih brojeva dimenzija NxN, provjerava da li je matrica magični kvadrat, te ispisuje odgovarajuću poruku na ekran računara.

#include<stdio.h>#define MAX 10void main(){ int i,j,dim; int A[MAX][MAX]; int sumar[MAX], sumak[MAX]; printf("Unesite dimenziju kvadratne matrice: "); scanf("%d", &dim); for(i=0;i<dim;i++){ for(j=0;j<dim;j++){ printf("A[%d][%d]=",i,j); scanf("%d", &A[i][j]); }

} printf("Unesena je matrica!"); for(i=0;i<dim;i++){ for(j=0;j<dim;j++) printf("%d\t", A[i][j]); putchar('\n'); for(i=0;i<dim;i++){ sumar[0]=0; for(j=0;j<dim;j++) sumar[0]+=A[0][j]; } printf("sumar[0]=%d",sumar[0]); for(i=0;i<dim;i++){ sumar[i]=0; sumak[i]=0; for(j=0;j<dim;j++){ sumar[i]+=A[i][j]; sumak[i]+=A[j][i]; } } printf("red sumar[%d]=%d\n",i,sumar[i]); printf("kol sumak[%d]=%d\n",i,sumak[i]); } for(i=0;i<dim;i++){ sumar[i]=0; sumak[i]=0; for(j=0;j<dim;j++){ sumar[i]+=A[i][j];

sumak[i]+=A[i][j]; } if(sumar[0]!=sumar[i] || sumar[0]!=sumak[i]){ printf("Unijeli ste ne magicni kvadrat\n"); break; } else if(sumar[0]==sumar[i] && sumar[0]==sumak[i]){ printf("Unijeli ste magicni kvadrat!\n"); break; } }}

60. Zadatak

Napisati program koji računa dužinu duži povučene između dvije tačke u 3D prostoru. Za definiciju tačke koristiti strukturu čiji članovi su koordinate x,y i z.Na osnovu tako definirane tačke definirati duž kao strukturu čiji su članovi dvije tačke koje omeđuju duž, te dužina duži.

#include<stdio.h>#include<math.h>typedef struct{ float x; float y; float z;}TACKA;typedef struct{ TACKA A; TACKA B; float duzina;}DUZ;void main(){ DUZ duz; printf("Unesite koordinate tacke A:"); scanf("%f%f%f",&duz.A.x,&duz.A.y,&duz.A.z); printf("Unesite koordinate tacke B:"); scanf("%f%f%f",&duz.B.x,&duz.B.y,&duz.B.z); duz.duzina=sqrt(pow((duz.A.x-duz.B.x),2)+pow((duz.A.y-duz.B.y),2)+ pow((duz.A.z-duz.B.z),2)); printf("Duzina duzi je: %3.f\n",duz.duzina);}

Page 26: Osnovi programiranja

Fakultet Elektrotehnike | [email protected]

O

sno

vi ra

ču

na

rstv

a II

26

STRUKTURE

Page 27: Osnovi programiranja

Fakultet Elektrotehnike | [email protected]

O

sno

vi ra

ču

na

rstv

a II

27

61. Zadatak

Zadata je strukturatypedef struct{

char dan;char mjesec;int godina;

}DATUM;Napisati funkcije sljedećeg prototipa:

DATUM unos_datuma(void);

void ispis_datuma(DATUM *);

za unos i ispis datuma u formatu dan.mjesec.godina (npr. 12.06.2007.).Napisati I glavni program.

#include <stdio.h>typedef struct{ char dan; char mjesec; int godina;}DATUM;DATUM unos_datuma(void);void ispis_datuma(DATUM *dat);void main(){

DATUM dat;printf("Unesite datum!\n");dat=unos_datuma();printf("Uneseni datum je: ");ispis_datuma(&dat);printf("\n");

}DATUM unos_datuma(void){

DATUM dat;printf("Dan: ");scanf("%d", &dat.dan);printf("Mjesec: ");scanf("%d", &dat.mjesec);

printf("Godina: "); scanf("%d", &dat.godina); return dat;}void ispis_datuma(DATUM *dat){ printf("%02d.%02d.%d", dat->dan, dat->mjesec,

dat->godina);}

62. Zadatak

Zadata je strukturatypedef struct{

double x,y;}complex;za pohranu kompleksnih brojeva u formi x+iy. Napisati funkcije čiji je prototip dat sacomplex complex_entry(void);

complex complex_multiply(complex,complex);void complex_print(complex);za unos, množenje i ispis kompleksnih brojeva, respektivno. U glavnom programu učitati dva kompleksna broja, te izračunati i ispisati vrijednost njihovog proizvoda.

#include <stdio.h>typedef struct{

double x,y;} complex;

complex complex_entery(void);complex complex_multiply(complex*,complex*);void complex_print(complex*);

void main(){complex prvi,drugi,rezultat;printf("Unesite prvi komleksni broj:\n");prvi=complex_entery();printf("Unesite drugi komleksni broj:\n");drugi=complex_entery();rezultat=complex_multiply(&prvi,&drugi);printf("Rezultat mnozenja je:\n");complex_print(&rezultat);

}complex complex_entery(void){

complex broj;printf("Unesite realni dio: ");scanf("%lf",&broj.x);printf("Unesite imaginarni dio: ");scanf("%lf",&broj.y);return broj;

}complex complex_multiply(complex *br1,complex *br2){

complex rezultat;rezultat.x = (*br1).x * (*br2).x - (*br1).y * (*br2).y;rezultat.y = (*br1).x * (*br2).y + (*br1).y * (*br2).x;return rezultat;

}

Page 28: Osnovi programiranja

Fakultet Elektrotehnike | [email protected]

O

sno

vi ra

ču

na

rstv

a II

28

void complex_print(complex * broj){ printf("Rezultat je: %lf + i%lf\n",(*broj).x,(*broj).y);}

63. Zadatak

Definirati strukturu tacka koja opisuje tačku u ravni, te strukturu pravougaonik koja opisuje pravougaonik pomoću njegovih vrhova, koji su opisani pomoću strukture tacka. Napisati funkciju koja kao ulazne argumente prihvata jednu varijablu tipa struct pravougaonik koja opisuje pravougaonik sa stranicama paralelnim koordinatnim osama, te jednu varijablu tipa struct tacka. Funkcija ispituje da li se data tačka nalazi unutar pravougaonika.

typedef struct{double x,y;

} tacka;

typedef struct{tacka gl,gd,dl,dd;

} pravougaonik;

int tacka_u_prav(pravougaonik p1,tacka t1){if (t1.x > p1.gl.x && t1.y < p1.gl.y){

if (t1.x < p1.gd.x && t1.y < p1.gd.y){if (t1.x > p1.dl.x && t1.y > p1.dl.y){

if (t1.x < p1.dd.x && t1.y > p1.dd.y){

return 1;}

}}

}return -1;}

64. Zadatak

Zadata je struktura koja predstavlja razlomketypedef struct razlomak{

int brojnik;int nazivnik;

}RAZLOMAK;

Napisati sljedeće funkcije za rad s razlomcima:RAZLOMAK podijeli_r(RAZLOMAK r1,RAZLOMAK r2);void ispisi_r(RAZLOMAK r);

za nalaženje količnika dva razlomka i ispis razlomka, respektivno. U glavnom programu ispitati rad napisanih funkcija.

#include <stdio.h>typedef struct razlomak{

int brojnik;int nazivnik;

} RAZLOMAK;RAZLOMAK podijeli_r(RAZLOMAK r1,RAZLOMAK r2);void isipisi_r(RAZLOMAK r);void main(){

RAZLOMAK prvi,drugi;RAZLOMAK rez;printf("Unesite prvi razlomak\n");printf("Unesite brojnik: ");scanf("%d",&prvi.brojnik);printf("Unesite nazivnik: ");scanf("%d",&prvi.nazivnik);

printf("Unesite drugi razlomak\n");printf("Unesite brojnik: ");scanf("%d",&drugi.brojnik);printf("Unesite nazivnik: ");scanf("%d",&drugi.nazivnik);

rez=podijeli_r(prvi,drugi);printf("Rezultat dijeljenja je:\n");isipisi_r(rez);putchar('\n');

}RAZLOMAK podijeli_r(RAZLOMAK r1,RAZLOMAK r2){

RAZLOMAK rezultat;rezultat.brojnik = r1.brojnik * r2.nazivnik ;rezultat.nazivnik = r1.nazivnik * r2.brojnik; return rezultat;

}void isipisi_r(RAZLOMAK r){

printf("%d/%d",r.brojnik ,r.nazivnik );}

Page 29: Osnovi programiranja

Fakultet Elektrotehnike | [email protected]

O

sno

vi ra

ču

na

rstv

a II

29

65. Zadatak

Definirati funkcije za unos, ispis i kopiranje podataka tipa fudbaler definiranog sa

typedef struct _fudbaler{char prezime[20];char drzava[20];int starost;

}fudbaler;Prototipovi funkcija su slijedeći: fudbaler unos(void); void ispis(fudbaler); fud_copy(fudbaler*, fudbaler*).

#include <stdio.h>typedef struct fudbaler{

char prezime [20];char drzava[20];int starost;

}fudbaler ;fudbaler unos(){

fudbaler fud;printf("Prezime : ");scanf("%s",&fud.prezime);printf("Drzava : ");scanf("%s",&fud.drzava);printf("Starost : ");scanf("%d",&fud.starost);return fud;

}void ispis(fudbaler *fud) {

printf("%s %s %d",fud->prezime,fud->drzava, fud->starost);}void main (){

fudbaler fud;printf("Unesite fudbalera\n");fud=unos();printf("Uneseni fudbaler je : ");ispis(&fud);printf("\n");

}

66. Zadatak

Zadana je strukturastruct vrijeme {

int sat;int minuta;int sekunda;

};Napisati funkciju prototipa float hmsUh(struct vrijeme);koja na osnovu date strukture računa i vraća vrijeme u satima.

#include<stdio.h>struct vrijeme { int sat; int minuta; int sekunda;};typedef struct vrijeme VRIJEME;VRIJEME sekUhms(int sekundi);void main(){ int sek; VRIJEME hms; printf("Unesite broj sekundi: "); scanf("%d",&sek); hms=sekUhms(sek); printf("%dh %dm %ds\n", hms.sat, hms.minuta, hms.sekunda);}VRIJEME sekUhms(int sekundi){ int ost; VRIJEME t; t.sat=sekundi/3600; ost=sekundi%3600; t.minuta=ost/60; t.sekunda=ost%60; return t;}

Page 30: Osnovi programiranja

Fakultet Elektrotehnike | [email protected]

O

sno

vi ra

ču

na

rstv

a II

30

67. Zadatak

U binarnoj datoteci lager.dat nalaze se podaci o robi u skladištu. Format sloga je slijedeći-int –šifra artikla-char[49+1] –naziv artikla-float –cijena artikla-float –količina-Char[3+1] –jedinica mjereBroj artikala nije poznat. Napisati program koji će pronaći i prikazati na ekranu slijedeće podatke:

- Broj artikala u skladištu - Ukupnu vrijednost robe u skladištu

#include<stdio.h>#define DATOTEKA "Lager.dat"typedef struct{ int sifra; char naziv[49+1]; float cijena; float kolicina; char jedinica[3+1];}artikal;void main(){ FILE *dat; int n=0; float suma=0; artikal Artikal; if((dat=fopen("Lager.dat","br"))==NULL){ printf("Dtoteka ne postoji\n"); return; } while((fread(&Artikal,sizeof(artikal),1,dat))==1){ n++; suma+=Artikal.kolicina*Artikal.cijena; } fclose(dat); if(n>0){ printf("\nBroj artikala u skladistu je:%d",n); printf("\nUkupna vrijednost robe u skladistu je: %2f\n",suma); } else printf("\nNema robe u skladistu\n");}