uvod u programiranje n.
Download
Skip this Video
Loading SlideShow in 5 Seconds..
Uvod u programiranje PowerPoint Presentation
Download Presentation
Uvod u programiranje

Loading in 2 Seconds...

play fullscreen
1 / 118

Uvod u programiranje - PowerPoint PPT Presentation


  • 364 Views
  • Uploaded on

Uvod u programiranje. Algoritam. Precizno opisan način rješenja nekog problema Jednoznačno određ uje što treba napraviti Moraju biti definirani početni objekti koji pripadaju nekoj klasi objekata na kojima se obavljaju operacije

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about 'Uvod u programiranje' - aira


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
algoritam
Algoritam
  • Precizno opisan način rješenja nekog problema
  • Jednoznačno određuje što treba napraviti
  • Moraju biti definirani početni objekti koji pripadaju nekoj klasi objekata na kojima se obavljaju operacije
  • Kao ishod algoritma pojavi se završni objekt(i) ili rezultat(i).
  • Konačni broj koraka; svaki korak opisan instrukcijom
  • Obavljanje je algoritamski proces
primjer a lgorit ma kiseljenje krastavaca
Primjer algoritma – kiseljenje krastavaca
  • Početni objekti:
    • 5 kg krastavaca, 1 l alkoholnog octa (9%), 30 dag šećera, 10 dag soli, kopar, papar
  • Krastavce i kopar oprati i posložiti u čiste staklenke
  • U 2 l vode dodati ocat, šećer, sol i papar
  • Zakuhati uz miješanje
  • Vruću otopinu uliti u staklenke
  • Staklenke zatvoriti celofanom i gumicom
  • Složiti staklenke u široki lonac napunjen vodom do grla staklenki
  • Zagrijati vodu do 80 stupnjeva. Ako toplomjer nije raspoloživ, zagrijavati dok se s dna ne počnu dizati mjehurići zraka
  • Staklenke izvaditi, obrisati i složiti na police u smočnicu
  • Prije kušanja pričekati bar 24 sata
  • Završni objekti:
    • kiseli krastavci
primjer a lgorit ma ru no zbrajanje dvaju vi eznamenkastih dekadskih brojeva
Primjer algoritma – ručno zbrajanje dvaju višeznamenkastih dekadskih brojeva
  • Početni objekti:
    • 2 pribrojnika
  • Napisati dekadske brojeva tako da znamenke jedinica budu potpisane jedna ispod druge, znamenke desetica i sve ostale znamenke također. Ako u manjem broju ne postoji znamenka koje u većem ima, zamisliti da na tom mjestu piše 0.
  • Zamisliti broj koji ćemo nazvati prijenos, i postaviti ga na vrijednost 0
  • Za svako težinsko mjesto, krenuvši s desna na lijevo, učiniti
    • Zbrojiti dvije odgovarajuće znamenke i prijenos
    • Na odgovarajuće težinsko mjesto rezultata upisati znamenku jedinica tako dobivene sume
    • Broju prijenos dodijeliti vrijednost znamenke desetica tako dobivene sume
  • Ako je prijenos > 0, upisati ga ispred rezultata
  • Završni objekt:
    • zbroj
algoritam1
Algoritam
  • Instrukcije moraju biti izvedive i jednoznačne
  • Primjeri za nedopuštene instrukcije:
    • izračunaj 5/0
    • uvećaj x za 6 ili 7
  • Učinkovitost:
    • U konačnom vremenu može se dobiti rezultat koristeći olovku i papir.
  • Primjeri:
    • Zbrajanje cijelih brojeva je učinkovito
    • Dijeljenje realnih brojeva nije jer se može pojaviti broj s beskonačno mnogo znamenki, npr. 10/3 = 3.3333333...
      • Algoritam postaje učinkovit tek ako se broj znamenki unaprijed ograniči
algoritam2
Algoritam
  • Algoritam je uporabljiv ako se dobije rezultat u konačnom vremenu
  • Vrijeme izvođenja mora biti "razumno"

Primjer:Algoritam koji bi izabirao potez igrača šaha tako da ispita sve moguće posljedice poteza, zahtijevao bi milijarde godina na najbržem zamislivom računalu. Zašto?

    • 20 mogućih prvih poteza bijelog
    • 20 mogućih prvih poteza crnog
    • > 20 mogućih drugih poteza bijelog
    • > 20 mogućih drugih poteza crnog itd...
  • Za 10 poteza svakog igrača, barem 2020 kombinacija ~ 1026
  • Kad bi se 1 kombinacija analizirala 1 µs, to je 3170979198376 godina!
procedura
Procedura
  • Postupak koji ima sva svojstva kao i algoritam, ali ne mora završiti u konačnom broju koraka jest računalna procedura.
  • Primjeri za proceduru:
    • Operacijski sustav računala
    • Uređivač teksta

Procedura

Algoritam

algoritmi i programi
Algoritmi i programi
  • Program - opis algoritma koji u nekom programskom jeziku jednoznačno određuje što računalo treba napraviti.
  • Programiranje – proces opisivanja algoritma nekim od programskih jezika
  • Algoritmi + strukture podataka = PROGRAMI (Wirth)
    • kako osmisliti algoritme
    • kako strukturirati podatke
    • kako formulirati algoritme
    • kako verificirati korektnost algoritama
    • kako analizirati algoritme
    • kako provjeriti (testirati) program
  • Postupci izrade algoritama nisu jednoznačni te zahtijevaju i kreativnost. Inače bi već postojali generatori algoritama. Znači da se (za sada?) gradivo ovog predmeta ne može u potpunosti algoritmizirati. Koristit će se programski jezik C. Za sažeti opis složenijih algoritama može se koristiti pseudokod.
vrste programske podr ke
Vrste programske podrške
  • Sistemska programska podrška
    • Operacijski sustavi MS-DOS, UNIX, Linux, Windows 95, Windows 98, Windows NT, Windows 2000
    • Mrežni programi (NFS, TCP/IP)
    • Antivirus programi (McAffie, Sophos)
  • Aplikativna (namjenska, primijenjena)
    • Rješava probleme specifične za neku struku
    • Tablični kalkulatori (npr. Excel), uređivači teksta (npr. Word), mrežno planiranje (npr. Project)...
