Drugi dio (zadaci u C-u)

 

Primjer 1.Napraviti program koji ucitava koordinate dvije tacke u
trodimenzionalnom prostoru:
Tacke t1 i t2
su definirane kao trojke:
- t1=(x1, y1, z1) ,
- t2=(x2, y2, z2).
Kao izlaz program daje udaljenost izmedju tih tacki.
NAPOMENA: Za drugi korijen koristiti funkciju sqrt() koja je
definirana u datoteci math.h. Na primjer, naredba a=sqrt(9); ce
izracunati drugi korijen iz 9 i pridružiti izracunatu vrijednost
varijabli a.
RJEŠENJE:
// Ukljucujemo datoteke u kojima se nalaze funkcije koje cemo koristiti.
# include <stdio.h>
# include <math.h>
// Definisanje glavne funkcije main()
int main () {
// Definisanje potrebnih varijabli
float x1,y1,z1,x2,y2,z2,d;
// Unos kordinata x1,y1,z1 (printf - ispis poruke; scanf - unos varijabli)
printf("Unesi tacku a(x1,y1,z1): ");
scanf("%f,%f,%f", &x1, &y1, &z1);
// Unos kordinata x2,y2,z2
printf("Unesi tacku b(x2,y2,z2): ");
scanf("%f,%f,%f", &x2, &y2, &z2);
// Racunanje udaljenosti po formuli (sqrt - funkcija koja racuna drugi korjen)
d=sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1)+(z2-z1)*(z2-z1));
// Ispis udaljenosti d
printf("Udaljenost izmedju tacki a i b je: %f", d);
// Kraj programa (getch() - stavljamo da bi zadrzali poruku u kojoj je
// rezultat. U suprotnom nam se nece prikazati poruka na ekranu, iako je
// program uspjesno izvrsen
getch();
// Return 0; - (umjesto 0 mozemo staviti bilo koji cio broj, jednostavno
// nekako je potrebno zavrsiti funkciju main() pa se obicno stavlja return 0;
return 0;
}
Primjer 2. Napravite C-program koji ucitava potrošnju elektricne
energije u KWh (velika tarifa(VT) i mala tarifa(MT)) i
pripadajuce cijene po KWh (cijena za malu tarifu i cijena za
veliku tarifu).
Kao izlaz program daje:
- ukupnu potrošnju u KWh;
- novcani iznos racuna;
- udio velike tarife i male tarife u ukupnoj potrošnji.
Na primjer, izlaz iz programa treba biti sljedeceg formata:
Ukupna potrosnja je 234.25 KWh.
Udio velike tarife u ukupnoj potrosnji je 25 %.
Udio male tarife u ukupnoj potrosnji je 75%.
Iznos racuna je 25.45 KM.
RJEŠENJE:
# include <stdio.h>
int main () {
// Definisanje potrebnih varijabli
float VT,MT,CV,CM,UKUPNO,RACUN,UDIOM,UDIOV;
// Unos male tarife, velike tarife, cijene male tarife i cijene velike tarife
printf("\n Unesi potrosnju po velikoj tarifi (KWh): ");
scanf("%f", &VT);
printf("\n Unesi potrosnju po maloj tarifi (KWh): ");
scanf("%f", &MT);
printf("\n Cijena za veliku tarifu po jednom Kwh: ");
scanf("%f", &CV);
printf("\n Cijena za malu tarifu po jednom Kwh: ");
scanf("%f", &CM);
// Racunanje ukupne potrosnje
UKUPNO=VT+MT;
// Racunanje cijene ukupne potrosnje (cijena po maloj tarifi + cijena po
// velikoj tarifi)
RACUN=VT*CV+MT*CM;
// Izracunava udio velike i male tarife u ukupnoj potrosnji (procenat)
UDIOM=(MT/UKUPNO)*100;
UDIOV=(VT/UKUPNO)*100;
// Ispis rezultata
printf ("\n Ukupna potrosnja elektricne energije je: %.f KWh", UKUPNO);
printf ("\n Ukupna cijena elektricne energije je: %.f KM", RACUN);
printf ("\n Udio velike tarife u potrosnji je: %.f procenata", UDIOV);
printf ("\n Udio male tarife u potrosnji je: %.f procenata", UDIOM);
// Kraj programa
getch();
return 0;
}
Primjer 3. Napisati program koji ce izracunati presjek skupova S1 i S2.
Skupovi S1 i S2 definirani su intervalima realnih brojeva:
S1=[A, B]
S2=[C, D].
Na primjer, za slijedeci ulaz: A=3, B=9, C=7, D=11
program kao izlaz treba dati:
Rezultantni interval je REZ=[7, 9].
RJEŠENJE:
#include <stdio.h>
main() {
// Definisanje varijabli
float A,B,C,D,MAX,MIN;
// Unos skupova
printf("\n Unesi prvi skup X[A,B] A>B: ");
scanf("%f,%f", &A,&B);
printf("\n Unesi drugi skup Y[C,D] C>D: ");
scanf("%f,%f", &C,&D);
/* Logika zadatka je sljedeca: Prvo moramo pretpostaviti da je prvi broj
intervala veci ili jednak drugom, A>=B i C>=D, jer ako ovo ne vrijedi interval
nije matematicki ispravan (taj uslov nismo ispitivali da nebi komplikovali
zadatak). Presjek skupa ce biti neki interval [MIN,MAX].
Uslov da zadatak ima RJEŠENJE je da je B < C kao i D < A sto je i logicno jer
u suprotnom presjeka nema!
Broj MIN je ustvari jedan od brojeva A ili C (manji broj od ova 2 broja),
a MAX je manji broj od brojeva B i D. Ako je A=C ili B=D uzima se vrijednost
pod ELSE ali tada nam je svakako svejedno koja ce se uzeti vrijednost kao MIN
ili MAX jer je tada A=C odnosno B=D */
if (A>C) MAX=A; else MAX=C;
if (B<D) MIN=B; else MIN=D;
if ((B<C)||(A>D)) printf("\n Nema presjeka!"); else {
printf ("\n Presjek je: [%.f,%.f]", MAX, MIN); }
// Kraj programa
getch();
return 0;
}
Primjer 4. Napisati program koji ucitava koeficijente a, b i c realnog
tipa. Ti koeficijenti definiraju funkciju f(x):
f(x)=ax2+bx+c
Program zatim provjerava da li su ti keficijenti u rasponu -10 do
10. Ako nisu, program ispisuje poruku:
Koeficijenti a, b i c nisu u zadanom rasponu.
Ako koeficijenti a, b i c jesu u zadanom rasponu, program kao
izlaz daje vrijednost prve derivacije u tacki x. Tacka x se
takodjer unosi sa standardnog ulaza.
Na primjer, ako je ulaz a=1, b=2, c=1, x=1 program kao izlaz
daje: Prva derivacija u tacki x=1 je 4.
RJEŠENJE:
# include <stdio.h>
int main () {
// Definisanje varijabli
float a,b,c,x,izvod;
// Unos koeficijenata a,b,c
printf ("Unesi koef. (a,b,c) funkcije f(x)=ax2+bx+c (-10<(a,b,c)<10):");
scanf("%f,%f,%f", &a,&b,&c);
// Unos vrijednosti x
printf ("Unesi vrijednost x");
scanf("%f", &x);
// Ispit uslova
if (a>-10&&a<10&&b>-10&&b<10&&c>-10&&c<10){
// Izracunavanje izvoda po odredjenoj matematickoj formuli
izvod=2*a*x+b;
// Ispis izvoda
printf("Prva derivacija u tacki x=%.f je %.f", x, izvod);
// Ispis odgovarajuce poruke ukoliko uslov nije zadovoljen
} else printf ("Koeficijenti nisu iz odgovarajuceg intervala!");
// Kraj programa
getch();
return 0;
}
Primjer 5. Napisati program koji ucitava tri cijela broja iz intervala
od 50 do 200. Ako svi uneseni brojevi nisu iz tog intervala,
program treba ispisati poruku "Svi brojevi nisu iz intervala 50
do 200” i završiti program. Ako su brojevi unutar tog intervala
program treba ispisati ucitane brojeve po velicini od najmanjeg
prema najvecem.
RJEŠENJE:
#include <stdio.h>
main() {
// Definisanje varijabli
int x[3], i, j, p;
// Unos brojeva
printf("\n Unesi tri broja u rasponu od 50 do 200 (U formatu: a, b, c): ");
scanf("%d, %d, %d", &x[0], &x[1], &x[2]);
// Provjera jesu li brojevi iz odgovarajuceg intervala
if (x[0]>50&&x[1]>50&&x[2]>50&&x[0]<200&&x[1]<200&&x[2]<200) {
/* Sortiranje brojeva
Potrebne su nam dvije for petlje koje ce „listati“ brojeve koji se nalaze u
nekom nizu. Ovaj tip sortiranja se uglavnom svodi na provjeru da li je prvi
broj manji od drugog ili treceg, i ako jeste, onda mijenja mjesto sa tim
brojem. Medjutim nakon ovoga nije zavrseno sortiranje. Ako npr. Unesemo
brojeve 3, 2, 1, nakon prvog prolaska imamo 2, 3, 1 nakon drugog 2, 1, 3 ali
jos uvijek nije zavrseno sortiranje, i zbog toga i postoji prva for petlja
koja ce to ponoviti jos jednom i dobivamo 1, 2, 3 i niz je sortiran, i sada ga
samo jos treba ispisati na ekran. */
for (i=0;i<2;i++)
for (j=0;j<2;j++)
if (x[j]>x[i]) {
p=x[i];
x[i]=x[j];
x[j]=p;
}
// Ispis sortiranih brojeva
printf("\n Sortirani brojevi: %d, %d, %d ", x[0], x[1], x[2]);
// Ako brojevi nisu iz intervala, ispis odgovarajuce poruke
} else { printf("\n Svi brojevi nisu iz intervala 50 do 200!!!");
}
// Kraj programa
getch();
return 0;
}
Primjer 6. Napisati program koji ce ispisati brojeve djeljive sa 5, 7
ili 11, a manje ili jednake od nekog ucitanog broja n sa
tastature. Brojeve treba ispisati od najveceg prema najmanjem.
Obavezno koristiti for petlju. Na primjer, ako je korisnik za n
unio broj 20 onda program treba ispisati:
20
15
14
11
10
7
5
RJEŠENJE:
#include <stdio.h>
int main()
{
// Definisanje varijabli
int n, i;
// Unos nekog prirodnog broja
printf("Unesite broj: ");
scanf("%d", &n);
/* For petlja postavlja brojac „i“ na vrijednost unesenog broja, i provjerava
se da li je taj broj djeljiv sa 5, 7 ili 11, i ako jeste printa ga na ekran i
umanjuje brojac za jedan, ako broj nije djeljiv sa ovim brojevima, onda se
samo brojac umanji na kraju for petlje bez printanja broja na ekranu. Isti se
postupak ponavlja i za broj manji za jedan, kao i broj manji za dva... sve
tako do broja 1 (mogli smo staviti i 4 jer brojevi ispod 5 svakako nisu
djeljivi sa ovim brojevima! */
for(i=n;i>0;i--)
{
if ((i % 5 == 0)||(i % 7 == 0)||(i % 11 == 0)) printf("\n Broj: %d", i);
}
// Kraj programa
getch();
return 0;
}
Primjer 7. Napisati program koji ce izracunavati sumu prema slijedecoj
formuli: suma=1-1/2+1/3-1/4+...+1/n
Broj n se unosi sa tastature(standardnog ulaza). Program treba
ispisati vrijednost sume na standardnom izlazu (monitoru)
koristeci slijedecu poruku:
Koristeci <n> clanova suma je <suma>.
(Na mjestu <n> se treba nalaziti konkretno uneseni broj n, a na
mjestu <suma> se treba nalaziti konkretno izracunata suma.)
Zadatak riješite koristeci while petlju.
RJEŠENJE:
#include <stdio.h>
int main()
{
// Definisanje varijabli
float i=1,n,suma=0;
// Unos prirodnog broja
printf ("\n Unesi broj n:");
scanf("%f", &n);
/* Racunanje sume
While petlja vrti podprogam u okviru while petlje sve dok je brojac „i“ koji
je na pocetku 1, manji od unesenog broja n. Ako je uneseni broj 1 ne ulazi se
u petlju i na izlazu se ispisuje Suma je:1. Ako je broj veci od 1 onda se
racuna suma prema matematickoj formuli. Grupisali smo formulu datu u zadatku
tako da trazimo sume po dva broja (odnosno razlike), i zatim te razlike
brojeva sabiramo, ali moramo paziti jer moramo brojac „i“ uvecati za 2 jer smo
u formuli ukljucili odmah 2 broja.
Ovaj nacin ima i dobru i losu stranu. Dobra strana je jer nemoramo uvoditi
nikakvu pomocnu varijablu i citav kod za racunanje sume se sastoji od dva
izraza, a losa strana je kad unesemo neparne brojeve sto necemo dobiti tacnu
sumu i tako kad unesemo broj 3 program ce izracunati 1-1/2+1/3=0.5 sto nije
tacno, a to smo dobili jer program nemoze grupisati clanove po 2 jer ih imamo
tri i zadnji ostaje sam i ne racuna se. Ali ovaj mali nedostatak mozemo
zanemariti jer se u ovakvim zadacima obicno unose veliki brojevi da se sve
svodi na preciznost nalazenja broja 0.69 pa nam je svejedno da li je zadnji
clan uracunat ili ne, ali eto ako zelimo ipak 100% precizno uraditi, zadatak
moze se uraditi i bez grupisanja sa mijenjanjem predznaka sume, ali to uradite
sami :) */
while ((i<n)&&(n>1)) {
suma=suma+(1/i-1/(i+1));
i=i+2;
}
// Ispis sume
if (n>1) printf ("\n Suma je: %f", suma); else if (n=1) printf ("Suma je: 1");
// Kraj programa
getch();
return 0;
}
Primjer 8. Napraviti program koji sa standardnog ulaza ucitava cijeli
broj m koji predstavlja redni broj mjeseca u godini, te ucitava i
broj g koji predstavlja godinu, a na monitoru ispisuje naziv tog
mjeseca i broj dana u tom mjesecu. Pretpostaviti da je prestupna
svaka cetvrta godina, iako je pravilo o racunanju prestupnih
godina nešto složenije. Na primjer, ako su ulazne vrijednosti
m=2, g=2000 program treba ispisati:
februar, 2000. g., broj dana:29
Ili ako su ulazne vrijednosti m=5, g=2005 program treba ispisati:
maj, 2005. g., broj dana: 31
RJEŠENJE:
#include <stdio.h>
main() {
/* Deklarisanje varijabli
Definisanje dvodimenzionalne matrice 12 sa 9 (12 mjeseci, a broj 9 je ustvari
broj slova od kojih se sastoje mjeseci, najvise ima semptembar (9 slova). */
int m,g,d,i;
char mj[12][9]={{"Januar"},{"Februar"},{"Mart"},{"April"},
{"Maj"},{"Juni"},{"Juli"},{"August"},{"Septembar"},
{"Oktobar"},{"Novembar"},{"Decembar"}};
// U programu se uvodi i naredba „goto“ koja „skace“ sa linije na liniju
// programa.
pocetak:
// Unos mjeseca i godine
printf ("\n Unesi mjesec i godinu (m,g):"); scanf ("%d,%d", &m,&g);
// Ako se unese 1,3,5,7,8,10 ili 12 mjesec onda ima d=31 dan
if ((m==1)||(m==3)||(m==5)||(m==7)||(m==8)||(m==10)||(m==12)) d=31; else
// Ako se ipak unese 4,6,9 ili 11 mjesec onda ima d=30 dana
if ((m==4)||(m==6)||(m==9)||(m==11)) d=30; else
/* Ili ako se ipak unese mjesec 2 onda se provjerava jos i prijestupna godina
(svaka godina djeljiva sa 4), i u zavisnosti da li je prijestupna ili ne d=29
odnosno d=29 dana. Ako broj nije od 1 do 12 vraca se na pocetak programa*/
if ((m==2)) if ((g%4==0)) d=29; else d=28; else goto pocetak;
// Ispis mjeseca koji se nalazi zapisan u mj[] (m-1 jer nam je januar pod
brojem 0)
printf("%s , %d. g., broj dana: %d", mj[m-1], g, d);
// Kraj programa
getch();
return 0;
}
Primjer 9. Napisati program koji ucitava realnu matricu dimenzija 10x10
te pronalazi najmanji element na glavnoj dijagonali.
RJEŠENJE:
#include <stdio.h>
main (){
// Deklarisanje varijabli
float A[10][10], MIN;
int i,j;
/* Unos matrice (koristimo 2 for petlje pri unosu (i su redovi a j su kolone).
Brojevi se unose po redovima.
*/
printf("\n Unesi matricu A[10][10]: \n");
for (i=0;i<10;i++)
for (j=0;j<10;j++)
{
printf(" [%d,%d]:", i+1, j+1);
scanf("%f", &A[i][j]);
}
/* Trazenje najmanjeg elementa na dijagonali!
Postupak je sljedeci. Elementi na dijagonali su tipa [i,j] gdje su i,j
jednaki. Tako dijagonalni elementi matrice 3x3 su [1,1], [2,2], [3,3]. Posto
nam trebaju samo elementi kada su (i,j) jednaki koristimo jednu for petlju. Na
pocetku stavimo da je najmanji element prvi element na poziciji [1,1], u C-u
je pozicija (0,0) ustvari pozicija (1,1) u realnom svijetu. I ulazimo u for
petlju. Ispituju se redom brojevi kod kojih su brojaci „i“ i „j“ jednaki. Ako
je neki od brojeva koji se ispitaju manji od MIN onda se taj broj pridruzi
varijabli MIN. */
MIN=A[0][0];
for (i=1,j=1;i<10;i++,j++) if (A[i][j]<MIN) MIN=A[i][j];
// Ispis najmanjeg broja na dijagonali
printf("\nNajmanji element na glavnoj dijagonali je: %.f", MIN);
// Kraj programa
getch();
return 0;
}
Primjer 10. Napišite funkciju faktor () koja izracunava n! pri cemu je
prototip funkcije faktor (): double faktor (int n)
Zatim, napisati glavni program koji ucitava neki prirodni broj
n,1<n<10; a zatim izracunava n! pozivom funkcije faktor() i
rezultat ispisuje na standardni izlaz.
RJEŠENJE:
#include <stdio.h>
main (){
// Deklarisanje varijabli
int N;
double F;
// Deklarisanje prototipa funkcije
double faktor (int n);
//Unos prirodnog broja
printf("\nUnesi prirodan broj N: ");
scanf("%d", &N);
/* Pozivanje funkcije faktor() i pridruzivanje vrijednosti koju funkcija
izracuna varijabli F */
F=faktor(N);
// Ispis faktorijele
printf("Faktorijela od %d je: %g", N, F);
// Kraj programa
getch();
return 0;
}
/* Funkcija koja racuna vrijednost faktorijele. Funkcija prima prirodan broj N
a vraca realan broj (double) kao rezultat. */
double faktor (int n) {
int i;
double fak=1;
/* Racunanje faktorijele se vrsi tako da se broj od kojeg trazimo faktorijelu
pomnozi sa svakim cijelim brojem manjim od sebe a koji je veci od 1. Na
pocetku je fak=1 jer ako bi bilo 0 dobili bi uzastopno mnozenje sa 0 i nebi
dobili ispravan rezultat */
for (i=n;i>1;i--) fak=fak*i;
// Vracanje izracunate faktorijele
return fak;
}
Primjer 11. Napisati program koji ucitava broj elemenata (n) nekog
cjelobrojnog polja (Polje) a zatim i elemente tog polja
(maksimalno 100). Program nakon toga pronalazi maksimalni element
unesenog polja i ispisuje ga na standardni izlaz.
Na primjer, ako su ulazni podaci: n=4, Polje=(2,5,20,4) program
ce ispisati vrijednost broja 20.
RJEŠENJE:
# include <stdio.h>
main (){
// Definisanje varijabli
int n, i, niz[100], max;
// Unos broja elemenata
printf("\nUnesi broj elemenata: ");
scanf("%d", &n);
// Unos niza od N elemenata (pomocu for petlje)
for (i=0;i<n;i++)
{
printf ("\nUnesi elemenat broj %d: ", i+1);
scanf("%d", &niz[i]);
}
// Postavljanje vrijednosti max na vrijednost prvog clana niza
max=niz[0];
/* For petlja vrti brojeve od 2 broja (prvi je ukljucen u liniju iznad) i
provjerava se da li je i-ti broj veci od max i ako jeste varijabli max se
pridruzuje vrijednost tog elementa*/
for (i=1;i<n;i++)
if (max<niz[i]) max=niz[i];
// Ispis najveceg elementa niza
printf("Najveci element niza je: %d", max);
// Kraj programa
getch();
return 0;
}
Primjer 12. Napisati program koji ucitava 5 realnih elemenata dva polja
A i B a zatim izracunava elemente treceg polja C (koji takodjer
ima 5 elemenata) pri cemu se i-ti element polja C dobiva prema
slijedecoj formuli:
C[i]=2*A[i]+B[i], i=1,2,…n
Na kraju program na standardni izlaz ispisuje elemente sva tri
polja: A, B i C.
RJEŠENJE:
# include <stdio.h>
main (){
// Definisanje varijabli
float A[5], B[5], C[5];
int i;
/* Unos elemenata prvog polja (pomocu for petlje, i+1 zbog realnosti, da nam
ne ispisuje se na ekranu "Unesi element 0") */
for (i=0;i<5;i++){
printf("\nUnesi %d element prvog polja: ",i+1);
scanf("%f", &A[i]);
}
// Unos elemenata drugog polja
for (i=0;i<5;i++){
printf("\nUnesi %d element drugog polja: ",i+1);
scanf("%f", &B[i]);
}
// Racunanje clanova matrice C po formuli C=2*A+B (pomocu jedne for petlje).
for (i=0;i<5;i++) C[i]=2*A[i]+B[i];
// Ispis elemenata polja A
printf("\nElementi prvog polja A: ");
for (i=0;i<5;i++) printf("%.f ", A[i]);
// Ispis elemenata polja B
printf("\nElementi drugog polja B: ");
for (i=0;i<5;i++) printf("%.f ", B[i]);
// Ispis elemenata polja C
printf("\nElementi treceg polja C: ");
for (i=0;i<5;i++) printf("%.f ", C[i]);
// Kraj programa
getch();
return 0;
}
Primjer 13. Napisati program koji ucitava broj elemenata nekog polja
(maksimalno 100) a zatim i elemente tog polja. Program zatim
pronalazi najmanji element i na standardni izlaz ispisuje sve
elemente koji su manji od dvostruke vrijednosti pronadjenog
najmanjeg elementa.
RJEŠENJE:
# include <stdio.h>
main (){
// Definisanje varijabli
int n, i, niz[100], min;
// Unos broja elemenata
printf("\nUnesi broj elemenata: ");
scanf("%d", &n);
// Unos niza od N elemenata (pomocu for petlje)
for (i=0;i<n;i++){
printf ("\nUnesi elemenat broj %d: ", i+1);
scanf("%d", &niz[i]);
}
// Postavljanje vrijednosti min na vrijednost prvog clana niza
min=niz[0];
/* For petlja vrti brojeve od drugog broja (prvi je ukljucen u liniju iznad) i
provjerava se da li je i-ti broj manji od min i ako jeste varijabli min se
pridruzuje vrijednost tog elementa. */
for (i=1;i<n;i++)
if (min>niz[i]) min=niz[i];
/* For petlja vrti sve brojeve i za svaki broj se vrsi provjera da li je manji
od dvostruke vrijednosti nadjenog najmanjeg broja, i ako je taj broj zaista
manji od 2*min ispisuje se na ekran, a ako nije ide se na iduci broj. */
for (i=0;i<n;i++)
if (niz[i]<min*2) printf("\n %d", niz[i]);
// Kraj programa
getch();
return 0;
}
Primjer 14. Napisati funkciju koja kao argument prima cijeli broj a
vraca broj koji se dobije tako da se iz argumenta izbace cifre
2,3,8 i 9.
Prototip funkcije je: int izbaci2389(int x)
Nakon toga, napišite glavni program koji ucitava neki cjeli broj,
poziva funkciju izbaci2389 i ispisuje rezultat na standardnom
izlazu.
RJEŠENJE:
# include <stdio.h>
main (){
// Definisanje prototipa funkcije
int izbaci2389(int x);
// Definisanje varijabli
int N, X;
// unos prirodnog broja
printf("\nUnesi prirodan broj: ");
scanf("%d", &N);
// Poziv funkcije i pridruzivanje rezultata varijabli X
X=izbaci2389(N);
// Ispis prepravljenog broja
printf("\nPrepravljeni broj: %d", X);
// Kraj programa
getch();
return 0;
}
// Funkcija za izbacivanje cifri 2,3,8,9 iz prirodnog broja
int izbaci2389(int x)
{
int t=1, y=0, ost;
/* While petlja se izvrsava dok je x>0. Uzima se ostatak dijeljenja broja sa
10 (npr. od broja 129, ostatak je 9), zatim se varijabli x odbije zadnja cifra
dijeljenjem sa 10 (do odbijanja dolazi jer radimo sa int brojevima pa nema
decimalnog zareza (npr 129/10=12). Zatim provjerimo dali je dobijeni ostatak
ost jednak 2,3,8 ili 9 i ako jest vracamo se na pocetak petlje i vrsimo isti
postupak za broj koji smo dobili odbijanjem zadnje cifre (i sve tako dok ne
odbijemo sve cifre, tj. dok ne dobijemo broj 0). Ako varijabla ost ipak je
razlicita od 2,4,8,9 onda se varijabli y doda vrijednost ost pomnozena sa t. U
programu varijabla t nam ustvari broji koja je decimala u pitanju. Kad je t=1
radimo sa jedinicama, kad je t=10 radimo sa deseticama... Tako npr. broj 1234
mozemo rastaviti kao 4*1+3*10+2*100+1*1000 gdje su nam brojevi 1,10,100,1000
ustvari nase t. */
while (x>0){
ost=x%10;
x=x/10;
if ((ost==2)||(ost==3)||(ost==8)||(ost==9)) continue;
y=y+ost*t;
t=t*10;
}
return y;
}
Primjer 15. Napisati funkciju koja kao argument uzima potrošnju u KWh
za veliku i malu tarifu te na standardnom izlazu ispisuje racun
za utrošenu elektricnu energiju.
Pretpostaviti da je cijena za veliku tarifu po utrošenom KWh 0.10
KM, a cijena za malu tarifu po utrošenom KWh je 0.05 KWh.
Prototip funkcije je: void racun(float vt, float mt) gdje :
* vt oznacava potrošnju za veliku tarifu
* mt oznacava potrošnju za malu tarifu
Nakon toga, napišite glavni program koji ucitava potrošnju za
veliku tarifu i malu tarifu, te na standardnom izlazu ispisuje
racun za tu potrošnju.
RJEŠENJE:
# include <stdio.h>
main (){
// Definisanje prototipa funkcije
void racun(float vt, float mt);
// Definisanje varijabli
float vt, mt;
// Unos potrosnje po velikoj i maloj tarifi
printf("Unesi potrosnju za veliku tarifu: ");
scanf("%f", &vt);
printf("Unesi potrosnju za malu tarifu: ");
scanf("%f", &mt);
// Poziv void funkcije (funkcija ne vraca rezultat), sa argumentima vt i mt
racun(vt, mt);
// Kraj programa
getch();
return 0;
}
// Funkcija koja kreira racun za utrosak energije na osnovu argumenata vt i mt
void racun(float vt, float mt)
{
float cijena;
// Racunanje ukupne cijene na osnovu argumenata vt i mt i zadatih cijena
cijena=vt*0.10+mt*0.05;
// Ispis rezultata
printf("\n--------------RACUN ZA UTROSENU EL. ENERGIJU-------------------- ");
printf("\nPotrosnja VT: %f KWh", vt);
printf("\nPotrosnja MT: %f KWh", mt);
printf("\n**************************************************************** ");
printf("\nUkupno: %f KM", cijena);
printf("\n**************************************************************** ");
}

