”Metodica predării temei: Tipul de date fişier”
Cuprins
Introducere.................................................................................................................3
Capitolul I. Tipul de date fişier. Aspecte teoretice...............................................5
§1. Clasificarea fişierelor.......................................................................................5
§2. Proceduri şi funcţii specifice fişierelor............................................................7
§3. Fişiere text........................................................................................................9
§4. Fişiere cu tip...................................................................................................11
§5. Fişiere fără tip...............................................................................................12
Capitolul II. Metodica predării temei “Tipul de date fişier (file)”...................13
§1. Curriculum pentru învăţămîntul liceal la tema “Tipul de date fişier (file)”. .13
§2.Expunerea temei “Tipul de date fişier (file) în manualul INFORMATICA.
LIMBAJUL PASCAL. MANUAL PENTRU CLASELE IX-XI, autori: Anatol
Gremalschi, Iurie Mocanu, Ion Spinei”...............................................................15
§3. Sugestii şi recomandări metodologice la tema “Tipul de date fişier”............18
§4. Exerciţii şi probleme la tema “Tipul de date fişier”......................................25
§5. Sugestii privind evaluarea..............................................................................56
Concluzii.................................................................................................................66
Bibliografie.............................................................................................................68
2
Introducere
"Dibăcia învăţătorului nu este decât de a trezi curiozitatea minţilor tinere, ca să le potolească apoi această curiozitate, pe care numai fiinţele umane fericite o au vie şi sănătoasă.. Cunoştinţele vîrîte cu de-a sila în minte o astupă şi o înăbuşă. Ca să mistui ştiinţa trebuie s-o fi înghiţit cu poftă.."
Anatole France
O temă destul de dificilă din cursul liceal de informatică este tema „Tipuri
structurate de date. Tipul fişier (file)”.
Despre necesitatea cunoaşterii şi aplicabilitatea tipului de date fişier ne
conving culegerile de probleme la informatică.
Practica arată că elevul trebuie să revină periodic la rezolvarea diferitor
probleme cu aplicarea tipului de date fişier. Acest fapt contribuie la dezvoltarea
gîndirii analitice, a intuiţiei şi a creativităţii, calităţii necesare pentru studierea
ulterioară a informaticii atît la treapta liceală, cît şi în învăţămîntul universitar.
Unii elevi învaţă mai eficient rezolvînd probleme rezolvate. Nu este vorba de
memorarea rezolvării (deşi şi acest lucru este util la o anumită etapă de învăţare, nu
oricine poate rezolva orice, dar oricine poate învăţa o rezolvare), ci de reluarea
rezolvării pe altă cale. În acest scop profesorul poate propune elevilor rezolvarea
unor exemple mai dificile, urmate ulterior de discuţii asupra metodelor de
rezolvare.
Să nu uităm de sfatul lui G.Polya: „Dacă vreţi să învăţaţi să rezolvaţi
probleme, trebuie... să rezolvaţi probleme”.
Teza are drept scop studierea detaliată a temei şi formularea unor metode şi
strategii didactice pebtru predarea – învăţarea – evaluarea temei „Tipul de date
fişier”.
Lucrarea constă din două capitole:
3
Capitolul I constă din 9 paragrafe, unde sunt expuse noţiunile teoretice
generale despre tipul de date fişier şi anume: clasificarea fişierelor, fişiere cu tip,
fişire fără tip, fişiere text, proceduri şi funcţii definite asupra tipului de date fişier.
Capitolul II constă din 5 paragrafe. Acest capitol conţine informaţii
referitoare la: curriculum liceal la tema „Tipul de date fişier (file)”, unde sunt
prezente numărul de ore (opţional) şi aranjarea lor pentru predare-învăţare; tratarea
temei „Tipul de date fişier (file)” în manualul Informatica. Limbajul de
programare Pascal. Manual pentru clasele IX-XI de Anatol Gremalschi, Iurie
Mocanu şi Ion Spinei; necesitatea utilizării problematizării la lecţiile de
informatică. La fel se conţine un şir de probleme de dificultate diferită ce pot fi
propuse elevilor pentru antrenament şi consolidarea cunoştinţelor la tema „Tipul de
date fişier (file)”. Ultimul paragraf al acestui capitol, şi anume „Sugestii privind
evaluarea” aduce cititorului un set de teste de evaluare formativă şi sumativă ce au
ca scop determinarea nivelului de cunoştinţe a elevilor, a abilităţilor lor,
determinarea erorilor şi posibilitatea lichidării lor.
Prezenta lucrarea are drept scop familiarizarea cititorului cu noţiuni de
predare – învăţare – evaluare a temei tipul fişier în liceu. Această lucrare poate fi
utilă studenţilor şi profesorilor.
4
Capitolul I. Tipul de date fişier. Aspecte teoretice.
§1. Clasificarea fişierelor
Fişierul este o colecţie organizată de informaţii (date, rezultate, programe
sursă, programe direct executabile etc.), dispuse pe unul sau mai multe suporturi
externe.
Componentele unui fişier se numesc înregistrări (articole) şi pot avea
dimensiune fixă sau variabilă. Numărul de componente dintr-un fişier este variabil,
fiind limitat doar de capacitatea de memorare a suportului utilizat. Sfîrşitul unui
fişier este uneori marcat printr-o componentă specială (end of file - caracterul ^Z).
Fişierul, în contextul limbajului Pascal, este o structură de date omogenă,
formată din componente de acelaşi tip, exceptînd tipul fişier.
Înregistrarea este constituită dintr-o mulţime de valori ale unor caracteristici
asociate unui obiect, proces etc., din domeniul aplicaţiei.
Componentele înregistrării asociate diverselor caracteristici sunt denumite
cîmpuri de date.
Limbajul Pascall permite utilizarea fişierelor cu înregistrări de lungime fixă
(stabilită la momentul prelucrării) şi variabilă (două înregistrări alăturate sunt
separate prin marcaje speciale, de exemplu prin caracterele CR/LF - sfîrşit de
linie).
Din punct de vedere fizic (al suportului extern), fişierul este o succesiune de
octeţi.
Accesul la componentele unui fişier are la bază următorul mecanism: fiecare
fişier are un indicator (pointer) al componentei curente, cea accesibilă în acel
moment. Pentru fiecare acces la fişier (adică, pentru fiecare operaţie de citire sau
scriere), indicatorul avansează de la componenta curentă la următoarea
componentă, care devine astfel componenta curentă.
5
Modul de acces la componente poate fi: secvenţial (accesul la componenta n
din fişier trebuie precedat de inspectarea componentelor 0, 1, 2, , n-1) şi direct
sau aleator (poziţionarea se face direct pe componenta respectivă).
Cînd se lucrează cu un fişier, acestuia i se asociază o variabilă tampon avînd
tipul de bază al componentelor fişierului. Variabila tampon realizează interfaţa
între fişier şi program.
Variabilelor fişier (utilizate în programe, atunci cînd lucram cu fişiere) li se
asociază, de obicei, fişiere fizice, aflate pe suport extern şi gestionate de către
sistemul de operare. În conţinuare, vom nota cu f variabila fişier utilizată la un
moment dat.
Din punct de vedere al limbajului Pascal şi al conţinutului lor, fişierele se
împart în două mari categorii:
fişiere text, în care toate datele sunt sub formă de caractere ASCII (un
caracter/octet). Practic, fişierele text conţin caractere organizate în linii de
lungime variabilă, liniile consecutive fiind separate printr-un marcaj de
sfîrşit de linie (end of line) reprezentat prin perechea de caractere de control
Carriage Return şi Line Feed - CR/LF.
fişiere binare, în care toate datele sunt memorate în formă identică cu cea
din memoria principală. Practic, fişierele binare sunt fişiere cu componente
de tipuri definite de programator.
Fişierele binare se împart, la rîndul lor, în două clase:
fişiere cu tip (în care înregistrările au structura şi lungimea fixe, precizate la
momentul fiecărei prelucrări);
fişiere fără tip (în care înregistrările sunt blocuri binare de lungime fixă,
precizată ca parametru în procedura de deschidere a fişierului; nu se face
nici o ipoteză referitoare la structura blocurilor; un bloc este o succesiune de
octeţi).
Diagrama de sintaxa
6
Lucrul cu fişierele în Pascal necesită deschiderea acestora, utilizarea unor
proceduri şi funcţii specifice privind citirea/scrierea informaţiilor şi apoi
închiderea lor.
În cadrul unui program Pascal, orice fişier prelucrat este identificat printr-o
variabilă fişier. Tipul unei variabile fişier trebuie declarat în concordanţă cu tipul
şi modul de tratare a fişierului extern la care se fac referiri prin intermediul său.
Identificatorul variabilei de tip fişier reprezintă numele logic al acestuia şi este
intern programului. Această variabilă de tip fişier trebuie asociată unui fişier extern
prin intermediul procedurii assign.
Dupa stabilirea legăturii între numele intern al fişierului şi cel extern, trebuie
realizată operaţia de deschidere a fişierului, utilizînd una din procedurile reset,
rewrite sau append, în funcţie de tipul fişierului şi de tipul operaţiilor ce se vor
efectua.
În acest moment putem avea acces la date (la înregistrări, linii, blocuri,
cîmpuri) prin intermediul procedurilor de citire (read, readln, blockread), scriere
(write, writeln, blockwrite), căutare (seek) etc. Operaţia de citire transferă datele
din fişierul extern în memoria principală, iar operaţia de scriere transferă datele din
memoria principală în fişierul extern. Ambele operaţii se realizează prin
intermediul unei variabile tampon (buffer).
La sfîrşit, după terminarea operaţiilor de prelucrare a datelor, fişierul trebuie
închis prin intermediul procedurii close.
§2. Proceduri şi funcţii specifice fişierelor
7
Prezentăm principalele proceduri şi funcţii, urmînd ca în conţinuare să
descriem procedurile şi funcţiile caracteristice fiecărui tip de fişier în parte.
Assign(f,nume-extern) - stabileşte legătura între numele intern şi cel extern al fişierului; asignează un fişier logic la un fişier fizic;
Reset(f) - deschide un fişier existent; dacă fişierul nu există, se generează eroare de I/O (funcţia
IOresult are valoare diferită de zero); dacă fişierul este deja deschis indicatorul este deplasat la
începutul fişierului;
Rewrite(f) - creează un nou fişier; dacă fişierul există pe suport, acesta va fi şters şi se
creează noul fişier în locul său (suprascriere); dacă fişierul este deschis, procedura îl şterge şi îl
recreează;
Eof(f) - funcţie booleană care testează sfîrşitul de fişier;
Read(f, lista-variabile) - procedura de citire dintr-un fişier (text sau cu tip);
Write(f, lista-variabile) - procedura de scriere într-un fişier (text sau cu tip);
Close(f) - închide un fişier;
Erase(f) - şterge un fişier;
Rename(f, nume-nou) - redenumeşte un fişier.
8
§3. Fişiere text
Fişierul text este o succesiune de caractere ASCII încheiată cu caracterul
^Z, care are rol de marcator de sfîrşit de fişier. Deci, componentele elementare ale
fişierelor text sunt caracterele, grupate în linii. Lungimea liniilor nu este fixă,
pentru separarea lor utilizîndu-se un marcaj de sfîrşit de linie (caracterele CR/LF).
Fişierele text pot fi create prin intermediul editoarelor şi sunt direct afişabile. Din
categoria fişierelor text fac parte toate fişierele care conţin programe sursă, scrise
în diferite limbaje de programare (Pascal, C etc.), multe din fişierele document etc.
De asemenea, fişierele standard INPUT (asociat mediului de intrare - tastatura) şi
OUTPUT (asociat mediului de ieşire - monitorul) sunt fişiere text. Operaţiile de
acces la aceste două fişiere sunt cazuri particulare de operaţii de acces la fişiere
text.
Caracteristici ale fişierelor text:
lungimea componentelor (liniilor) este variabilă;
accesul (permis) este numai secvenţial.
În limbajul Pascal, tipul text este predefinit şi deci variabilele de acest tip vor fi
definite printr-o declaraţie de forma:
VAR f: text;
Întrucît liniile sunt de lungimi diferite şi nu poate fi calculată poziţia unei
componente, operaţiile permise sunt: citirea secvenţiala şi scrierea la sfîrşitul
fişierului text.
Proceduri şi funcţii specifice fişierelor text
Readln(f, lista_variabile) - după citirea tuturor parametrilor, indicatorul avansează dincolo de marcajul sfîrşit de linie;
Writeln(f, lista_variabile) - după scrierea parametrilor, adaugă un marcaj sfîrşit de linie;
Eoln(f) - funcţie care verifică existenţa sfîrşitului de linie într-un fişier text;
SeekEoln(f) - funcţie de tip boolean, care ignoră caracterele cu rol de spaţiu şi verifică sfîrşitul de linie într-un fişier text;
SeekEof(f) - funcţie de tip boolean, care ignoră caracterele cu rol de
9
spaţiu şi verifică sfîrşitul de fişier text, avansînd şi peste marcajele de sfîrşit de linie;
Append(f) - deschide un fişier text pentru extindere (adăugare de noi linii).
Remarcă. Operaţiile de citire/scriere se pot realiza la nivel de şir de caractere cu o posibilă conversie între forma de reprezentare externă (şir de caractere) şi cea de reprezentare internă (şir de cifre binare). Acest lucru apare în cazul în care se citesc sau se scriu valori numerice.
10
§4. Fişiere cu tip
Un fişier cu tip este o succesiune de înregistrări de acelaşi tip.
Înregistrările dintr-un fişier cu tip pot fi de tip simplu sau structurat. (array,
string, set, record).
Inregistrarile au lungime fixă şi li se asociază numere relative, începînd de la zero.
Caracteristici ale fişierelor cu tip:
lungimea componentelor este fixă;
accesul permis este secvenţial şi relativ (aleator, direct).
Specificarea unui tip de fişier are forma următoare:
TYPE fişier=File OF tip;
unde tip este tipul de bază al componentelor fişierului (tip nu poate fi un tip fişier
sau un tip structurat avînd componente fişiere). În cele ce urmeaza este prezentat
un exemplu pentru structura unui fişier de personal:TYPE persoana=RECORD cod:1..2000; nume:STRING[20]; salariu:30000..500000; vechime:1..40 END; fişier_de_personal=FILE OF persoana;
Proceduri şi funcţii specifice fişierelor cu tip
Seek (f, pozitie) - plasează indicatorul pe înregistrarea cu numărul poziţie;
FilePos (f) - întoarce numărul relativ al înregistrării curente;
FileSize (f) - întoarce numărul de înregistrări din fişier;
Truncate (f) - trunchiază un fişier la poziţia curentă a indicatorului.
11
§5. Fişiere fără tip
Din punct de vedere logic, fişierele fără tip sunt constituite din blocuri de
lungime fixă, asupra cărora nu se face nici o ipoteză legată de structură.
Dimensiunea blocului trebuie specificată de către programator pentru fiecare
transfer în parte. Transferul datelor între memoria principală şi suportul extern se
face fără conversie. Blocurile au asociate numere relative, începînd de la zero.
Caracteristici ale fişierelor fără tip:
lungimea blocurilor este fixă;
accesul permis este secvenţial şi relativ (aleator, direct).
În cazul fişierelor fără tip, declararea variabilelor fişier se face în felul următor:
VAR f:file;Observaţie. La declararea variabilelor fişier fără tip nu se face nici o precizare în legatură cu
tipul componentelor fişierului.
Proceduri şi funcţii specifice fişierelor fără tip
Reset(f,dimensiune)Rewrite(f,dimensiune)
- deschide un fişier existent;- deschide un fişier nou.
BlockRead(f,buffer,nr,rezultat)BlockWrite(f,buffer,nr,rezultat)
- citeste un bloc dintr-un fişier fără tip;- scrie un bloc într-un fişier fără tip;
Seek(f,pozitie) - plasează indicatorul pe blocul cu numărul "poziţie";
FilePos(f) - întoarce numărul relativ al blocului curent;
FileSize(f) - întoarce numărul de blocuri din fişier.
Notă. Parametrul dimensiune (dimensiunea blocului în număr de octeţi) este opţional; în lipsa lui se consideră dimensiunea blocului ca fiind 128.Notă.
Buffer - este o variabilă a cărei adresă reprezintă începutul zonei de memorie în care se depun datele citite/scrise;
nr - reprezintă numărul maxim de blocuri ce vor fi citite/scrise; rezultat - este o variabilă de tip integer, în care sistemul depune, după încheierea operaţiei
de citire/scriere, numărul de blocuri efectiv transferate. Parametrul rezultat este opţional; în lipsa lui nu se poate verifica un transfer I/O corect (se generează o eroare la execuţie în cazul unui transfer incomplet, eronat).
12
Capitolul II. Metodica predării temei “Tipul de date fişier (file)”
§1. Curriculum pentru învăţămîntul liceal la tema “Tipul de date fişier (file)”
Obiectul de studiu al informaticii ca ştiinţă interdisciplinară este prelucrarea
automată a informaţiei cu ajutorul calculatoarelor electronice. Ca disciplină
şcolară, informatica a fost inclusă în planurile de studii de circa 15 ani în urmă. Pe
parcursul acestor ani a permis formularea principiilor generale în baza cărora a fost
elaborat curriculum la informatică:
-studierea informaticii are ca scop principal formarea şi dezvoltarea gîndirii
algoritmice a elevului;
-gîndirea algoritmică poate fi dezvoltată prin îmbinarea proceselor de predare-
învăţare a conoştinţelor teoretice;
-dezvoltarea gîndirii algoritmice va începe de la vîrste mici;
-adaptarea cunoştinţelor predate la nivelul de vîrstă al elevilor se va realiza în
baza legăturilor interdisciplinare prin implementarea adecvată a metodelor
instruirii asistate de calculator;
-echilibrarea încărcăturii informaţionale şi continuitatea la nivelul claselor şi
ciclurilor se va asigura prin eşalonarea materialului teoretic în funcţie de
particularităţile de vîrstă ale elevului, în concordanţă cu performanţele programelor
educative, programelor aplicative şi programelor de sistem ale calculatorului;
-diferenţierea şi individualizarea predării-învăţării;
-stabilirea unui nivel obligatoriu de pregătire în domeniul informaticii şi formarea
capacităţilor de avansare în însuşirea temelor necunoscute, în aplicarea
tehnologiilor informaţionale moderne.
Componentele de bază ale tehnologiei didactice pentru predare-învăţarea
informaticii sunt:
1. Predarea de cunoştinţe şi foramarea de capacităţi specifice informaticii.
Aceste cunoştinţe sunt incluse în tabelele respective din programele la
informatică.
13
2. Antrenarea sistematică vizînd în mod distinct următoarele domenii:
- înţelegerea conceptelor;
- conoaşterea metodelor de formalizare a problemelor şi de elaborare a
algoritmilor respectivi;
- cunoaşterea metodelor de elaborare a programelor;
- aplicarea programelor elaborate şi a produselor program pentru prelucrarea
informaţiei;
3. Utilizarea metodelor active pentru însuşirea individuală a noilor tehnologii
informaţionale prin intermediul instruirii asistate de calculator.
Curriculum liceal propune pentru audierea temei tipul de date fişier un număr
opţional de ore. Analizînd curriculum liceal observăm că el propune următoarele
obiective-cadru şi obiective de referinţă la tema dată:
CLASA A X-AObiective-cadru, obiective de
referinţăConţinuturi Activităţi de învăţare
Partea I. Limbajul de programare PASCAL2. Crearea si prelucrarea fişierelor:— să cunoască structura datelor de tip fişier şi semnificaţia simbolului sfîrşit de fişier;— să explice modul de scriere şi citire a datelor din fişier;— să clasifice fişierele după tipul operaţiilor permise şi modul de acces;— să indice ordinea în care trebuie apelate procedurile destinate prelucrării datelor de tip fişier;
FISIEREGeneralităţi despre fişiere
Exerciţii de:— desenare a diagramelor sintactice ale declaraţiilor de tipuri de date fişier;— desenare a structurii datelor de tip fişier;— explicare a modului de asociere a fişierelor PASCAL cu fişierele externe;— clasificare a fişierelor după tipul operaţiilor permise şi modul de acces.
— să poată crea şi prelucra datele din fişierele secvenţiale;
* Fişiere secvenţiale Exerciţii de:— explicare a modului de creare a fişierelor secvenţiale;— creare a fişierelor secvenţiale şi prelucrarea datelor din ele.
— să poată crea şi prelucra datele din fişierele cu acces direct;— să creeze fişiere text si să prelucreze datele respective.
** Fişiere cu acces direct. Fişiere text
— Exerciţii de creare a fişierelor cu acces direct şi prelucrare a datelor respective.— Exerciţii de creare şi prelucrare a datelor din fişierele text.
14
Conţinuturile care nu sînt marcate reprezintă nivelul minim si sînt obligatorii pentru ambele profiluri, cele marcate cu * sînt obligatorii numai pentru profilul real, cele notate cu ** sînt opţionale.
§2.Expunerea temei “Tipul de date fişier (file) în manualul INFORMATICA.
LIMBAJUL PASCAL. MANUAL PENTRU CLASELE IX-XI, autori: Anatol
Gremalschi, Iurie Mocanu, Ion Spinei”
Există un singur manual recomandat de ME al Republicii Moldova pentru
elevii claselor IX-XI şi anume “Informatica. Limbajul Pascal. Manual pentru
clasele IX-XI”. Această temă este prezentă în manualul respectiv în capitolul 4
“Tipuri de date structurate” punctele:
4.6. Generalităţi despre fişiere
4.7. Fişiere secvenşiale
4.8. Fişiere cu acces direct
4.9. Fişiere text
Noţiunea de tip de date fişier se studiază pentru prima dată în clasa a X-a.
În primul punct “Generalităţi despre fişiere” se dă năţiunea de fişier, tip de
bază, fişier vid, se indică cum se defineşte un tip de date fişier
<Tip fi;ier>::=[packed] file of <Tip>
după care urmează un şir de exemple. La fel, tot în acest paragraf se introduc
operaţiile care pot fi efectuate asupra fişierelor, modul de acces la componentele
fişierelor.
Predarea următoarei teme “Fişiere secvenşiale” ar fi bine de început cu un
exemplu:
Fie că trebuie de creat o bază de date cu următoarele cîmpuri: nume, prenume,
nota1, nota2, nota3. Se cere de calculat nota medie a elevilor acestei clase.
Este evident, că pentru crearea acestei baze de date vom utiliza tipul record şi
anumeType Elev=record
15
Nume:string[15]; Prenume:string[15]; nota1,nota2,nota3:byte; notaMedie:real; end;var a:array[1..30] of elev; i:byte;
Pentru compeltarea şi gestionarea acestei baze de date este necesar de a
introduce datele de la tastatură, lucru destul de anevoios, ţinînd cont şi de faptul, că
probabilitatea de a greşi la introducerea datelor este destul de mare cît şi volumul
de informaţie la fel este destul de mare. Aceste neajunsuri pot fi înlăturate dacă
vom stoca datele într-un fişier secvenţial, le vom prelucra, apoi datele prelucrate le
vom stoca într-un fişier nou (sau în acelaşi fişier). Evident volumul de memorie
utilizat pentru prelucrarea datelor, în acest caz, este considerabil mai mic. Atunci
declaraţiile vor arăta astfel:Type Elev=record Nume:string[15]; Prenume:string[15]; nota1,nota2,nota3:byte; notaMedie:real; end; FisierElevi=file of elev;var FE:FisierElevi: E:Elev;
Programul Pascal complet care va permite crearea acestei baze de date cu
introducerea datelor de la tastatură şi stocarea lor într-un fişier are forma:
Program problema;{Crearea unui fişier cu componente de tipul elev}Type Elev=record Nume:string[15]; Prenume:string[15]; nota1,nota2,nota3:byte; notaMedie:real; end; FisierElevi=file of elev;var FE:FisierElevi: E:Elev; nume_fis:string; I,n:integer;Begin
16
Write(’Introduceti numele fisierului care va fi creat:’); Readln(nume_fis); Assign(FE,nume_fis); {asociaza FE cu numele din nume_fis} Rewrite(FE); {deschide FE pentru scriere} Write(’Introduceti numarul de elevi: ’); Readln(n); For i:=1 to n do Begin Writeln(’Introduceti datele elevului: ’,i); {citeste cimpurile variabilei E de la tastatura} write(’Numele: ’); readln(E.Nume); write(’Prenumele: ’); readln(E.Prenume); write(’Nota1: ’); readln(E.Nota1); write(’Nota2: ’); readln(E.Nota2); write(’Nota3: ’); readln(E.Nota3); writeFE,E); {scrie E in FE} end; close(FE); {inchide FE} readln;end.
Paragraful “Fişiere cu acces direct” se referă în întregime numai la implementarea
Turbo Pascal a fişierelor de tip file of T.
E cunoscut faptul că datele fişierelor Pascal se păstrează pe suporturi
externe de informaţie. În cazul fişierelor definite prin declaraţia file of T
componentele de tip T sînt reprezentate pe suporturi respective în formă internă, şi
anume, prin scvenţe de cifre binare. Acest mod de reprezentare a datelor este
convenabil în cazul memoriilor externe. În cazul echipamentelor de intrare-ieşire
(tastatura, ecranul, imprimanta etc.) datele respective trebuie reprezentate în formă
externă, şi anume, perin secvenţe de caractere.
Pentru a facilita interacţiunea între om şi sistemul de calcul, în Pascal
informaţia destinată utilizatorului se reprezintă în formă de fişiere text. Aceste
noţiuni sunt introduse în tema “Fişirere text”. În acest paragraf se introduce
noţiunea de sfîtşit de linie – eol (End Of Line). Deoarece lungimea liniilor este
variabilă, accesul la componentele fişierelor este secvenţială. La fel ca şi în
17
celelalte paragrafe sunt aduse un şir de exemple pentru a simplifica înţelegerea
materiei noi de către elevi.
Pentru înţelegerea noţiunii de tip de date fişier şi pentru formarea
deprinderilor de aplicare a acesteia în practică, se pot propune probleme de
numărare a liniilor untr-un fişier cu o anumită proprietate, de selectare a anumitor
componente din fişier, de modificare a componentelor fişierului. Aceste probleme
pot fi grupate conform algoritmilor de rezolvare:
de creare;
de citire;
de scrire;
de modificare.
La prima etapă de studiere a algoritmilor menţionaţi se propun probleme tipice
pentru fiecare grup. La următoarea etapă, după ce elevii se familiarizează cu aceşti
algoritmi şi îi aplică cu succes, se propun diferite probleme, pentru care elevii aleg,
din algoritmii deja cunoscuţi, algoritmul potrivit. În final se trece la rezolvarea
problemelor complicate, netipice, creative.
Consider reuşită tratarea acestei teme în manual. De asemenea, sunt descrise
foarte bine toate noţiunile. Sunt aduse un şir de exemple, fapt ce contribuie la
înţelegerea mai rapidă a temei respective.
Însă, cu părere de rău, numărul de ore necesar la predarea acestei temei este
foarte mic, fapt ce nu permite profesorului de a se aprofunda în diferite rezolvări de
probleme complicate.
§3. Sugestii şi recomandări metodologice la tema “Tipul de date fişier”
Pentru predarea-evaluarea acestei teme propun următoarele lecţii în această ordine:
Obiective cadru. Obiective de referinţă. Evaluările făcute vor arăta dacă elevul este capabil: Conţinuturi
Sugestii pentru antrenamente mentale (activităţi ce duc la învăţarea, întărirea, dezvoltarea capacităţilor prevăzute ca obiective de
18
atins)
Să cunoască structura datelor de tip fişier şi semnificaţia simbolului sfârşit de fişier;
Să explice modul de scriere şi citire a datelor din fişier;
Să clasifice fişierele după tipul operaţiilor permise şi modul de acces;
Să indice ordinea în care trebuie apelate procedurile destinate prelucrării datelor de tip fişier.
Generalităţi despre fişiere.
Exerciţii de:
- determinare a operaţiilor de dechidere şi închidere a fişierelor;
- clasificare a fişierelor în funcţie de operaţiile permise şi modul de acces;
- definire a diferitor tipuri de fişiere în funcţie de problema pusă.
Să poată crea şi prelucra datele din fişierele secvenţiale;
Să poată citi şi scrie date din/în fişiere secvenţiale;
Să poată crea programe cu utilizarea fişierelor secvenţiale;
Să poată citi un program.
Fişiere secvenţiale. Exerciţii de:
- creare a fişierelor secvenţiale;
- de citire a fişierelor secvenţiale;
- de prelucrare a datelor dinr-un fişier secvenţial;
- formulare a problemei rezolvate după un anumit program.
Să poată crea şi prelucra datele din fişierele cu acces direct;
Să poată citi şi scrie date din/în fişiere cu acces direct;
Să poată crea programe cu utilizarea fişierelor cu acces direct;
Să poată citi un program;
Să poată deosebi fişierele secvenţiale de cele cu acces direct;
Să poată utiliza funcţiile standard FileSize(f), Seek(f,i), FilePos(f,i).
Fişiere cu acces direct.
Exerciţii de:
- creare a fişierelor cu acces direct;
- de citire a fişierelor cu acces direct;
- de prelucrare a datelor dinr-un fişier cu acces direct;
- formulare a problemei rezolvate după un anumit program.
Să poată crea fişieretext;
Să poată citi şi scrie date din/în fişiere cu acces direct;
Să poată crea programe cu utilizarea fişierelor text;
Să poată citi un program;
Să poată declara fişiere text;
Fişiere text. Exerciţii de:
- creare a fişierelor text;
- de citire/scriere a datelor dintr-un(într-un) fişier text;
- de prelucrare a datelor dinr-un fişier text;
19
Să poată prelucra datele din fişiere text.
- formulare a problemei rezolvate după un anumit program.
Să cunoască structura datelor de tip fişier şi semnificaţia simbolului sfârşit de fişier, sfîrşit de linie;
Să clasifice fişierele după tipul operaţiilor permise şi modul de acces;
Să indice ordinea în care trebuie apelate procedurile destinate prelucrării datelor de tip fişier.
Să poată crea şi prelucra datele din fişierele;
Să poată citi şi scrie date din/în fişiere;
Să poată citi un program.
Lecţie de evaluare. Analiza.
Exerciţii de:
- determinare a operaţiilor de dechidere şi închidere a fişierelor;
- clasificare a fişierelor în funcţie de operaţiile permise şi modul de acces;
- definire a diferitor tipuri de fişiere în funcţie de problema pusă;
- creare a programelor cu utilizarea tipului de date fişier;
- formulare a problemei rezolvate după un anumit program.
Sugestii metodologice
Componentele de bază ale tehnologiei didactice pentru predarea-învăţarea
informaticii sînt:
1. Predarea de cunoştinţe şi formarea de capacităţi specifice informaticii. Aceste
cunoştinţe sînt incluse în tabelele respective din programele la informatică.
2. Antrenarea sistematică vizînd în mod distinct următoarele domenii:
— înţelegerea conceptelor;
— cunoaşterea metodelor de formalizare a problemelor şi de elaborare a
algoritmilor respectivi;
— cunoaşterea metodelor de elaborare a programelor;
— aplicarea programelor elaborate şi a produselor program pentru prelucrarea in-
formaţiei.
3. Utilizarea metodelor active pentru însuşirea individuală a noilor tehnologii
informaţionale prin intermediul instruirii asistate de calculator.
Problematizarea la lecţiile de informatică
20
Motivaţia instruirii problematizate la informatică:
1. Perevederile Curriculumului la informatică.
2. Abordarea modernă a învăţămîntului.
3. Antrenarea elevilor în:
a) reorganizarea şi transformarea materialului dat;
b) activităţile de învăţare problematizată;
c) pregătirea pentru învăţarea ulterioară, transformîndu-se treptat
în “gînditori creativi”;
4. Prin reuşita personală elevii:
a) simt satisfacţia învăţării şi încrederea în propriile forţe;
b) îşi impulsionează eforturile spre căutări, explorări;
c) activează individual sau în echipă;
d) documentează activităţile experimentale, investigaţiile
ştiinţifice;
5. Resursele educaţionale şi dotarea didactică adecvată procesului de
predare – învăţare – evaluare.
6. La nivel de profesor:
a) profesionalismul;
b) stilul de muncă;
c) vede elevul nu numai pînă la finele gimnaziului, liceului etc.,
dar un adevărat Om contemporan – gînditor – creator –
realizator.
Instruirea problematizată la informatică
La baza organizării instruirii problematizate se află principiul de căutare în
activitatea de asimilare a cunoştinţelor de către elevi, adică principiul
„descoperirii” de către ei a legilor, regulilor, ipotezelor, metodelor ştiinţifice şi
felul de aplicare a lor în practică.
21
Tot odată instruirea problematizată nu poate fi concepută ca un „lanţ de
descoperiri” ştiinţifice sinestătătoare a elevilor. Ea impune o armonie optimă a
activităţii de reproducţie pasivă şi însuşirea activă de către elevi a unor sisteme
necesare de informaţie.
Instruirea problematizată nu exclude lămurirea profesorului şi rezolvarea de
către elevi a problemelor de antrenament pentru formarea unor deprinderi şi
însuşirea anumitor algoritmi. Noile cerinţe faţă de didactică au adus la dezvoltarea
unor astfel de metode de instruire, cînd profesorul numai dirigează lucrul de
sinestătător al elevilor în procesul de însuşire şi analiză a materiei de studiu, adică
şi-au găsit aplicare metodele de instruire problematizată.
Deosebirea principală dintre metodele contemporane de instruire
problemetizată şi metodele tradiţionale constă în principiile de organizare a
procesului educaţional.
Instruirea problematizată – organizarea deosebită a activităţilor elevilor în
procesul de acumulare a cunoştinţelor noi pe parcursul căruia ei sunt participanţi
activi la căutarea căilor, metodelor de rezolvare a problemei create de către
profesor. Pentru aplicarea cu succes a metodelor de instruire problematizată sunt
necesare următoarele condiţii:
1. căutarea şi găsirea situaţiilor de problemă;
2. dezvoltarea planică şi consecutivă la elevi a deprinderilor şi priceperilor de a
găsi şi de a formula problema şi sinestătător de a o rezolva;
3. o sistemă specială de pregătire a profesorului de lecţii orientată la selectarea
din materia de studiu a situaţiilor de problemă.
Pentru o astfel de pregătire profesorul trebuie să analizeze materia de studiu din
diferite puncte de vedere:
a) ştiinţific (deosebirea noţiunilor de bază şi interacţiunea lor);
b) psihologic (a prevedea reacţia clasei şi a unor elevi
induvudual în momentul enunţului problemei);
22
c) logic (consecutivitatea adresării de către elevii a întrebărilor,
problemelor, însărcinărilor, chibzuirea lor ca o sistemă
armonioasă);
d) didactic (alegerea metodelor necesare de formare a situaţiilor
de problemă).
Acţiunile elevilor în timpul creării de către profesor a situaţiei de problemă
trebuie să aibă loc după următoarele consecutivităţi:
1. analiza situaţiei propuse de profesor;
2. formularea problemei sau analiza formulării efectuate de profesor;
3. rezolvarea problemei: înaintarea presupunerilor, argumentarea ipotezei
propuse, demonstrarea ei (dacă e posibil teoretic şi experimental),
controlul veridicităţii, rezolvării.
Devine clar, că locul central în instruirea problematizată îl joacă situaţia de
problemă. Situaţia de problemă nu este altceva decît o sarcină ce conţine o
contradicţie dintre volumul necesar de cunoştinţe pentru rezolvarea problemei
înaintate şi volumul de informaţii la moment.
Pentru rezolvarea problemei, adică găsirea necunscutelor trebuie sau să
introducem o legitate nouă sau o formulare nouă, sau să găsim un algoritm de
rezolvare, sau să modificăm algoritmul deja cunoscut. La instruirea problematizată
se aplică şi problemele obişnuite, atunci cînd trebuie să consolidăm careva legi sau
reguli.
Nivelurile problematizării sunt:
1. Profesorul formulează şi rezolvă problema sau demonstrează cum a fost
rezolvată această problemă în ştiinţă.
2. Profesorul creează situaţia de problemă şi atrage elevii în căutarea soluţiei.
3. Profesorul formulează problema, iar soluţia elevii o caută de sinestătător.
4. Profesorul le propune elevilor să formuleze problema şi să caute soluţia ei.
La baza situaţiilor – problemă la orele de informatică se află contradicţia dintre
cunoscut şi necunoscut:
1. contradicţiile dintre experienţa de viaţă a elevilor şi cunoştinţele ştiinţifice;
23
2. contradicţiile dintre cunoştinţele anterioare ale elevilor şi cele noi;
3. contradicţiile realităţii obiective.
Situaţiile-problemă mai pot fi clasificate în felul următor (după R. Malofeev):
a) situaţia surprizei apare la contactul elevilor cu fenomene, fapte, concluzii care
provoacă uimire, care par paradoxale;
b) situaţia conflictului este relevantă la studierea noţiunii din informatică;
c) situaţia presupunerii constă în admiterea existenţei altei legităţi sau altei
noţiuni;
d) situaţia discordanţei apare în cazul în care experienţa de toate zilele a elevilor
intră în contradicţie cu datele ştiinţifice;
e) situaţia nedeterminării apare în cazul în care problema formulată n-are destule
date pentru o soluţie univocă;
f) situaţia dezminţirii apare în cazul în care elevii demonstreză netemeinicia unei
idei sau a unui proiect.
Problematizarea este o metodă didactică cu resurse pedagogice deosebite, care
urmăreşte realizarea obiectivelor propuse la nivelul activităţii de predare – învăţare
– evaluare prin lansarea şi rezolvarea unor situaţii – problemă.
24
§4. Exerciţii şi probleme la tema “Tipul de date fişier”
În acest paragraf propunem cîteva probleme la tema “Tipul de date fişier” cu
soluţii în Pascal.
Probleme Pascal cu utilizarea fişierelor text
Problema 1. Să se scrie un program Pascal pentru crearea unui fişier text.
Introduceţi textul structurat pe linii. Pentru terminare tastaţi Ctrl+Z. Se vor afişa
rezultatele execuţiei.PROGRAM Ex1_fişiere_text; {program pentru crearea unui fişier text} VAR f:text; s:STRING; BEGIN Assign(f,'Fis.txt'); Rewrite(f); writeln('Introduceti textul structurat pe linii'); writeln('Pentru terminare tastati ^Z'); WHILE NOT eof DO BEGIN readln(s); writeln(f,s) END; Close(f) END {Ex1_fişiere_text}.
Rezultatul execuţiei programului:
Introduceti textul structurat pe linii Pentru terminare tastati ^Z Fişierul text conţine o succesiune de caractere ASCII incheiata cu caracterul ^Z, care are rol de marcator sfarsit de fişier. ^Z
Problema 2. Să se scrie un program Pascal care listează conţinutul fişierului text
creat anterior. Se vor afişa rezultatele execuţiei.PROGRAM Ex2_fişiere_text; {program pentru listarea unui fişier text; listarea se face pe ecran} VAR f:text; s:STRING; BEGIN Assign(f,'Fis.txt');
25
Reset(f); writeln('Conţinutul fişierului text Fis.txt:'); writeln; WHILE NOT eof(f) DO BEGIN readln(f,s); writeln(s) END; Close(f); readln END {Ex2_fişiere_text}.
Rezultatul execuiei programului:Conţinutul fişierului text Fis.txt: Fişierul text conţine o succesiune de caractere ASCII incheiata cu caracterul ^Z, care are rol de marcator sfarsit de fişier.
Problema 3. Să se scrie un program Pascal care listează conţinutul unui fişier text
- varianta care ia în consideratie şi cazul în care fişierul nu a fost creat anterior. PROGRAM Ex3_fişiere_text; {program pentru listarea unui fişier text varianta care ia in consideratie şi cazul in care fişierul nu a fost creat} VAR f:text; s:STRING; BEGIN Assign(f, 'Fis.txt'); {$I-} Reset(f); {$I+} IF IOResult=0 THEN BEGIN writeln('Conţinutul fişierului text Fis.txt:'); writeln; WHILE NOT eof(f) DO BEGIN readln(f,s); writeln(s) END; Close(f) END ELSE writeln('Fişierul nu exista'); readln END {Ex_3_fişiere_text}.
Problema 4. Să se scrie un program Pascal pentru crearea unui fişier text şi afişarea numărului de linii din fişier. PROGRAM Ex_4_fişiere_text; {program care afiseaza numărul de linii dintr-un fişier text}
26
VAR f:text; nr:integer; BEGIN Assign(f,'Fis.txt'); Reset(f); nr:=0; WHILE NOT eof(f) DO BEGIN readln(f); nr:=nr+1 END; Close(f); writeln('Fişierul Fis.txt are ',nr,' linii'); readln END {Ex_4_fişiere_text}.
Rezultatul execuţiei programului:
Fişierul Fis.txt are 3 linii
Problema 5. Să se scrie un program Pascal care afişează numărul de linii dintr-un
fişier text, care conţin numai caracterele blanc şi TAB (linii denumite linii "albe").
PROGRAM Ex5_fişiere_text; VAR f:text; nume:STRING; n:word; BEGIN write('Introduceti numele fişierului text: '); readln(nume); Assign(f,nume); {$I-} Reset(f); {$I+} IF IOResult<>0 THEN writeln('Fişierul ',nume,' nu exista !') ELSE BEGIN n:=0; WHILE NOT eof(f) DO EGIN IF seekeoln(f) THEN n:=n+1; readln(f) END; Close(f); writeln('Fişierul ',nume,' are ',n,' linii "albe".') END; readln END {Ex5_fişiere_text}.
27
Problema 6. Să se scrie un program Pascal care sa afişeze numărul de cuvinte
dintr-un fişier text. Separarea între două cuvinte se face prin unul sau mai multe
blancuri sau prin separatori de linie.PROGRAM Numara_cuvinte; VAR f:text; c:char; ncuv:integer; incuv:boolean; nume:string; BEGIN write('Introduceti numele fişierului text: '); readln(nume); Assign(f,nume); {$I-} Reset(f); {$I+} IF IOResult<>0 THEN BEGIN writeln('Fişierul ',nume,' nu exista !'); halt END; ncuv:=0; incuv:=false; WHILE NOT eof(f) DO BEGIN IF eoln(f) THEN BEGIN readln(f);incuv:=false END ELSE BEGIN read(f,c); IF c=' ' THEN incuv:=false ELSE IF NOT incuv THEN BEGIN incuv:=true;ncuv:=ncuv+1 END END END; Close(f); writeln('Fişierul ',nume,' conţine un numar de ',ncuv,' cuvinte.'); readln END {Numara_cuvinte}.
Problema 7. Să se scrie un program Pascal care să realizeze concatenarea a două
fişiere text. Se vor afişa rezultatele execuţiei.
28
PROGRAM Concatenare_fişiere_text; {program de concatenare a doua fişiere text} VAR f1,f2:text; nume1,nume2,x:STRING; PROCEDURE Citeste_fis_text(nume:STRING); VAR f:text; BEGIN assign(f,nume); rewrite(f); writeln ('Introduceti textul fişierului structurat pe linii:'); writeln ('La sfirsitul unei linii tastati ENTER'); writeln('(pentru sfirsit editare text, tastati caracterul ^Z):'); writeln; WHILE NOT eof DO BEGIN readln(x); writeln(f,x) END; close(f) END;{Citeste_fis_text} PROCEDURE Afiseaza_fis_text(nume:STRING); VAR f:text; BEGIN assign(f,nume); reset(f); WHILE NOT eof(f) DO BEGIN readln (f,x); writeln(x) END; close(f) END; {Afiseaza_fis_text} {program principal } BEGIN writeln('Concatenarea a doua fişiere '); write(' Nume fişier 1: '); readln(nume1); Citeste_fis_text(nume1); write('Nume fişier 2: '); readln(nume2); Citeste_fis_text(nume2); assign(f1,nume1); assign(f2,nume2); append(f1); reset(f2);
29
WHILE NOT eof(f2) DO BEGIN readln(f2,x); writeln(f1,x) END; close(f1); close(f2); writeln('Fişierul concatenat'); writeln; Afiseaza_fis_text(nume1); readln END.{Concatenare_fişiere_text}
Rezultatul execuţiei programului:
Concatenarea a doua fişiere Nume fişier l: fişier1.txt Introduceti textul fişierului structurat pe linii: La sfirsitul unei linii tastati ENTER (pentru sfirsit editare text, tastati caracterul ^Z): Forma generala a unui program Pascal: PROGRAM . . . .; USES . . . .; LABEL . . . .; CONST . . . .; TYPE . . . .; VAR . . . .; PROCEDURE . . . .; FUNCŢION . . . .; ^Z Nume fişier 2: fişier2.txt Introduceti textul fişierului structurat pe linii: La sfirsitul unei linii tastati ENTER (pentru sfirsit editare text, tastati caracterul ^Z): BEGIN{program principal} instructiune; . . . .; END. ^Z
Fişierul concatenat Forma generala a unui program Pascal: PROGRAM . . . .; USES . . . .; LABEL . . . .; CONST . . . .; TYPE . . . .; VAR . . . . ; PROCEDURE . . . . ; FUNCŢION . . . . ; BEGIN{program principal} instructiune; . . . .; END.
30
Probleme Pascal cu utilizarea fişierelor cu tip
Problema 1. Să se scrie un program Pascal pentru crearea unui fişier "stocuri de
materiale" cu cel mult 100 de articole. PROGRAM Ex1_fişiere_cu_tip; {- program pentru crearea unui fişier stocuri de materiale .- presupunem ca putem avea maxim 100 de materiale} TYPE material=RECORD cod:integer; nume:STRING; cantit:real; nr:integer END; fişier_stoc=FILE OF material; VAR f:fişier_stoc; {variabila fişier} x:material; {variabila tampon} i:1..100; BEGIN WITH x DO BEGIN cod:=0; nume:=''; cantit:=0.0 END; Assign(f,'stoc.dat'); Rewrite(f); FOR i:=1 TO 100 DO BEGIN WITH x DO nr:=i; write(f,x) END; close(f) END {Ex1_fişiere_cu_tip}.
Problema 2. Să se scrie un program Pascal care sa realizeze actualizarea fişierului
de stocuri de materiale creat anterior.PROGRAM Ex2_fişiere_cu_tip; {program de actualizare a fişierului stocuri de materiale} TYPE material=RECORD cod:integer; nume:STRING; cantit:real; nr:integer END; fişier_stoc=file of material;
31
VAR f:fişier_stoc; x:material; i:integer; BEGIN Assign(f,'Stoc.dat'); Reset(f); write('Introduceti numărul componentei (0 pentru oprire) i= '); readln(i); WHILE i in [1..100] DO BEGIN seek(f,i-1); read(f,x); writeln('Cod= ',x.cod,' Nume= ',x.nume,' cantitate= ',x.cantit); write('Cod= ');readln(x.cod); write('Nume= ');readln(x.nume); write('Cantitatea= ');readln(x.cantit); seek(f,i-1); write(f,x); write('Introduceti numărul componentei i= '); readln(i) END; close(f) END {Ex2_fişiere_cu_tip}.
Rezultatul execuţiei programului:
Introduceti numărul componentei (0 pentru oprire) i= 1 Cod= 0 Nume= cantitate= 0.0000000000E+00 Cod= 11 Nume= tabla Cantitatea= 1000 Introduceti numărul componentei i=5 Cod= 0 Nume= cantitate= 0.0000000000E+00 Cod= 17 Nume= lemn Cantitatea= 7000 Introduceti numărul componentei i=0
Problema 3. Să se scrie un program Pascal pentru afisarea fişierului stocuri de
materiale.PROGRAM Ex3_fişiere_cu_tip; {program de afisare a fişierului stocuri de materiale} USES Crt; TYPE material=RECORD cod:integer; nume:STRING; cantit:real; nr:integer END;
32
fişier_stoc=file of material; VAR f:fişier_stoc; x:material; BEGIN Assign(f,'Stoc.dat'); Reset(f); WHILE NOT eof(f) DO BEGIN read(f,x); WITH x DO writeln('Cod= ',cod,'; Nume= ',nume,' ;Cantitate=',cantit:5:3) END; Close(f) END.{Ex3_fişiere_cu_tip}
Rezultatul execuţiei programului:
Cod= 11; Nume= tabla;Cantitate=1000.000 Cod= 0; Nume=;Cantitate= 0.000 Cod= 0; Nume=;Cantitate= 0.000 Cod= 0; Nume=;Cantitate= 0.000 Cod= 17; Nume=lemn;Cantitate=7000.000
Problema 4. Să se scrie un program Pascal care sa realizeze concatenarea a două
fişiere care conţin componente de acelaşi tip. Fişierele conţin informaţii referitoare
la cărţile dintr-o bibliotecă. Structura unei înregistrări cuprinde următoarele
cîmpuri: titlu, autor, an_apariţie, editura. Să se afiseze fişierul concatenat, în ordine
alfabetică după autor.PROGRAM Concatenare_fişiere_tip; {program de concatenare a doua fişiere cu tip} TYPE carte=RECORD titlu:STRING[30]; autor:STRING[20]; an_aparitie:word; editura:STRING[20] END; biblioteca=FILE OF carte; VAR f,g:biblioteca;numef,numeg:STRING; PROCEDURE Deschide_fişier(VAR f1:biblioteca; nume1:STRING); BEGIN Assign(f1,nume1); {$I-} Reset(f1); {$I+}
33
IF IOResult<>0 THEN Rewrite(f1) ELSE Seek(f1,Filesize(f1)) END;{Deschide_fişier} PROCEDURE Scrie_in_fişier(VAR f1:biblioteca); VAR x:carte;i,n:integer; BEGIN write('Cate inregistrari introduceti ? '); readln(n); FOR i:=1 TO n DO BEGIN WITH x DO BEGIN write('Titlul cartii: '); readln(titlu); write('Autor: '); readln(autor); write('Anul aparitiei: '); readln(an_aparitie); write('Editura: '); readln(editura) END; write(f1,x) END END; {Scrie_in_fişier} PROCEDURE Afisare_fişier(VAR f1:biblioteca; nume1:STRING); VAR x:carte; BEGIN Assign(f1,nume1); {$I-} Reset(f1); {$I+} IF IOResult<>0 THEN write('Fişierul ',nume1,' nu exista !') ELSE BEGIN WHILE NOT eof(f1) DO BEGIN read(f1,x); writeln(x.autor,' ',x.titlu,' ',x.an_aparitie,' ',x.editura) END; Close(f1) END END; {Afisare_fişier} PROCEDURE Concat_fişiere(VAR f1,f2:biblioteca; nume1,nume2:STRING); VAR x:carte; BEGIN
34
Assign(f1,nume1); {$I-} Reset(f1); {$I+} IF IOResult<>0 THEN BEGIN writeln('Fişierul ',nume1,' nu exista !'); halt END; Assign(f2,nume2); {$I-} Reset(f2); {$I+} IF IOResult<>0 THEN BEGIN writeln('Fişierul ',nume2,' nu exista !'); halt END; Seek(f1,Filesize(f1)); WHILE NOT eof(f2) DO BEGIN read(f2,x); write(f1,x) END; Close(f1); Close(f2) END; {Concat_fişiere} PROCEDURE Ordonare(VAR f1:biblioteca; nume1:STRING); VAR x,y:carte; i,j,n:word; BEGIN Assign(f1,nume1); {$I-} Reset(f1); {$I+} IF IOResult<>0 THEN BEGIN writeln('Fişierul ',nume1,' nu exista !'); halt END; n:=Filesize(f1); FOR i:=0 TO n-2 DO FOR j:=i+1 TO n-1 DO BEGIN Seek(f1,i); read(f1,x); Seek(f1,j); read(f1,y); IF x.autor>y.autor THEN BEGIN Seek(f1,i);write(f1,y);
35
Seek(f1,j);write(f1,x) END END; Close(f1) END; {Ordonare} BEGIN {programul principal} write('Introduceti numele primului fişier: '); readln(numef); writeln('Introduceti inregistrari in fişierul ',numef); Deschide_fişier(f,numef); Scrie_in_fişier(f); Close(f); writeln; write('Introduceti numele celui de-al doilea fişier: '); readln(numeg); writeln('Introduceti inregistrari in fişierul ',numeg); Deschide_fişier(g,numeg); Scrie_in_fişier(g); Close(g); writeln; Concat_fişiere(f,g,numef,numeg); Ordonare(f,numef); writeln; writeln('Fişierul concatenat ',numef,' ordonat alfabetic dupa autor:'); writeln; Afisare_fişier(f,numef); readln END {Concatenare_fişiere_tip}.
Rezultatul execuţiei programului:
Introduceti numele primului fişier: BIBLIO1.DAT Introduceti inregistrari in fişierul BIBLIO1.DAT Cate inregistrari introduceti ? 2 Titlul cartii: Inteligenta Artificiala Autor: Winston Patrick Anul aparitiei: 1981 Editura: Tehnica Titlul cartii: Inteligenta Artificiala Autor: Georgescu Ioan Anul aparitiei: 1985 Editura: Academiei Introduceti numele celui de-al doilea fişier: BIBLIO2.DAT Introduceti inregistrari in fişierul BIBLIO2.DAT Cate inregistrari introduceti ? 1 Titlul cartii: Artificial Intelligence Autor: Nilsson Nils Anul aparitiei: 1980 Editura: Tioga Fişierul concatenat BIBLIO1.DAT ordonat alfabetic dupa autor: Georgescu Ioan Inteligenta Artificiala 1985 Academiei
36
Nilsson Nils Artificial Intelligence 1980 Tioga Winston Patrick Inteligenta Artificiala 1981 Tehnica
Problema 5. Să se scrie un program Pascal pentru crearea şi afişarea unui fişier de
personal cu structura următoare:
Cîmpuri comune: cod, nume, prenume, studii;
Cîmpuri diferite în funcţie de valoarea cîmpului studii:
o FARA - ;
o LICEU - media de absolvire a liceului;
o SUP - instit, fac, media, titlu stiinţific (nimic, dr.).
Notă. Structura unei înregistrări din fişierul personal va fi implementată printr-o înregistrare cu variante (record cu variante).
PROGRAM Ex_fişier_tip; TYPE forma_invat=(FARA, LICEU, SUP); persoana=RECORD cod:word; nume, prenume:STRING; studii:forma_invat; CASE forma_invat OF FARA:(); LICEU:(medie:real); SUP:(instit, fac:STRING; media:real; titlu:(nimic, dr)) END; personal=FILE OF persoana; VAR f:personal; nume:STRING; i,n,opt:word; opt1:char; x:persoana; PROCEDURE Deschide_fişier(VAR f1:personal; numef:STRING); {deschide fişierul numef in vederea introducerii / adaugarii de noi inregistrari} BEGIN Assign(f1,numef); {$I-} Reset(f1); {$I+} IF IOResult<>0 THEN Rewrite(f1) ELSE Seek(f1,Filesize(f1)) END; {Deschide_fişier} PROCEDURE Introd_date(VAR f1:personal); VAR x:persoana; BEGIN write('Cate inregistrari introduceti ? ');
37
readln(n); FOR i:=1 TO n DO BEGIN write('Cod persoana: ');readln(x.cod); write('Nume: ');readln(x.nume); write('Prenume: '); readln(x.prenume); write('Forma de invatamant - 0 FARA, 1 LICEU, 2 SUP: '); readln(opt); CASE opt OF 0: x.studii:=FARA; 1:BEGIN x.studii:=LICEU; write('Media de absolvire: '); readln(x.medie) END; 2:BEGIN x.studii:=SUP; write('Institutul ( Universitatea ): '); readln(x.instit); write('Facultatea: '); readln(x.fac); write('Media de absolvire a facultatii: '); readln(x.media); write('Doctorat (D/N) ?'); readln(opt1); IF UpCase(opt1)='D' THEN x.titlu:=dr ELSE x.titlu:=nimic END END; write(f1,x) END END; {Introd_date} PROCEDURE Deschide_fis(VAR f1:personal; numef:STRING); {deschide fişierul numef in vederea citirii} BEGIN Assign(f1,nume); {$I-} Reset(f1); {$I+} IF IOResult<>0 THEN BEGIN writeln('Fişierul ',numef,' nu exista !'); halt END END; {Deschide_fis} PROCEDURE Afisare_fişier(VAR f1:personal); VAR x:persoana; BEGIN
38
WHILE NOT eof(f1) DO BEGIN read(f1,x); write(x.cod,' ',x.nume,' ',x.prenume,' '); CASE x.studii OF FARA: writeln; LICEU:writeln(x.medie:0:2); SUP: BEGIN write(x.media:0:2,' ',x.instit,' ',x.fac,' '); IF x.titlu<>nimic THEN writeln('dr') END END END END; {Afisare_fişier} BEGIN write('Introduceti numele fişierului:');readln(nume); Deschide_fişier(f,nume); Introd_date(f); Close(f); Deschide_fis(f,nume); writeln; writeln('Afiseaza conţinutul fişierului ',nume); writeln; Afisare_fişier(f); Close(f); readln END {Ex_fişier_tip}.
Rezultatul execuţiei programului:
Introduceti numele fişierului: PERS.DAT Cate inregistrari introduceti ? 3 Cod persoana: 1 Nume: Ionescu Prenume: Ion Forma de invatamant - 0 FARA, 1 LICEU, 2 SUP: 2 Institutul (Universitatea): UPB Facultatea: Aeronave Media de absolvire a facultatii: 9.80 Doctorat (D/N) ? d Cod persoana: 2 Nume: Popescu Prenume: Andrei Forma de invatamant - 0 FARA, 1 LICEU, 2 SUP: 1 Media de absolvire: 9.50 Cod persoana: 3 Nume: Irimescu Prenume: Alin Forma de invatamant - 0 FARA, 1 LICEU, 2 SUP:0 Afiseaza conţinutul fişierului PERS.DAT 1 Ionescu Ion 9.80 UPB Aeronave dr 2 Popescu Andrei 9.50 3 Irimescu Alin
39
Probleme Pascal cu utilizarea fişierelor fără tip
Problema 1. Să se scrie un program Pascal care sa realizeze copierea unui fişier
sursă într-un fişier destinaţie.PROGRAM Ex1_fişier_fara_tip; {program care permite copierea unui fişier sursa intr-un fişier destinatie -varianta 1-} VAR nume_s, nume_d:string; buf: array[1..2000] of char; rezultat:integer; fs,fd:file; BEGIN write('Nume fişier sursa: ');readln(nume_s); write('Nume fişier destinatie: '); readln(nume_d); Assign(fs,nume_s); Reset(fs,1); Assign(fd,nume_d); Rewrite(fd,1); BlockRead(fs,buf,sizeof(buf),rezultat); WHILE rezultat>0 DO BEGIN BlockWrite(fd,buf,rezultat); BlockRead(fs,buf,sizeof(buf),rezultat) END; Close(fs); Close(fd) END {Ex1_fişier_fara_tip}.
Rezultatul execuţiei programului:
Nume fişier sursa: fişier1.txt Nume fişier destinatie: fişierd.txt
PROGRAM Ex2_fişier_fara_tip; {program care permite copierea unui fişier sursa intr-un fişier destinatie - varianta 2 - fişierul sursa este sters dupa copiere} VAR fs,fd:file; buf:array [1..2000] of char; nume_s,nume_d:STRING; r,w:word; BEGIN write('Nume fişier destinatie: '); readln(nume_d); write('Nume fişier sursa: '); readln(nume_s); Assign(fs,nume_d); Rewrite(fd,1);
40
Assign(fs,nume_s); Reset(fs,1); REPEAT BlockRead(fs,buf,sizeof(buf),r); BlockWrite(fd,buf,r,w) UNTIL (r=0) or (w<>r); close(fs); close(fd); erase(fs); readln END {Ex2_fişier_fara_tip}.
Rezultatul execuţiei programului:
Nume fişier desinatie: fişierd.txt Nume fişier sursa: fişier1.txt
Problema 2. Să se scrie un program Pascal care să permită concatenarea a n
fişiere. Se vor utiliza procedurile BlockRead şi BlockWrite.PROGRAM Concatenare_fişiere; VAR fs, fd:FILE; {fs - fişier sursa fd - fişier destinatie} nume1, nume2:STRING; buf:ARRAY[1..200]OF char; r,w,i,n:word; BEGIN REPEAT write('Cate fişiere doriti sa concatenati (n>0)?'); readln(n); UNTIL n>=1; write('Introduceti numele fişierului destinatie: '); readln(nume1); Assign(fd,nume1); Rewrite(fd,1); i:=1; WHILE i<=n do BEGIN write('Introduceti numele fişierului sursa: '); readln(nume2); Assign(fs,nume2); Reset(fs,1); { copiaza conţinutul fişierului sursa in fişierul destinatie } REPEAT BlockRead(fs,buf,sizeof(buf),r); BlockWrite(fd,buf,r,w); UNTIL (r=0)OR(w<>r); IF w<>r THEN BEGIN writeln('A aparut o eroare la scriere!'); halt END;
41
Close(fs); Erase(fs); {sterge fiserul sursa} i:=i+1 END; Close(fd); readln END {Concatenare_fişiere}.
Rezultatul execuţiei programului:
Cate fişiere doriti sa concatenati (n>0)? 2 Introduceti numele fişierului destinatie: DATE.DAT Introduceti numele fişierului sursa: DATE1.DAT Introduceti numele fişierului sursa: DATE2.DAT
Probleme Pascal de un grad mai înalt de dificultate
Prezentăm în continuare alte aplicaţii cu fişiere Pascal cu un grad de
dificultate mai înalt:
Problema 1. Să se scrie un program Pascal care să realizeze sortarea a n elemente
cu structura dată, dupa un cîmp cheie.Program sortare_prin_insertie; {programul realizeaza sortarea a n elemente, cu structura definita de tipul de element - sortarea se face dupa campul cheie.Cele n elemente sunt introduse mai intai in fişierul Date.dat, apoi sunt preluate in tabloul x, urmeaza sortarea lor prin insertie şi depunerea elementelor sortate in fişierul Datesort.dat.} TYPE element=RECORD cheie:integer; info:char END; VAR x:ARRAY[1..100] OF element; f,fs:FILE OF element; n:1..100; stg:integer; t:element; PROCEDURE Introd_date(n:integer); {procedura preia cele n elemente in fişierul Date.dat} VAR i:integer; BEGIN Assign(f,'Date.dat'); Rewrite(f); writeln('Introduceti cele n elemente: '); FOR i:=1 TO n DO BEGIN
42
WITH t DO BEGIN write('Cheie:');readln(cheie); write('Informatie:');readln(info) END; write(f,t) END; Close(f) END; {Introd_date} PROCEDURE Citire_elem; {preia elementele din fişier in variabila tablou x} BEGIN Assign(f,'Date.dat'); Reset(f); n:=0; WHILE NOT eof(f) and (n<100) DO BEGIN n:=n+1; read(f,t); x[n]:=t END; Close(f) END; {Citire_elem} PROCEDURE Scrie_elem; {scrie elementele sortate dupa campul cheie in fişierul Datesort.dat} VAR i:integer; BEGIN Assign(fs,'Datesort.dat'); Rewrite(fs); writeln(’Cele ’,n,’ elemente sortate dupa campul cheie sunt:’); FOR i:=1 TO n DO BEGIN t:=x[i]; write(fs,t); writeln(t.cheie,' ',t.info) END; Close(fs) END; {Scrie_elem} PROCEDURE Insertie(dr:integer); VAR i:integer; BEGIN t:=x[dr];i:=dr-1; WHILE (i>=stg+1) and (x[i].cheie>t.cheie) DO BEGIN x[i+1]:=x[i]; i:=i-1 END; IF x[stg].cheie>t.cheie THEN
43
BEGIN i:=stg-1; x[stg+1]:=x[stg] END; x[i+1]:=t END; {Insertie} PROCEDURE Sort_ins_rec(stg,dr:integer); {sortare prin insertie - varianta recursiva} BEGIN IF dr-stg>=1 THEN BEGIN Sort_ins_rec(stg,dr-1); Insertie(dr) END END; {Sort_ins_rec} BEGIN write('Introduceti numărul de elemente: '); readln(n); Introd_date(n); Citire_elem; stg:=1; Sort_ins_rec(n); Scrie_elem; readln END {sortare_prin_insertie}.
Rezultatul execuţiei programului:
Introduceti numărul de elemente: 5 Introduceti cele n elemente: Cheie:15 Informatie:w Cheie:3 Informatie:q Cheie:21 Informatie:y Cheie:17 Informatie:d Cheie:10 Informatie:r Cele 5 elemente sortate dupa cimpul cheie sunt: 3 q 10 r 15 w 17 d 21 y
Problema 2. Să se scrie un program Pascal care să realizeze gestionarea unui
fişier "carte de telefon".
PROGRAM Carte_de_telefon;
44
{programul permite: - gestionarea unui fişier "Carte de telefon" realizand următoarele operaţii: creare fişier, cautare abonat, stergere abonat, afisare abonati, ordonare alfabetica a abonatilor, adaugare, modificare - interclasarea a doua fişiere ordonate alfabetic dupa campul nume} TYPE string20=STRING[20]; string30=STRING[30]; abonat=Record nume:string20; adresa:string30; nr_tel:STRING[10] END; fişier=FILE OF abonat; VAR f:fişier; x:abonat; PROCEDURE Creare(VAR f:fişier; nf:STRING); {procedura creeaza fişierul cu numele nf şi permite introducerea abonatilor} BEGIN Assign(f,nf); Rewrite(f); writeln('Introduceti date; pentru terminare tastati ^Z'); WHILE NOT eof DO BEGIN WITH x DO BEGIN write('Nume: '); readln(nume); write('Adresa: '); readln(adresa); write('Telefonul: '); readln(nr_tel) END; write(f,x) END; close(f) END; {Creare} PROCEDURE gasit(n:string20;a:string30; VAR g:boolean; VAR poz:integer); {procedura cauta in fişier abonatul cu numele n şi adresa a - in cazul in care abonatul este gasit, g ia valoarea true, iar poz intoarce numărul inregistrarii} BEGIN seek(f,0); g:=false; WHILE NOT eof(f) DO BEGIN
45
read(f,x); IF (x.nume=n) and (x.adresa=a) THEN BEGIN poz:=filepos(f)-1; g:=true END END END; {gasit} PROCEDURE Cautare(VAR f:fişier; nf:STRING; nume_a:STRING; adresa_a:string30); {procedura de cautare a abonatului cu numele nume_a şi adresa adresa_a-in cazul in care abonatul se afla in fişier este afisat numărul sau de telefon} VAR p:integer; g:boolean; BEGIN Assign(f,nf); {$I-} reset(f); {$I+}; IF IOResult<>0 THEN BEGIN writeln('Fişierul nu exista!!!'); halt END ELSE BEGIN gasit(nume_a,adresa_a,g,p); IF NOT g THEN writeln('Abonatul nu se afla in cartea de telefon!') ELSE BEGIN seek(f,p); read(f,x); writeln('Numărul de telefon este ',x.nr_tel) END; Close(f) END; readln END; {cautare} PROCEDURE Afisare(VAR f:fişier; nf:STRING); {procedura de afisare a tuturor inregistrarilor din fişier} BEGIN Assign(f,nf); {$I-} Reset(f); {$I+}; IF IOResult<>0 THEN BEGIN writeln('Fişierul nu exista!!!'); halt
46
END ELSE BEGIN writeln(' Listarea inregistrarilor din fişier '); WHILE NOT eof(f) DO BEGIN read(f,x); writeln(filepos(f),' ',x.nume,' ',x.adresa,' ',x.nr_tel) END; Close(f) END; readln END; {afisare} PROCEDURE Stergere(VAR f:fişier; nf:STRING; k:integer); {procedura sterge inregistrarea k din fişier - k=1,n} VAR n,i:integer; BEGIN Assign(f,nf); {$I-}; Reset(f); {$I+}; IF IOResult<>0 THEN BEGIN writeln('Fişierul nu exista !!!'); halt END ELSE BEGIN n:=Filesize(f); IF k>n THEN writeln('Inregistrarea nu exista in fişier') ELSE BEGIN seek(f,k-1) FOR i:=k TO n-1 DO BEGIN seek(f,i); read(f,x); seek(f,i-1); write(f,x) END; truncate(f) END; Close(f) END; readln END; {Stergere} PROCEDURE Ordonare (VAR f:fişier; nf:STRING); {procedura ordoneaza fişierul alfabetic, dupa nume abonat}
47
VAR x,y:abonat; n,i,j:integer; BEGIN Assign(f,nf); {$I-}; Reset(f); {$I+}; IF IOResult<>0 THEN BEGIN writeln('Fişierul nu exista !!!'); halt END ELSE BEGIN n:=Filesize(f); FOR i:=0 TO n-2 DO FOR j:=i+1 TO n-1 DO BEGIN seek(f,i); read(f,x); seek(f,j); read(f,y); IF x.nume>y.nume THEN BEGIN seek(f,i);write(f,y); seek(f,j);write(f,x) END END; Close(f) END; readln END; {Ordonare} PROCEDURE Adaugare (VAR f:fişier; nf:STRING); {procedura permite adaugarea de noi abonati in fişier} BEGIN Assign(f,nf); {$I-}; Reset(f); {$I+}; IF IOResult<>0 THEN BEGIN writeln('Fişierul nu exista!!!'); halt END ELSE BEGIN {pozitionarea la sfirsitul fişierului} seek(f, filesize(f)); writeln('Introduceti date - pentru terminare tastati ^Z'); REPEAT WITH x DO
48
BEGIN write ('Nume: '); readln(nume); write('Adresa: '); readln(adresa); write('Tel: '); readln(nr_tel) END; write(f,x) UNTIL eof; close(f) END; END; {Adaugare} PROCEDURE Modif (VAR f:fişier; nf:STRING; nume_a:string20;adresa_a:string30); {procedura permite modificarea numărului de telefon pentru abonatul cu numele nume_a şi adresa adresa_a} VAR g:boolean; k:integer; BEGIN Assign(f,nf); Reset(f); gasit(nume_a,adresa_a,g,k); IF NOT g THEN writeln('Abonatul nu exista!!!') ELSE BEGIN seek(f,k); read(f,x); writeln('Nume: ',x.nume,'Adresa: ', x.adresa ,'Tel: ',x.nr_tel); write(’Introduceti noul numar de telefon: ’); readln(x.nr_tel); seek(f,k); write(f,x) END; Close(f) END; {Modif} PROCEDURE Interclasare (VAR f1,f2,f:fişier; nume1,nume2,nume:STRING); {..- procedura interclaseaza doua fişiere f1 şi f2 - cheia de interclasare este campul nume - f este fişierul rezultat in urma interclasarii fişierelor f1 şi f2 - cele doua fişiere f1 şi f2 trebuie sa fie ordonate dupa campul nume} VAR k1,k2:string20; x1,x2:abonat; BEGIN Assign(f1,nume1); Reset(f1); Assign(f2,nume2);Reset(f2); Assign(f,nume); Rewrite(f);
49
read(f1,x1); k1:=x1.nume; read(f2,x2); k2:=x2.nume; WHILE (k1<>'Ww') or (k2<>'Ww') DO {Sirul 'Ww' este "o valoare mare" care sesizeaza sfarsitul unui fişier. - k1='Ww' şi k2='Ww' este conditia de iesire din iteratie; ea este adevarata cand cele doua fişiere au fost parcurse integral} IF k1<k2 THEN BEGIN write(f,x1); IF eof(f1) THEN k1:='Ww' ELSE BEGIN read(f1,x1); k1:=x1.nume END END ELSE BEGIN read(f1,x1); IF eof(f2) THEN k2:='Ww' ELSE BEGIN read(f2,x2); k2:=x2.nume END END; Close(f1); close(f2); Close(f) END; {Interclasare} PROCEDURE meniu(nume_fişier:STRING); {meniu pentru gestiunea fişierului cu numele nume_fişier} VAR opt:char; aa:string30;na:string20; poz:integer; BEGIN WHILE (1=1) DO BEGIN clrscr; gotoxy(10,10); writeln('1 - Creare'); gotoxy(10,11); writeln('2 - Cautare'); gotoxy(10,12); writeln('3 - Afisare'); gotoxy(10,13); writeln('4 - Stergere'); gotoxy(10,14); writeln('5 - Ordonare') gotoxy(10,15);
50
writeln('6 - Adaugare'); gotoxy(10,16); writeln('7 - Modificare'); gotoxy(10,18); writeln('0 - Sfarsit'); gotoxy(10,24); write('Optiunea dvs.?'); readln(opt); CASE opt of '1': BEGIN clrscr; creare(f,nume_fişier) END; '2': BEGIN clrscr; write('Nume abonat: ');readln(na); write('Adresa: ');readln(a); cautare(f,nume_fişier,na,aa) END; '3': BEGIN clrscr; afisare(f,nume_fişier) END; '4': BEGIN clrscr; write('Introduceti pozitia pe care doriti sa o stergeti (k>=1): '); readln(poz); stergere(f,nume_fişier,poz) END; '5':ordonare(f,nume_fişier); '6': BEGIN clrscr; adaugare(f,nume_fişier) END; '7': BEGIN clrscr; write('Nume abonat:'); readln(na); write('Adresa: ');readln(aa); modif(f,nume_fişier,na,aa) END; '0' : exit ELSE writeln('Optiune inexistenta!!') END END END; {meniu}
51
PROCEDURE MeniuP; VAR op,rasp:char; nume_fişier:STRING; f1,f2,f:fişier; BEGIN WHILE (1=1) DO BEGIN clrscr; gotoxy(5,5); writeln(' MENIU PRINCIPAL'); gotoxy(1,7); writeln('1 - Gestiune fişier abonati'); gotoxy(1,8); writeln ('2 - Interclasare fişiere'); gotoxy(1,10); writeln('0 - Sfarsit'); write('Optiunea dvs.?');readln(op); CASE op of '1': BEGIN clrscr; write('Nume fişier abonati:'); readln(nume_fişier); meniu(nume_fişier) END; '2': BEGIN clrscr; write('Nume fişier 1:');readln(nume_1); write('Nume fişier 2:');readln(nume_2); write('Nume fişier interclasare: '); readln(nume_i); write ('Fişierele au fost sortate? (D/N) ');readln(rasp); IF upcase(rasp)='D' THEN Interclasare(f1,f2,f,nume_1,nume_2, nume_i) ELSE writeln('Sortati mai intai fişierele!!!') END; '0': halt ELSE writeln('Optiune inexistenta!!!') END END; END; {MeniuP} {program principal} BEGIN Clrscr; MeniuP END {Carte_de_telefon}.
52
Rezultatul execuţiei programului:
MENIU PRINCIPAL 1 - Gestiune fişier abonati 2 - Interclasare fişiere 0 - sfarsit Optiunea dvs.?1 Nume fişier abonati: abonati.dat 1 - Creare 2 - Cautare 3 - Afisare 4 - Stergere 5 - Ordonare 6 - Adaugare 7 - Modificare 0 - Sfarsit Optiunea dvs? 1 Introduceti date; pentru terminare tastati ^Z Nume: Ionescu Ioana Adresa: Independentei 37 Telefonul 172313 Nume: Aldea Mircea Adresa: Republicii 21 Telefonul 151327 Nume: Irimescu Andrei Adresa: Maramures 7 Telefonul 160251 1 - Creare 2 - Cautare 3 - Afisare 4 - Stergere 5 - Ordonare 6 - Adaugare 7 - Modificare 0 - Sfarsit Optiunea dumneavoastra ? 6 ADAUGARE Introduceti date - pentru terminare tastati ^Z Nume: Antonescu Cornel Adresa: Republicii 200 Tel: 177312 1 - Creare 2 - Cautare 3 - Afisare 4 - Stergere 5 - Ordonare 6 - Adaugare 7 - Modificare 0 - Sfarsit Optiunea dumneavoastra ? 5 1 - Creare 2 - Cautare 3 - Afisare 4 - Stergere 5 - Ordonare 6 - Adaugare 7 - Modificare 0 - Sfarsit Optiunea dumneavoastra ? 2 Nume abonat: Popescu Sorin Adresa: Republicii 101 Abonatul nu se afla in cartea de telefon! 1 - Creare
53
2 - Cautare 3 - Afisare 4 - Stergere 5 - Ordonare 6 - Adaugare 7 - Modificare 0 - Sfarsit Optiunea dumneavoastra ? 2 Nume abonat: Ionescu Ioana Adresa: Independentei 37 Numărul de telefon este 172313 1 - Creare 2 - Cautare 3 - Afisare 4 - Stergere 5 - Ordonare 6 - Adaugare 7 - Modificare 0 - Sfarsit Optiunea dumneavoastra ? 7 Nume abonat: Irimescu Andrei Adresa: Maramures 7 Nume: Irimescu Andrei Adresa: Maramures 7 Tel: 160251 Introduceti noul numar de telefon: 171002 1 - Creare 2 - Cautare 3 - Afisare 4 - Stergere 5 - Ordonare 6 - Adaugare 7 - Modificare 0 - Sfarsit Optiunea dumneavoastra ? 4 Introduceti pozitia pe care doriti sa o stergeti (k>=1): 3 1 - Creare 2 - Cautare 3 - Afisare 4 - Stergere 5 - Ordonare 6 - Adaugare 7 - Modificare 0 - Sfarsit Optiunea dumneavoastra ? 3 Listarea inregistrarilor din fişier 1 Aldea Mircea Republicii 21 151327 2 Antonescu Cornel Republicii 200 1772313 3 Irimescu Andrei Maramures 7 171002 1 - Creare 2 - Cautare 3 - Afisare 4 - Stergere 5 - Ordonare 6 - Adaugare 7 - Modificare 0 - Sfarsit Optiunea dumneavoastra ? 0 MENIU PRINCIPAL 1 - Gestiune fişier abonati 2 - Interclasare fişiere 0 - Sfarsit Optiunea dumneavoastra? 2 Nume fişier 1: abonat1.dat
54
Nume fişier 2: abonat2.dat Nume fişier interclasare: abonat.dat Fişierele au fost sortate? (d/n) d MENIU PRINCIPAL 1 - Gestiune fişier abonati 2 - Intercalare fişiere 0 - Sfirsit Optiunea dumneavoastra? 0
55
§5. Sugestii privind evaluarea
Se recomadă aplicarea celor trei tipuri de evaluare: iniţială, curentă şi
sumativă.
Evaluarea iniţială se va efectua la începutul fiecărei programe de predare-
învăţare şi are drept scop stabilirea nivelului de pregătire al elevului la momentul
dat. Rezultatele evaluării vor fi folosite pentru selectarea sarcinilor individuale
gradate ca dificultate.
Evaluarea curentă se va realiza pe parcursul procesului didactic, pe secvenţe
mici. Obiectivele de referinţă din programele de studiu vizează următoarele
categorii de abilităţi:
- cunoaşterea conceptelor teoretice;
- cunoaşterea algoritmilor de prelucrare a informaţiei;
- elaborarea programelor pentru rezolvarea problemelor tipice;
- elaborarea programelor pentru rezolvarea problemelor ce implică un anumit
grad de creativitate;
- prelucrarea informaţiei la calculator cu ajutorul programelor elaborate de
elevi sau a programelor standard.
Evaluarea sumativă se va realiza la sfîrşitul fiecărui capitol, trimestru şi an
şcolar. Ca elemente componente ale instrumentelor de evaluare se recomandă
utilizarea itemilor de tip rezolvare de problemă la calculator.
Dintre cele trei componente ale spiralei educaţiei: predarea-învăţarea-
evaluarea, ultima este adesea neglijată în procesul de planificare şi desfăşurare a
instruirii. Faptul că profesorii stăpînesc, fiecare, o anumită disciplină îi face,
probabil, să creadă că evaluarea vine de la sine, ne mai acordînd importanţa
cuvenită acestei componente. Nu trebuie uitat nici faptul că aşa cum este proiectată
evaluarea tot aşa se produc predarea şi învăţarea. De pildă, dacă vom pune accentul
doar pe verificarea volumului de cunoştinţe, atunci elevii vor învăţa definiţii,
reguli, legi sau concepte la nivelul memoriei şi mai puţin la nivelul reflecţiei.
56
Din nefericire, în şcoală predomină evaluarea de etapă (sumativă)
neglijîndu-se aproape total evaluarea continuă (formativă). Cei ce evaluează fac
apel aproape exclusiv la experienţa lor şi, în consecinţă, ţin prea puţin seama de
obiectivele educaţionale, de metodele şi tehnicile de evaluare sau de calităţile
instrumentelor de evaluare. Comportamentul elevului este atît de complex, încît nu
poate fi ilustrat printr-o evaluate întîmplătoare ce se exprimă adesea printr-o notă.
Dimpotrivă, o evaluare formativă îi arată elevului dacă progresul său este
satisfăcător, la ce nivel a ajuns, ce nu a înţeles şi ce trebuie să facă în continuare. în
acelaşi timp profesorul este informat despre activitatea sa de instruire pe care o
poate adapta permanent în funcţie de obiectivele educaţionale.
Fiecare profesor va trebui să facă un efort personal de adaptare la
metodologia descrisă în continuare şi să-şi elaboreze itemi pentru conţinuturile şi
obiectivele expuse în curriculum-ul liceal la informatică în vederea unei evaluări
formative pe care o va realiza în clasă.
Propunem în continuare cîteva modele de teste de evaluare formativă şi sumativă.
57
Teste de evaluare formativă
V-I1. Următoarea declaraţie:
type fisier=file of TipComp;
undeTipComp - tipul componentelor; este:
a) declararea unui fişier cu tipb) declararea fişier fărăc) declaraţie de tip greşită
2. Ce va realiza următoarea secvenţă de program: WHILE NOT eof(f) DO BEGIN readln(f,s); writeln(s) END;
Încercuiţi varianta corectă :a) afişează la ecran conţinutul unui fişier;b) citirea de la tastatură a componentelor fişierului;c) afişarea şi citirea de la tastatură a componentelor unui fişier;
3. Rezolvaţi problema:Se dă un vector cu n (1<=n<=100) componente numere întregi. Să se calculeze suma componentelor lui. Datele se citesc dintr-un fişier, iar rezultatul se va scrie în acelaţi fişier.
58
V-II
1. În declararea următorului tip
type fisier=file of TipComp;
TipComp (tipul componentelor) poate fi:a) de tip structuratb) de tip întregc) de orice tip, înafară de tipul fişierd) de orice tip
2. Ce va realza următoarea secvenţă de program:TYPE material=RECORD cod:integer; nume:STRING; cantit:real; nr:integer END; fişier_stoc=file of material; VAR f:fişier_stoc; x:material; BEGIN Assign(f,'Stoc.dat'); Reset(f); WHILE NOT eof(f) DO BEGIN read(f,x); WITH x DO writeln('Cod= ',cod,'; Nume= ',nume,' ;Cantitate=',cantit:5:3) END; Încercuiţi varianta corectă:
a) afişează la ecran conţinutul unui fişier text;b) citirea de la tastatură a componentelor unui fişier cu tip;c) afişarea şi citirea de la tastatură a componentelor unui fişier;d) afişează la ecran conţinutul unui fişier cu tip;
3. Rezolvaţi problema :Se dă un vector n (1<=n<=100) componente numere întregi. Să se calculeze produsul componentelor lui. Datele se citesc dintr-un fişier, iar rezultatul se va scrie în acelaţi fişier.
59
Teste de evaluare sumativă
V-I
1. În Pascal fişierele tipizate se declară:a)var f:fileb)var f:file of [tipul componentelor]c)var f:file of filed)var f:text
2. În Pascal fişierele text se declară:
a)var f:fileb)var f:file of [tipul componentelor]c)var f:file of filed)var f:text
3. Care va fi conţinutul fişierului ‘f1.dat’ în rezultatul execuţiei următorului program?program v22p4;var f:file of integer;i,j,t:integer;beginassign(f, ‘f1.dat’);rewrite(f);for i:=1 to 10 do begin t:=1;for j:=1 to 10 do t:=i*j; write(f,t);end; close(f);end.
a) 12345678910246810121416182036912151821242730b) 102030405060708090100c) 12345678910d) 302010
4. Ce va realiza programul:program File2 ;uses crt ;var f :text; s:string;BEGIN ClrScr; write (‘Numărul de rinduri: ’); readln (n); assign (f, ‘c:\proba.txt’); rewrite (f); for i:=1 to n do begin readln (s);
60
writeln (f,s); end; close(f); readkey;end.
a) Va citi de la tastatură n rânduri de caractere şi le va scrie în fişier, n-dat b) Va citi de la tastatură n rânduri de caractere şi le va scrie în fişier, n-datc) Şterge n caractere din fişier, n-datd) Va citi din fişier n rânduri de caractere şi le va afişa la ecran, n-dat
5. Să se formuleze problema care se rezolvă cu ajutorul algoritmului:program text1;type fisier=file of char;var f1, f2 :fisier; x:char; l,i :integer;procedure init(var f1,f2:fisier);beginassign (f1,’one.txt’);reset (f1);assign (f2,’onel.txt’);rewrite (f2);end;procedure invers(var f1,f2:fisier);begininit (f1,f2);l:=filesize(f1);for i:=l-1 downto 0 do beginseek (f1,i);read (f1,x);write (f2,x);end;writeln;close (f1);close(f2);end;BEGINinvers (f1,f2);END.
a) Se dă un fişier ce conţine un şir de caractere. Să se creeze un alt fişier în
care caracterele vor fi şterse în ordine inversată.
b) Se dă un fişier ce conţine un şir de caractere. Să se creeze un alt fişier în
care ordinea caracterelor este inversată.
c) Se dă un fişier ce conţine un şir de caractere. Să se dubleze conţinutul
acestui fişier cu caractere scrise în ordinea inversă
61
V-II
1. În Pascal fişierele netipizate se declară: a)var f:fileb)var f:file of [tipul componentelor]c)var f:file of filed)var f:text
2. Care din declaraţiile de mai jos este incorectă:a)var f:fileb)var f:file of [tipul componentelor]c)var f:file of filed)var f:text
3. Care va fi conţinutul fişierului ‘f1.dat’ în rezultatul execuţiei următorului program?program v23p400;var f:file of integer;i,j,t:integer;beginassign(f, ‘f1.dat’);rewrite(f);for i:=1 to 4 do begin t:=i*i;for j:=1 to 3 do write(f,t);end; close(f);end.
a) 1212121212121212b) 111444999161616c) 123123123123123d) 1144991616
4. Ce va realiza programul:program File2 ;uses crt ;var f :text; s:string;BEGIN ClrScr; write (‘Numărul de rinduri: ’); readln (n); assign (f, ‘c:\proba.txt’); rewrite (f); for i:=1 to n do begin readln (s); writeln (f,s); end; close(f);
62
readkey;end.
e) Va citi de la tastatură n rânduri de caractere şi le va scrie în fişier, n-dat f) Va citi de la tastatură n rânduri de caractere şi le va scrie în fişier, n-datg) Şterge n caractere din fişier, n-dath) Va citi din fişier n rânduri de caractere şi le va afişa la ecran, n-dat
5. Să se formuleze problema care se rezolvă cu ajutorul algoritmului:program text2;type fisier=file of char;var f1, f2 :fisier; s:char; BEGINassign (f1,’fis1.txt’);reset (f1);assign (f2,’fis2.txt’);reset (f2);assign (t,’temp.txt’);rewrite (t);while not eof(f1) do beginread (f1,s);write (t,s);end;close (f1);close (t);rewrite (f1);while not eof(f2) do beginread (f2,s);write (f1,s);end;close (f1);close (f2);reset (t);rewrite (f2);while not eof(t) do beginread (t,s);write (f2,s);end;close (t);close (f2); END.
a) Să se creeze două fişiere cu conţinut identic.
b) Se dau două fişiere ce conţin caractere diferite. Să se adauge în fişierul 1
conţinutul fişierului 2, în fişierul 2 conţinutul fişierului 1.
c) Se dau două fişiere ce conţin diferite caractere. Să se interschimbe
conţinutul acestor fişiere.
63
Sarcini adăugătoare
Pentru fixarea cunoştintelor dobîndite pîna în prezent este bine să răspundeţi la
următoarele întrebări şi să rezolvaţi aceste probleme.
1. De ce nu putem avea acces direct la componentele unui fişier text?
2. Se pot utiliza procedurile BlockRead şi respectiv BlockWrite pentru
operaţii de citire/scriere dintr-un/într-un fişier text ?
3. Analizaţi tipurile tablou şi fişier. Evidenţiaţi asemănările şi deosebirile.
4. Verificaţi corectitudinea următoarelor declaraţii:
a) TYPE fişier=FILE OF integer; VAR f:fişier;
b) TYPE fis_nr=FILE OF integer; VAR f:FILE OF fis_nr; 5. Variabilele de tip fişier sunt variabile statice sau dinamice? Argumentaţi
răspunsul. Scrieţi o procedură care să permită inserarea unei înregistrări într-un
fişier cu tip, ordonat după un cîmp. Structura înregistrării fişierului este la
alegere.
6. Să se scrie un program Pascal care concatenează un număr de p fişiere,
într-un alt fişier. Se vor scrie trei variante ale programului: pentru fişiere text, cu
tip şi fără tip.
7. Să se scrie un program Pascal care compară linie cu linie, conţinutul a
două fişiere text şi afişează numărul de ordine al liniilor în care apar diferenţe.
8. Se dau două şiruri de caractere s1 şi s2, şi un fişier text f. Să se scrie un
program Pascal care copiază fişierul f într-un fişier g înlocuind toate apariţiile
şirului s1 cu şirul s2.
9. Să se scrie un program Pascal care să gestioneze un fişier de personal.
Programul trebuie să realizeze următoarele operaţii: creare; adăugare; modificare; ştergere; listare.
64
Indicaţie. Se va folosi drept referinţă structura fişierului personal prezentat în
secţiunea Fişiere cu tip; la dorinţă, puteţi completa structura de înregistrare cu
noi cîmpuri.
Să se scrie un program Pascal care citeşte un fişier text ce reprezintă sursa unui
program Pascal corect din punct de vedere sintactic şi afişează numele funcţiilor şi
procedurilor utilizate în program, în ordine alfabetică.
65
Concluzii
Ca urmare a transformărilor din societatea noastră, rolul şcolii constă în
dezvoltarea liberă, armonioasă a elevului şi formarea personalităţii creative, care se
poate adapta la condiţiile de continuă schimbare ale vieţii. Una din principalele
probleme ale pedagogiei şi didacticii este ridicarea interesului elevului faţă de
învăţătură.
Principala formă organizaţională a procesului de învăţământ la informatică în
şcoală este lecţia. În cadrul lecţiei se realizează funcţiile esenţiale ale
învăţământului:
- didactice,
- educative,
- dezvoltative.
Curriculumul la informatică propune un conţinut care contribuie la
realizarea obiectivelor curriculare, care consemnează aşteptările societăţii, vizând
atât parcursul şcolar al elevilor în ansamblu sau, cât şi performanţele cele mai
generale care ar trebui atinse de el la finele şcolarizării. Obiectivele sunt "modele"
care reies din structura personalităţii şi din cea a experienţei, sociale în sens larg,
vizând sintetic cunoştinţele ("a şti"), capacităţile (" a şti să faci") şi atitudinile ("a
ştii să fii") pe care elevii ar trebui să le interiorizeze în cadrul întregului parcurs
şcolar. Ele sunt clasificate pe categorii:
- de cunoaştere
- de capacităţi
- de atitudini
Din experienţă se ştie, că calitatea şi nivelul ştiinţifico-metodic al activităţilor
şcolare depinde şi de interesele individuale ale profesorului, de calificaţia lui
informatică şi pedagogică. De aceea e greu să se dea indicaţii metodice concrete, care
ar satisface orice profesor.
66
Între teorie şi practică există interacţiune, condiţionare reciprocă. Desigur, din
punct de vedere istoric practica are prioritate. Teoria şi practica sunt şi laturile
esenţiale ale investigaţiilor (cercetărilor) în vederea înnoirilor şi perfecţionărilor
cunoştinţelor.
Principiul legăturii teoriei de practică evidenţiază: practica — este un izvor al
teoriei şi criteriul de verificare al acestuia, ea vitalizând teoria, iar sub raport
didactic, ea transformă cunoştinţele în convingeri ştiinţifice; teoria (izvorînd din
practică, din investigaţii şi deducţii ştiinţifice şi verificată de practică) vine în
sprijinul practicii, al aplicării cunoştinţelor (formării priceperilor şi deprinderilor),
oferindu-i conştientizarea şi eficienţa acţiunii, prin fundamentele ştiinţifice, prin
mijloacele şi metodele de aplicare a cunoştinţelor.
Necesitatea aplicării acestui principiu porneşte de la premisa specificată de
Seneca în secolul I e.n.: „Nu pentru şcoală ci pentru viaţă învăţăm”, premisă
completată de pedagogul american John Dewey: „Şcoala nu trebuie sa pregătească
pentru viaţă, ci să fie viaţa, însăşi.”
67
Bibliografie
1. Anatol Gremalschi, Iurie Mocanu, Ion Spinei, „Informatica, Limbajul
Pascal”, manual pentru clasele IX-XI, Editura Ştiinţa 1999.
2. Andrei Braicov, „Turbo Pascal, Culegere de probleme”, Editura Prut
Internaţional, 2005.
3. Daniela Saru, „Algoritmi şi Limbaje de Programare”, manual pentru cl. 9,
Editura „Didactica şi Pedagogica”, R.A. Bucureşti, 1998.
4. Cornelia Ivasc, Mona Pruna, „Tehnici de Programare, Aplicaţii”, Editura
„Petrion” Bucureşti 1999.
5. V. Cristea, P. Dumitru, C. Giumale s.a., Dicţionar de informatică, Editura
Ştiinţifică şi Enciclopedică, Bucureşti, 1981.
6. T.Sorin, Tehnici de programare, Teora, Bucureşti, 1996.
7. K. Şandor, Turbo PASCAL 6.0. Ghid de utilizare, Editura Microlnformatica,
Cluj-Napoca, 1993.
8. O.Chirchin, Metodica predării informaticii, Chişinău, Tipogr.UPS „Ion
Creangă”, 2004.
9. T.Sorin, Tehnici de programare, Bucureşti, Editura Teora, 1996.
10.V.Cristea, P.Dumitru, C.Giumale ş.a., Dicţionar de informatică, Bucureşti,
Editura Ştiinţifică şi Enciclopedică, 1981.
11.W.Okosi, Învăţămîntul problematizat în şcoala contemporană, Bucureşti,
Editura Didactică şi Pedagogică, 1978.
12.I.Jinga, Manual de pedagogie, Bucureşti, Editura All
13.Educaţional, 1998.
14.I.Nicola, Tratat de pedagogie şcolară, Bucureşti, Editura Didactică şi
Pedagogică, 1996.
15.C.Narly, Pedagogie generală, Bucureşti, Editura Didactică şi Pedagogică,
1996.
68