r edoslijed rje avanja manjih programa
Redoslijed rješavanja manjih programa
  • Uočavanje (identifikacija) problema i postavljanje programskog zadatka
  • Oblikovanje programa (razvoj algoritma)
  • Konverzija algoritma u logiku razumljivu računalu
  • Kodiranje (programiranje u užem smislu)
  • Upis programskog koda u računalo
  • Prevođenje (kompilacija) programa
  • Ispravljanje formalnih pogrešaka
  • Kolekcija programa (stvaranje izvršnog programa)
  • Izvođenje programa s test podacima
  • Popravljanje uočenih logičkih pogrešaka
  • Korištenje programa s aktuelnim podacima
oblikovanje ve ih programa
Oblikovanje većih programa
  • Organizacija posla (tima)
  • Primjena prikladne metodologije
    • Pristup odozgo na dolje (top-down)
    • Pristup odozdo prema gore (bottom-up)
  • Izbor programerskih pomagala
    • Prikazi tokova informacija
    • Tablice odlučivanja
    • Dijagrami toka
    • Struktogrami
    • Pseudokodiranje
o blikovanje ve ih programa
Oblikovanje većih programa
  • Prikupljanje i prikaz ulaznih specifikacija i potrebnih izlaznih izvještaja
  • Izrada programske dokumentacije
    • Dokumentacija o svakoj fazi razvoja
    • Programska dokumentacija
    • Komentari u kodu
  • Verifikacija svake faze oblikovanja
programiranje u u em smislu
Programiranje u užem smislu
  • Izbor programskog jezika
    • FORTRAN
    • PASCAL
    • C
    • C++
    • Visual Basic
    • Java
    • 4GL (4th Generation Language)
  • Kodiranje
    • Kodne liste
    • Translatori pseudokoda u kod
    • Pretprocesori
    • Generatori kôda
programiranje u u em smislu1
Programiranje u užem smislu
  • Unos izvornog programa (source code)
    • ASCII uređivač teksta (EDIT, vi)
    • Uređivač teksta ugrađen u radnu okolinu programera
  • Prevođenje izvornog programa u relokatibilni program
    • Poziv prevodioca (compiler)
    • Otkrivanje pravopisnih pogrešaka (sintax errors)
    • Ispravci izvornog koda i ponovno prevođenje
programiranje u u em smislu2
Programiranje u užem smislu
  • Kolekcija prevedenog programa u izvršni (apsolutni) program
    • Poziv kolektora (LINK)
    • Potprogramske biblioteke

(stdio.h, math.h, stdlib.h, string.h)

    • Pogreške koje otkriva kolektor
  • Izvođenje izvršnog programa
    • Zadavanje potrebnih ulaznih podataka
    • Provjera programa na osnovi test podataka
    • Pogreške koje se otkrivaju prilikom izvršenja (run time errors)
    • Logičke pogreške
primjer
PRIMJER
  • Programski zadatak

pronaći najveći od tri zadana broja

  • Pseudokod koji koristi isključivo termine govornog jezika

pročitaj tri realna broja

ispiši pročitane brojeve

odredi najveći broj

ispiši nađeni broj

primjer nastavak
PRIMJER - nastavak
  • Pseudokod koji koristi uobičajene simbole

pročitaj (x,y,z)

ispiši (x,y,z)

{odredi najveći broj}

ako je x > y tada

ako je x > z tada

rez := x

inače

rez := z

inače

ako je y > z tada

rez := y

inače

rez := z

ispiši (rez)

kraj

primjer nastavak1
PRIMJER - nastavak
  • Unapređenje prethodnog rješenja

pročitaj (x,y,z)

ispiši (x,y,z)

{odredi najveći broj}

rez := z

ako je x > y tada

ako je x > z tada

rez := x

inače

ako je y > z tada

rez := y

ispiši (rez)

kraj

primjer nastavak2
PRIMJER - nastavak

po

četak

pro

čitaj x,y,z

ispiši x, y, z

rez := z

ne

x > y

da

y > z

x > z

da

ne

da

ne

rez := y

-

rez := x

-

ispiši rez

kraj

  • Struktogram
primjer nastavak3
PRIMJER - nastavak
  • Kôd u programskom jeziku C

#include <stdio.h>

void main() {

float x, y, z, rez;

scanf("%f %f %f", &x, &y, &z);

printf("%f %f %f \n", x, y, z);

/* odredi najveći broj */

rez = z;

if ( x > y ){

if ( x > z) rez = x;

}else{

if ( y > z) rez = y;

}

printf("%f \n", rez);

}

op a pravila pisanja c programa
Opća pravila pisanja C programa
  • C je jezik slobodnog formata (nema pravila koja propisuju stil pisanja)
  • mjesto početka naredbe u retku je proizvoljno
  • moguće i poželjno umetanje praznina i praznih redova
  • svaka izvršna naredba mora završavati znakom ;
  • dopušteno je stavljanje više naredbi u istom retku. Npr:

int i,n; printf("Unesite n: "); scanf("%d", &n);

klju ne rije i
Ključne riječi
  • ključne riječi se pišu malim slovima. Npr:

do

for

while

  • C razlikuje velika i mala slova. Npr:

sum

Sum

SUM

glavna funkcija main
Glavna funkcija - main

ili

  • int main() {
  • programski blok
  • return 0;
  • }
  • u C programu mora postojati glavna (main) funkcija koja predstavlja mjesto gdje počinje izvršenje programa:
  • void main()
  • { programski blok
  • }
struktura c programa
Struktura C programa

/* Racunanje sume el. polja */ komentar

#include <stdio.h> direktive pretprocesoru #define MAX 5

float suma (int n); deklaracija glob.varijabli float dat[MAX]={2.5,2.3,0.,1.,5.};

void main() početak glavne funkcije

{ poč. bloka main funkcije

int n; deklar. lokalnih varijabli

float sum;

printf("Unesi broj elemenata");

scanf("%d", &n); tijelo programa

sum = suma(n);

printf("%9.2f\n", sum);

} kraj bloka main funkcije

