PROGRAMSKI JEZICI I PROGRAMIRANJE Osnovni pojmovi Tehnika industrijska

  • Slides: 46
Download presentation
PROGRAMSKI JEZICI I PROGRAMIRANJE Osnovni pojmovi Tehnička, industrijska i obrtnička škola Čakovec 1

PROGRAMSKI JEZICI I PROGRAMIRANJE Osnovni pojmovi Tehnička, industrijska i obrtnička škola Čakovec 1

Programi • računala služe za obavljanje različitih poslova • stvarna namjena računala određena je

Programi • računala služe za obavljanje različitih poslova • stvarna namjena računala određena je PROGRAMOM kojeg računalo izvodi • skup svih programa koji se mogu izvršavati na računalu nazivamo SOFTVER ili PROGRAMSKA PODRŠKA • programe pišu PROGRAMERI • postupak nastanka programa (pisanjem NAREDBI programskog jezika) zove se PROGRAMIRANJE Tehnička, industrijska i obrtnička škola 2

Naredbe • NAREDBA je nalog računalu da izvrši neki osnovni zahvat • izbor i

Naredbe • NAREDBA je nalog računalu da izvrši neki osnovni zahvat • izbor i redoslijed NAREDBI (građa i vrsta programa) određuje ponašanje računala, odnosno način na koje ono izvršava neku zadaću PROGRAMSKI JEZIK RAČUNALNI PROGRAM SKUP OSNOVNIH NAREDBI ZA PROGRAMIRANJE (for, if, while, case, switch…) naredbe programskog jezika nanizane po određenim pravilima strogo utvrđenim redoslijedom u cilju izvršavanja nekog zadatka PRAVILA PISANJA Tehnička, industrijska i obrtnička škola 3

Sintaksa • napisane naredbe moraju zadovoljavati zadane zakonitosti, pravila – SINTAKSU PROGRAMSKOG JEZIKA •

Sintaksa • napisane naredbe moraju zadovoljavati zadane zakonitosti, pravila – SINTAKSU PROGRAMSKOG JEZIKA • program koji ne zadovoljava propisanu sintaksu je neispravan i nemoguće ga je prevesti u strojni oblik i izvršiti Tehnička, industrijska i obrtnička škola 4

Razvoj programskih jezika 1956. FORTRAN (John Backus) 1960. ALGOL 60, COBOL, PL II 1964.

Razvoj programskih jezika 1956. FORTRAN (John Backus) 1960. ALGOL 60, COBOL, PL II 1964. BASIC (John Kemeny, Tom Kurtz) beginner’s allpurpose instruction code 1965. (. . . 1974. ) PASCAL (Niklaus Wirth, Klaus Jensen) 1975. C (Dennis Richie) 1983. C++ (Bjarne Stroustrup). . . Tehnička, industrijska i obrtnička škola 5

Podjela programskih jezika STROJNI PROGRAMSKI JEZICI – jezici niže razine • Naredbe se obično

Podjela programskih jezika STROJNI PROGRAMSKI JEZICI – jezici niže razine • Naredbe se obično zapisuju simboličkim zapisom, tzv. MNEMONICIMA STROJNOG JEZIKA (binarnog) • Pri pisanju strojnih naredbi prvi (obavezni dio) je operacija (operacijski kod) VIŠI PROGRAMSKI JEZICI • naredbe se mora prevoditi u strojni jezik • računalo mora biti opremljeno odgovarajućim PREVODITELJEM int sum(int[] x) { int sum = 0; n = 0; while (n < x. length) { sum += x[n]; } return sum; } 00101010111110101110 00101010. . . Tehnička, industrijska i obrtnička škola 6

Evolution: Genealogy From Sebesta’s Concepts of Programming Languages Tehnička, industrijska i obrtnička škola 7

Evolution: Genealogy From Sebesta’s Concepts of Programming Languages Tehnička, industrijska i obrtnička škola 7

ISTRAŽI… • Koju sve vrstu uređaja može simulirati računalo? • Koje vrste programske podrške

ISTRAŽI… • Koju sve vrstu uređaja može simulirati računalo? • Koje vrste programske podrške (softvera) znaš? • Koliko se trenutno programera traži u nekim razvijenim zemljama Zapada i kolike su njihove prosječne zarade? • Koji su engleski/njemački izrazi za program, naredba, programiranje, programer, programska podrška/potpora? • Što znate o sintaksi hrvatskog književnog jezika? • Usporedite programske jezike prema popularnosti (raširenosti). Tehnička, industrijska i obrtnička škola 8

