Posle časa 02

Algoritam, dijagram i unos u C-u

Odgovor treba da pokaže postupak: redosled koraka, izbor simbola ili razlog za ispravku koda. Zadatke iz Vežbaonice pokreni tek kada možeš da predvidiš šta program treba da uradi.

Objasni razliku između algoritma, pseudokoda, dijagrama toka i C programa. Za svaki napiši čemu služi i po čemu se razlikuje od ostala tri.

Mali trag

Algoritam je ideja i redosled; preostala tri su različiti načini da tu ideju predstavimo ili izvršimo.

Pogledaj rešenje

Algoritam je precizan redosled koraka. Pseudokod ga zapisuje rečima i dodelama bez stroge sintakse jezika. Dijagram toka prikazuje iste korake standardnim simbolima i strelicama. C program je izvršiv zapis koji mora da poštuje sintaksu C-a.

Poređaj sledeće korake i objasni zašto promenljiva privremeno mora da se upotrebi pre nego što promenimo a: prikaži a i b; a ← b; unesi a i b; privremeno ← a; b ← privremeno.

Mali trag

Sačuvaj staro a pre nego što ga prepišeš vrednošću b.

Pogledaj rešenje

unesi a i b; privremeno ← a; a ← b; b ← privremeno; prikaži a i b. Ako prvo uradimo a ← b, stara vrednost a više nije dostupna za upis u b.

Za svaki korak napiši simbol dijagrama toka: POČETAK; unesi ukupno; minuti ← ukupno / 60; da li je broj paran?; prikaži rezultat; KRAJ. Uz svaki izbor napiši jednu kratku rečenicu zašto.

Mali trag

Oval je granica algoritma, paralelogram razmena podataka, pravougaonik obrada, romb odluka.

Pogledaj rešenje

POČETAK i KRAJ — oval; unesi ukupno i prikaži rezultat — paralelogram; minuti ← ukupno / 60 — pravougaonik; da li je broj paran — romb.

Napiši dijagram za razlaganje ukupnih sekundi na minute i sekunde u obliku: SIMBOL: sadržaj → SIMBOL: sadržaj. Uključi početak, unos, oba računa, ispis i kraj.

Mali trag

Potrebna su dva pravougaonika: jedan sa / 60 i jedan sa % 60.

Pogledaj rešenje

OVAL: POČETAK → PARALELOGRAM: unesi ukupno → PRAVOUGAONIK: minuti ← ukupno / 60 → PRAVOUGAONIK: sekunde ← ukupno % 60 → PARALELOGRAM: prikaži minute i sekunde → OVAL: KRAJ.

Program treba da učita dva cela broja. Pronađi i ispravi sve greške, a zatim objasni ulogu svakog ispravljenog dela.

int a, b
scanf("%f %d", a, &b);
Mali trag

Proveri kraj deklaracije, format prvog podatka i adresu prve promenljive.

Pogledaj rešenje

int a, b; scanf("%d %d", &a, &b); Nedostajala je tačka-zarez, %f nije format za int, a a je moralo da bude prosleđeno kao &a.

Objasni šta scanf treba da promeni u memoriji i zašto scanf("%d", broj) nije isto što i scanf("%d", &broj). Nemoj odgovoriti samo „jer tako mora“.

Mali trag

Funkciji nije dovoljna trenutna vrednost; potrebno joj je mesto na koje će upisati novu vrednost.

Pogledaj rešenje

broj predstavlja trenutnu vrednost promenljive, a &broj njenu adresu. scanf mora da dobije adresu da bi učitani podatak upisao u baš tu promenljivu.

Za ulaze 367, 420 i 59 odredi šta program ispisuje. Zatim za svaki slučaj proveri formulu minuti * 60 + sekunde = ukupno.

int ukupno, minuti, sekunde;
scanf("%d", &ukupno);
minuti = ukupno / 60;
sekunde = ukupno % 60;
printf("%d:%02d\n", minuti, sekunde);
Mali trag

/ daje pune grupe od 60, a % ono što ostane.

Pogledaj rešenje

367 → 6:07 i 6*60+7=367; 420 → 7:00 i 7*60+0=420; 59 → 0:59 i 0*60+59=59. %02d prikazuje sekunde u najmanje dve cifre.

Program za 3723 sekunde treba da prikaže 1 h 2 min 3 s, ali prikazuje 1 h 62 min 3 s. Pronađi pogrešnu ideju i napiši ispravne redove za ostatak, minute i sekunde.

sati = ukupno / 3600;
minuti = ukupno / 60;
sekunde = ukupno % 60;
Mali trag

Minute računaj iz onoga što ostane posle izdvajanja punih sati.

Pogledaj rešenje

ostatak = ukupno % 3600; minuti = ostatak / 60; sekunde = ostatak % 60; Direktno ukupno / 60 broji i minute koji pripadaju punom satu.

Izaberi četiri ulaza kojima bi proverila program za sate, minute i sekunde. Obavezno uključi granicu oko 60 i granicu oko 3600. Za svaki napiši očekivani izlaz i šta taj primer proverava.

Mali trag

Dobri granični primeri su neposredno ispod, tačno na i neposredno iznad granice.

Pogledaj rešenje

Jedan dobar skup je 59 → 0 h 0 min 59 s; 60 → 0 h 1 min 0 s; 3599 → 0 h 59 min 59 s; 3600 → 1 h 0 min 0 s. Mogući su i drugi pravilno objašnjeni granični testovi.

Napiši pseudokod koji učitava pozitivan ceo broj, izdvaja poslednju cifru i broj bez poslednje cifre, pa prikazuje oba rezultata. Objasni zašto su potrebni i / i %.

Mali trag

Poslednja cifra je ostatak pri deljenju sa 10.

Pogledaj rešenje

POČETAK; unesi broj; poslednja ← broj % 10; bez_poslednje ← broj / 10; prikaži bez_poslednje, poslednja; KRAJ. % čuva odbačenu cifru, a celobrojno / je uklanja iz broja.

Program treba da učita ukupan broj minuta i prikaže pune sate i preostale minute. Napiši ispravan program, a ispod njega navedi sve greške koje si popravila.

#include <stdio.h>

int main(void) {
    int ukupno
    scanf("%d", ukupno);
    int sati = ukupno % 60;
    int minuti = ukupno / 60;
    printf("%d h %d min\n", minuti, sati)
    return 0;
}
Mali trag

Proveri dve tačke-zareze, &, operatore i redosled promenljivih u printf-u.

Pogledaj rešenje

#include <stdio.h> int main(void) { int ukupno; scanf("%d", &ukupno); int sati = ukupno / 60; int minuti = ukupno % 60; printf("%d h %d min\n", sati, minuti); return 0; } Ispravke: dve tačke-zareze, &, zamena / i %, i promenljive u ispisu.

Otvori https://aip.zmenix.com/vezbaonica.php i uradi Čas 02 — zadatke 2, 4 i 6. U ovom polju za svaki napiši: koji ulaz si koristila, šta si očekivala, šta je program ispisao i koju si grešku morala da ispraviš.

Mali trag

Zadaci su označeni brojevima unutar grupe Čas 02.

Pogledaj rešenje

Rešenje zavisi od izabranih testova. Zadatak 2 menja a i b uz pomoćnu promenljivu; zadatak 4 popravlja unos i računanje vremena; zadatak 6 razlaže broj na cifre pomoću / i %.

Ako ti je neko pitanje bilo teško, pošalji mi samo njegov broj i proći ćemo ga na sledećem času.