struktura c potprograma
Struktura C potprograma

float suma(int n) početak bloka funkcije suma

{ početak bloka suma

int i; dekl. lokalnih varijabli

float s = 0;

for(i=0; i<n; i++)

s += dat[i]; tijelo funkcije suma

return s;

} kraj bloka suma

komentari
Komentari
  • mogu se protezati preko više linija
  • izbjegavati komentar oblika: printf("Unesi n: ");/* Ispis na zaslonu */ zato što program postaje nečitkiji
  • nije dopušteno koristiti komentar unutar komentara: /* definicija /* funkcije */ sume */
klju ne rije i1
Ključne riječi
  • Prema ANSI standardu C ima slijedeće 32 ključne riječi:

auto double int struct

break else long switch

case enum register typedef

char extern return union

const float short unsigned

continue for signed void

default goto sizeof volatile

do if static while

pretprocesorske naredbe
Pretprocesorske naredbe
  • #include <stdio.h> uključuje u program prije prevođenja standardno zaglavlje <stdio.h> koje sadrži definicije tipova i funkcijskih prototipova (na primjer printf, scanf i druge).
  • #define MAX 5 definira simboličku konstantu MAX i pridjeljuje joj vrijednost (npr. 5) što je veoma pogodno kod parametrizacije programa
varijable
Varijable
  • Općenito: promjenljiv podatak (lat.variabilis-promjenljiv)
  • U programiranju: podatak smješten u memoriji računala, poznate veličine, koji se može mijenjati i kojemu je dodijeljeno ime
  • Simbolički se prikazuje pravokutnikom uz koji stoji ime
  • Smještaj u memoriji računala

x

y

...

...

x

y

varijable1
Varijable
  • svaka varijabla se obavezno mora deklarirati prije korištenja

int i, n; float sum;

  • imena varijabli i funkcija su sastavljena od slova i brojki, a prvi znak mora biti slovo ili znak potcrtavanja _

suma god_rod x1 pripremni_dio_studija 94god novi+datum x1.1 maticni broj

  • velika i mala slova se razlikuju (imena varijabli i funkcija se obično pišu malim slovom, imena simboličkih varijabli velikim)
  • duljina može biti proizvoljna (značajno prvih 31 znakova)
  • ključne riječi se ne smiju koristiti za imena varijabli ili funkcija
osnovni tipovi podataka i prefiksi
Osnovni tipovi podataka i prefiksi
  • Osnovni tipovi podataka

char - znakovni tip ili mali cijeli broj

int - cjelobrojni tip

float - realni tip

double - realni tip u dvostrukoj preciznosti

  • Prefiksi ili kvalifikatori

short - smanuje raspon cjelobrojnih vrijednosti koje varijabla može sadržavati

long - povećava raspon cjelobrojnihvrijednosti koje varijabla može sadržavati

signed - dozvoljava pridruživanje pozitivnih i negativnih vrijednosti

unsigned - dozvoljava pridruživanje samo pozitivnih vrijednosti

cjelobrojne konstante
Cjelobrojne konstante
  • Konstante pisane u dekadskoj notaciji:

7 20 64 -110 8092 6553534567821

34567821L -17698794l (na starim prevodiocima)

  • Konstante pisane u oktalnoj notaciji:

07 024 0100 0156 017634 0177777

  • Konstante pisane u heksadecimalnoj notaciji

0x7 0x14 0x40 0x6E 0x1F9C 0xFFFF0xFFFFFFFF

  • Konstante bez predznaka pišu se sU ili u na kraju

5645U 3978u 0x7EBU 0xFFFFFFFFU

realne konstante
Realne konstante

1. 2.34 9e-8 8.345e+25 double

2f 2.34F -1.34e5f float

1.L 2.34L -2.5e-37L long double

operatori i izrazi
Operatori i izrazi

1

k 5

6

  • Pridruživanje vrijednosti: u pseudokodu simbol := postaje u C-u simbol =npr. a := 7 a = 7;
  • Što znači naredba ? k = k + 1;
slide36

Primjer pridruživanja: Zadano je X=14.5 i Y= -9.9 . U programu treba ispisati vrijednosti X i Y, a zatim u X staviti vrijednost od Y, a u Y staviti vrijednost od X. Ispisati ponovo X i Y.

ZamjenaVarijabli

void main () {

float x, y, p;

x=14.5;

y= -9.9;

printf ("x=%f, y=%f\n", x, y);

/* zamijeniti vrijednosti x i y */

p=x;

x=y;

y=p;

printf ("Nakon zamjene: x=%f, y=%f\n", x, y);

}

ispis na zaslonu
Ispis na zaslonu

x=14.500000, y=-9.900000

Nakon zamjene: x=-9.900000, y=14.500000

osnovni aritmeti ki operatori
Osnovni aritmetički operatori

Operator Značenje

+ zbrajanje

- oduzimanje

* množenje

/ dijeljenje

% cjelobrojni ostatak (modulus)

djelovanje aritmeti kih operatora na cjelobrojne operande
Djelovanje aritmetičkih operatora na cjelobrojne operande

int a, b;

a = 10; b = 3;

Izraz Rezultat

a + b 13

a - b 7

a * b 30

a / b 3

a % b 1

djelovanje aritmeti kih operatora na realne operande
Djelovanje aritmetičkih operatora na realne operande

float a, b;

a = 12.5; b = 2.;

Izraz Rezultat

a + b 14.5

a - b 10.5

a * b 25.0

a / b 6.25

a % b pogreška

aritmetika s razli itim tipovima operanada
Aritmetika s različitim tipovima operanada

AritmetikaSRazlicitimOperandima

float r, f, g;

int i, j, k;

f = 32000.5; g = 1; i = 1; j = 2147483647;

Izraz Rezultat

r = f + i; 32001.5

k = f + g; 32001

k = f + i; 32001

r = i + j; -2147483648.0

r = g + j; 2147483648.0

Kako to da ima 10 točnih znamenaka?

eksplicitna promjena tipa operanda cast operator
Eksplicitna promjena tipa operanda (CAST operator)