Strojni jezik • binarni prikaz programa, jedini oblik programa koji računalo “razumije” i u

Strojni jezik • binarni prikaz programa, jedini oblik programa koji računalo “razumije” i u njega se prije izvođenja prevodi svaki drugi oblik programa, tijesno je vezan uz građu računala (arhitekturu mikroprocesora) pa je programer mora dobro poznavati. LD A, $AFFF ST $AD 23, A ADD A, B 001001 JPNZ A 10100100 111000100100 010100 Tehnička, industrijska i obrtnička škola 9

Mnemonici strojnog jezika • U zamjenu za pisanje nizova nula i jedinica (binarnog zapisa

Mnemonici strojnog jezika • U zamjenu za pisanje nizova nula i jedinica (binarnog zapisa u strojnom jeziku) koriste se tzv. MNEMONICI STROJNOG JEZIKA (slovčane kratice koje upućuju na djelovanje pojedine naredbe). • ASSEMBLER je program koji mnemonike strojnog jezika (push, mov, add, dec, inc, jnz. . . ) prevodi u binarno zapisane instrukcije. push mov pushfd sub mov mov ebp, esp inc cmp je test je mov inc cmp je test jne pop pop xor esi al, dl 7 C 90 ECA 9 al, al 7 C 90 ECA 3 al, byte ptr [esi] esi al, dl 7 C 90 ECA 9 al, al 7 C 90 EC 98 esi ebx edi eax, eax Tehnička, industrijska i obrtnička škola esp, 2 D 0 h dword ptr [ebp-224 h], eax dword ptr [ebp-228 h], ecx eax, dword ptr [ebp+8] ecx, dword ptr [ebp+4] 10

Prednosti i nedostaci strojnog jezika • Prednosti: • mogućnost izravnog djelovanja na sklopovlje •

Prednosti i nedostaci strojnog jezika • Prednosti: • mogućnost izravnog djelovanja na sklopovlje • djelotvorno iskorištenje memorije • veća brzina izvođenja napisanog programa • Nedostaci: • složenost postupka izrade programa • ograničenost na određeni tip procesora Tehnička, industrijska i obrtnička škola 11

Viši programski jezici i njihove prednosti • Prilagođeni su čovjeku, prikladniji su, lakši i

Viši programski jezici i njihove prednosti • Prilagođeni su čovjeku, prikladniji su, lakši i razumljiviji • Jednom naredbom VIŠEG PROGRAMSKOG JEZIKA nadomješta se cijeli skup naredbi strojnog jezika • Prednosti: • programer ne mora dobro poznavati građu računala • različiti viši programski jezici mogu biti prilagođeni različitim zadaćama i biti bliski stručnjacima za određeno područje. • Viši programski jezici opće namjene omogućuju rješavanje šireg raspona zadataka. Tehnička, industrijska i obrtnička škola 12

Jezični prevoditelji • Mikroprocesor prihvaća samo strojni oblik programa pa je svaki drugi oblik

Jezični prevoditelji • Mikroprocesor prihvaća samo strojni oblik programa pa je svaki drugi oblik programa potrebno prije izvođenja prevesti u strojni oblik • IZVORNI PROGRAM (source) koji nije napisan u binarnom obliku, prije izvođenja potrebno je prevesti u strojni oblik. • Načelno postoje dvije skupine PREVODITELJA: • INTERPRETERI prevode odmah nakon unosa pojedine naredbe • KOMPILATORI (compilers) prevode tek nakon unosa čitavog programa Tehnička, industrijska i obrtnička škola 13

ISTRAŽI… • Koji su najčešći mikroprocesori kod današnjih osobnih računala? • Po čemu se

ISTRAŽI… • Koji su najčešći mikroprocesori kod današnjih osobnih računala? • Po čemu se današnji mikroprocesori međusobno razlikuju? • Nabrojite neke više programske jezike i pokušajte ih razvrstati prema području primjene, tipovima… • izvor: npr. Wikipedia Tehnička, industrijska i obrtnička škola 14

Hrvatski informatičari u svemu ravnopravni s europskim • • • - bilježi se stalan

Hrvatski informatičari u svemu ravnopravni s europskim • • • - bilježi se stalan manjak zaposlenih u IT sektoru najtraženija zanimanja su programeri raznih programskih jezika, data base developeri, mrežni administratori, djelatnici za potporu prodajnom timu, podršku komunikacijskom menadžemntu, administratori baznih podataka, voditelji obrade podataka. - Zabrinjavajuće je da Hrvatskoj nedostaje oko 1200 računalnih stručnjaka - » Ne samo u Hrvatskoj, već svugdje u svijetu stanje je slično, jer sustavi formalnog obrazovanja financijski ne mogu pratiti razvitak novih tehnologija « - povećana potražnja posljedica brzog razvitka svjetske IT industrije (EU, SAD i Azija) » Problem kod IT kadra je što ljudi koji rade u toj djelatnosti moraju svakodnevno ulagati u svoje znanje i dodatnu edukaciju «, (izvršni direktor portala posao. hr Saša Jurković) hrvatski stručnjaci u svemu konkurentni onima iz zemalja Europske unije Hrvati polako postaju svjesni da, uz formalno obrazovanje, moraju cijelog života ulagati u svoje znanje Vjesnik Utorak, 17. listopada 2006. Tehnička, industrijska i obrtnička škola 15

ALGORITMI Tehnička, industrijska i obrtnička škola Čakovec 16

ALGORITMI Tehnička, industrijska i obrtnička škola Čakovec 16

Razlozi za proučavanje algoritama • računalni programi ne bi postojali bez algoritama • proučavanje

Razlozi za proučavanje algoritama • računalni programi ne bi postojali bez algoritama • proučavanje algoritama razvija analitičke vještine • dobri algoritmi mogu poboljšati efikasnost računalnih programa Tehnička, industrijska i obrtnička škola 17

Više o algoritmima “A person well-trained in computer science knows how to deal with

Više o algoritmima “A person well-trained in computer science knows how to deal with algorithms: how to construct them, manipulate them, understand them, analyze them. This knowledge is preparation for much more than writing good computer programs; it is a general-purpose mental tool that will be a definite aid to the understanding of other subjects, whether they be chemistry, linguistics, or music, etc. The reason for this may be understood in the following way: It has often been said that a person does not really understand something until after teaching it to someone else. Actually, a person does not really understand something until after teaching it to a computer, i. e. , expressing it as an algorithm. . An attempt to formalize things as algorithms leads to a much deeper understanding than if we simply try to comprehend things in the traditional way” Donald E. Knuth (one of the most prominent computer scientists of our time 1996. ) Tehnička, industrijska i obrtnička škola 18

Upamti! • Algoritmi • nisu odgovori • su dobro definirani koraci za dobijanje odgovora

Upamti! • Algoritmi • nisu odgovori • su dobro definirani koraci za dobijanje odgovora • Algoritmi koriste PODATKOVNE STRUKTURE (DATA STRUCTURES) • Učenje o algoritmima i podatkovnim strukturama pomaže u stjecanju kompetencija za uspješnije rješavanje problema (better problem-solver)! • The term algorithm is used in computer science to describe a problem solving method suitable for implementation as a computer program. [Sedgewick 2003] Tehnička, industrijska i obrtnička škola The A* algorithm 19

Definicija • Naziv ALGORITAM potječe od imena arapskog matematičara Muhamed ibn Musa al Horezmi.

Definicija • Naziv ALGORITAM potječe od imena arapskog matematičara Muhamed ibn Musa al Horezmi. • ALGORITAM je opis matematičkog ili drugog postupka, sastavljen od izvjesnog broja koraka ili akcija, dan u obliku niza uputa koje treba obaviti određenim redoslijedom. • ALGORITAM je proces ili niz pravila za rješavanje nekog zadatka ili zadanog problema. Tehnička, industrijska i obrtnička škola 20

Primjeri algoritama • Algoritam – uputa ili recept: • Uputa za prelazak preko ulice

Primjeri algoritama • Algoritam – uputa ili recept: • Uputa za prelazak preko ulice • Upute za uporabu kućanskih aparata • Kuharski recept • Upute za sijanje • Uputa za zbrajanje brojeva • Isti algoritam može biti predstavljen na niz različitih načina. • Za rješavanje istog problema mogu postojati različiti algoritmi (načini). • Algoritmi za isti problem mogu biti utemeljeni na vrlo različitim idejama i problem mogu rješavati sasvim različitim brzinama. Tehnička, industrijska i obrtnička škola 21

Programiranje – sinteza algoritama • RAČUNALNI PROGRAM predstavlja algoritam opisan uputama, operacijama koje računalo

Programiranje – sinteza algoritama • RAČUNALNI PROGRAM predstavlja algoritam opisan uputama, operacijama koje računalo razumije, a služe rješavanju nekog problema. • PISANJE PROGRAMA je proces izražavanja algoritama nizom naredbi u nekom jeziku za programiranje. • Konvergentni algoritam se sastoji od konačnog broja koraka koji sigurno vode do rješenja (ako ono uopće postoji). Tehnička, industrijska i obrtnička škola 22

Karakteristike algoritma • Ima početne objekte (ulazni podaci) • Ima završne objekte (izlazni podaci,

Karakteristike algoritma • Ima početne objekte (ulazni podaci) • Ima završne objekte (izlazni podaci, rezultati) • Ima konačni broj koraka (mogu se opisati uputama, naredbama, instrukcijama) • Mogu biti općeniti ili specijalizirani • Mogu biti uporabljivi i neuporabljivi • Imaju izvoditelja • Postoji jezik za njihovo zapisivanje (koji može biti umjetni – programski jezik ili govorni) Tehnička, industrijska i obrtnička škola 23

Opis postupka Nakon formulacije problema treba precizno opisati algoritam, a zatim ga izraziti notacijom

Opis postupka Nakon formulacije problema treba precizno opisati algoritam, a zatim ga izraziti notacijom programskog jezika i to se onda daje računalu na izvršenje. Formulacija problema Dekompozicija problema na određen broj jednostavnijih potproblema koji se rješavaju definiranim redoslijedom i na kraju dovode do rješenja cjelokupnog problema. Definiraju se koraci koji će dovesti do rješenja Precizan opis postupka ili algoritam za rješavanje Tehnička, industrijska i obrtnička škola 24

Primjeri različitih algoritama za rješenje istog problema Nalaženje riječi u rječniku Tehnička, industrijska i

Primjeri različitih algoritama za rješenje istog problema Nalaženje riječi u rječniku Tehnička, industrijska i obrtnička škola Čakovec 25

Algoritam 1. • 1. korak: otvoriti stranu rječnika prije prve. • 2. korak: otvoriti

Algoritam 1. • 1. korak: otvoriti stranu rječnika prije prve. • 2. korak: otvoriti slijedeću stranu. • 3. korak: ako posljednja riječ na otvorenoj strani nije po abecedi prije tražene riječi ili ako je otvorena strana posljednja, nastaviti sa 4. korakom, inače ponoviti 2. korak. • 4. korak: potražiti traženu riječ na otvorenoj strani i zapisati njeno značenje. Ako tražena riječ nije nađena, zapisati da je nema u rječniku. Tehnička, industrijska i obrtnička škola 26

Algoritam 2. • 1. korak: napraviti snop iz svih listova rječnika. • 2. korak:

Algoritam 2. • 1. korak: napraviti snop iz svih listova rječnika. • 2. korak: dok je tražena riječ po abecedi iza posljednje riječi prve strane snopa i prije prve riječi posljednje strane snopa, ili dok nije u snopu samo jedan list, ponavljati 3. i 4. korak, inače napraviti 5. korak. • 3. korak: razdjeliti snop u dva dijela. • 4. korak: ako je tražena riječ ispred posljednje riječi prvog snopa, nastaviti rad sa tim snopom, u suprotnom uzeti za novi snop drugi dio. • 5. korak: potražiti traženu riječ na prvoj ili posljednjoj strani snopa i zapisati njeno značenje. Ako tražena riječ nije nađena, zapisati da je nema u rječniku. Tehnička, industrijska i obrtnička škola 27

Algoritam 3. • 1. korak: napraviti snop iz listova rječnika koji leže između oznake

Algoritam 3. • 1. korak: napraviti snop iz listova rječnika koji leže između oznake s prvim slovom tražene riječi i slijedeće oznake. • 2. korak i ostali jednaki su kao i u algoritmu 2. Tehnička, industrijska i obrtnička škola 28

Primjer: Izračunati z=xy (x i y su cijeli pozitivni brojevi) napraviti algoritam za potenciranje

Primjer: Izračunati z=xy (x i y su cijeli pozitivni brojevi) napraviti algoritam za potenciranje Rješenje 1. : Ako računalo “zna” potencirati, onda se može napisati npr. z=pow(x, y); ili z: =x^y; Tehnička, industrijska i obrtnička škola 29

Primjer – nastavak: Rješenje 2. : Ako računalo “zna” samo osnovne računske operacije, treba

Primjer – nastavak: Rješenje 2. : Ako računalo “zna” samo osnovne računske operacije, treba sastaviti algoritam za potenciranje koji će tu operaciju raščlaniti na niz množenja, npr. : z: =1; u: =y; ponavljaj z: =z*x; u: =u-1 dok ne bude u=0; Tehnička, industrijska i obrtnička škola 30

Matematička logika u programiranju Tehnička, industrijska i obrtnička škola Čakovec 31

Matematička logika u programiranju Tehnička, industrijska i obrtnička škola Čakovec 31

Uvod • Izvođenje programa ne mora biti pravocrtno, bezuvjetno, već se program može GRANATI

Uvod • Izvođenje programa ne mora biti pravocrtno, bezuvjetno, već se program može GRANATI • kod grananja obično ISPITUJEMO NEKI UVJET (može biti ispunjen ili ne) i DONOSIMO ODLUKU o daljnjem tijeku izvođenja programa • Ostvarenje PROGRAMSKIH GRANANJA, ali i PROGRAMSKIH PETLJI zasniva se na POZNAVANJU LOGIKE koje olakšava razumijevanje i stvaranje programa • LOGOS – riječ, misao, zakon, razlog, razum • LOGIKA - grana filozofije Tehnička, industrijska i obrtnička škola 32

Logika • • koja se bavi utvrđivanjem razložnosti rasuđivanja Nešto je logično ako se

Logika • • koja se bavi utvrđivanjem razložnosti rasuđivanja Nešto je logično ako se može obrazložiti nekim dokazima • Osnovni pojam u logici je LOGIČKI SUD - TVRDNJA koja se ocjenjuje s gledišta ISTINITOSTI ili LAŽNOSTI • VALJANI sudovi mogu biti ISTINITI (TRUE) ILI LAŽNI (FALSE) • Istraživanjima sudova bavi se posebna grana matematike: MATEMATIČKA LOGIKA • Osnovu matematičke logike čini ALGEBRA SUDOVA (LOGIČKA, BOOLEOVA ALGEBRA) • Operacije sa sudovima su LOGIČKE ili BOOLEOVE Tehnička, industrijska i obrtnička škola 33

George Boole 1815 -1864 • Matematičar koji se bavio logikom • Razvio logičku algebru

George Boole 1815 -1864 • Matematičar koji se bavio logikom • Razvio logičku algebru (Boolean Algebra) • Uveo operatore • • and (konjunkcija) or (disjunkcija) not (negacija) nor (exclusive or) Tehnička, industrijska i obrtnička škola 34

Složeni sudovi i označavanje sudova • Za označavanje sudova koriste se logičke varijable koje

Složeni sudovi i označavanje sudova • Za označavanje sudova koriste se logičke varijable koje mogu poprimiti vrijednost 0 ili 1 (laž ili istina) • od jednostavnih sudova stvaramo složenije • Istinitost ili lažnost složenijih sudova može se utvrditi temeljem formula koje uključuju logičke operatore: negacija, konjunkcija, disjunkcija • sudovi često uključuju i relacijske simbole ili operatore: <, >, =, <=, >=, <> • relacijski simboli opisuju odnose među vrijednostima napisanim sa lijeve/desne strane operatora Tehnička, industrijska i obrtnička škola 35

Tablice istinitosti A B !A !B A && B A || B 0 0

Tablice istinitosti A B !A !B A && B A || B 0 0 1 1 0 0 1 1 1 0 0 1 1 Tehnička, industrijska i obrtnička škola 36

Istraži… • Utvrdi istinitost ili lažnost sudova: Sud Vrijednost 5>2 3>6 4=4 7<=6 •

Istraži… • Utvrdi istinitost ili lažnost sudova: Sud Vrijednost 5>2 3>6 4=4 7<=6 • Napiši tablicu istinitosti za: (A||B)&&(A&&B) (A||C)||(A&&B)&&(B||C) Tehnička, industrijska i obrtnička škola 37

IZRADA PROGRAMA Tehnička, industrijska i obrtnička škola Čakovec 38

IZRADA PROGRAMA Tehnička, industrijska i obrtnička škola Čakovec 38

Faze u izradi programa 1. 2. 3. 4. Planiranje, definiranje, analiza i opisivanje problema,

Faze u izradi programa 1. 2. 3. 4. Planiranje, definiranje, analiza i opisivanje problema, određivanje algoritma, oblikovanje rješenja Kodiranje i prevođenje Testiranje i ispravljanje, kontrola programa na formalne (sintaktičke, semantičke) i logičke greške Održavanje programa Dokumentiranje programa – faza koja se provodi usporedo sa ostalim fazama (odvojeno i/ili u kodu) Tehnička, industrijska i obrtnička škola 39

Metode programiranja i predstavljanje algoritama Tehnička, industrijska i obrtnička škola Čakovec 44

Metode programiranja i predstavljanje algoritama Tehnička, industrijska i obrtnička škola Čakovec 44

Modularno programiranje • Program se sastoji od modula (procedura, funkcija, potprograma. . . )

Modularno programiranje • Program se sastoji od modula (procedura, funkcija, potprograma. . . ) koji se mogu nezavisno razvijati i zatim koristiti u više programa • prednost: olakšano pisanje, testiranje, unošenje izmjena. Strukturirano programiranje • Program je građen pomoću elementarnih (osnovnih) logičkih struktura: sekvence-niza, grananja i ponavljanja • odvijanje programa: • pravocrtno, • temeljeno na rezultatima (odlukama, izboru, uvjetima) prethodne obrade • petlja. Tehnička, industrijska i obrtnička škola 45

Osnovne programske strukture • Pravocrtan tijek programa, sekvenca • Programska grananja • if (ako)

Osnovne programske strukture • Pravocrtan tijek programa, sekvenca • Programska grananja • if (ako) • if-else (ako-onda) • switch (višestruko grananje) • Programske petlje • for (poznati broj ponavljanja) • do-while (ispitivanje uvjeta ponavljanja na kraju) • while (ispitivanje uvjeta ponavljanja na početku) Tehnička, industrijska i obrtnička škola 46

Neki načini opisa algoritama • Kod opisa algoritma i objašnjenja koda pomaže upotreba •

Neki načini opisa algoritama • Kod opisa algoritma i objašnjenja koda pomaže upotreba • Blok dijagrama – simbolički prikaz algoritma/programa • Pseudokoda – strukturirani opis u prirodnom jeziku • Blok dijagrami - grafički • Pseudokod – riječima ako, onda, za, učitaj, ispiši, dok je. . . Tehnička, industrijska i obrtnička škola 47

Blok dijagrami POČETAK I=1, S=0 BROJ NE BROJ>0 DA S=S+BROJ I<10 && S<99 DA

Blok dijagrami POČETAK I=1, S=0 BROJ NE BROJ>0 DA S=S+BROJ I<10 && S<99 DA I=I+1 NE S, I KRAJ Tehnička, industrijska i obrtnička škola 48

Pseudokod i=1, s=0; učitaj broj radi i=1, s=0; read broj do ako je (broj>0)

Pseudokod i=1, s=0; učitaj broj radi i=1, s=0; read broj do ako je (broj>0) onda if (broj>0) s+=broj; dok je (i++<=10&&s<99); ispiši s, i while (i++<=10&&s<99); write s, i Tehnička, industrijska i obrtnička škola 49

Primjer • napraviti program za zbrajanje dva cijela broja • napraviti program koji će

Primjer • napraviti program za zbrajanje dva cijela broja • napraviti program koji će zbrojiti, oduzeti, pomnožiti i podijeliti dva cijela broja. Pri tome izbjegnuti dijeljenje s nulom. • napraviti program koji će zbrojiti pet brojeva, pa ispisati kakav je zbroj (jednak, veći ili manji od nule). Koristiti najviše tri varijable. • Ispisati sve djelitelje za deset učitanih brojeva iz intervala [100, 1000]. Tehnička, industrijska i obrtnička škola 50