MAPA ČASA
Od ideje do prvog C programa
1
program
2
podaci
3
promenljiva
4
pseudokod
5
C program
Na kraju je dovoljno da:
- Izdvoji poslednju cifru i ukloni je iz broja.
- Jednom petljom odredi više podataka o ciframa.
- Napravi broj sa obrnutim redosledom cifara.
- Prebroj delioce i proveri da li je broj prost.
- Sačuvaj originalan broj kada petlja menja njegovu kopiju.
- Nacrtaj dijagram toka za proveru prostog broja.
01 · KORAK
Poslednja cifra se izdvaja, pa uklanja
Za nenegativan ceo broj izraz broj % 10 daje poslednju cifru, a broj = broj / 10 uklanja tu cifru. Zato se cifre obrađuju zdesna nalevo.
do-while je koristan jer telo izvršava bar jednom. Tako i broj 0 pravilno ima jednu obrađenu cifru: nulu.
do {
cifra = broj % 10;
zbir = zbir + cifra;
broj = broj / 10;
} while (broj > 0);
Prati broj 3054Za svaki prolaz zapiši broj pre petlje, izdvojenu cifru, novi zbir i broj posle deljenja sa 10.
Petlja menja brojAko ti originalna vrednost kasnije ponovo treba, sačuvaj je pre petlje ili obradi kopiju.
02 · KORAK
Jedna cifra može da ažurira više rezultata
U istom prolazu možemo da povećamo zbir, pomnožimo proizvod, prebrojimo cifre koje ispunjavaju uslov i uporedimo trenutnu cifru sa dosadašnjim maksimumom.
Početne vrednosti imaju različite uloge: zbir i brojač počinju od 0, proizvod od 1, a najveća cifra od 0 kada je ulaz nenegativan.
zbir = zbir + cifra;
proizvod = proizvod * cifra;
if (cifra > najveca) {
najveca = cifra;
}
Odredi tri rezultataZa 5072 odredi zbir, proizvod i najveću cifru. Posebno objasni kako cifra 0 utiče na svaki rezultat.
Nula menja proizvodAko broj sadrži cifru 0, proizvod svih cifara postaje 0. To nije greška programa.
03 · KORAK
Obrnuti broj se gradi cifru po cifru
Množenje trenutnog rezultata sa 10 pomera njegove cifre jedno mesto ulevo. Zatim se nova cifra dodaje na mesto jedinica.
Ceo broj ne čuva vodeće nule. Zato obrtanje broja 1200 daje 21, a ne zapis 0021.
obrnuti = obrnuti * 10 + cifra;
Prati obrtanje 1204Napravi tabelu sa starim obrnutim brojem, izdvojenom cifrom i novim obrnutim brojem za svaki prolaz.
Sačuvaj original za palindromZa proveru palindroma sačuvaj original pre petlje, pa ga na kraju uporedi sa obrnutim brojem.
04 · KORAK
Kandidati za delioce proveravaju se jedan po jedan
Broj i je delilac broja n kada je ostatak n % i jednak 0. Jednostavno i pregledno rešenje prolazi kroz i od 1 do n i broji uspešne provere.
Prost broj je ceo broj veći ili jednak 2 koji ima tačno dva pozitivna delioca: 1 i samog sebe. Broj 1 zato nije prost.
int koliko = 0;
for (int i = 1; i <= n; i++) {
if (n % i == 0) {
koliko++;
}
}
Uporedi 6 i 7Napiši delioce brojeva 6 i 7, izračunaj koliko za oba broja i zaključi koji je prost.
Granica menja završnu proveruAko petlja ide do i <= n, prost broj ima dva pronađena delioca. Ako bi namerno stala pre n, završno pravilo više ne bi bilo koliko == 2.
05 · KORAK
Provera prostog broja ima jasan redosled
Najpre odbacujemo n < 2. Zatim postavljamo brojač, prolazimo kroz kandidate i povećavamo brojač samo kada pronađemo delilac.
Tek posle petlje proveravamo konačan broj delilaca. Ispis unutar petlje dao bi delimičan, a ne konačan odgovor.
if (n < 2) {
printf("Nije prost\n");
return 0;
}
/* petlja koja prebrojava delioce */
if (koliko == 2) printf("Prost\n");
else printf("Nije prost\n");
Proveri 1, 2, 9 i 13Pre pokretanja napiši broj delilaca i očekivani ispis za sva četiri ulaza. Zatim nacrtaj dijagram toka celog algoritma.
Dobar skup proba ima granicu i obe graneProveri bar broj 1, najmanji prost broj 2, jedan složen broj i jedan veći prost broj.
06 · KORAK
Veći zadatak se deli na dve poznate petlje
Ako program prvo proverava da li je n prost, a zatim obrađuje njegove cifre, to nisu dva nova problema. Prva petlja broji delioce, druga prolazi kroz cifre.
Za obradu cifara koristi se kopija broja. Originalan n ostaje dostupan za odluku i objašnjenje rezultata.
kopija = n;
do {
cifra = kopija % 10;
/* ažuriraj traženi rezultat */
kopija = kopija / 10;
} while (kopija > 0);
Vežbaonica · Čas 06Prvo uradi zbir, proizvod i najveću cifru; zatim obrtanje broja i proveru prostog broja. Zadaci 7, 8 i 9 odgovaraju celim programima iz radne sveske: najmanja cifra, palindrom i savršen broj.
Ne piši sve odjednomNapiši i proveri jedan deo, zatim drugi, pa ih poveži promenljivama čije uloge možeš jasno da objasniš.
ZATVARANJE
Brza provera pre domaćeg
- Koja je razlika između algoritma i programa?
- Šta je ime, a šta vrednost promenljive?
- Kako svojim rečima čitaš x = x + 1?
- Koji red prvog programa računa, a koji prikazuje rezultat?