Neka je vrijednost 32-bitnih int) varijabli:

i = 2147483647;

j = 1;

p = (float) i + j ;  p = 2147483648.0

r = (float) (i + j);  r =-2147483648.0

Kada su operandi različitog tipa, vrši se automatska pretvorba u veći (važniji) tip:

16-bitno računalo:

shortint  unsigned short int  long int  unsigned long int float  double  long double

32-bitno računalo:

short int  unsigned short int longint  unsigned longint  float  double  long double

prioritet osnovnih aritmeti kih operatora
Prioritet osnovnih aritmetičkih operatora

1. * / %

2. + -

Ako u izrazu ima više operatora jednakog prioriteta, izračunavaju se slijeva nadesno. Na primjer:

2 + 3 / 2 * 4 - 5 * 6 % 8

2 + 1 * 4 - 30 % 8

2 + 4 - 6

6 - 6

0

kori tenje okruglih zagrada
Korištenje okruglih zagrada

Koristiti okrugle zagrade ():

a) ako se želi promijeniti ugrađeni redoslijed

b) u slučaju vlastite nesigurnosti

c) radi bolje čitljivosti programa

2 + 3 / (2 * 4) - 5 * (6 % 8)  -28

slide45
Primjer: Učitati vrijednosti za cjelobrojne varijable I, J i K. Ispisati njihove vrijednosti i aritmetičku sredinu.

početak

deklariraj cijeli broj i, j, k

deklariraj realni broj sredin

pročitaj brojeve i, j i k

izračunaj (i + j + k) / 3

ispiši("Aritmetička sredina brojeva x, x i x iznosi x.xxxxxx", i, j, k, sredin);

svršetak

  • Struktogram
rje enje primjera u c u
Rješenje primjera u C-u

AritmetickaSredina

#include <stdio.h>

void main () {

int i, j, k;

float sredin;

scanf ("%d %d %d", &i, &j, &k);

sredin = (i + j + k) / 3.;

printf ("Aritmetička sredina brojeva %d, %d i"

" %d iznosi %f", i, j, k, sredin);

}

Način prekida znakovnog niza i nastavak u novom retku

rezultati testiranja programa
Rezultati testiranja programa

Ulazni podaci:

1 2 4

Ispis na zaslonu:

Aritmetička sredina brojeva 1, 2 i 4 iznosi 2.333333

primjer povr ina kruga
Primjer: Površina kruga
  • Pseudokod

početak

definiraj PI=3.14

realni broj radijus, povrsina

ispiši ("Zadajte radijus kruga. . . ")

učitajte (radijus)

povrsina = (radijus * radijus) * PI

ispiši ("Povrsina kruga radijusa x.xxx je x.xxx", radijus, povrsina)

kraj

primjer povr ina kruga1
Primjer: Površina kruga

PovrsinaKrugaJednostavna

#include <stdio.h>

/* primjer koristenja simbolickih konstanti */

#define PI3.14 /*definicija simbolicke konstante*/

void main ( ) {

float radijus, povrsina;

printf("Zadajte radijus kruga >");

scanf("%f", &radijus);

povrsina = (radijus * radijus) * PI;

printf("Povrsina kruga radijusa %.3f je %.3f\n", radijus, povrsina);

}

primjer dijeljenje dva cijela broja
Primjer: Dijeljenje dva cijela broja

Početak

cijeli broj x, y, rez

x = 8

y = 15

rez =10 + y / x

rez

Kraj

  • Dijagram toka
primjer dijeljenje dva cijela broja1
Primjer: Dijeljenje dva cijela broja

DijeljenjeDvaCijelaBroja

#include <stdio.h>

/* primjer zadavanja cjelobrojnih konstanti*/

void main ( ) {

int x, y, rez;

/*oktalno zadan cijeli broj*/

x = 010;

/*heksadecimalno zadan cijeli broj*/

y = 0xF;

rez = 10 + y / x;

printf("Rezultat = %d\n", rez);

}

rasponi razli itih tipova cijelih brojeva
Rasponi različitih tipova cijelih brojeva

Deklaracija Broj bita Interval brojeva

int 32 (16) [-2147483648, 2147483647]

signed int 32 (16) [-2147483648, 2147483647]

short 16 [-32768, 32767]

short int 16 [-32768, 32767]

signed short int 16 [-32768, 32767]

unsigned int 32 (16) [0U, 4294967295U]

unsigned short int16 [0U, 65535U]

long 32 [-2147483648, 2147483647]

long int 32 [-2147483648, 2147483647]

signed long int 32 [-2147483648, 2147483647]

unsigned long int 32 [0U, 4294967295U]

char z nakovni tip podataka
char - znakovni tip podataka
  • Pohrana malih cijelih brojeva sa ili bez predznaka
  • Pohrana slova, interpunkcija, posebnih znakova
  • Zauzima 1 byte.
  • Deklaracije u programskom jeziku C:

char[-128, 127]

unsigned char[0, 255]

  • Međunarodni standard: ASCII kod (American Standard Code for Information Interchange)
znakovne konstante
Znakovne konstante

'A' znak iz ASCII tablice

'\x41' heksadecimalni zapis slova A

'\101' oktalni zapis slova A

'\a' simbolički zapis za znakove koji se ne mogu tiskati (Escape-sekvenca)

'\\' znak \ ("backslash")

'\'' jednostruki navodnik

'\"' dvostruki navodnik

primjer ispisati neke znakove ascii tablice kao broj i kao znak
Primjer: Ispisati neke znakove ASCII tablice kao broj i kao znak

IspisAsciiZnakova

#include <stdio.h>

void main( ) {

char x, y, p, q;

x = 'A';

y = x + 32;

p = '\n';

q = ' ';

printf("%d %c %d %c %d %c\n", x, x, y, y,'0','0'+1);

printf("%d %c %d %c\n", p, p, q, q);

}

niz znakova string
Niz znakova (string)
  • Navodi se unutar dvostrukih navodnika npr.

"Fakultet"

"Znak \\ zovemo \"backslash\""

  • Niz znakova uvijek završava NULL znakom ('\0'). Na primjer znakovni niz "Zagreb" u memoriji računala zauzima 7 byte:

