You are on page 1of 6

// Rijeenje zadatka A-1 s prvog kolokvija (bez upotrebe funkcija)

#include <iostream>
using namespace std;
int main()
{
short m,n;
// 1. Dio: Preuzimanje vrijednost sa tastature
cout << "Unesite prirodan broj M: ";
while(!(cin >> m))
{
cout << "Niste unijeli broj! Unesite ponovo: ";
cin.clear();
cin.ignore(10000, 10);
}
cout << "Unesite prirodan broj N: ";
while(!(cin >> n))
{
cout << "Niste unijeli broj! Unesite ponovo: ";
cin.clear();
cin.ignore(10000, 10);
}
// 2. Dio: Ispis
/*
Ispis dijelo na tri cijeline
2.1 Ispis gornjeg dijela figure, bez sredinje linije
2.2 Ispis sredinje linije (odnosno dvije ako je M parno)
2.3 Ispis donjeg dijela figure, bez sredinje linije
*/
// pr je pomocna varijabla koja sadrzi visinu (i irinu) pravouglo trougla
koji ostaje s lijeve strane figure
// ova vrijednost je jednaka visini figure do sredinje linije, kao i
broju blankova u prvoj liniji (i koji
// se smanjuje kako figura "raster" prema dolje
// Koristi se "cjelobrojno dijeljenje" kako bi se simulirala funkcija
"floor"
short pr=((m-1)/2);
/* Prva trecina ispisa
It. var. "i" nam oznacava red koji generisemo. Gornji dio figure se
sastoji iz "pr" redova, pri cemu
- brojimo unatrag (mozemo i unaprijed, ali moramo modifikovati algoritam
koji generie blanks)
- svaki red ima vodecih "i" praznih mjesta (blanks)
- u prvom redu, tj. ako je i == pr, slijedi "n" zvijezdica
- u ostalim redovima imamo jednu zvijezdicu, pa "n-2" prazna mjesta, pa
jo jednu zvijezdicu
*/

for (int i=pr;i>=1; i--)


{
for (int j=1; j<=i;j++) cout << ' ';
// Vodeca prazna mjesta
if(i==pr) for (int j=1;j<=n;j++) cout << '*'; // Prvi red (n zvijezdica)
else {
// Ostali redovi
cout << '*';
// Prva zvijezdica
for (int j=1;j<=n-2;j++) cout << ' ';
// "Supljina" izmedju
cout << '*';
// Zavrsna zvijezdica
}
cout << endl;
// Kraj reda
}
// m%2 moze biti 0 (ako je M parno, odnosno 1 ako je N neparno)
/*
Druga trecina ispisa - ispis sredisnje(ih) linije(a)
Ako je M paran broj, m%2 == 0, pa ce vanjska petlja (iterator i) imati
dvije iteracije (i poprima vrijednost 0 i 1)
Ako je M neparan broj, m%2 == 1, pa ce vanjska petlja (iterator i) imati
jednu iteracije (i poprima vrijednost 1)
*/
for (int i=1;i>=m%2;i--)
{
for (int j=1;j<=n;j++) cout << '*'; // (n zvijezdica)
cout << endl;
// Kraj reda
}
/* Treca trecina ispisa
Postupak analogan prvoj trecini sa sljedecim izmjenama
- Sada "i" ide od 1 pa do "pr"
*/
for (int i=1;i<=pr; i++)
{
for (int j=1; j<=i; j++) cout << ' ';
if (i==pr) for (int j=1;j<=n;j++) cout << '*';
else {
cout << '*';
for (int j=1;j<=n-2;j++) cout << ' ';
cout << '*';
}
cout << endl;
}
system("pause");
return 0;
}

// Alternativno rijeenje za A1 zadatak, koritenjem funkcija


#include <iostream>
using namespace std;
void ispisi_prazna_mjesta(short broj_praznih_mjesta)
{
for (int j=1;j<=broj_praznih_mjesta;j++) cout << ' ';
}
void ispisi_puni_red(short broj_zvijezdica)
{
for (int j=1;j<=broj_zvijezdica;j++) cout << '*';
}
void ispisi_medju_red(short broj_zvijezdica)
{
cout << '*';
// Prva zvijezdica
ispisi_prazna_mjesta(broj_zvijezdica-2); // "Supljina" izmedju
if(broj_zvijezdica>1) cout << '*';
// Zavrsna zvijezdica
}
int main()
{
short m,n;
// 1. Dio: Preuzimanje vrijednost sa tastature
cout << "Unesite prirodan broj M: ";
while(!(cin >> m))
{
cout << "Niste unijeli broj! Unesite ponovo: ";
cin.clear();
cin.ignore(10000, 10);
}
cout << "Unesite prirodan broj N: ";
while(!(cin >> n))
{
cout << "Niste unijeli broj! Unesite ponovo: ";
cin.clear();
cin.ignore(10000, 10);
}
// 2. Dio: Ispis
/*
Ispis dijelo na tri cijeline
2.1 Ispis gornjeg dijela figure, bez sredinje linije
2.2 Ispis sredinje linije (odnosno dvije ako je M parno)
2.3 Ispis donjeg dijela figure, bez sredinje linije
*/
// pr je pomocna varijabla koja sadrzi visinu (i irinu) pravouglo trougla
koji ostaje s lijeve strane figure
// ova vrijednost je jednaka visini figure do sredinje linije, kao i
broju blankova u prvoj liniji (i koji
// se smanjuje kako figura "raster" prema dolje
// Koristi se "cjelobrojno dijeljenje" kako bi se simulirala funkcija
"floor"
short pr=((m-1)/2);

/* Prva trecina ispisa


It. var. "i" nam oznacava red koji generisemo. Gornji dio figure se
sastoji iz "pr" redova, pri cemu
- brojimo unatrag (mozemo i unaprijed, ali moramo modifikovati algoritam
koji generie blanks)
- svaki red ima vodecih "i" praznih mjesta (blanks)
- u prvom redu, tj. ako je i == pr, slijedi "n" zvijezdica
- u ostalim redovima imamo jednu zvijezdicu, pa "n-2" prazna mjesta, pa
jo jednu zvijezdicu
*/
for (int i=pr;i>=1; i--)
{
ispisi_prazna_mjesta(i);
// Vodeca prazna mjesta
if(i==pr) ispisi_puni_red(n); // Prvi red (n zvijezdica)
else ispisi_medju_red(n);
// Ostali redovi
cout << endl;
// Kraj reda
}
// m%2 moze biti 0 (ako je M parno, odnosno 1 ako je N neparno)
/*
Druga trecina ispisa - ispis sredisnje(ih) linije(a)
Ako je M paran broj, m%2 == 0, pa ce vanjska petlja (iterator i) imati
dvije iteracije (i poprima vrijednost 0 i 1)
Ako je M neparan broj, m%2 == 1, pa ce vanjska petlja (iterator i) imati
jednu iteracije (i poprima vrijednost 1)
*/
for (int i=1;i>=m%2;i--)
{
ispisi_puni_red(n); // (n zvijezdica)
cout << endl;
// Kraj reda
}
/* Treca trecina ispisa
Postupak analogan prvoj trecini sa sljedecim izmjenama
- Sada "i" ide od 1 pa do "pr"
*/
for (int i=1;i<=pr; i++)
{
ispisi_prazna_mjesta(i);
if (i==pr) ispisi_puni_red(n);
else ispisi_medju_red(n);
cout << endl;
}
system("pause");
return 0;
}

// Rijeenje zadatka A-2 (B-2) s prvog kolokvija


#include <iostream>
using namespace std;
int main()
{
long long n;
do
{
cout << "Unesite prirodan broj n: ";
while(!(cin >> n))
{
cout << "Niste unijeli broj! Unesite ponovo: ";
cin.clear();
cin.ignore(10000, 10);
}
if (n<0)
{
return 0;
}
unsigned long brojac(0);
// Brojac razlicitih prostih faktora
(ignoristemo visestrukosti)
bool visestruk;
for (unsigned long i=2;i<=n;i++)
{
cout << "Ispitujem " << i << endl;
visestruk = false;
// Svaki "i" moram ponavljati dok god dijeli "n"
// Dok god i dijeli n, ponavljaj (ako i nedijeli n, petlja se nece ni
izvrsiti)
while (n%i==0 && n>0)
{
cout << i << " dijeli! " << endl;
if(!visestruk) brojac++; // Ako nije visestruku dijelioc
n/=i;
visestruk=true;
}
}
cout << "Uneseni broj ima " << brojac << " prostih faktora!" << endl;
}
while(1);
system("pause");
return 0;
}

// Rijeenje zadatka A-3 (B-3) s prvog kolokvija


#include <iostream>
#include <cmath>
using namespace std;
int main()
{
long long x;
long long niz[100];
short brojac(0);
do
{
cout << "Unesite cio broj x (sa 0 prekidate unos): ";
while(!(cin >> x))
{
cout << "Niste unijeli broj! Unesite ponovo: ";
cin.clear();
cin.ignore(10000, 10);
}
niz[brojac++]=x;
}
while (x>0);
unsigned long long parovi(0);
for (int i=0;i<brojac-1;i++)
for (int j=i+1;j<brojac-1;j++)
// zA3
//if(abs(niz[i]-niz[j])<1) parovi++;
// zB3
if((niz[i]/10)-(niz[j]/10)==0) parovi++;
// zA3
// cout << "Unijeli ste " << parovi << " parova bliskih brojeva!" << endl;
// zB3
cout << "Unijeli ste " << parovi << " parova slicnih brojeva!" << endl;
system("pause");
return 0;
}

You might also like