Dan inteligencije 2022

I ove godine tradicionalno S.Š. „Nikola Tesla“ organizuje aktivnosti sa kojima je dat doprinos obeležavanju međunarodnog događaja „Dan inteligencije 2022“.

Organizatori događaja su zajedno sa svojim učenicima pokušali da u toku oktobra upriliče aktivnosti koje stimulišu logički način razmišljanja u cilju prepoznavanja darovite dece i pojačan rad sa njima.

C++ solving programi

Šta je solving problem?

Umeće rešavanja realnih situacija iz svakodnevnog života je top veština savremenog sveta. Za rešavanje problema iz svakodnevnog života problem solveri, pojedinci ili grupe, koriste znanje koje je prethodno stečeno, razmatraju novonastalu situaciju na kritički i kreativan način i pronalaze više rešenja od kojih analizom i proverom bijaju najoptimalnije.

Koraci u procesu problem solvinga

  1. Razumevanje problema
  2. Istraživawe i prikupljanje informacija
  3. Pravljenje strategija i brainstorming
  4. Odabir najboljeg rešenja
  5. Akcija
  6. Provera

Pogledajte prezentaciju.

Jednostavni solving problem primeri

Problemi prema težini mogu da budu prosti i komleksniji, složeni. Prosti problemi rešavamo u „hodu“ dez da budemo svesni da koristimo problem solving u njihovom rešavanju. Kompleksni problemi zahtevaju koncentaciju posvećenost, a često i neizvesnost oko pronalaženja rešenja.

Za događaj „Dan inteligencije 20 22“ pripremljeni su prosti solving problemi za koje treba da se nađe rešenje koje omogućava automatsko rešavanje problema kodiranjem. Proste solving kodove kreiraju učenici ETR21 podeljeni u grupama. Svaka grupa rešava zadatke na origialan način koristeći solving problem veštine.

U prilogu su pripremljeni zadaci.

Kako se radilo?

Učenici odeljenja ETR21 formiraju tročlane timove koje imaju originalne nazive i prepoznatljive logoe. Svaki tim se trudi da kreiraju programe u C++-u za postavljene probleme. Prethodno analiziraju više načina i opcije rešavanja problema. Kreiraju algoritam koristeći Veb 2.00 alat Floworithm, a zatim kod u radnom okruženju DEV C++. Proverom konstatuju određene ndostatke koda koje rešavaju u „u hodu“. Razvijaju svoje komunikacione, logičke, matematičke, lingvističke i problem solving veštine. Svaka grupa svoje ideje, obrazloženja, algoritme i kodove skladišti na gugl drajv i deli sa članovima komisije „Dan inteligencije“. (Članovi komisije su profesori računarstva i informatike i programiranja: Biljana Ivanović, Mirjana Radosavljević, Srboljub Milosavljević.) Najbolje rešenje se prestavlja na javnom času koji ima za cilj da prikaže najbolje segmente događaja koji su u prijavljeni i realizovani u okviru međunarodnog projekta „DAN INTELIGENCIJE“ sa ciljem da se stimuliše rad sa darovitim učenicima. Najbolja ekipa dobija zahvalnicu škole za doprinos aktivnostima upriličenih za pomenuti događaj.

Pogledajte kako postupno timovi dolaze do rešenja.

Video pokazuje faze u procesu rešavanja prvig solving problema.

Delić atmosfere

Timu koji je imao najbolju implementiranu solving problem ideju dodeliće se zahvalnice.

Na oglednom času koji je održan 10.11.2022.god pobednički tim je prezentovao ideju realizacije C++ solvin problem kod. Učenicima su podeljene zahvalnice koje su kreirani kao dokaz angažovanja za međunarodni događaj „Dan inteligencije 2022“

Mape uma za proveru znanja

Učenici G41 iz predmeta računarstvo I informatika, u okviru nastavne teme “Rad sa bazama podataka”,  imaju zadatak da osmisle, projektuju I kreiraju bazu podataka. Etapno, prateći nastavno gradivo, na časovima ali I kući učenici podeljeni u grupe od po tri člana polako stvaraju  bazu podataka koja je originalna i  jedinstvena kreativno koncipirana i ažurirana  u toku izrade. Projektni zadatak zahteva logički pristup rešavanja problema. Za kreiranje ER dijagrama koristi se Veb 2.00 alat Dijagrams.net. Za kreiranje bazu koristi se SUBP SQLites.