Z A G R E B \0

  • Deklaracija u programskom jeziku C: char ime_niza[duljina_niza+1];

(kao polje znakova, paziti da se rezervira mjesto za '\0')

pretvorba ascii znamenke u cijeli broj
Pretvorba ASCII znamenke u cijeli broj
  • Treba uočiti da pojedine znamenke prikazane kao znak ne odgovaraju po binarnom prikazu odgovarajućem cijelom broju. Npr. znamenka 7 prikazana kao cijeli broj u 1 byteu iznosi 0000 0111, a prikazana kao ASCII znak 0011 0111.
  • Pretvorba:

broj = znak - 48;

broj = znak - '0';

broj = znak & 0x0f;

  • 8-bitni ASCII kod

0-127 kao u 7-bitnom kodu, 128-255 prijeglasi i grafički znakovi, ovisno o tzv. kodnoj stranici

matemati ka logika
Matematička logika
  • Osnovni pojam: logički sud
  • Može biti istinit ili lažan
  • Primjeri:
    • 1 < 2 je istinit
    • 3 = 4 je lažan
  • Osnovni ili atomni sud (atom): istinitost ili lažnost utvrđuje se neposrednim zaključivanjem
  • Složeniji sud tvori se formulama koje se sastoje od:
    • atoma
    • logičkih operatora
    • zagrada
matemati ka logika osnovni operatori
Matematička logika: osnovni operatori
  • Negacija 

A A

1 0

0 1

  • Konjunkcija 

A B AB

0 0 0

1 0 0

0 1 0

1 1 1

  • Disjunkcija 
    • A B AB
    • 0 0 0
    • 1 0 1

0 1 1

1 1 1

  • Ekskluzivna konjunkcija 
    • A B AB
    • 0 0 0
    • 1 0 1

0 1 1

1 1 0

  • Implikacija 
  • Dvostrana implikacija 
matemati ka logika korisne ekvivalencije
Matematička logika: korisne ekvivalencije
  • S jednom varijablom i konstantama

(A) = A idempotentnost negacije

AA = A

A1 = A

A0 = 0

AA = 0

AA = A

A1 = 1

A0 = A

AA = 1

matemati ka logika korisne ekvivalencije1
Matematička logika: korisne ekvivalencije
  • S dvije varijable

AB = BA komutativnost disjunkcije

AB = BA komutativnost konjunkcije

(AB) = BA de Morganov zakon

(AB) = BA de Morganov zakon

A(AB) = AB apsorpcija

A(AB) = AB apsorpcija

  • S tri varijable

A(BC) = (AB)C asocijativnost konjunkcije

A(BC) = (AB)C asocijativnost disjunkcije

A(BC) = (AB)(AC) distributivnost konjunkcije

A(BC) = (AB)(AC) distributivnost disjunkcije

logi ka vrijednost
Logička vrijednost
  • Odgovara vrijednosti logičkog suda

DA ili NE

ISTINITO ili LAŽNO

TOČNO ili POGREŠNO

TRUE ili FALSE

  • U C-u ne postoji ključna riječ dok u nekim jezicima postoji poseban tip podataka tipa LOGICAL.
  • U C-u se svaki tip podatka može koristiti kao logički.

TRUE <> 0

FALSE = 0

  • Obično se u programu navodi kao simbolička konstanta

#define TRUE 1

#define FALSE 0

usporedbeni relacijski operatori
Usporedbeni (relacijski) operatori
  • Tvore atomne sudove

Operator Značenje Logički izraz Rezultat

== jednako 1 == 1 1 (Istina)

!= različito 2 != 2 + 2 1 (Istina)

> veće 5 > 6 0 (Laž)

>= veće ili jednako 6 >= 6 1 (Istina)

< manje 7 < 10 1 (Istina)

<= manje ili jednako 7 <= 6 0 (Laž)

logi ki operatori
Logički operatori

Operator Značenje Logički izraz Rezultat

&& Ù(AND, I) 1 > 3 && 2 < 4 0 (Laž)

|| Ú(OR, ILI)1 > 3 || 2 < 4 1 (Istina)

! Ø(NOT, NE) !(1 > 3) 1 (Istina)

Koja je vrijednost logičkog izraza ako cjelobrojne varijable imaju slijedeće vrijednosti x=5, y=5, z=100:

!( x>y && x<z )||( z<1000 && z%10==0 )

0 1 1 0

0 1

1

1

1

primjer napisati program koji e utvrditi jeli neki zadani cijeli broj djeljiv s 3 ili 7
Primjer: Napisati program koji će utvrditi jeli neki zadani cijeli broj djeljiv s 3 ili 7

definiraj cijele brojeve x, t1, t2, test

učitaj ( x )

postavi t1 na rezultat ispitivanja djeljivosti x sa 3

postavi t2 na rezultat ispitivanja djeljivosti x sa 7

test = t1 ili t2

ispiši (x, test)

kraj

rje enje u c u
Rješenje u C-u

IspitivanjeDjeljivosti

#include <stdio.h>

void main() {

int x, t1, t2, test;

scanf("%d", &x);

t1 = (x - x/3*3) == 0;

t2 = (x % 7) == 0;

test = t1 || t2;

printf("x = %d test = %d\n",x ,test);

}

naredbe za promjenu programskog slijeda kontrolne naredbe
Naredbe za promjenu programskog slijeda (kontrolne naredbe)

naredba_1

naredba_2

naredba_3

  • Normalan programski slijed:

naredba_1

naredba_2

naredba_3

...

kontrolna naredba if jednostrana selekcija
Kontrolna naredba if- jednostrana selekcija
  • Pseudokôd

ako je logički_izraz tada

naredbe

  • U C-u

if (logički_izraz) naredba

ili

if (logički_izraz){

niz naredbi

}

N

logički_izraz

D

niz naredbi

kontrolna naredba if dvostrana selekcija
Kontrolna naredba if- dvostrana selekcija
  • Pseudokôd

ako je logički_izraz tada

niz_naredbi_1

inače

niz_naredbi_2

  • U C-u