Primjer 16. Napisati funkciju koja kao argument uzima tri cijela broja
a, p i c. Funkcija vraca cijeli broj koji se dobije tako da se u
broju a iza p-te cifre s desne strane umetne cifra c.
Ako je p veci od ukupnog broja cifri izlaz iz funkcije treba biti
jednak ulazu. Ako se broj c sastoji od više cifri onda se umece
samo zadnja cifra iz tog broja.
Prototip funkcije je: int umetni(int a, int p, int c)
Nakon toga, napišite program koji ucitava neki pozitivan cijeli
broj a, poziciju umetanja cifre p i broj koji definira cifru koja
se umece c, te poziva funkciju umetni() i ispisuje na standardnom
izlazu rezultirajuci broj.
RJEŠENJE:
# include <stdio.h>
main (){
// Definisanje prototipa funkcije
int umetni(int a, int p, int c);
// Definisanje varijabli
int a, p, c, rez;
// Unos brojeva a,p,c
printf("Unesi brojeve a, p, c: ");
scanf("%d,%d,%d", &a,&p,&c);
// Poziv funkcije umetni() i pridruzivanje rezultata varijabli rez
rez=umetni(a,p,c);
// Ispis rezultata
printf("Rezultat: %d", rez);
// Kraj programa
getch();
return 0;
}
// Funkcija koja umece broj c na p-tu poziciju u broju a s desna
int umetni(int a, int p, int c)
{
int t=1, ost, x=0,br=0;
// Broju c pridruzuje se samo njegova zadnja cifra
c=c%10;
/* Racuna se ostatak dijeljenja sa 10 (ost), broju a se "otkida" zadnja cifra.
Ukoliko su brojevi p i br (brojac) identicni na to mjesto treba ubaciti broj
c. t nam broji decimale (vidi 14. zadatak).
Varijabli x se dodaje ostatak ost pomnozen sa t.
X je trazeni broj koji funkcija vraca u glavni program. */
while (a>0){
ost=a%10;
a=a/10;
if (p==br) {x=x+c*t; t=t*10; p=1000;}
x=x+ost*t;
t=t*10;
br++;
}
return x;
}

Primjer 17. Napraviti program koji ce na monitoru ispisati prvih N
cijelih brojeva i njihove kvadrate u formatu:
1 na kvadrat je 1
2 na kvadrat je 4
3 na kvadrat je 9
..........................
Broj N se unosi sa tastature. Koristiti for petlju.
RJEŠENJE:
#include <stdio.h>
int main() {
// Definisanje varijabli
int n,i;
/* Unos broja n sa tastature */
printf("\nUnesi broj n: ");
scanf("%d", &n);
/* Ispis prvih n brojeva i njihovih kvadrata, krenuvsi od broja 1, i znaci
krece od 1 i ide sve do broja za jedan manji od unesenog */
for ( i = 1 ; i < n ; i++ )
printf("\n %d na kvadrat je %d \n", i, i*i);
// Kraj programa
getch();
return 0;
}