Za dan inteligencije na  javnom čas učenici pokazuju kako na drugačiji način može da se utvrdi gradivo koristeći mape uma. Svaka grupa kreira koristeći Veb 2.00 alat Mind mapu uma koja predstavlja logičko objašnjenje postupka projektovanja, kreiranja I ažuriranja baze. Tročlana komisija sastavljena od profesora: informatike, srpskog jezika i likovne kulture vrednuju pretstavljene mape uma i nagrađuju najbolju mapu sa prigodnim skromnim poklonom.

Najbolja mapa uma:


Ako želite da pogledate ostale mape uma pogledajte video

Proces izrade projektnog zadataka koji osmišljava, projektuje i kreira bazu podataka.

Učeničkom timu čija mapa uma je najbolja idodeliće se zahvalnice.

Primeri koji jačaju problem solving veštinu

Задатак 1. Број људи.

Колико људи је присуствовало митингу?

Задатак 2. Паковање бомбона.

Који од предложених начина паковања бомбона је најефтинији?  (Погледајте видео, https://www.101qs.com/3038)

Dan inteligencije 2019/20

Međunarodna svetska organizacija Mensa pokrenula je akciju „Dan inteligencije“ u cilju obeležavanja 1. Oktobar kao dan osnivanja Mense. Inače, Mensa je osnovana 1/10/1946. god u Oksfordu, UK.

Mensa Srbije kroz ovu aktivnost, kao projekat koji traje od 22/09/2019. do 10/10/2019. god, želi da ukaže na značaj stimulacije intelektualnih sposobnosti kod dece.

SŠ „Nikola Tesla“ priključila se akciji „Dan inteligencije“, prijavljujući dva događja, radionica „Alogoritmi i mozgalice“ i istraživanje o „Istorijskom razvoju računarskih sistema“. Nosioci aktivnosti su bili učenici ETR21 i G11 pod mentorstvom Biljane Ivanović, pedagoški savetnik, nastavnik računarstva i informatike i programiranja.

Dogadaji

MapaS

 

Dan inteligencije

Radionica „Algoritmi i mozgalice“ promoviše mozgalice kao sredstvo koje stimuliše logički način razmišljanja što je veština koja je neophodna za buduće programere, učenike drugog razreda obrazovnog profila elektrotehničar računara.

Prezentacija je trasirala tok radioniceFotografije prenose delić atmosfere.

Učenici G11 su istraživali isorijat informacionih sistema i dali svoju projekciju na dalji razvoj informacionih sistema sa njihovog stanovišta.

Veština koja se u 21. veku podrazumeva, osim čitanja i pisanja, jeste i digitalna pismenost. Da li su današnji učenici digitalno pismeni, iako pripadaju Z generaciji, iako su digitalni urođenici?! Velika količina dostupnih informacija i različiti izvori iz kojih potiču te informacije su dominantne karakteristike doba u kojem živimo. Da li učenici mogu da prepoznaju relevantne izvore i od njih stvore znanje? Učenici prvog razreda gimnazije, imaju za cilj da na svoj način prezentuju istorijski razvoj računarskih sistema uz maksimalno angažovanje digitalnih veština. Nastavna jedinica o istorijatu razvoja računarskih sistema je zastupljena u svim obrazovnim profilima. Kako je naša škola mešovita, 4. obrazovna profila, interakcija između učenika predavača i slušaoca se podrazumeva. Istraživanjem različitih izvora, od uđbenika do veb izvora, učenici imaju zadatak da nastavnu jedinicu prezentuju na multimedijalan način. Rad u grupama, sublimacija radova više grupa, uz neophodnu interaktivnost i funkcionalnu primenu učeničkih digitalnih kompetencija, je ishod koji očekujem.

 

Evropska nedelja kodiranja 2018/2019

„Arduino za osnovce“ je radionica koju smo pripremili i izveli ja i moji ućenici u okviru ovogodišnje Evropske nedelje programiranja.

Razvijanje  algoritamskog načina razmišljanja kod učenika nižih razreda je prioritet za postavljanje fundamenta nastavnog predmeta računarstvo i informatika. Cilj radionice je upravo približavanje programiranja učenicima od prvog do četvrtog razreda na vizuelan način koristeći Arduino i praveći paralele sa stvarnim svetom i primena u svakodnevnom životu. Najbolji učenici odeljenja ETR41 i ETR31 su bili voditelji radionice.

Najava Радионица

Pripremljene prezentacije

Programiranje nije tesko

Programiranje za osnovce Arduino

Delić atmosfere

 

 

 

Jednostruko povezane liste

Jedan oblik organizacije dinamičkog čuvanja podataka je jednostruko povezana lista. Lista prestavlja skup čvorova, elemenata, povezani pokazivačima u jednom smeru. Svaki čvor je strukturna promenljiva koja ima najmanje dva polja: jedno za čuvanje podataka, ili informacija o čuvanju podataka,  drugo za čuvanje pokazivača na sledećeg čvora liste.

Deklaracija jednostruko povezanih lista

struct cvor
{
char inf;
struct cvor *sledeci;
};
struct cvor *pocetak_liste;

lista1

Na početak liste pokazuje pokazivačka promenljiva početak_liste. Krajnji čvor liste u elementu za vezu (sledeći) sadrži vrednost NULL. Ako je lista prazna početak_liste takođe, ima vrednost NULL.

Formiranje jednostruke liste

Da bi formirali listu, prvo inicijaliziramo praznu listu dodelom

pocetak_liste=NULL;      

pocetakliste

Kako bi se kreirao prvi dinamički objekat (čvor liste), neophodno je da se dodeli memorijski prostor,
novi=new cvor;, gde je novi pokazivač na strukturu cvor  lista2

Dinamičkom objektu novi, mogu se dodeliti vrednosti
novi→inf= „A“;
novi→ sledeci=pocetak_liste; lista3.PNG

Da bi promenljiva pocetak_liste pokazivala na početak, treba joj dodeliti vrednost promenljivve novi, pocetak_liste=novi; 

lista5.PNG

Prostor za novi cvor liste se odvaja operatorom novi=new cvor;

lista4

Nakon novi→inf=“B“;
            novi→sledeci=pocetak_liste; Informacioni deo čvora dobija vrednost, uključuje se u  listu i to na njen početak lista 6

Da bi promenljiva pocetak_liste pokazivala na početak, ponavlja se dodela pocetak_liste=novi;

 lista7

Pr.1 
Formirati i ispisati jednostruko spregnutu listu?

Rešenje:

#include <cstdlib>
#include <iostream>

using namespace std;
/* Definicija cvora liste*/
struct cvor
{
char pod;
cvor* sledeci;
};
/*Funkcija za ispis liste*/
void ispis(cvor *tekuci)
{
while(tekuci!=NULL)
{
cout<<tekuci->pod<<;
tekuci=tekuci->sledeci;
}
return;
}

int main(int argc, char *argv[])
{
char ceo;
cvor *pocetni, *novi;
pocetni=NULL;
cout<<„Unesi sadrzaj liste“<<endl;
cout<<endl;
while ((ceo=getchar())!=’ ‘)
{
novi= new cvor;
novi->pod=ceo;
novi->sledeci=pocetni;
pocetni=novi;

}
ispis(pocetni);

system(„PAUSE“);
return EXIT_SUCCESS;
}

Pr. 2
Kreiraj i ispisi jednostruko spregnutu listu ciji elementi su celi brojevi?

Rešenje:

#include <cstdlib>
#include <iostream>

using namespace std;
/* Definicija cvora liste*/
struct cvor
{
int pod;
cvor* sledeci;
};
/*Funkcija za ispis liste*/
void ispis(cvor *tekuci)
{
while(tekuci!=NULL)
{
cout<<tekuci->pod<<endl;
tekuci=tekuci->sledeci;
}
return;
}

int main(int argc, char *argv[])
{
int ceo;
cvor *pocetni, *novi;
pocetni=NULL;
cout<<„Unesi sadrzaj liste“<<endl;
cout<<endl;
while (ceo!=9999)
{
cout<<„Unesi ceo broj kao element liste“<<endl;
cout<<„Za kraj unesi 9999″<<endl;
cin>>ceo;
if (ceo!=9999)
{
novi= new cvor;
novi->pod=ceo;
novi->sledeci=pocetni;
pocetni=novi;
cout<<endl;
}
}
ispis(pocetni);
system(„PAUSE“);
return EXIT_SUCCESS;
}

 

Pr.
Kreiraj jednostruko spregnutu listu pri čemu novi čvor se ubacuje na kraj liste?

Rešenje:

#include <cstdlib>
#include <iostream>

using namespace std;
/* definicija strukturnog podatka cvor*/
struct cvor
{
char inf;
struct cvor *sledeci;
};
void pisi (cvor *tekuci)
{
while (tekuci!=NULL)
{
cout<<tekuci->inf<<endl;
tekuci=tekuci->sledeci;
}
return ;
}
int main(int argc, char *argv[])
{
cvor *novi;
cvor *pocl=NULL;
cvor *krajl=NULL;
char ch;
cout<<„Ünesi sadryaj liste“<<endl;
while ((ch=getchar())!=’ ‘)
{
novi= new cvor;
novi->inf=ch;
if(pocl==NULL)
{
pocl=novi;
}
else
{
krajl->sledeci=NULL;
}
krajl=novi;
krajl->sledeci=NULL;
cout<<„Sadrzaj liste“<<endl;
pisi(pocl);
}

system(„PAUSE“);
return EXIT_SUCCESS;
}

 

 

 

Zadaci- dinamicki nizovi

Pr. 1. 

Napravite program koji sumira elemente celobrojnog niza koristeći dinamičke nizove, alociranu memoriju?

Rešenje:

#include <cstdlib>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
int i,n, s=0;
cout<<„Unesi broj elemenata niza“<<endl;
cin>>n;
int *pniz= new int (n);
for( i=0;i<n;i++)
{
cout<<“ Unesi „<<i+1<<“ element niza „<<endl;
cin>>pniz[i];
s+=pniz[i];
}
cout<<“ Suma elemenata alociranog niza je s=“<<s<<endl;
delete[]pniz;
system(„PAUSE“);
return EXIT_SUCCESS;
}

