MAPA ČASA
Problem → algoritam → dijagram → C program → provera
1
problem
2
pseudokod
3
dijagram
4
C program
5
provera
Na kraju je dovoljno da:
- Napiši jasan redosled koraka i predstavi ga pseudokodom ili dijagramom toka.
- Prepoznaj simbole za početak/kraj, ulaz/izlaz, obradu i odluku.
- Objasni uloge scanf, %d i znaka & pri unosu celog broja.
- Koristi celobrojno deljenje i ostatak pri deljenju u algoritmu.
- Pronađi sintaksnu ili logičku grešku i obrazloži ispravku.
01 · KORAK
Algoritam je plan rešenja
Pre pisanja koda odredimo koje podatke program dobija, koje korake izvršava i šta prikazuje. Algoritam je konačan, precizan redosled koraka koji vodi od ulaza do rezultata.
Isti algoritam možemo zapisati običnim rečima, pseudokodom ili dijagramom toka. C program je taj plan preveden na pravila programskog jezika.
POČETAK
unesi a, b
privremeno ← a
a ← b
b ← privremeno
prikaži a, b
KRAJ
Proveri plan pre kodaZa a = 4 i b = 9 prati svaki korak zamene. Posle algoritma a mora da bude 9, a b mora da bude 4.
Zašto je potrebna pomoćna promenljivaAko odmah uradimo a ← b, stara vrednost a nestaje. Promenljiva privremeno je čuva dok ne završimo zamenu.
02 · KORAK
Svaki simbol dijagrama ima posao
Oval označava početak ili kraj. Paralelogram koristimo za unos i ispis. Pravougaonik sadrži obradu ili dodelu, a romb pitanje čiji odgovor bira putanju.
Strelice pokazuju tačan redosled. U ovom času crtamo sekvencijalne algoritme; romb ćemo koristiti kada uvedemo if/else.
Nacrtaj zamenu dve vrednostiPretvori pseudokod iz prethodnog koraka u dijagram toka. Svaku dodelu stavi u poseban pravougaonik, a unos i ispis u paralelograme.
Greška koja se često vidi na ispituDodela nije ulaz, pa ne ide u paralelogram. Provera uslova nije obrada, pa ide u romb.
03 · KORAK
Program dobija podatak pomoću scanf
printf prikazuje podatke, a scanf ih učitava sa tastature. Format %d govori da očekujemo ceo broj tipa int.
Znak & ispred imena promenljive daje mesto u memoriji na koje scanf treba da upiše učitanu vrednost.
int broj;
printf("Unesi ceo broj: ");
scanf("%d", &broj);
printf("Unela si %d.\n", broj);
Pročitaj red bez preskakanjaZa scanf("%d", &broj); reci koji tip podatka očekujemo, u koju promenljivu ga upisujemo i zašto ispred njenog imena stoji &.
Najčešća početnička greškascanf("%d", broj) nema adresu na koju treba da upiše podatak. Za običnu int promenljivu pišemo &broj.
04 · KORAK
/ daje količnik, % daje ostatak
Kada su oba operanda tipa int, / daje broj celih grupa, a % ono što nije stalo u te grupe.
Ako imamo 29 flaša i paket prima 6, 29 / 6 daje 4 puna paketa, a 29 % 6 daje 5 preostalih flaša.
int flase = 29;
int paketi = flase / 6;
int visak = flase % 6;
Promeni podatakZa 36 flaša predvidi pakete i višak, zatim ponovi za 38. Objasni koja promenljiva odgovara na pitanje „koliko punih grupa“, a koja na pitanje „šta je ostalo“.
Važno za int7 / 2 nije 3.5 kada su oba broja int; rezultat je 3. Ostatak 7 % 2 je 1.
05 · KORAK
Ukupni minuti kao algoritam
Program učitava ukupno trajanje u minutima i razlaže ga na pune sate i preostale minute.
Deljenje sa 60 daje pune sate, a ostatak pri deljenju sa 60 minute koje ne čine ceo sat.
POČETAK
unesi ukupno_minuta
sati ← ukupno_minuta / 60
minuti ← ukupno_minuta % 60
prikaži sati, minuti
KRAJ
Nacrtaj dijagram tokaNacrtaj početak, unos ukupno_minuta, dve obrade, ispis i kraj. Za ulaz 143 uz dijagram zapiši očekivani izlaz 2 h 23 min.
Ista dva operatora, različiti poslovi/ 60 izdvaja pune sate, a % 60 preostale minute. Nijedan od ta dva rezultata sam ne daje celu informaciju.
06 · KORAK
Isti algoritam preveden u C
Pseudokod i C program imaju isti redosled. Razlika je u tome što C zahteva tipove, tačke-zareze, tačnu sintaksu poziva funkcija i format ispisa.
Kod čitamo po ulogama: deklaracije, unos, obrada, ispis i završetak programa.
#include <stdio.h>
int main(void) {
int ukupno_minuta, sati, minuti;
scanf("%d", &ukupno_minuta);
sati = ukupno_minuta / 60;
minuti = ukupno_minuta % 60;
printf("%d h %d min\n", sati, minuti);
return 0;
}
Poveži plan i kodPronađi C red koji odgovara svakom redu pseudokoda. Zatim za ulaze 59, 60 i 143 predvidi izlaz pre pokretanja.
Ne uči program napametAko umeš da objasniš ulaz, dve obrade i ispis, isti obrazac možeš da primeniš na novi problem.
07 · KORAK
Greška može biti u zapisu ili u ideji
Sintaksna greška krši pravila C-a: nedostaje ;, navodnik ili &. Logička greška prolazi kompajler, ali algoritam daje pogrešan rezultat.
Kod pregledaš redom: ulaz, promenljive, redosled obrade, operatori, ispis. Menjaj jednu stvar, pa ponovo proveri.
int ukupno;
scanf("%d", ukupno);
int sati = ukupno % 60;
int minuti = ukupno / 60;
Ne popravljaj naslepoZa svaki pogrešan red reci prvo šta je namera, zatim zašto trenutni zapis ne radi i tek onda napiši ispravku.
Dve vrste dokazaPoruka kompajlera pomaže kod sintaksne greške. Logičku grešku otkrivaš poređenjem sa izlazom koji si predvidela za konkretan ulaz.
08 · KORAK
Dodatni problemi u Vežbaonici
Zadaci 7–10 koriste iste ideje u novim problemima koji nisu prepisani iz radne sveske.
Tu rešavaš pakovanje flaša, vreme završetka filma, pomeranje tri vrednosti i rastavljanje kusura.
Redosled za radPočni zadacima 7, 8 i 9. Zadatak 10 je dodatni izazov kada prethodna tri možeš da objasniš bez gledanja rešenja.
Domaći ostaje odvojenDomaći na sajtu i dalje koristi zadatke 2, 4 i 6. Vežbaonica 7–10 služi za dodatni rad na času.
ZATVARANJE
Završna provera bez gledanja
- Koja je razlika između algoritma, pseudokoda, dijagrama toka i C programa?
- Koji simbol dijagrama koristiš za unos, a koji za računanje?
- Zašto scanf("%d", &broj) koristi &broj?
- Kako pomoću / i % nalaziš broj punih grupa i ono što je preostalo?
- Kako bi algoritam za pravougaonik prevela iz pseudokoda u C?