1 / 49

STRUCTURI DE DATE ALOCATE STATIC ŞI DINAMIC

STRUCTURI DE DATE ALOCATE STATIC ŞI DINAMIC. Scopul lucrării. Prezentare. CUPRINSUL LUCRARII. Cap. I: Structuri de date. Cap. II: Structuri de date alocate static. Cap. III: Alocarea dinamică a memoriei. Cap. IV : Consideraţii metodice privind predarea structurilor de date.

onofre
Download Presentation

STRUCTURI DE DATE ALOCATE STATIC ŞI DINAMIC

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. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. STRUCTURI DE DATE ALOCATE STATIC ŞI DINAMIC Scopul lucrării Prezentare

  2. CUPRINSUL LUCRARII Cap. I: Structuri de date Cap. II: Structuri de date alocate static Cap. III: Alocarea dinamică a memoriei Cap. IV : Consideraţii metodice privind predarea structurilor de date Cap. V : Probleme propuse • back

  3. CAPITOLUL I: STRUCTURI DE DATE • I.1. Conceptul de structură de date. Clasificarea structurilor de date. • I.2. Structuri statice. • I.2.1. Articolul • I.2.2. Tabloul • I.2.3 Mulţimea • I.3. Structuri semistatice • I.3.1 Stiva. • I.3.2 Coada. • I.3.3 Tabela de dispersie. • I.4. Structuri dinamice. • I.4.1 Lista liniară. • I.4.2 Arborele. • I.4.3. Reţeaua. • I.5. Structuri dinamice externe Cuprins

  4. CAPITOLUL II: STRUCTURI DE DATE ALOCATE STATIC • II.1.Structura memoriei la execuţia unui program. • II.2.Variabile statice. Alocarea statică a memoriei. • II.3.Reprezentarea secvenţială a listelor liniare. • II.3.1 Stiva. • II.3.2 Coada. • II.3.3 Liste oarecare. • II.4.Reprezentarea înlănţuită a listelor liniare. • II.4.1 Stiva • II.4.2 Coada • II.4.3 Lista simplu înlănţuită • II.4.4 Lista circulară • II.4.5 Lista dublu înlănţuită • II.5.Comparaţie între alocarea secvenţială şi alocarea înlănţuită Prezentare Cuprins

  5. CAPITOLUL III: ALOCAREA DINAMICĂ A MEMORIEI • III.1.Variabile dinamice. Tipul reper. • III.2.Structuri dinamice de date. • III.2.1 Stiva. • III.2.2 Coada. • III.2.3 Lista simplu înlănţuită. • III.2.4 Lista circulară. • III.2.5 Lista dublu înlănţuită. • III.3. Comparaţie între alocarea statică şi alocarea dinamică. Cuprins

  6. CAPITOLUL IV: CONSIDERAŢII METODICE PRIVIND PREDAREA STRUCTURILOR DE DATE DE TIP LISTĂ, STIVĂ, COADĂ • IV.1. Consideraţii generale • IV.1.1. Principiile didactice • IV.1.2 Obiectivele majore ale studiului informaticii. Precizarea obiectivelor. • IV.1.3. Metode generale de învăţare • IV.1.4. Instrumente(mijloace de predare) • IV.1.5. Metode de evaluare pentru atingerea obiectivelor • IV.2. Organizarea lecţiei de informatică • IV.2.1. Calitatea cunoştinţelor asimilate • IV.2.2. Formarea limbajului de specialitate • IV.2.3. Exprimarea fluentă în limbajul de specialitate. Exerciţiul oral. • IV.2.4. Repetarea materiei parcurse • IV.2.5. Evaluarea rezultatelor şcolare. Modele de teste şi fişe de evaluare. • IV.2.6. Aprecierea cunoştinţelor elevului • IV.3. Planificarea şi pregătirea profesorului pentru lecţie. • IV.3.1. Planificarea activităţii didactice • IV.3.2. Etapele esenţiale ale proiectării demersului didactic • IV.3.3. Modele de proiecte de tehnologie didactică Prezentare Cuprins

  7. Începând cu a doua jumătate a secolului al XX-lea, apariţia şi dezvoltarea calculatoarelor electronice au declanşat o nouă revoluţie în toate domeniile vieţii economice şi sociale. La baza acestei revoluţii stau cercetările fundamentale din domeniul matematicii şi realizările din domeniul microelectronicii. Diversificarea spectaculoasă a mijloacelor tehnice din domeniul microelectronicii a dus la o dezvoltare continuă a software-ului, necesitând totodată adecvarea structurilor de date la aplicaţii din ce în ce mai complexe. Astfel au apărut structurile de date dinamice, pe lângă cele statice şi semistatice, care permit o alocare dinamică atât în cadrul structurii cât şi la nivelul întregii structuri. Lista liniară ca structură de date dinamică s-a dovedit a fi utilă într-o gamă foarte variată de aplicaţii, unde se pot obţine economie de timp şi memorie, o minimizare a numărului de operaţii, ajungându-se la algoritmi eficienţi şi, implicit, la programe fiabile, performante. Foarte multe produse software care utilizează un volum mare de date folosesc structuri de date dinamice. O primă problemă ce apare în prelucrarea structurilor de date este legată de reprezentarea în memoria internă şi pe suporturile externe. Lucrarea are drept scop prezentarea câtorva modalităţi de reprezentare, evidenţiindu-se avantajele fiecăreia în parte. • back

  8. Tipurile de date de care avem nevoie în rezolvarea diferitelor probleme fie există ca atare în limbajul de programare ales, fie se pot declara cu ajutorul tipurilor de date elementare. În organizarea datelor, conform logicii algoritmului de rezolvare, datele de diferite tipuri se grupează în structuri, denumite structuri de date. O structură de date poate ocupa în memorie o zonă de dimensiune constantă, în care elementele componente ocupă tot timpul execuţiei programului acelaşi loc. O astfel de structură se numeşte statică. Alocarea de memorie făcută pentru o structură statică este o alocare statică atât la nivelul întregii structuri, cât şi pentru fiecare componentă în parte. Dacă o structură de date ocupă o zonă de dimensiune constantă, dar elementele componente ocupă un loc variabil în timpul execuţiei programului atunci o astfel de structură se numeşte semistatică. Pentru o structură semistatică alocarea este statică la nivelul structurii şi dinamică la nivelul componentelor, Dacă o structură de date ocupă în memoria internă o zonă care se alocă în timpul execuţiei programului pe măsura nevoii de prelucrare, fără a avea o dimensiune constantă, atunci structura este dinamică. Pentru o structură dinamică alocarea este dinamică atât la nivelul componentelor cât şi la nivelul întregii structuri. • back

  9. Toate variabilele declarate într-o secţiune var sunt alocate static şi se numesc variabile statice. O variabilă statică este declarată într-o secţiune var a unui bloc sub un anumit nume, prin intermediul căruia va fi referită în cadrul acestuia, alocându-i-se memorie la activarea blocului. Variabila va exista(va ocupa memoria alocată ei) atâta timp cât blocul în care a fost declarată este activ. În urma declarării, compilatorul Pascal rezervă automat pentru fiecare variabilă statică o zonă fixă în memoria internă RAM, alcătuită din locaţii succesive de memorie. Mărimea acestei zone depinde de tipul variabilei: 2 octeţi pentru integer , 6 pentru real, 1 octet pentru char etc. Spaţiul de memorie aferent unor astfel de date se defineşte şi se rezervă la dimensiune maximă, prestabilită, ca spaţiu propriu care nu poate fi disponibilizat şi nici împărţit cu alte date, chiar dacă, în momentul diverselor execuţii ale programului, nu este în întregime utilizat (rezervare statică sau la momentul compilării). Există două moduri de alocare a acestor structuri de date: alocare secvenţialăşi alocare înlănţuită • back

  10. Elementele listei vor fi stocate într-un tablou de înregistrări. Câmpurile unei înregistrări vor conţine în mod specific informaţiile pe care dorim să le reprezentăm în listă. Memorarealistei liniare în memoria calculatorului se va realiza prin memorarea elementelor listei în locaţii succesive de memorie, nod după nod. Se va folosi un tablou în care vor fi reţinute elementele listei, tabloul având dimensiunea max. const nmax=20; type element=record câmp1:tip_info_1; câmp2:tip2_info_2; ………….. end; lista=array[1..nmax] of element; var l:lista; PRIM,ULTIM:integer; Variabilele cu ajutorul cărora vom manipula elementele listei sunt :PRIM şi ULTIM care identifică primul, respective ultimul element al listei. • back

  11. În cazul reprezentării înlănţuite, elementele listei nu sunt aşezate succesiv, fiind nevoie să precizăm în mod suplimentar ordinea lor reală. Fiecare element al listei trebuie să indice unde se află elementul următor(anterior). În acest caz va trebui să ştim unde se află primul element al listei, pentru a avea acces apoi, pe baza înlănţuirilor, şi la elementele următoare ale listei. De asemenea, este necesar să ştim când nu mai există succesor(este vorba de ultimul element). Implementarea alocării înlănţuite se realizează cu ajutorul vectorilor. Lista va fi un vector care va conţine informaţia ataşată nodului(de exemplu, un număr întreg) şi adresa nodului următor. Ultimul element nu are nici un succesor; ca urmare, vom declara o constantă, numită NUL, care va indica o intrare fictivă a tabloului. Pentru a nu face confuzie între informaţia de adresă, care este tot de tip integer, şi restul informaţiei memorate, vom „reboteza” tipul integer. • next

  12. Const nmax=100; nul=0; Type adresa=integer; nod=record inf:integer; urm:adresa; end; Pentru memorarea listei folosim un vector care are componente de tip nod, descris mai jos: lista=array[1..nmax] of nod; ocupat= array[1..nmax] of 0..1; - reţine 1 dacă componenta corespunzătoare din L memorează un nod, sau 0 în caz contrar. var L:lista; Exemplu: Vectorul L: ((7,3),( , ),(5,4),(1,5),(4,0),( , )) Vectorul o:(1,0,1,1,1,0) Lista este: 7, 5, 1, 4. • back

  13. Alocarea înlănţuită necesită spaţiu suplimentar de memorie pentru gestionarea locaţiilor libere/ocupate. • Extragerea unui nod dintr-o listă liniară alocată înlănţuit se realizează mult mai uşor decât extragerea unui nod dintr-o listă liniară alocată secvenţial. Pentru alocarea secvenţială o asemenea ştergere implică în general deplasarea unei părţi din listă în locaţii diferite. O concluzie similară se obţine în cazul inserării unui nod în cadrul unei liste liniare. • Accesul la diferite părţi din listă este mult mai rapid în cazul alocării secvenţiale. Aşa cum am văzut, locaţia nodului k din listă în cazul alocării secvenţiale este o funcţie liniară de k, deci pentru a obţine accesul la acest nod se consumă un timp constant. În cazul alocării înlănţuite acest acces necesită k iteraţii urmărind referinţele a k-1 noduri. Astfel utilizarea memoriei înlănţuite este mai eficientă când parcurgerea listei se face secvenţial şi nu aleatoriu. • Alocarea înlănţuită permite o mai mare flexibilitate în ceea ce priveşte reunirea a două sau mai multor liste într-o singură listă sau desfacerea unei liste în mai multe părţi. back

  14. Spre deosebire de variabilele statice, variabilele dinamice se alocă şi se distrug la cererea utilizatorului; ele nu sunt declarate într-o secţiune var, deci nu se pot identifica prin nume şi nici nu există pe toată durata activării blocului în care s-au creat. Din acest motiv, variabilele dinamice prezintă un mare avantaj comparativ cu cele statice, şi anume posibilitatea utilizării mult mai eficiente a memoriei. Variabilele dinamice se alocă dinamic într-o zonă specială, numită HEAP care este eliberată la „distrugerea” variabilei dinamice. Neavând nume, variabilele dinamice trebuie referite prin intermediul altor variabile, numite din acest motiv variabile reper(sau variabile referinţă). Zona HEAP cuprinde, de obicei, memoria liberă rămasă în momentul executării unui program. Dimensiunea zonei STACK şi/sau dimensiunea minimă şi maximă a zonei HEAP pot fi specificate prin comanda MEMORY SIZES din meniul OPTIONS sau prin directiva de compilare $M. Dimensiunea minimă implicită a zonei HEAP este 0, iar cea maximă 640 KB. Variabilele reper sunt alocate static şi au ca valori adrese ale unor variabile dinamice de un anumit tip. • back

  15. Liste. Noţiuni introductive Lista simplu înlănţuită Definire Operaţii specifice Lista dublu înlănţuită Definire Operaţii specifice

  16. Liste. Noţiuni introductive Definiţie : O listă este o structură de date dinamică în care atât adăugarea cât şi extragerea unui element se poate face de pe orice poziţie. Există mai multe tipuri de liste: • Liste simplu înlănţuite • Liste dublu înlănţuite • Liste circulare • Stive, cozi(cazuri particulare de liste) • next

  17. informaţia utilă adresă de legătură Inf urm type adresa=^ nod ; nod= record inf :tip_informaţie; urm : adresă; end; Var prim ,ultim :adresă Lista simplu înlănţuită este o structură de forma: inf urm inf nil inf urm inf urm ........... ultim prim Nodurile unei liste simplu înlănţuite prezintă două zone : Observaţie : Ultimul element al listei (cel aflat laadresa ultim) conţine ca informaţiede legătură valoarea constantei predefinite nil, cu semnificaţia cădupă acest element nu mai există în listă nici un alt element . Pentru a gestiona lista se folosesc două variabile reper : • primcare conţine adresa primului element din listă ; • ultim care conţine adresa ultimului element din listă;

  18. Operaţii specifice listei simplu înlănţuite I.Crearea primului nod II.Adăugare de noduri : adăugare la sfârşitul listei adăugare la începutul listei adăugare după un nod precizat prin adresă adăugare în faţa unui nod precizat prin adresă III.Ştergerea unui nod din listă ştergerea primului nod din listă ştergerea ultimului nod din listă ştergerea unui nod precizat prin valoare sau adresă IV.Parcurgerea listei V.Căutarea unui nod în listă

  19. Operaţii specifice listei dublu înlănţuite Crearea primului nod Adăugare de noduri : adăugare la sfârşitul listei adăugare la începutul listei adăugare după un nod precizat prin adresă adăugare în faţa unui nod precizat prin adresă Ştergerea unui nod din listă ştergerea primului nod din listă ştergerea ultimului nod din listă ştergerea unui nod precizat prin adresă Parcurgerea listei Căutarea unui nod în listă

  20. se alocă spaţiu de memorie pentru noul nod new (prim); se completează informaţia utilă din noul nod write (‘dati informatia :’) ; readln (prim^.inf) ; se completează zona de legătură cu nil prim^.urm:=nil; se memorează adresa nodului prim în pointerul ultim ultim:=prim Procedure creare_prim (var prim,ultim:adresa); begin new (prim) ; write (‘dati informatia :’) ; readln (prim ^.inf) ; prim ^.urm:=nil ; ultim:=prim; end; Observaţie : Lista are un singur nod. Se folosesc doi pointeri care-i memorează adresa. Creare 1. inf urm 2. inf nil prim 3. ultim 4.

  21. ultim procedure adaugare_sfarsit(var ultim:adresa);var p:adresa;begin new(p); write(‘dati informatia:’); readln(p^.inf); p^. urm:=nil; ultim ^.urm:=p; ultim:=p;end; Adăugare de noduri la sfîrşitul listei inf urm inf urm inf urm inf urm inf urm inf urm inf urm nil inf inf nil . . . . . . p prim 1. se alocă spaţiu in heap pentru noul nod new(p); completarea informaţiei utile din nodul p write(‘dati valoarea: ‘); readln(p^.inf); se va completa zona de legătură a nodului p cu valoarea constantei nill p^.urm:=nil; se leagă nodul p la lista ultim^.urm:=p; se actualizează valoarea variabilei ultim cu adresa lui p ultim:=p; 2. 3. 4. 5.

  22. Adăugare de noduri la începutul listei prim procedure adaugare_inceput(var prim:adresa); var p:adresa; begin new(p); write(‘dati informatia:’); readln(p^. inf); p ^.urm:=prim; prim:=p; end; inf urm inf urm inf urm inf urm inf urm infurm inf nil inf urm inf . . . . . . inf ultim p se alocă spaţiu în heap pentru un nou nod notat p new(p); se completează informaţia utilă write(‘dati valoarea:’); read(p^.inf); se completează zona de legătură a nodului p cu adresa primului nod din lista p ^.urm :=prim; se reactualizează adresa primului nod din lista cu valoarea nodului p prim:=p ; 1. 2. 3. 4.

  23. inf urm q procedure adauga_dupa(p:adresa); var q:adresa; begin new(q); writeln(‘dati informatia:’); readln(q^.inf); q^.urm:=p^.urm; p^.urm:=q; end; Adăugare de noduri în listă după nodul de adresă p inf urm inf urm inf urm urm inf urm . . . . . . inf . . . . . q^.urm p^.urm p inf urm inf urm 1. se alocă spaţiu în heap pentru noul nodnew(q); 2. se completează zona inf pentru noul nod writeln(‘dati informatia:’); readln(q^.inf); 3. se leagă noul nod la listăq^.urm:=p^.urm; p^.urm:=q;

  24. inf urm q procedure adauga_in_fata(p:adresa); var q:adresa; begin new(q); q^.inf:=p^.inf; write(‘dati informatia:’); readln(p^.inf); q^.urm:=p^.urm; p^.urm:=q; end; Adăugarea în faţa unui nod precizat prin adresă inf urm inf urm inf urm urm inf inf inf urm . . . . . . . . . . . p p^.urm q^.urm inf urm inf urm se alocă spaţiu pentru noul nod q new(q ); se copie informaţia din nodul p în nodul q q^.inf:=p^.inf; se citeşte noua informaţie în p write(‘dati informatia: ’); readln(p^.inf); se leagă nodul q la listă q^.urm:=p^.urm; se leagă nodul p de nodul q p^.urm:=q; 1. 2. 3. 4. 5.

  25. inf urm inf nil ultim q q q q q Procedure sterge_ultim(var ultim:adresa); var q:adresa; begin q:=prim; while q^.urm<>ultim do q:=q^.urm; q^.urm:=nil; dispose(ultim); ultim:=q; end; Ştergerea ultimului nod din listă inf urm inf urm inf urm inf urm inf inf urm urm nil ................. prim ultim 1. se parcurge lista pentru a afla adresa penultimului nod,adresă pe care o vom memora în pointerul q q:= prim; while q^.urm<>ultim do q:=q^.urm; penultimul nod va deveni ultimul după ştergere,deci legătura sa următoare devine nil q^.urm:=nil; se şterge fizic ultimul nod dispose(ultim); se reactualizează valoarea pointerului ultim ultim:=q; 2. 3. 4.

  26. inf urm inf urm prim Procedure sterge_prim(var prim:adresa); var p:adresa; begin p:=prim^.urm; dispose(prim); prim:=p; end; Ştergerea primului nod din listă inf urm inf urm inf urm inf urm ............. p prim 1. se memorează adresa celui de-al doilea nod din listă înpointerul p, operatienecesară întrucât după ştergere al doilea nod va deveni primul p:=prim^.urm; se şterge fizic primul nod dispose(prim); se reactualizează valoarea pointerului prim prim:=p; 2. 3.

  27. inf urm inf urm p q q Procedure sterge_dupa(p:adresa); var q:adresa; begin q:=prim; while q^.urm<>p do q:=q^.urm q^.urm:=p^.urm; dispose(p); end; Ştergerea unui nod precizat prin adresă inf urm inf urm inf urm inf urm inf nil inf urm ......... ......... prim p^.urm 1. se parcurge lista pentru a afla adresa nodului aflat înaintea cheii de adresă p; adresa o vom memora în pointerul q q:= prim; while q^.urm<>p do q:=q^.urm; adresa memorată în zona urm a nodului p va fi reţinută în zona urm a nodului q q^.urm:=p^.urm se şterge fizicnodul p dispose(p); 2. 3.

  28. Procedure parcurgere(prim:adresa); var p:adresa; begin p:=prim; while p<>nil do begin {prelucrarea informatiei din nodul p} p:=p^.urm; end; end; Parcurgerea listei inf urm inf urm inf urm inf urm inf urm inf nil inf urm inf urm ............... prim p ultim Parcurgem nodurile liste cu ajutorul unui pointer p care, plecând de la primul nod va referi pe rând fiecare nod al listei : prelucrăm informaţia din nodul p, mutăm p la următorul nodşi prelucrarea continuă. Cât timp pointerul p nu a ajuns la sfârşitul listei {p<>nil}: - prelucrăm informaţia din nodul p (p^.inf) - mutăm pointerul p la nodul următor {p:=p^.urm}

  29. Function cauta(prim:adresa;x:byte):adresa; var p:adresa begin p:=prim; while (p^.inf<>x) and (p<>nil) do p:=p^.urm; cauta:=p; end; Căutarea unui nod în listă Cât timp pointerul p nu a ajuns la sfârşitul listei {p<>nil} şi informaţia memorată în zona inf a nodului curent este diferită de x : - mutăm pointerul p la nodul următor Funcţia returnează : - nil, dacă valoarea x nu a fost găsită în listă; - adresa nodului ce are completată zona inf cu valoarea memorată în variabila x;

  30. prim ultim Procedure creare_prim(var prim,ultim:adresa); begin new(prim); write(‘dati informatia:’); readln(prim^.inf); prim^.urm:=nil; prim^.ant:=nil; ultim:=prim; end; Crearea primului nod 1. se alocă spaţiu pentru nodul prim new(prim); completarea zonei inf pentru noul nod write(‘dati informatia:’); readln(prim^.inf); se va completa zona de legătură urm cu constanta nil prim^.urm:=nil; se va completa zona de legătură ant cu valoarea constantei nil prin^.ant:=nil; pointerul ultim memoreaza adresa nodului prim ultim:=prim 2. inf nil nil 3. 4. 5.

  31. p ultim Procedure adaugare_sfarsit(var ultim:adresa); var p:adresa; begin new(p); write(‘dati informatia:’); readln(p^.inf); p^.urm:=nil; p^.ant:=ultim; ultim^.urm:=p; ultim:=p; end; Adăugarea la sfîrşitul listei ant inf urm ant inf urm ant inf ant inf nil nil urm .............. ultim 1. se alocă spaţiu pentru noul nod p new(p); se completează zona inf cu informaţia utilă write(‘dati informatia’); readln(p^.inf); completarea zonei urm cu constanta nil p^.urm:=nil; completarea zonei de legătură ant a nodului p cu adresa ultimului nod din listă p^.ant:=ultim; se leagă nodul p de nodul ultim ultim^.urm:=p; se actualizează valoarea variabilei ultim cu adresa lui p ultim:=p; 2. 3. 4. 5. 6.

  32. prim p Procedure adauga_in_fata(var prim:adresa); var p:adresa; begin new(p); write(‘dati informatia:’); readln(p^.inf); p^.ant:=nil; prim^.ant:=p; p^.urm:=prim; prim:=p; end; Adăugarea la începutul listei ant inf urm ant inf urm inf urm nil inf urm ant nil .............. 1. alocarea spaţiului în heap pentru noul nod notat p new(p); completarea zonei inf cu informaţia utilă write(‘Dati informatia:’); readln(p^.inf); completarea zonei de legătură ant a nodului p cu constanta nil p^.ant:=nil; se leagă nodul p de nodul prim prim^.ant:=p; p^.urm:=prim; se actualizează adresa primului nod din listă cu valoarea nodului p prim:=p; 2. 3. 4. 5.

  33. ant inf urm q Procedure adauga_in_fata(var p:adresa); var q:adresa; begin new(q); q^.inf:=p^.inf; write(‘dati informatia:’); readln(p^.inf); q^.urm:=p^.urm; q^.urm^.ant:=q; p^.urm:=q; p^.ant:=p; end; Adăugarea în faţa unui nod precizat prin adresă ant inf urm ant ant inf inf urm urm inf ... ... q^.urm p^.urm p ant urm se alocă spaţiu pentru noul nod q new(q ); se copie informaţia din nodul p în nodul q q^.inf:=p^.inf; se citeşte noua informaţie în p write(‘dati informatia: ’); readln(p^.inf); se leagă nodul q la listă q^.urm:=p^.urm; p^.urm^.ant:=q; p^.urm:=q; q^.ant:=p; 1. 2. 3. 4.

  34. ant ant ant inf inf inf urm urm urm q^.urm p p^.urm q Procedure adauga_după(var p:adresa); var q:adresa; begin new(q); write(‘dati informatia:’); readln(q^.inf); q^.urm:=p^.urm; q^.urm^.ant:=q; p^.urm:=q; p^.ant:=p; end; Adăugarea după un nod precizat prin adresă ... ... ant inf urm se alocă spaţiu pentru noul nod q new(q ); se citeşte noua informaţie în q write(‘dati informatia: ’); readln(q^.inf); se leagă nodul q la listă q^.urm:=p^.urm; p^.urm^.ant:=q; p^.urm:=q; q^.ant:=p; 1. 2. 3.

  35. nil inf urm prim Procedure sterge_primul(var prim:adresa); var p:adresa; begin p:=prim^.urm; p^.ant:=nil; dispose(prim); prim:=p; end; p prim Ştergerea primului nod din listă inf urm nil ant .............. 1. memorăm adresa celui de-al doilea nod din listă în pointerul p,operaţie necesară întrucât după ştergere al doilea nod va deveni primul p:=prim^.urm; secompletează zona de legătură ant a pointerului p cu valoarea constantei nil p^.ant:=nil; se şterge fizic primul nod dispose(prim); se reactualizează valoarea pointerului prim prim:=p; 2. 3. 4.

  36. ant inf urm Procedure sterge_nod(p:adresa); begin p^.ant^.urm:=p^.urm; p^.urm^.ant:=p^.ant; dispose(p); end; p Ştergerea unui nod din listă ant inf urm ant inf urm .............. .... p^.urm p^.ant p^.ant^.urm 1. deoarece nodul p se şterge din listă este necesară crearea unor noi legături între: nodul din faţa nodului p şi nodul de după nodul p p^.ant^.urm:=p^.urm; p^.urm^.ant:=p^.ant; se şterge fizic nodul p dispose(p); 2.

  37. Procedure parcurgere(prim:adresa); var p:adresa; begin p:=prim; writeln; write(‘rezultatul este:’); while p<>nil do begin {prelucrarea informatiei din nodul p } p:=p^.urm; end; writeln; end; Parecurgerea listei Parcurgem nodurile liste cu ajutorul unui pointer p care, plecând de la primul nod va referi pe rând fiecare nod al listei : prelucrăm informaţia din nodul p,mutăm p la următorul nodşi prelucrarea continuă. Cât timp pointerul p nu a ajuns la sfârşitul listei {p<>nil}: - prelucrăm informaţia din nodul p (p^.inf) - mutăm pointerul p la nodul următor {p:=p^.urm}

  38. Function cauta(prim:adresa;x:byte):adresa; var p:adresa; begin p:=prim; while( p<>nil) and (p^.inf<>x) do p:=p^.urm; cauta:=p; end; Căutarea unui nod în listă Cât timp pointerul p nu a ajuns la sfârşitul listei {p<>nil} şi informaţia memorată în zona inf a nodului curent este diferită de x : - mutăm pointerul p la nodul următor Funcţia returnează : - nil, dacă valoarea x nu a fost găsită în listă; - adresa nodului a cărui zonă inf este completată cu valoarea memorată în variabila x;

  39. ant inf nil ultim ultim^.ant ultim p Procedure sterge_ultim(var ultim:adresa); var p:adresa; begin p:=ultim^.ant; p^.urm:=nil; dispose(ultim); ultim:=p; end Ştergerea ultimului nod din listă urm inf ant urm inf nil ant .............. se memorează adresa penultimului nod din listă în nodul p p:=ultim^.ant; se completeazăzona urm a nodului p cu valoarea constantei nil deoarece nodul p va deveni ultimul nod din listă p^.urm:=nil; se şterge fizic ultimul nod din listă dispose(ultim); se reactualizează valoarea pointerului ultim ultim:=p; 1. 2. 3. 4.

  40. inf urm nil inf urm ant inf nil ant .....… ultim prim Adresa de legătură cu nodul următor Adresa de legătură cu nodul anterior Informaţia utilă type adresa=^ nod ; nod= record inf :tip_informatie; urm,ant : adresa; end; Var prim ,ultim :adresă Pentru a gestiona lista se folosesc două variabile reper : • primcare conţine adresa primului element din listă ; • ultim care conţine adresa ultimului element din listă; Lista dublu înlănţuită este o structură de forma Nodurile unei liste dublu înlănţuite prezintă trei zone : Observaţie : Ultimul element al listei (cel aflat la adresa ultim) conţine ca informaţie de legăturăcu nodul următor valoarea constantei predefinite nil, cu semnificaţia că după acest element nu mai există în listă nici un alt element .Primul element al listei (cel aflat la adresa prim) conţine ca informaţie de legătură cu nodul anterior valoarea constantei nil, cu semnificaţia că înaintea acestui nod nu mai există nici un alt element. ant inf urm

  41. Planificare calendaristica Proiect de tehnologie didactica Unitate de invatare

  42. Şcoala………………………... Profesor…………………………… Disciplina……………………. Clasa/nr. ore pe săpt./anul……… Planificare calendaristică • Unităţile de învăţare se indică prin titlurile temelor stabilite de către profesor. • În rubrica Obiective de referinţă/Competenţe specifice se trec numerele obiectivelor de referinţă/competenţelor specifice din programa şcolară. • Conţinuturile selectate sunt cele extrase din lista de conţinuturi a programei. • Numărul de ore alocate se stabileşte de către profesor în funcţie de experienţa acestuia şi de nivelul clasei. • Întregul cuprins al planificării are valoare orientativă, eventualele modificări determinate de aplicarea efectivă la clasă putând fi consemnate în rubrica Observaţii.

  43. Şcoala………………………... Clasa/nr. ore pe săpt...………………… Disciplina……………………. Săptămâna/anul………………………… Proiectul unităţii de învăţare Unitatea de învăţare…………………… Nr. ore alocate………………………… • În rubrica referitoare la Conţinuturi apar inclusiv detalieri de conţinut necesare în explicitarea anumitor parcursuri, respectiv în cuplarea lor la baza proprie de cunoaştere a elevilor. • În rubrica Obiective de referinţă/Competenţe specifice se trec numerele obiectivelor de referinţă/competenţelor specifice din programa şcolară. • Activităţile de învăţare pot fi cele din programa şcolară, completate, modificate sau chiar înlocuite de altele, pe care profesorul le consideră adecvate pentru atingerea obiectivelor propuse. Activităţile de învăţare se construiesc prin corelarea obiectivelor de referinţă la conţinuturi şi presupun orientarea către un anumit scop, redat prin tema activităţii. În momentul propunerii lor spre rezolvare elevilor, activităţile de învăţare vor fi transpuse într-o anumită formă de comunicare inteligibilă nivelului de vârstă. • Rubrica Resurse cuprinde specificări de timp, de loc, forme de organizare a clasei, material didactic folosit etc. • În rubrica Evaluare se menţionează instrumentele sau modalităţile de evaluare aplicate la clasă.

  44. PROIECT DE TEHNOLOGIE DIDACTICĂ Data: Obiectul: Informatică Clasa: a XI-a - profil matematică-informatică Tema: Liste simplu înlănţuite. Tipul lecţiei: Lecţie de fixare şi sistematizare. Durata lecţiei: 50 minute Obiectivul funadamental: Recapitularea şi fixarea cunoştinţelor privind modul de declarare şi de utilzare a listelor simplu înlănţuite alocate static. Competenţe specifice: C1.Elevii vor şti să definească structura de date de tip listă C2. Elevii vor şti cum se implementează o listă simplu înlănţuită; C3. Elevii vor şti care sunt operaţiile elementare ce se pot efectua la nivelul unei liste simplu înlănţuite; C4. Elevii vor cunoaşte modul de selectare a unui element, precum şi cum se realizează crearea, respectiv afişarea informaţiilor dintr-o listă simplu înlănţuită; C5. Elevii vor fi capabili să rezolve probleme ce necesită folosirea listelor simplu înlănţuite;

  45. Metode şi procedee didactice: Explicaţia, conversaţia, exerciţiul, demonstraţia. Mijloace de învăţământ: Calculatorul, manualul; Mediul de instruire: Laboratorul de informatică; Forme de organizare: Activitate frontală Resurse: - pedagogice:cursuri de informatică, metodica predării informaticii - oficiale: programa şcolară - temporale: 50 minute - psihologice: cunoştinţele dobândite de către elevi la disciplina informatică

  46. SUCCESIUNEA ŞI DESFĂŞURAREA MOMENTELOR LECŢIEI • I.Moment organizatoric: • obiective urmărite: crearea unei atmosfere specifice bunei desfăşurări a activităţii didactice; • activitatea profesorului: verificarea prezenţei, asigurarea că elevii sunt pregătiţi pentru începerea lecţiei; • activitatea elevului: pregătirea caietului; • metode şi procedee didactice: metoda conversaţiei, explicaţia; • II. Captarea atenţiei şi trezirea interesului pentru lecţie • activitatea profesorului: se va preciza elevilor că urmează a fi recapitulată structura de tip listă simplu înlănţuită şi vor fi rezolvate probleme ce necesită folosirea acestei structuri de date . • activitatea elevului: ascultă şi notează cele prezentate sau notate pe tablă de către profesor şi pune întrebări cu care să poată lămuri contextul în care se va desfăşura lecţia; • metode şi procedee didactice: metoda conversaţiei, metoda problematizării, modelarea;

  47. III.Anunţarea lecţiei Se poartă un dialog pe tema: “Lista simplu înlănţuită”. activitatea profesorului: sunt adresate clasei următoarele întrebări: Care este definiţia unei liste simplu înlănţuite? Ce alte structuri de date cunoaşteţi? Cum se implementează structura de date de tip listă simplu înlănţuită? Care sunt principalele operaţii ce se pot efectua la nivelul unei liste simplu înlănţuite? după care se va propune elevilor spre rezolvare următoarea problemă: Fiind dată o matrice rară (spunem că o matrice este rară dacă cel puţin două treimi din elementele mulţimii sunt nule) să se alcătuiască o listă înlănţuită în care elementele au forma (linia, coloana, valoarea) şi valoarea ≠0. să se listeze elementele aflate pe diagonala principală; să se determine elementul minim de pe diagonala principală; să elimine elementul de valoare maximă; determinaţi suma şi produsul a două astfel de matrici; Datele de intrare se citesc din fişierul text date.txt. activitatea elevului: răspunde la întrebările adresate şi este atent la completările aduse de către profesor după care trece la rezolvarea problemei propuse; metode şi procedee didactice: metoda conversaţiei, a demonstraţiei, a problematizării şi a modelării;

  48. IV.Asigurarea conexiunii inverse -activitatea profesorului: profesorul propune precizarea conţinutului listei pentru matricea: -activitatea elevului: elevii rezolvă pe caiete noile cerinţe. • V. Evaluarea cunoştinţelor dobândite • activitatea profesorului: profesorul verifică corectitudinea soluţiilor scrise de elevi. Elevii care nu au înţeles modul de memorare a matricei cu ajutorul listelor, sunt solicitaţi să iasă la tablă, fiind urmăriţi şi ajutaţi de colegii lor din bancă(care au rezolvat corect) • activitatea elevului: elevii reţin şi notează observaţiile făcute • metode şi procedee: metoda conversaţiei, verificarea frontală b) c) d)

  49. VI. Prezentarea temei pentru acasă -activitatea profesorului:li se propun elevilor spre rezolvare următoarele probleme: Considerând polinoamele cu coeficienţi reali(nenuli), ca fiind reprezentate sub forma unor liste înlănţuite în care un element reprezintă un monom caracterizat prin rangul şi valoarea coeficientului să se determine valoarea unui astfel de polinom într-un punct dat X. Polinomul se va citi din fişierul date.txt iar valoarea lui x se va introduce de la tastatură. Exemplu: Pentru fişierul: 5 0 6 4 –8 12 polinomul corespunzător este: p=5+6*x4-8*x12 Să se determine suma a două astfel de polinoame. Într-o listă simplu înlănţuită se memorează n persoane. Să se verifice dacă, pentru o persoană dată p, există în listă o persoană cu acelaşi nume ca şi p. Dacă nu, să se insereze în poziţia k în listă noua persoană p. Discuţie după valoarea lui k. -activitatea elevului: notează tema în caiet precum şi indicaţiile date de profesor -metode şi procedee folosite: metoda conversaţiei

More Related