Isti zadatak, ali uradjen korišćenjem funkcije suma koja unosi elemente alociranog, dinamičkog niza i iste sumira

#include <cstdlib>
#include <iostream>

using namespace std;
int suma(int *pniz, int duzina)
{
int i, s=0;
for( i=0;i<duzina;i++)
{
cout<<“ Unesi „<<i+1<<“ element niza „<<endl;
cin>>pniz[i];
s+=pniz[i];
}
return s;
}
int main(int argc, char *argv[])
{
int i,n, s=0;
cout<<„Unesi broj elemenata niza“<<endl;
cin>>n;
int *pniz= new int [n];
cout<<“ Suma elemenata alociranog niza je s=“<<suma(pniz,n)<<endl;
delete[]pniz;
system(„PAUSE“);
return EXIT_SUCCESS;
}

Pr. 2. Šta ispisuje sledeći program?

#include <cstdlib>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
int a[]={0, 1, 2, 3, 4};
int *p;
int i;
for (p=a, i=0;p<&a[4];p++)
{
cout<<*p<<endl;
}
cout<<“ „<<endl;
for (p=&(a[0]), i=0;p+i<a+4;p++,i++)
{
cout<<*(p+i)<<endl;

}
cout<<“ „<<endl;
for (p=a+4, i=0;i<=4;i++)
{
cout<<p[-i]<<endl;
}