if (logički_izraz){ niz_naredbi_1

} else {

niz_naredbi_2

}

D

N

logički_izraz

niz naredbi_1

niz naredbi_2

primjer1
Primjer

Programski zadatak:

Pronaći najveći od tri zadana broja

Pseudokod koji koristi isključivo termine govornog jezika

pročitaj tri realna broja

ispiši pročitane brojeve

odredi najveći broj

ispiši nađeni broj

rje enje u p seudokod u koji koristi uobi ajene simbole
Rješenje u pseudokodu koji koristi uobičajene simbole

pročitaj (x,y,z)

ispiši (x,y,z)

{odredi najveći broj}

ako je x > y tada

ako je x > z tada

rez := x

inače

rez := z

inače

ako je y > z tada

rez := y

inače

rez := z

ispiši (rez)

kraj

pobolj anje prethodnog rje enja
Poboljšanje prethodnog rješenja

pročitaj (x,y,z)

ispiši (x,y,z)

{odredi najveći broj}

rez := z

ako je x > y tada

ako je x > z tada

rez := x

inače

ako je y > z tada

rez := y

ispiši (rez)

kraj

k d u programskom jeziku c
Kôd u programskom jeziku C

NajveciOdTriBroja

#include <stdio.h>

void main() {

float x, y, z, rez;

scanf("%f %f %f", &x, &y, &z);

printf("%f %f %f \n", x, y, z);

/* odredi najveći broj */

rez = z;

if ( x > y ){

if ( x > z) rez = x;

}else{

if ( y > z) rez = y;

}

printf("%f \n", rez);

}

slide76
Zadatak: Potrebno je numeričke vrijednosti triju varijabli a1, a2 i a3 pridružiti varijablama b1, b2 i b3 tako da je b1  b2  b3.

zadaj: a1 = 5, a2 = 2, a3 = 8

ako je a1  a2 tada

b1 := a1

b2 := a2

inače

b1 := a2

b2 := a1

ako je a3 < b1 tada

b3 := b2

b2 := b1

b1 := a3

inače

ako je a3 < b2 tada

b3 := b2

b2 := a3

inače

b3 := a3

ispiši (b1, b2, b3)

rje enje u c u deklaracija i inicijalizacija varijabli
Rješenje u C-udeklaracija i inicijalizacija varijabli

SortTriVarijable

#include <stdio.h>

void main()

{

/* deklaracija varijabli */

int a1, a2, a3, b1, b2, b3;

/* postavljanje početnih vrijednosti */

a1 = 5; a2 = 2; a3 = 8;

slide78
if (a1 <= a2) {

b1 = a1;

b2 = a2;

} else {

b1 = a2;

b2 = a1;

}

if (a3 < b1) {

b3 = b2;

b2 = b1;

b1 = a3;

} else {

if (a3 < b2) {

b3 = b2;

b2 = a3;

} else

b3 = a3;

}

printf ("%d %d %d\n", b1, b2, b3);

}

vi estrana selekcija pomo u naredbi if else if else
Višestrana selekcija pomoću naredbiif - else if- else

if (logički_izraz_1){ niz_naredbi_1

} else if (logički_izraz_2){

niz_naredbi_2

} else if (logički_izraz_3){

niz_naredbi_3

...

} else {

niz_naredbi_0

}

odre ivanje sjeci ta dvaju pravaca
Određivanje sjecišta dvaju pravaca

y = a1x + b1

y = a2x + b2

y

x

  • Odrediti sjecište dvaju pravaca. Parametre pravaca učitati programom. Ako sjecište ne postoji, ispisati odgovarajuću poruku.

Postupak:

x = (b2 - b1) / (a1 - a2)

y = a1· x + b1

rje enje u pseudokodu
Rješenje u pseudokodu

učitaj (a1,b1,a2,b2)

ispiši (a1,b1,a2,b2)

izračunaj nazivnik izraza

ako su pravci paralelni onda

ispiši poruku

inače

izračunaj x,y

ispiši (x,y)

kraj

rje enje u c u i dio
Rješenje u C-u (I dio):

SjecistePravaca

#include <stdio.h>

void main () {

float a1, a2, b1, b2, x, y, anaz;

scanf ("%f %f %f %f", &a1, &b1, &a2, &b2);

printf("a1=%f b1=%f a2=%f b2=%f\n", a1,

b1, a2, b2);

/* izračunaj nazivnik izraza */

anaz = a1 - a2;

rje enje u c u ii dio
Rješenje u C-u (II dio)

if(anaz == 0.) {

/* ako su pravci paralelni onda */

printf ("Pravci su paralelni\n");

} else {

/* inače */

printf ("Nazivnik izraza: %f\n", anaz);

x = (b2 - b1) / anaz;

y = a1 * x + b1;

printf("Koordinate sjecišta su(%f,%f)\n",

x, y);

}

}

prvo testiranje programa
Prvo testiranje programa
  • Ulazni podaci 1:

1 2 3 4

  • Ispis na zaslonu 1:

a1=1.000000 b1=2.000000 a2=3.000000 b2=4.000000

Nazivnik izraza: -2.000000

Koordinate sjecišta su (-1.000000, 1.000000)

drugo testiranje programa
Drugo testiranje programa
  • Ulazni podaci 2:

1 2 1.000001 3

  • Ispis na zaslonu 2:

Pravi rezultat: (-1000000, -999998)

a1=1.000000 b1=2.000000 a2=1.000001 b2=3.000000

Nazivnik izraza: -0.000001

Koordinate sjecista su (-1048576.000000, -1048574.000000)

slide87

Primjer: Pročitati neki troznamenkasti cijeli broj x. Ako je učitani broj troznamenkast treba pronaći srednju znamenku i ispisati pročitani broj i nađenu znamenku, a ako nije treba uz odgovarajuću poruku završiti program.

pročitaj cijeli broj x

(x<100)  (x>999)

da

ne

rez := x mod 100

rez := rez / 10

ispiši ("Srednja znamenka broja", x, "je", rez)

ispiši ("Broj", x, "nije troznamenkast")

kraj programa

realizacija u c u
Realizacija u C-u

SrednjaZnamenka

