вторник, 24 мая 2016 г.

  Fisier Text         



                                  
Un fișier text este un tip de fisier în care datele sunt stocate ca o secvență de caractere, într-o codificare predefinită (de obicei ASCII, dar mai recent și Anicode). Este un tip canonic de fișier unde datele sunt stocate ca "secvențe de biti" (binar). Nu orice fișier binar este un fișier text. Prin definire, un fișier text este codificat unitar, conținutul său fiind lizibil și editabil direct, prin intermediul unui editor simplu de text (Notepad, emacs, gedit etc.).

Problema:
Se dă fişierul text numere.txt care conţine pe primul rând o valoare naturală nenulă n (n<=30000) şi pe al doilea rând n valori întregi de cel mult 4 cifre separate prin unul sau mai multe spaţii. Se cere să se calculeze suma elementelor pare de pe al doilea rând din fişier.
Rezolvare:
Uses CRT;
var f:text;
n,i,s,x:integer;
begin
assign(f,’numere.txt’);
reset(f);
readln(f,n);
s:=0;
for i:=1 to n do
begin
read(f,x);
if x mod 2=0 then s:=s+x
end;
writeln(‘Suma este: ‘,s);
close(f)
end.



Subprograme
                                 
                                                                  
Un subprogram este un ansamblu ce poate conţine tipuri de date, variabile şi instrucţiuni destinate unei anumite prelucrări (calcule, citiri, scrieri). Subprogramul poate fi executat doar dacă este apelat de către un program sau un alt subprogram. În limbajul Pascal, subprogramele sunt de 2 tipuri: funcţii şi proceduri. 

Problema:
De la tastatura se citeste un numar. De inscris in fisier toate descompunerile in suma de 3 termeni diferiti de 0. Descompunerile la care difera ordinea termenilor, sint considerate aceleasi.

Rezolvare:
Uses CRT;
Var A:Real;
Procedure: Scrie(N:Integer);
Var F:Text;  B,N,M,:Integer;
Begin
          Assign(F,'date.out');  Rewrite(F);