system(„PAUSE“);
return EXIT_SUCCESS;
}

Rešenje:

dinamickiniz2

 

Dinamički nizovi

Dinamička dodela memorije omogućava rad sa nizovima čiji broj elemenata se definiše u toku izvršavanja programa. To je moguće zato što pokazivač na neki tip podataka može da pokazuje ne samo na memorijski prostor veličine jednog takvog podatka, već  i na prostor proizvoljne veličine.

Pr.  Napišite program koji:

  • kreira dinamički niz čiji broj elemenata specificira korisnik?
  • elemente niza unosite preko tastature?
  • koliko je broj elemenata niza koji su negativni?
  • kreirajte novi niz čiji elementi su negativni elementi prvog niza?

Rešenje:

#include
#include

using namespace std;
/* funkcija unos unosi elemente prvog niza*/
int unos (int *pok, int vrednost)// funkcija vraca vrednost, prebrojava koliko elemenata je negativno
{
int br=0, i;
for (i=0;i<vrednost;i++) { cin>> pok[i];
if (pok[i]<0)
{
br++;
}
}
return br;
}
/* funkcija ispis ispisuje elemente niza*/
void ispis (int *pok, int vrednost)
{
int i=0;
cout<<„elementi niza“<<endl;
for (i=0;i<vrednost;i++)
{
cout<<pok[i]<<endl;
}
return;
}
/* funkcija koji kreira novi niz ciji broj elemenata zavisi od broja negativnih elemenata prvog niza*/
void noviniz (int *pok1, int *pok2, int vrednost)
{
int i, j;
i=0;
j=0;
for (i=0;i<vrednost;i++)
{
if (pok1[i]<0)
{
pok2[j]=pok1[i];
j++;
}
}
return ;
}

