PRIPREMA ZA KONTROLNI 3(PETLJE)
1. Ispisivanje brojeva
Brojevi koji su deljivi sa 4, a počev od -50 su: -48,-44,-40,-36,...0,4,8,...88
Uočimo sledeće: Prvi broj u nizu je -48, svaki 4. počev od tog broja je takođe deljiv sa 4
Upotrebite for petlju i namestite da se kontrolna promenljiva "i" menja, tako da početna vrednost bude -48, a da kroz cikluse raste svaki put za 4. Štampati vrednost i unutar ciklusa for.
#include < iostream >
using namespace std ;
int main()
{
for (int i = -48; i<90; i = i + 4)
{
cout << i << " ";
}
return 0;
}
package ispisanje.brojeva.deljivih.sa.pkg4;
public class IspisanjeBrojevaDeljivihSa4 {
public static void main(String[] args) {
for (int i = -48; i < 90; i = i + 4) {
System.out.print(i + " ");
2. Ispisivanje brojeva unazad od nekog zadatog broja N
Zadatak se rešava upotrebom petlji
Prvo se učita N
Početna vrednost kontrolne promenljive "i" se postavi da bude jednaka N
Upotrebite for petlju i namestite da se kontrolna promenljiva "i" menja, tako da početna vrednost bude N, a da kroz cikluse smanjuje za 1. Za uslov postaviti uslov da vrednosti budu pozitivne.
Unutar petlje proveravati da li je "i" neparan broj(if). Ako jeste štampati "i"
Zadatak može da se reši i na drugi način. Da se prvo proveri da li je N neparno. Ako nije smanjiti za 1 da bi dobili prvi manji neparan broj. Onda se stavi taj broj za početnu vrednost "i". Kao i u prvom načinu "i" se tokom ciklusa smanjuje za dva, tako da će sve vrednosti "i" biti neparne. Zbog toga, unutar tela petlje nije potrebna provera, da li je "i" neparan broj, dakle, nema if narebe.
#include < iostream >
using namespace std ;
int main()
{
int cin >> N;
//i se menja počev od N pa se smanjuje u svakom ciklusu za 2
for (int i = N; i>0; i--)
{
//Ako je neparan broj
if( i % 2 != 0){
cout << i << " ";
}
}
return 0;
}
3. Formiranje zbira učitavanih brojeva
Primer:
Ulaz
4
3
5
6
7
Izlaz:
21
Objašnjenje: Prvi učitani broj je 4. Toliko dalje treba učitati brojeva i sabrati ih. Dakle zbir=3+5+6+7.
Zadatak se rešava upotrebom for petlje. Kontrolnu promenljivu "i" inicijalizujemo na 1, kao uslov stavite da i bude manje od N, a za korak promene "i" vrednost 1. Na ovaj način je obezbeđeno N ciklusa
Kreiramo promenljivu zbir i damo joj početnu vrednost nula. Ovo uraditi pre for naredbe
Unutar ciklusa napišemo formulu koja treba da do tada formiranom zbiru doda novo učitanu vrednost nešto kao zbir=zbir + broj
Po izlazu iz petlje štampati zbir.
#include < iostream >
#include < ios >
using namespace std ;
int main()
{
int x,N;
int zbir=0;//Kreira zbir i inicijalizuje na nulu
cin >> N;
//Kreira for ciklus sa N ponavljanja
for(int i = 1; i <= N; i++)
{
cin >> x;//Učitava novi broj u svakom ciklusu
zbir = zbir + x;//Dodaje učitani broj u zbir. Prethodno sabrano se uveća za novo učitani broj
}
cout << zbir << endl;//Štampa zbir return 0;
}
4. Određivanje maksimuma
Primer:
Ulaz
4
-2
8
2
3
Izlaz:
8
Zadatak se rešava upotrebom for petlje. Kontrolnu promenljivu "i" inicijalizujemo na 1, kao uslov stavite da i bude manje od N, a za korak promene "i" vrednost 1. Na ovaj način je obezbeđeno N ciklusa
Kreiramo promenljivu maksimum
Unutar ciklusa prvo učitamo broj x
Sledeće unutar ciklusa proverimo da li je reč o prvom ciklusu(kada je i=1)
Ako jeste postavimo maksimum na vrednost prvog učitanog broja x
Vršimo još jednu proveru u telu ciklusa a to je da li je novoučitani broj veći od trenutnog maksimuma
Ako jeste postavimo maksimum na vrednost novog učitanog broja x. Ako nije prelazi se u sledeći ciklus bez promene maksimuma
U prvom ciklusu ova provera sigurno ne prolazi jer su novoučitani broj x i trenutni maksimum isti tj. jednaki x
2 način
Drugi način za rešavaje bi bio da pre for petlje zadamo za maksimum neki broj koji će sigurno biti manji od svih učitanih brojeva. Npr ako znamo da su mogući brojevi od -100 do 100, onda bi mogli za početni maksimum postavimo -100
Unutar for ciklusa bi onda bila samo druga provera tj. da li je učitan broj veći od trenutnog maksimuma i ako jeste promenila bi se vrednost maksimuma da bude jednaka novoučitanom broju
#include < iostream >
#include < ios >
using namespace std ;
int main()
{
int x,N;
int max;
cin >> N;
//Kreira for ciklus sa N ponavljanja
for(int i = 1; i <= N; i++)
{
cin >> x;//Učitava novi broj u svakom ciklusu
//Ako je prvi ciklus
if(i == 1)
max = x;//Maxsimum je učitani broj
//U svakom sledećem ponavljanju se proverava
// da li je novoučitani broj veći od trenutnog maksimuma
if(x > max){
max=x;//Ako jeste taj broj postaje maksimum
}
}
cout << max << endl;//Štampa maksimum return 0;
}
5. Formiranje zbira brojeva kroz cikluse
Zadatak se rešava upotrebom do-while petlje jer moramo da ostvarimo bar jedno učitavanje, ctrl + Z, znak sa kojim prekidamo učitavanje
kreiramo promenljivu zbir i damo joj početnu vrednost nula
Unutar ciklusa napišemo formulu koja treba da do tada formiranom zbiru doda novo učitanu vrednost nešto kao zbir=zbir + broj
Unutar ciklusa ova formula mora biti pod if naredbom, da bi se proverio uslov da li je u;itani karakter različit od "ctrl + z"
Ovo takođe treba da bude i uslov do-while petlje
#include < iostream >
#include < ios >
using namespace std ;
int main()
{
int zbir = 0;
int x;
do
{
cin >> x; //Učitava novi broj
//Ako nije učitan karakter ctrl+Z
if(!cin.eof())
zbir=zbir+x; //Dodaje učitani broj u zbir
}
while(!cin.eof()); /*Ako nije učitan karakter ctrl+Z
ide u sledeći ciklus*/
cout << zbir << endl;
return 0;
}
package sabiranjebrojevaucitanihsatastature;
import java.util.Scanner;
public class SabiranjeBrojevaUcitanihSaTastature {
public static void main(String[] args) {
int a, s = 0;
Scanner ucitavac = new Scanner(System.in);
do {
System.out.println("Unesi broj");
a = ucitavac.nextInt();
s = s + a;
} while (ucitavac.hasNextInt());
System.out.println("s= " + s);
}
}
6. Geometrijska serija
Ulaz
Sa standardnog ulaza se učitavaju prirodni brojevi a (1≤a≤50) i b (a≤b≤10000 ) svaki u posebnom redu.
Izlaz
Na standardnom izlazu ispisuju se svi traženi brojevi, redom (od najmanjeg do najvećeg). Svaki broj ispisati u posebnoj liniji.
Primer
Ulaz
5
50
Izlaz
5
15
45
Učitamo granice intervala a i b. Uvedemo promenjljivu npr. x i inicijalizujemo da u početku bude jednaka prvom prirodnom broju a. U petlji se u svakoj iteraciji ovaj broj pomnoži sa 3: x=3*x. Pošto ne znamo unapred koliko će biti ciklusa, povoljnije ovde koristiti while petlju nego for. Uslov je da x bude manje od b.Unutar petlje ispisati dobijeno x pre nego što se pomnoži sa 3.
#include < iostream >
using namespace std ;
int main()
{
int a,b;
cin >> a >> b;
int x=a;
while(x<=b)
{
cout << x << endl;
x=x*3;
}
return 0;
}
7. Podela intervala na jednake delove
Ulaz
Prva linija standardnog ulaza sadrži prirodan broj n (1<n≤20), druga linija sadrži realan broj a, a treća linija realan broj b, pri čemu je a<b.
Izlaz
Na standarnom izlazu prikazati, na pet decimala, redom tražene brojeve svaki u posebnoj liniji.
Primer
Ulaz
5
-1
1
Izlaz
-1.00000
-0.50000
0.00000
0.50000
1.00000
Učitamo broj realnih brojeva n, kao i granice intervala a i b. Uvedemo promenjljivu npr. x i inicijalizujemo da u početku bude jednaka prvom realnom broju a.Izračunamo rasojanje između susednih brojeva: d=(b-a)/(n-1). U petlji se u svakoj iteraciji tekući broj sabere sa izračunatom fiksnom razlikom dva susedna broja d. Pošto se zna unapred koliko će biti ciklusa,tj. ta vrednost je izračunata prethodno, povoljnije je ovde koristiti for petlju. Unutar petlje se ispisuje broj x i izračunava vrednost x za sledeću iteraciju.
#include < iostream >
#include < iomanip>
using namespace std ;
int main()
{
int n;
double a,b,x;
cin >> n >> a >> b;
double d=(b-a)/(n-1);
x=a;
for(int i=1; i<=n; i++)
{
cout << fixed << setprecision(5) << x << endl;
x=x+d;
}
return 0;
}
8. Maksimalna i minimalna temperatura
- maksimalnu i minimalnu temperaturu u tom periodu
- redni broj dana kada je bila maksimalna i redni broj dana kada je bila minimalna temperatura
- koliko je dana u tom periodu dostizana maksimalna temperatura
Prva linija standardnog ulaza sadrži prirodan broj n (1<n≤20), u ostalih n redova učitavaju se brojevi koji predstavljaju temperature za svaki od N dana u godini.
Izlaz
Na standarnom izlazu prikazati, maksimalnu temperaturu, minimalnu temperaturu, redni broj dana kada je dostignuta maksimalna temperatura, redni broj dana kada je dostignuta minimalna temperatura, koliko je dana u tom periodu dostizana maksimalna temperature, svaki broj u posebnoj liniji.
Primer
Ulaz
8
19 19 21 23 12 23 12 11
Izlaz
23
11
4
8
2
Učitamo broj dana očitavanja temperature N, a zatim koristeći for petlju učitavamo temperature. Da bi odredili najveću, pre ulaska u petlju inicijalizujemo početnu vrednost za maksimalnu temperaturu na neku veliku vrednost, koja je sigurno veća od stvarnog maksimuma, npr. na 1000. Unutar for petlje koristeći if naredbu ispitujemo da li je prethodno učitana temperatura u nekom tekućem ciklusu možda veća od trenutno zapamćenog maksimuma. Ako jeste onda treba postaviti nov maklsimum na tu vrednost. Ovo treba uraditi u telu if naredbe. Redni broj dana maksimalne vrednosti pamtimo takođe u telu if naredbe tj. kad postavljen uslov da je tekuća temperatura veća od dotadašnjeg maksimuma bude bio zadovoljen. Na sličan način treba odrediti i minimalnu temperaturu. Kao početnu vrednost sada treba staviti neku temperaturu koja je sigurno manja od minimalne. Ako je učitana temperatura manja od trenutno upamćenog minimuma onda treba upamtiti novu najmanju vrednost minimuma kao i redni broj dana. Brojanje ponovnog maksimuma treba uraditi ako bude zadovoljen uslov da je učitana temperatura jednaka trenutnom maksimumu. I tada celobrojnu promenljivu koja predstavlja broj maksimalnih temperatura treba povećati za 1 .
#include < iostream >
using namespace std ;
int main()
{
int N,rbMax=0,rbMin=0,br=0;
double T,minT=1000,maxT=-273;//Pretpostavimo da je maksimum najmanja moguća temperatura,
// a minimum najveća ili neka temperatura koja je veća od maksimalne
cin >> N;
for(int i = 0;i < N; i++){
cin >> T;
if(T > maxT){//Ako je učitana temperatura veća od trenutnog maksimuma ona postaje maksimum
maxT=T;
rbMax=i+1;//pamti redni broj dana kada je dosegnut ovaj maksimum temperature
br=1;
}
else if(T == maxT){//Ovo znači da se maksimalna vrednost ponavlja i broj maksimalnih temperatura povećavamo za 1
br++;
}
if(T < minT){
minT=T;
rbMin=i+1;
}
}
cout << maxT << endl;
cout << minT << endl;
cout << rbMax << endl;
cout << rbMin << endl;
cout << br << endl;
return 0;
}