1014 - etfuni.files.wordpress.com · break; case 2: printf ... break; default: printf("Greska"); }...
-
Upload
hoangtuyen -
Category
Documents
-
view
259 -
download
1
Transcript of 1014 - etfuni.files.wordpress.com · break; case 2: printf ... break; default: printf("Greska"); }...
Zadace iz predmeta Osnove racunarstva
za godinu 2013\1014
Ova datoteka je namjenjena da se lakše shvati gradivo predmeta, a ne da se zadade prepisuju iz
godine u godinu. Imao sam dosta grešaka, kao i neurađenih zadada, tako da ne bi bilo loše da se ova
datoteka ažurira sa ispravljenim zadacima, kao i sa novim zadadama iz idudih godina.
„Pokitovao“ sam nalaze autotestova, i za neke i detaljnije, pa preradite i sretno Ako sta nije jasno
posaljite poruku na fb, pokusat cu pomoci.
Nemanja Sljivic
Sadrzaj Z1 ............................................................................................................................................................. 2
Z1Z1 ..................................................................................................................................................... 2
Z1Z2 ..................................................................................................................................................... 3
Z1Z3 ..................................................................................................................................................... 4
Z2 ............................................................................................................................................................. 5
Z2Z1 ..................................................................................................................................................... 5
Z2Z2 ..................................................................................................................................................... 6
Z2Z3 ..................................................................................................................................................... 7
Z2Z4 ..................................................................................................................................................... 9
Z3 ........................................................................................................................................................... 10
Z3Z2 ................................................................................................................................................... 10
Z3Z3 ................................................................................................................................................... 11
Z4 ........................................................................................................................................................... 13
Z4Z1 ................................................................................................................................................... 13
Z4Z2 ................................................................................................................................................... 15
Z1
Z1Z1
#include <stdio.h>
#include <stdlib.h>
int main()
{
int mjesec, dan, sat, minute, sekunde, zona;
printf("Unesite datum (dan mjesec): ");
scanf("%d %d", &dan, &mjesec);
printf("Unesite vrijeme u Sarajevu (sati minute sekunde): ");
scanf("%d %d %d", &sat, &minute, &sekunde);
if ((mjesec<3) || ((mjesec==3) && ((dan<31) || ((dan==31) && (sat<2)))) || (mjesec>10) || ((mjesec==10) && ((dan>27)
|| (dan==27) && (sat>1))))
zona=1;
else if (((mjesec>3) && (mjesec<10)) || ((mjesec==3) && ((dan>31) || ((dan==31) && (sat>2))) || ((mjesec==10) &&
((dan<27) || ((dan==27) && (sat<1))))))
zona=2;
else if (((mjesec==3) && (dan==31) && (sat==2)) || ((mjesec==10) && (dan==27) &&(sat==1)))
zona=0;
else
zona=-1;
if (zona>0)
{
sat=sat-zona;
if (sat<0)
sat=sat+24;
printf("U Londonu je bilo: ");
if (sat<10)
printf("0");
printf("%d:", sat);
if (minute<10)
printf("0");
printf("%d:", minute);
if (sekunde<10)
printf("0");
printf("%d", sekunde);
}
else if (zona==0)
printf("Ne moze se izracunati vrijeme u Londonu jer se u ovom terminu pomjerao sat.");
else printf("Greska pri unosu podataka.");
return 0;}
Z1Z2
int main()
{
int n, i, j;
float n_unos;
printf("Unesite pozitivan cijeli neparan broj: ");
scanf("%f", &n_unos);
//Varijabla integera "sijece" iz unosa neki cijeli broj
n=n_unos;
//
if ((n_unos==n) && (n%2!=0) && (n>0))
{
for(i=1; i<=n; i++)
{
for(j=1; j<=n; j++)
{
if ((i==j)||(i==((n+1)-j)) || (j==((n+1)/2)) || (i==((n+1)/2)))
//Prva zagrada radi dijagonalu, od gornjeg lijevog coska, do donjeg desnog. Druga radi od gornjeg desnog do
donjeg lijevog. Treca radi uspravnu sredinu, i cetvrta horizontalnu sredinu...
{
printf("*");
if (j==n) printf("\n");
//Ako dodje j do kraja reda, pisi prelazak u drugi red.
}
else if (j==n) printf(" \n");
//Ovo je radi moguceg preskakanja redova, tj. ako se gornja funkcija ne obavi..
else printf(" ");
//U svakom drugom slucaju pisi razmak...
}
}
}
else if (n_unos!=n)
printf("Unos nije cijeli broj");
else if (n<=0)
printf("Broj nije pozitivan");
else if (n%2==0)
printf("Broj nije neparan");
else
printf("Greska pri unosu");
return 0;
}
Z1Z3
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n, i, j;
float x, faktorijel=1., suma=0.;
printf("Unesite broj n: ");
scanf("%d", &n);
printf("Unesite broj x: ");
scanf("%f", &x);
if (((n>=1) && (n<=15)) && ((x>=-20.) && (x<=20.)))
{
for (i=1; i<=n; i++)
{
for(j=1; j<=i; j++)
{
faktorijel=faktorijel*j;
}
suma=suma+(x*i)/faktorijel;
faktorijel=1;
}
printf("Suma je: S(%.1f)=%.1f", x, suma);
}
else
printf("Nisu ucitane dozvoljene vrijednosti.");
return 0;
}
Nalaz testa:
Očekivan rezultat Unesite broj n:Unesite broj x:Suma je: S(3.0)=5.5, a dobio Unesite
broj n: Unesite broj x: Suma je: S(3.0)=7.5.
Nalaz testa:
Očekivan rezultat Unesite broj n:Unesite broj x:Suma je: S(2.5)=5.3, a dobio Unesite
broj n: Unesite broj x: Suma je: S(2.5)=6.8.
Z2
Z2Z1
#include <stdio.h>
#include <stdlib.h>
int main()
{
int br_studenata, i, j;
float rez[500], medijan, temp;
printf("Unesite broj studenata: ");
scanf("%d", &br_studenata);
if(br_studenata<=500)
{
printf("Unesite bodove na ispitu: ");
for(i=0; i<br_studenata; i++)
{
scanf("%f", &rez[i]);
if(rez[i]<0 || rez[i]>20)
break;
}
//U slucaju da nema greske pri unosu:
if(br_studenata==i)
{
//sortiramo niz "rez"
for(i=0; i<br_studenata; i++)
for(j=i; j<br_studenata; j++)
{
if(rez[i]>rez[j])
{
temp=rez[i];
rez[i]=rez[j];
rez[j]=temp;
}
}
//Ako je neparan broj:
if(br_studenata%2!=0)
{
medijan=rez[(br_studenata-1)/2];
}
//Ako je paran broj:
else
{
medijan=(rez[br_studenata/2]+rez[(br_studenata-1)/2])/2;
}
printf("Medijan je: %.1f", medijan);
}
else printf("Rezultat ispita nije u trazenom intervalu");
}
else printf("Broj studenata je veci od granica niza");
return 0; }
Z2Z2
#include <stdio.h>
#include <stdlib.h>
int main()
{
int niz[100], clan=0, minb=0, pravilnost=0, desno, lijevo, B, i, j, b_ispravnih=0;
do
{
scanf("%d", &niz[clan]);
clan++;
}
while((niz[clan-1]>=0) && (clan<100));
if((niz[clan-1]<0) && (niz[clan-1]!=-1))
pravilnost=1;
if((clan-1)<3)
pravilnost=2;
if((clan-1)>100)
pravilnost=3;
switch (pravilnost)
{
case 0:
{
B=clan-1;
//provjera gdje se nalazi najmanji broj
for(i=0; i<B; i++)
for(j=i; j<B; j++)
if((niz[j]<=niz[i]) && (niz[j]<=niz[minb]))
minb=j;
for(desno=(minb+1); desno<(B-1); desno++)
if((niz[desno]>niz[desno-1]) && ((niz[desno])<niz[desno+1]))
b_ispravnih++;
for(lijevo=(minb-1); lijevo>0; lijevo--)
if((niz[lijevo]<niz[lijevo-1]) && ((niz[lijevo])>niz[lijevo+1]))
b_ispravnih++;
b_ispravnih=b_ispravnih+3;
if(b_ispravnih==B)
printf("Niz je v-niz ");
else printf("Niz nije v-niz");
break;
}
case 1:
printf("Unijeli ste negativan broj ");
break;
case 2:
printf("Nedovoljno elemenata");
break;
case 3:
printf("Elementi prelaze granicu niza");
break;
default:
printf("Greska");
}
return 0;}
Z2Z3
#include <stdio.h>
#include <stdlib.h>
int main()
{
int M[20], red, kol, red_u, minb, maxb, nula=0, i, j, clan=0, pravilnost=0, B;
printf("Unesite clanove niza: ");
do
{
scanf("%d", &M[clan]);
if(((M[clan]>10) && (M[clan]!=999)) || (M[clan]<-10)) pravilnost=1;
clan++;
if(clan>20) pravilnost=1;
if(pravilnost>0) break;
}
while(M[clan-1]!=999);
switch (pravilnost)
{
case 0:
{
//B je broj clanova niza.
B=clan-1;
kol=0;
//max i min vrijednosti clanova:
maxb=M[0];
minb=M[0];
for(i=0; i<B; i++)
for(j=i; j<B; j++)
{
if((M[j]>=M[i]) && (M[j]>=maxb)) maxb=M[j];
if((M[j]<=M[i]) && (M[j]<=minb)) minb=M[j];
}
//trazimo ukupan broj redova na grafi, i nulu:
if(maxb>0)
{
if(minb<0) red_u=maxb+(-1)*minb+1;
if(minb>0) red_u=maxb+1;
nula=maxb;
}
else if(maxb<=0)
{
red_u=minb*(-1);
maxb=0;
}
//crtanje
for(red=0; red<=red_u; red++)
{
printf("\n");
for(clan=0; clan<B; clan++)
{
for(kol=1; kol<=3; kol++)
{
if((kol==1) && (red!=nula))
{
if (((M[clan]>0) && (M[clan]==(maxb-red))) || ((M[clan]<0) && (M[clan]==(maxb-red))))
printf("*");
else if (((M[clan]>0) && (((maxb-red)<M[clan]) && ((maxb-red)>0))) || ((M[clan]<0) && (((maxb-red)>M[clan])
&& ((maxb-red)<0))))
printf("|");
else if (red!=nula) printf(" ");
}
else if (red==nula)
{
if((kol==1) && (M[clan]==0))
printf("*");
else
printf("-");
}
else printf(" ");
}
}
}
break;
}
case 1:
printf("Broj nije u trazenom intervalu ");
break;
default:
printf("Greska ");
}
return 0;
}
Z2Z4
#include <stdio.h>
#include <stdlib.h>
int main()
{
int matr[50][50], red, kol, M, N, maxb, maxb_first, red_main, red_max, pravilnost=0;
//unos
printf("Unesite broj M: ");
scanf("%d", &M);
if((M>50) || (M<1)) pravilnost=1;
if(pravilnost==0)
{
printf("Unesite broj N: ");
scanf("%d", &N);
}
if((N>50) || (N<1)) pravilnost=1;
if(pravilnost==0)
{
printf("Unesite clanove matrice: ");
for(red=0; red<N; red++)
for(kol=0; kol<M; kol++)
scanf("%d", &matr[kol][red]);
//ova petlja sluzi da provjerimo matricu vise puta, da nema istih maksimalnih brojeva
for(red_main=0; red_main<N; red_main++)
{
maxb=matr[0][0];
red_max=0;
//trazimo max clan, kao i red u kojem se nalazi
for(red=0; red<N; red++)
for(kol=0; kol<M; kol++)
if(matr[kol][red]>=maxb)
{
maxb=matr[kol][red];
red_max=red;
}
//podesimo prvi najveci broj koji petlja pronadje
if(red_main==0)
maxb_first=maxb;
//ako se najveci broj ne ponavlja, prekini petlju
if((red_main!=0)&&(maxb_first>maxb))
break;
//modificiramo matricu:
for(red=red_max; red<(N-1); red++)
for(kol=0; kol<M; kol++)
matr[kol][red]=matr[kol][red+1];
N--;
}
//ispis
for(red=0; red<N; red++)
{
printf("\n");
for(kol=0; kol<M; kol++)
printf("%6d", matr[kol][red]);
}
}
else printf("Broj nije u trazenom intervalu ");
return 0;
}
Z3
Z3Z2
#include <stdio.h>
#include <stdlib.h>
int f(int n)
{
int i, j, b=0, b1=0, djeljivi[n];
//trazimo niz djeljivig brojeva sa brojem n OK
for(i=2; i<n; i++)
if(n%i==0)
{
djeljivi[b1++]=i;
}
for(i=1; i<=n; i++)
//trazimo brojeve koje, kada podjelimo sa djeljivim, NE DAJU CIJELI BROJ
for(j=0; j<b1; j++)
{
if(i%djeljivi[j]==0)
{
b++;
break;
}
}
return (n-b);
}
int main()
{
int n;
printf("Unesite broj n: ") ;
scanf("%d", &n);
printf("%d", f(n));
return 0;
}
Z3Z3
#include <stdio.h>
#include <stdlib.h>
int izbaci_cifre(int broj, int* niz, int vel)
{
int broj_c[10], i, j, k, cifra, br_c=0, znak=1, pravilnost=1;
//testiramo pravilnost niza niz
for(i=0; i<vel; i++)
{
if((*(niz+i)<0)||(*(niz+i)>9))
pravilnost=0;
}
if(pravilnost==1)
{
//radimo apsolutnu vrijednost broja i pamtimo predznak
if(broj<0)
{
znak=-1;
broj*=znak;
}
cifra=broj;
//prebacujemo broj u niz cifara
//racunamo broj cifara u broj-u
while(cifra>=1)
{
broj_c[br_c]=cifra%10;
cifra/=10;
br_c++;
}
//iz niza cifara broj_c vadimo brojeve koje se traze u nizu niz
for(i=0; i<br_c; i++)
{
for(j=0; j<vel; j++)
{
if(broj_c[i]==*(niz+j))
{
for(k=i; k<br_c; k++)
broj_c[k]=broj_c[k+1];
br_c--;
i-=1;
}
}
}
broj=0;
//pretvaramo filtrirani broj_c ponovo u broj, i vracamo ga u glavni program
for(i=(br_c-1); i>=0; i--)
{
broj+=broj_c[i];
broj*=10;
}
broj=broj/10*znak;
return broj;
}
else return -99999;
}
int main()
{
int broj, niz[10], i=0;
printf("Unesite broj: ");
scanf("%d", &broj);
if (broj)
{
printf("Unesite niz cifara (-1 za kraj): ");
do
{
scanf("%d", &niz[i]);
i++;
}
while(niz[i-1]!=-1);
i--;
if(izbaci_cifre(broj, niz, i)!=-99999)
printf("Broj bez cifara glasi: %d", izbaci_cifre(broj, niz, i));
else printf("Neispravan unos");
}
else printf("Neispravan unos");
return 0;
}
Z4
Z4Z1
#include <stdio.h>
#include <stdlib.h>
char* zamjeni_brojeve(char* s)
{
int i, duzina=0, pb, brojac=0;
char b1[]="jedan", b2[]="dva", b3[]="tri", b4[]="cetri", b5[]="pet", b6[]="sest", b7[]="sedam", b8[]="osam", b9[]="devet",
b0[]="nula", *broj, p[100];
char* c=s;
c=s;
while(*c!='\0')
{
if((*c>='0')&&(*c<='9'))
{
switch (*c)
{
case '1':
{
duzina=5;
broj=b1;
break;
}
case '2':
{
duzina=3;
broj=b2;
break;
}
case '3':
{
duzina=3;
broj=b3;
break;
}
case '4':
{
duzina=5;
broj=b4;
break;
}
case '5':
{
duzina=3;
broj=b5;
break;
}
case '6':
{
duzina=4;
broj=b6;
break;
}
case '7':
{
duzina=5;
broj=b7;
break;
}
case '8':
{
duzina=4;
broj=b8;
break;
}
case '9':
{
duzina=5;
broj=b9;
break;
}
case '0':
{
duzina=4;
broj=b0;
break;
}
};
//kopiramo ono "ispod" rijeci, i prebacujemo "nakon" rijei
pb=0;
while(c[pb]!='\0')
{
p[pb]=c[pb+1];
pb++;
}
for(i=0; i<pb; i++)
{
c[i+duzina]=p[i];
}
for(i=0; i<duzina; i++)
c[i]=broj[i];
}
c++;
brojac++;
};
c=c-brojac;
return c;
}
int main()
{
char s[1000];
int i=0;
do
{
scanf("%c", &s[i]);
i++;
}
while (s[i-1]!='\n');
s[i-1]='\0';
printf("%s", zamjeni_brojeve(s));
return 0;
} //Ne sjecam se ovog zadatka, ali mislim da ima malu greskicu, i radio bi ok... dobra je ideja sa switch-case.. Nije moglo
kompajlirati, ali sam dobio neke bodove
Z4Z2
#include <stdio.h>
#include <stdlib.h>
int duzina_b(char* str)
{
int b=0;
while(*(str+b)!='\0')
b++;
return b;
}
char apslovo(char c)
{
if((c>=97)&&(c<=122)) c-=32;
return c;
}
char* izbaci_rijec(char* rec, char* r)
{
char *c=rec, *s=r, p[1000];
int i, cb=duzina_b(c), rb=duzina_b(r), pb, pravilnost=0, brojac=0;
while(*c!='\0')
{
pravilnost=0;
if((((apslovo(*c))==(apslovo(r[0]))))&&((brojac==0)||((brojac>0)&&(((*(c-1)<'A')||(*(c-1)>'z'))||((*(c-1)>'Z')&&(*(c-
1)<'a'))))))
{
for(i=0; i<rb; i++)
{
if((apslovo(*(c+i))!=apslovo(r[i]))||((*(c+rb)>='A')&&(*(c+rb)<='Z'))||((*(c+rb)>='a')&&(*(c+rb)<='z')))
{
pravilnost=0;
break;
}
pravilnost=1;
}
if(pravilnost==1)
{
i=0;
do
{
p[i]=*(c+rb+i+1);
i++;
}
while(p[i-1]!='\0');
pb=i-1;
for(i=0; i<=pb; i++)
*(c+i)=p[i];
}
}
c++;
brojac++;
}
c=c-brojac;
return rec;
}
int main()
{
char s[1000], p[100];
int i=0;
printf("Unesite recenicu: ");
do
{
scanf("%c", &s[i]);
i++;
}
while (s[i-1]!='\n');
s[i-1]='\0';
i=0;
printf("Unesite rijec koju zelite izbaciti: ");
do
{
scanf("%c", &p[i]);
i++;
}
while (p[i-1]!='\n');
p[i-1]='\0';
printf("%s", izbaci_rijec(s, p));
return 0;
}
Autotest br. 4
Detaljnije informacije o testu
Kod testa:
/* Provjera da li se dvaput izbacuje ista rijec */
char s[100]="Ovo je ovo";
char* s2 = izbaci_rijec(s, "Ovo");
/* Funkcijom strcmp provjeravamo da li je string identican ocekivanom
uzimajuci u obzir i razmake itd. */
if (strcmp(s2, "je") != 0)
printf("GRESKA!\n");
/* Ispis slovo po slovo osigurava da je vraceni string validan */
while (*s2 != '\0') printf("%c", *s2++);
Prikaži kod testa unutar zadaće
Ulaz/izlaz programa
Očekivan je izlaz: je
Vaš program je ispisao: GRESKA!
je ovo
Vrijeme izvršenja (zaokruženo): <2 sekundi
Nalaz testa:
Očekivan rezultat je, a dobio GRESKA!
je ovo.
Autotest br. 5
Detaljnije informacije o testu
Kod testa:
/* Provjera izbacivanja rijeci na kraju stringa */
char s[100]="Ovo je primjer recenice";
char* s2 = izbaci_rijec(s, "recenice");
/* Funkcijom strcmp provjeravamo da li je string identican ocekivanom
uzimajuci u obzir i razmake itd. */
if (strcmp(s2, "Ovo je primjer") != 0)
printf("GRESKA!\n");
/* Ispis slovo po slovo osigurava da je vraceni string validan */
while (*s2 != '\0') printf("%c", *s2++);
Prikaži kod testa unutar zadaće
Ulaz/izlaz programa
Očekivan je izlaz: Ovo je primjer
Vaš program je ispisao: GRESKA!
Ovo je primjer
Vrijeme izvršenja (zaokruženo): <2 sekundi
Nalaz testa:
Očekivan rezultat Ovo je primjer, a dobio GRESKA!
Ovo je primjer .
Autotest br. 8
Detaljnije informacije o testu
Kod testa:
/* Provjera osjetljivosti na velika i mala slova,
provjera da li se od velikih slova oduzima 32 (cime se dobiju brojevi) */
char s[100]="STUP stup 3450";
char* s2 = izbaci_rijec(s, "STUP");
/* Funkcijom strcmp provjeravamo da li je string identican ocekivanom
uzimajuci u obzir i razmake itd. */
if (strcmp(s2, "3450") != 0)
printf("GRESKA!\n");
/* Ispis slovo po slovo osigurava da je vraceni string validan */
while (*s2 != '\0') printf("%c", *s2++);
Prikaži kod testa unutar zadaće
Ulaz/izlaz programa
Očekivan je izlaz: 3450
Vaš program je ispisao: GRESKA!
stup 3450
Vrijeme izvršenja (zaokruženo): <2 sekundi
Nalaz testa:
Očekivan rezultat 3450, a dobio GRESKA!
stup 3450.