#include <stdio.h>

void main ( ) {

int x, rez;

printf("Unesite troznamenkasti cijeli broj > ");

scanf("%d",&x);

if( (x<100) || (x>999) ) {

printf("Broj %d nije troznamenkast\n", x);

} else {

rez = x % 100;

rez = rez /10;

printf("Srednja znamenka broja %d je %d\n", x, rez);

}

}

programski odsje ak za pronala enje srednje znamenke jo neke mogu nosti
Programski odsječak za pronalaženje srednje znamenke (još neke mogućnosti)

. . .

} else {

rez = ( x % 100) / 10;

printf("Srednja znamenka broja %d je %d\n",x, rez);

}

ili

. . .

} else {

rez = ( x - x/100*100) / 10;

printf("Srednja znamenka broja %d je %d\n",x, rez);

}

programska petlja s ispitivanjem uvjeta ponavljanja na po etku
Programska petlja s ispitivanjem uvjeta ponavljanja na početku

N

logički_izraz

D

niz_naredbi

  • Pseudokod

dok je (logički_izraz)

| niz_naredbi

  • U C-u

while(logički_izraz)naredba

ili

while(logički_izraz) {

niz_naredbi

}

slide91
Primjer: Treba ispisati površinu kruga, ako se r mijenja od 1 do zadanog g s korakom 1. Ispis prekinuti i ako r premaši vrijednost 20.

PovrsinaKruga

#include <stdio.h>

void main ( ) {

float g, r=1.0f, pi=3.14159f;

printf ("Unesite gornju granicu za r > ");

scanf ("%f", &g);

while ( (r <= g) && (r <= 20.0f)) {

printf("%2.0f %10.7f\n", r, r*r*pi);

r = r + 1;

}

}

rezultati izvo enja za g 55
Rezultati izvođenja za g=55

1 3.1415901

2 12.5663605

3 28.2743111

4 50.2654419

5 78.5397530

6 113.0972443

7 153.9379158

8 201.0617676

9 254.4687996

10 314.1590118

11 380.1324043

12 452.3889771

13 530.9287300

14 615.7516632

15 706.8577766

16 804.2470703

17 907.9195442

18 1017.8751984

19 1134.1140327

20 1256.6360474

Komentirajte točnost

prikazivanja

8. važeće znamenke

Komentirajte zašto

je petlja obavila samo

20 prolaza

programska petlja s ispitivanjem uvjeta ponavljanja na kraju
Programska petlja s ispitivanjem uvjeta ponavljanja na kraju
  • U nekim programskim jezicima (npr. FORTRAN, PASCAL) postoji oblik:

ponavljaj

| niz_naredbi REPEAT...UNTIL

dok ne bude (logički_izraz)

  • Pseudokod za C

ponavljaj

| niz_naredbi

dok je (logički_izraz)

programska petlja s ispitivanjem uvjeta ponavljanja na kraju1
Programska petlja s ispitivanjem uvjeta ponavljanja na kraju

niz_naredbi

D

logički_izraz

N

  • U C-u

donaredbawhile (logički_izraz);

ili

do {

niz_naredbi

} while (logički_izraz);

slide95

Primjer: Izračunaj aritmetičku sredinu brojeva koji se redom čitaju s tipkovnice sve dok njihova suma ne premaši neku zadanu gornju granicu.

učitaj gornju granicu gg

brojač n := 0

s := 0

ponavljaj

učitaj i

s := s + i

n := n+1

dok ne bude s > gg

as := s / n

tiskaj( s, n, as )

rje enje zadatka u c u
Rješenje zadatka u C-u

AritmetickaSredinaPunoBrojeva

#include <stdio.h>

void main ( ) {

/* deklaracija varijabli */

int n=0, s=0, i, gg; float as;

/* citanje gornje granice za sumu */

scanf("%d", &gg);

do {

scanf("%d", &i);

s = s + i;

n = n + 1;

} while (s <= gg);

as = (float) s / n;

printf("%d %d %10.3f\n", s, n, as);

}

Uvjet iz pseudokoda je negiran

programska petlja s poznatim brojem ponavljanja
Programska petlja s poznatim brojem ponavljanja

i = poc, kraj, korak

niz_naredbi

  • Pseudokod

za i = poc do kraj (korak k)

niz_naredbi

  • U C-u

for(i = poc; i <= kraj; i = i + k)naredba; ili

for (i = poc; i <= kraj; i = i + k) {

niz_naredbi

}

primjer napisati program koji e ispisati tablicu potencija 2 n i 2 n za brojeve od n od 1 do 32
Primjer: Napisati program koji će ispisati tablicu potencija 2n i 2-n za brojeve od n od 1 do 32

PotencijeBroja2

#include <stdio.h>

void main ( ) {

short int i, x = 1;

double y = 1.0;

printf ( "%2d %12d %.16lf\n", 0, x, y);

for( i = 1; i <= 16; i = i+1) {

x = x*2;

y = y/2;

printf ( "%2d %12d %.16lf\n", i, x, y);

}

}

rezultati izvo enja programa1
Rezultati izvođenja programa

0 1 1.0000000000000000

1 2 0.5000000000000000

2 4 0.2500000000000000

3 8 0.1250000000000000

4 16 0.0625000000000000

5 32 0.0312500000000000

6 64 0.0156250000000000

7 128 0.0078125000000000

8 256 0.0039062500000000

9 512 0.0019531250000000

10 1024 0.0009765625000000

11 2048 0.0004882812500000

12 4096 0.0002441406250000

13 8192 0.0001220703125000

14 16384 0.0000610351562500

15 -32768 0.0000305175781250

16 0 0.0000152587890625

Zašto nije

dobar rezultat?

komentar r ezultat a izvo enja programa
Komentar rezultata izvođenja programa
  • Množenje s 10 u dekadskom sustavu:

15310 * 1010 = 153010

  • Množenje s 2 u binarnom sustavu:

1012 * 102 = 10102

  • Što se je dogodilo?

00000000000000012 * 102

00000000000000102 * 102

...

01000000000000002 * 102

10000000000000002 * 102

00000000000000002