int main(int argc, char *argv[])
{
int n1, n2;
cout<<„Unesi velicinu prvog niza?“<<endl; cin>>n1;
int *pokazivac1=new int (n1);//alociranje prvog niza

n2=unos(pokazivac1,n1);// pozivom funkcije unos dobija se broj elemenata drugog niza
cout <<„U prvom nizu koji ima „<<n1<<“ elemenata, negativni su „<<n2<<“ elementi“<<endl;
cout<<“ „<<endl;
cout <<“ Prikaz elemenata prvog niza“<<endl;
ispis(pokazivac1,n1);// elemeni prvog niza
delete []pokazivac1;
int *pokazivac2= new int(n2);// alokacija drugog niza
noviniz(pokazivac1, pokazivac2, n1);//kreiranje drugog niza
cout <<“ Prikaz elemenata drugog niza“<<endl;
ispis (pokazivac2,n2);
delete [] pokazivac2;
pokazivac1=0;
pokazivac2=NULL;
system(„PAUSE“);
return EXIT_SUCCESS;
}

Dinamickinizresenje

Izvor:

Dinamički podaci

Korišćenjem naredbama za definisanje podataka vrši se statička dodela memorijskog prostora, što znači, u vreme prevođenja programa se zna broj podataka koji se koriste u toku izvršavanja programa.

Deklaracijom niza definiše se tačan, maksimalan,  broj elemenata niza, što može dovesti do nepotrebno zauzimanje memorije. U slučajevima kada je velik broj podataka može se desiti da obrada bude nemoguća.

Deo memorije u koji se smeštaju statički definisani podaci naziva se statička zona memorije. 

Ponekad, veličina memorije koja će se zauzeti se nemože specificirati. Primer, šta ako treba kreirati niz elemenata tipa student, a broj studenata se može otkriti samo za vreme izvršavanja programa, kao parametar koji je specificiran od strane korisnika?

Ovaj problem se rešava dinamičkimim alociranjem memorije. Deo memorije u kojem se vrši dinamička dodela prostora u vreme izvršavanja programa, naziva se dinamička zona memorije. Podaci u dinamičkoj zoni memorije nazivaju se dinamički podaci. Dinamički podaci stvaraju se na zahtev programera i postoje dok programer ne zatraži njihovo uništenje. Neophodno je brisanje dinamičke zone memorije, kako bi se oslobodio memorijski prostor koji je bio zauzet stvanjem iste.

C++ omogućava dinamičko alociranje memorije korišćenjem operatora new, ako je potrebno alociranje za jedan element ili new[n], ako je potrebno alociranje memorije za n elemenata. Rezultat ovih operacija je pokazivač do bloka memorije koji je rezervisan.

Veoma je bitno, nakon korišćenja rezervisane memorije, da se ista obriše. C++ briše alociranu memoriju pomoću operatora delete, za jedan element i delete[], za više elemenata.

Pr. 

#include
#include

using namespace std;