For B:=0 To A-2 Do
For N:=X To A-2 Do
For M:=Y To A-2 Do
if B+N+M=N Then Writeln( F,B,'  ',N,'  ',M,' );
Close(F)  end;
Begin
          ClrScr;   Write('A=');  Read(A);  Write(A)
end.


Tipul de date Multime
                              

                      

                               
Un tip de date mulţime (set) se difineşte in raport cu un tip de bază care trebuie să fie ordinal:
::= [pached} set of 
Valorile unui tip de date set sint multimi formate din valorile tipului de baza. Daca tipul de baza are n valori,tipul multime va avea 2n valori.In implementarile limbajului valoarea lui n este limitata de regula n< s.e 256.
In PASCAL o multime poate fi specifica enumerindu-i-se elementele in parantezele patrate ‘’[‘’si’’]’’,care tin locurile acoladelor din matematica.
Notatia [ ] reprezinta multime vida.

Putem avea multimi de caractere si multimi de numere byte(256 de caractere).

Problema:

Fie multimile A={1,3,a,4,c,d,5,8,2}, B={2,a,c,8,4,9,e,3}. Sa se calculeze multimea 
C=(A B)/(A B).

Rezolvare:
Program: Set;
uses CRT;
var   a,b,c: set of char;
        i: integer;
Begin
ClrScr;
A:=[  ‘ 1 ‘, ’ 3 ‘, ‘ a ‘, ‘ 4 ‘, ‘ c ‘, ‘ d ‘, ‘ 5 ‘, ‘ 8 ‘, ‘ 2 ‘ ] ;
B:= [  ‘ 2 ‘, ‘ a ‘, ‘ c ‘, ‘ 8 ‘, ‘ 4 ‘, ‘ 9 ‘, ‘ e ‘, ‘ 3 ‘ ] ;
C:=(A+B)-(A*B);
for  i:=1  to 255  do
     if  chr(i)  in  C  then  write  ( chr(i) , ‘  ‘ );
readkey;
End.


 Tipul de date Record.

                                                      

                                              
Mulţimea de valori ale unui tip de date record este constituită din articole( înregistrări ). Articolele sînt formate din componente, denumite câmpuri. Fiecare câmp are un nume ( identificator de câmp). Spre deosebire de componentele unui tablou, câmpurile pot fi de tipuri diferite. Un tip de date articol se defineşte printr-o structură de forma:
           type <nume tip> = record
                                <nume câmp 1> : T1;
                                <nume câmp 2> : T2;
                                 . . .
                               <nume câmp n> : Tn;
            end;
unde T1,T2,…,Tn specifică tipul câmpurilor respective. Tipul unui nume de câmp este arbitrar, astfel un câmp poate să fie la rândul său tot de tip articol. Prin urmare, se pot defini tipuri imbricate. Fiind date două variabile de tip articol de acelaşi tip, numele variabilelor pot apărea într-o instrucţiune de atribuire. Această atribuire înseamnă copierea tuturor câmpurilor din membrul drept în membrul stâng. Fiecare componentă a unei variabile de tip record poate fi specificată explicit, prin numelevariabilei şi denumirile de câmpuri, separate prin puncte.

Problema:
Se dau doua date calendaristice, reprezentind zilele de nastere a doi prieteni, Radu si Mihai.Sa se afiseze numele celui mai mare.
Rezolvare:

Program: Record;

Uses Crt;
Var R, M: record
        zi:1…31;
        luna:1…12;
         an: Word;
    end;
Begin

   ClrScr;
   {Citim data nasterii lui Radu}
   repeat

   write ( ‘ Introdu  ziua, luna, anul nasterii lui Radu: ‘);
   readln ( zi, luna, an );
until ( zi in  [1…31] ) and ( luna in [1…12] )  and ( an<2000);
{Determinam cine e mai mare}
     if  (r.an>m.an) or ( (r.an=m.an) and  ( r.luna>m.luna) ) or
      ( ( r.an=m.an )  and ( r.luna=m.luna ) and ( r.zi>m.zi) ) then
     write ( ‘ Mihai ’ );
     if  (m.an>r.an) or ( (m.an=r.an) and  ( m.luna>r.luna) ) or
     ( ( m.an=r.an )  and ( m.luna=r.luna ) and ( m.zi>r.zi) ) then
     write ( ‘ Radu ‘ );
     if  (m.an=r.an) and ( (m.luna=r.luna) and  ( m.lzi=r.zi) ) then
     write ( ‘ Sint nascuti in aceeasi zi ’ );
End.
Tipul de date String






Un sir de caractere reprezinta o succesiune de caractere cuprinsa intre apostrofuri. Aceasta succesiune poate fi alcatuita din:
-litere mici;
-litere mari;
-cifre;
-delimitatori;
-caractere speciale;
Tipul string este predefinit , adica este cunoscut , nu avem nevoie sa-l declaram cu type .

INSTRUCTIUNI:
length(a)  reprezinta lungimea STRING-ului (adica a numarului de caractere)
copy(a,b,c) unde "b" reprezinta pozitia, "c" reprezinta numarul de caractere. Formeaza un nou cuvant prin preluarea din "a" incepand de la pozitia "b", a unui anumit numar de caractere precizate adica "c"
concat(a,b,c,...)   formeaza un cuvant prin alipirea cuvintelor a,b,c... .
pos("caracter",a)   calculeaza prima pozitie pe care apare caracterul precizat in cuvantul a. (0 daca nu apare)



Problema:
Se dau doua cuvinte. Formati un cuvant din primele 3 caractere ale primului si ultimele 3 caractere din al doilea.
Rezolvare: 
Program P_string_re_1;

var a,b,c,d,e:string;
    n:integer;
Begin
  write('a=');   readln(a);
  write('b=');   readln(b);
  c:=copy(a,1,3);
  n:=length(b);
  d:=copy(b,n-2,3);
  e:=concat(c,d);
  write(e);
end.




Tipul de date Array.







Multimea de valori ale unui tip de date array
este constituita din tablouri.Tablourile  sint formate dintr-un numar fixat de componente de acelasi tip, denupit tip de baza.Tipul de date tablou se defineste printr-o constructie de forma: 
type <Nume tip> = array [T1] of [T2]; unde T1 este tipul indicelui care trebuie sa fie ordinal, iar T2  este tipul componentelor (tipul de baza) care poate fi un tip oarecare.

Problema:
Se da un vector cu (1≤n≤100)componente de tip integer si numar intreg
 x.Sa se verifice
daca vectorul dat contine componente egale cu x.In cazul afirmativ, sa se afiseze pozitia primei componente (egale cu x).De exemplu, pentru vectorul 4,10,-2,3,-2,4,5 si x=-2 se va afisa "Pozitia 3". iar pentru acelasi vector si x=7 se va afisa "Numarul 7 nu este componenta a vectorului".

Rezolvare:
program
 Example;
var a:array [1...100]
 of integer;
    n,i,x: integer;
      f:boolean;

Begin
   ClrScr;
   write ('Numarul de componente: ');
   readln (n);
   Randomize; {Conectarea generatorului de numere aleatoare}

for
 i:=1 to n do a[i]:=Random(100)-500; {Calculatorul genereaza componentele            vectorului - numere intregi pe intervalul [-500;500)}  
  write('Componenta cautata: ');
  readln(x);
  i:=0;
  i:=false;

repeat
  inc(i);
  f:=(x=a[i]);
  {Daca x=a[i], atunci f ia valoarea true};

until f or (i=n) ;
if f then writeln ('Pozitia ',i) else writeln ('Numarul', x , ' nu este componenta a vecorului' );
{Afiseaza vectorul}
write (a [i], ' ');
readkey;

End.