program za izra unavanje n faktorijela 1 na in
Program za izračunavanje N faktorijela1. način
  • Rješenje s programskom petljom u kojoj se uvjet ispituje na početku

učitaj (n)

fakt:=1.

i:=1

dok je i <= n

fakt := fakt*i

i := i+1

ispiši (n,fakt)

rje enje u c u 1 na in
Rješenje u C-u (1.način)

FaktorijeliPocetak

#include <stdio.h>

void main () {

int n, i;

double fakt;

scanf ("%d", &n);

fakt = 1.; i = 1;

while (i <= n) {

fakt = fakt * i;

i = i + 1;

}

printf ("%d! = %g\n", n, fakt);

}

program za izra unavanje n faktorijela 2 na in
Program za izračunavanje N faktorijela2. način
  • Rješenje s programskom petljom u kojoj se uvjet ispituje na kraju:

ucitaj (n)

fakt := 1.

i := 1

ponavljaj

fakt := fakt * i

i := i+1

dok je i <= n

ispisi (n,fakt)

rje enje u c u 2 na in
Rješenje u C-u (2. način)

FaktorijeliKraj

#include <stdio.h>

void main () {

int n, i;

double fakt;

scanf ("%d", &n);

fakt = 1.; i = 1;

do {

fakt = fakt * i;

i = i + 1;

} while (i <= n);

printf ("%d! = %g\n", n, fakt);

}

program za izra unavanje n faktorijela 3 na in
Program za izračunavanje N faktorijela3. način
  • Rješenje s programskom petljom s poznatim brojem ponavljanja:

učitaj (n)

fakt := 1.

za i = 1 do n

fakt := fakt * i

ispiši (n,fakt)

program u c u 3 na in
Program u C-u (3. način)

FaktorijeliPoznato

#include <stdio.h>

void main () {

int n, i;

double fakt;

scanf ("%d", &n);

fakt = 1.;

for (i = 1; i <= n; i = i + 1){

fakt = fakt * i;

}

printf ("%d! = %g\n", n, fakt);

}

rezultati testiranja
Rezultati testiranja

Ulaz: Rezultat

0 0! = 1

1 1! = 1

5 5! = 120

10 10! = 3628800

100 100! = 9.33262e+157

150 150! = 5.71338e+262

170 170! = 7.25742e+306

171 Floating point error: Overflow.

unarni operatori
Unarni operatori

Operator Značenje Primjer

+unarni plus +4 / 2

-unarni minus -5 * 3

sizeofzauzeće memorije sizeof( int )

(tip)pretvorba tipa (cast) (double) i

++uvećavanje za 1 ++i ili k++

-- umanjenje za 1 --j ili k--

~ inverzija bitova int x = ~0xFFFF;

! logičko ne !( 5 > 2 )

* indirekcija *p

& adresni operator scanf(”%d”,&n);

prefix oblik
Prefix oblik:
  • ... i j
  • i = 2; 2 ?
  • j = --i; 1 1
  • ... ij
  • i = 2;2 ?
  • j = ++i; 3 3
postfix oblik
Postfix oblik:

... ij

i = 2; 2 ?

j = i--; 1 2

... i j

i = 2; 2 ?

j = i++; 3 2

binarni operatori
Binarni operatori

Operator Značenje Primjer

* / % množenje, dijeljenje

+ - zbrajanje, oduzimanje

<< pomak bitova u lijevo n = n << 2;

>> pomak bitova u desno n = n >> 1;

< > <= >= relacijski operatori

== !=operatori jednakosti

& binarno AND znam & ’0’

^ binarno isključivi ili f = f ^ f

| binarno uključivo ili f = f | 0x8 0

&& || logički AND i OR

binarni operatori1
Binarni operatori

Primjer:IzdvajanjeBitova

#include <stdio.h>

void main () {

int a, i;

do {

scanf ("%d", &a);

for (i = 31; i >= 0; i--) {

printf ("%u", (((unsigned)a & (1 << i)) >> i));

}

printf ("\n");

} while (a != 0);

}

skra eno pridru ivanje
Skraćeno pridruživanje

i = i + 7;  i += 7;

j = j - k;  j -= k;

a = a * (3 + 2);  a *= 3 + 2;

b = b / (c * 2);  b /= c * 2;

d = d % 2;  d %= 2;

a = a & b;  a &= b;

a = a ^ b;  a ^= b;

a = a | b;  a |= b;

a = a << b;  a <<= b;

a = a >> b;  a >>= b;

odvajanje naredbi zarezom
Odvajanje naredbi zarezom
  • Zarez kao operator koristi se za odvajanje naredbi obično tamo gdje je dopuštena samo jedna naredba. Na primjer :

for ( i=0, j=60; i>j; i++, j--) {

. . .

}

primjer izra unavanja faktorijela uz kori tenje novousvojenih operatora
Primjer izračunavanja faktorijela (uz korištenje novousvojenih operatora):

i =1; fakt = 1.0;

do {

fakt *= i++;

} while (i <= n);

i =1; fakt = 1.0;

do {

fakt *= i;

} while (++i <= n);

i=1; fakt=1.; do fakt *= i++; while (i <= n); /* ne pisati ovako! */

uvjetno pridru ivanje
Uvjetno pridruživanje

  • r = c >= '0' && c <= '9' ? 'Z': 'N';
  • Primjer: U znak r pohraniti vrijednost 'Z' ako je znak c znamenka, a 'N' inače.

if (c >= '0' && c <= '9') {

r = 'Z';

} else {

r = 'N';

}

prioritet do sada upoznatih operatora
Prioritet do sada upoznatih operatora

1. + - sizeof (tip)++ -- ~ ! * &

2. * / %

3. + -

4. << >>

5. < <= >= >

6. == !=

7. &

8. ^

9. |

10. &&

11. ||

12.? :

13. = += -= *= /= %= &= ^= |= <<= >>=

14. ,

prioritet do sada upoznatih operatora1
Prioritet do sada upoznatih operatora
  • Primjeri

k = !0 + 3 == 8;  1+3==8  4==8  0

k = !0 + (3 == 8);  1+0  1

k = !0 + 3;  1+3  1