int main(int argc, char *argv[])
{
int *pniz;
pniz = new int;
*pniz = 2;
cout << *pniz << endl; //stampa ‘2’
delete pniz; // VAZNO

int N = 100;
pniz = new int[N]; //niz od 100 elemenata
pniz[5] = 3;
cout << pniz[5] << endl; //stampa ‘3’
delete [] pniz; // VAZNO!!!
system(„PAUSE“);
return EXIT_SUCCESS;
}

alociranje

Alociranje memorije

Pr. Kreiranje anonimne promenljive

anonimna varijabla

Nabrajanja

Nabrajanje  konstante su celobrojne simbolicke konstante kojima su vrednosti dodeljene eksplicitno ili  implicitno, nabrajanjem njihovih imena u jednom nizu. Skup odjednom nabrojenih konstanti cini jedno nabrajanje, koje se moze smatrati tipom podataka koji je definisao programer.

Definisanje nabrajanja:

enum ime_nabrajanja {IME_KONSTANTE=vrednost,

IME_KONSTANTE=vrednost,…};

Ime nabrajanja je identifikator koji sluzi za identifikaciju datog nabrajanja. Moze da se izostavi, ali kasnije nije moguce definisati podaci tipa nabrajanja.

IME KONSTANTE je identifikator, koji predstavlja po jednu simbolicku konstantu. Uobicajeno je da imena konstante se pisu samo velikim slovima.

Vrednosti pojedinih simbolickih konstanti mogu da se odrede konstantnim celobrojnim izrazima. Ako iza konstante nema =vrednost, konstanta ce imati vrednost koja je za jedan veca od predhodne konstante u nizu. Ako iza prvog identifikatora u nizu nema vrednosti, prva konstanta imace vrednost 0.

Pr.

enum {NE, DA};

enum { MIN=10, MAX=100, POZELJNO=20};

enum Kvartal1{JAN=1, FEB, MART, APRIL};

typedef enum {CRNA, SIVA, SMEDJA, CRVENA} Boja;

typedef enum Kvartal1 mesec=JAN;

Boja booja=CRVENA +2;

Unije

Unije su složeni tipovi podataka koji omogućavaju da se u isti memorijski prostor, u različitim trenucima, smeštaju podaci različitih tipova.

Unije se difinišu naredbom union, sve ostalo je kao i kod struktura, navode se polja koja su različitog tipa.

Za razliku od struktura, kod kojih sva polja imaju definisanu vrednost, kod unije samo jedno polje u datom trenutku ima definisanu vrednost, polje kome je posljednje dodeljena vrednost.

Ako se inicijalizira unija, u zagradama se stavlja samo jedna vrednost i ako se ne navede čija je vrednost, dodeljuje se  prvom polju

Pr.

struct s {                                                                 union u {
int i;                                                                                int i;
float d;                                                                            float d;
char *c;                                                                          char *c;
};                                                                                 };

Prikaz u operativnoj memoriji:

s: s.i, s.d, s.c -sizeof s, polja se smeštaju u operativnoj memoriji jednoza drugim i svakom od polja se može dodeliti vrednost. Veličina strukture je  jednaka zbiru veličine polja.

U slučaju unije, sva polja se smeštaju počev od iste adrese. Dodela vrednosti jednog polja uništava ranije dodeljenu vrednost nekom drugom polju. Veličina unije odgovara veličini najvećeg polja. (u: u.i
u.d
u.c
– sizeof u)

Pr.1

typedef union u{
int i;
float f;
char c;
} u;

main()
{
u unija;
unija.c=’A’;
unija.i=5;

/* Dozvoljen je pristup samo poslednje dodeljenom clanu unije */
cout<<„Trenutna vrednost unije je,unija.i“<<unija.i; /* U redu je */

/* Pogresno bi bilo da se napise
cout<<„Trenutna vrednost unije je unija.c“<<unija.c;
*/
}

Pr.2 

#include
#include
using namespace std;
union ceo_ili_realan{
int ceo;
float realan;
};
int main(int argc, char *argv[])
{
ceo_ili_realan x;
cout<<„Unesi ceo broj?“<<endl; cin>>x.ceo;
cout<<“ Unija ima vrednost „<<x.ceo<<endl;
cout<<„Unesi realan broj ?“<<endl; cin>>x.realan;
cout<<“ Unija ima vrednost „<<x.realan<<endl;
system(„PAUSE“);
return EXIT_SUCCESS;
}