Se afișează postările cu eticheta algoritm. Afișați toate postările
Se afișează postările cu eticheta algoritm. Afișați toate postările

luni, 31 ianuarie 2011

Alocarea memoriei în Turbo Pascal

Orice algoritm lucrează cu date (numere întregi, reale, şiruri de caractere etc.). Referitor la acestea, în informatică, s-au cristalizat anumite concepte fundamentale, pe care le voi prezenta în continuare. Definiţie: Printr-un tip de dată  înţelegem o mulţime cu elemente numite valori. De sxemplu:{-32768, -32767,...0,1, ...32767} este omulţime de numere întregi. Atunci cînd nu există posibilatea de confuzie, putem nota mulţimea de mai sus astfel: [-32768,32767]. În Turbo Pascal un astfel de tip se numeşte integer şi este predefinit. Pe mulţimea valorilor unui tip se definesc operaţiile asociate tipului. De exemplu, pentru tipul integer se definesc operaţiile de adunare, scădere, înmulţire etc. Pentru fiecare tip se defineşte modul în care se memorează valorile sale. De exemplu, pentru tipul integer valorile se memorizează utilizînd codul complementar şi se folosesc 2 octeţi consecutivi. Pentru a lucra cu date de un anumit tip se folosesc variabile. O variabilă se caracterizează prin: tip (natura datelor şi modul de memorare), nume (prin care aceasta se adresează) şi adresă (număr de ordine al primului octet în care se reţin datele, memoria internă fiind privită ca o succesiune de octeţi numerotaţi). Tipurile de date pot fi simple şi structurate. Limbajele de programare evoluate utilizează din plin tipurile de date. Mai mult, unele din ele permit programului, folosind tipurile existente, să definească noi tipuri de date. Noţiunea de tip de date este strînsă legată de un anumit limbaj de programare. În situaţia în care se renunţă la această legătură, se ajunge la o altă noţiune mult utilizată şi anume cea de structură de date. De exemplu, mulţimea este o structură de date. În limbajul Turbo Pascal există tipul mulţime (set). Alte limbaje (de exemplu C) nu cunosc acest tip. Aceasta nu înseamnă că în C nu vom putea lucra cu mulţimi. Variabilele declarate în secţiunea var a unui program sau subprogram se numesc variabile statice. Numărul variabilelor statice se satabileşte în momentul scrierii programului şi nu poate fi schimbat în timpul execuţiei. Există însă situaţii în care numărul necesar de variabile nu este cunoscut din timp. De exemplu, presupunem că este necesară prelucrarea datelor referitoare la persoanele care formează o listă de aşteptare (o coadă) la o casă de bilete. Lungimea cozii este nedefinită. De fiecare dată cînd apare o persoană nouă, trebuie să se creeze o variabilă de tipul respectiv. După ce persoana pleacă – variabile evine inutilă. Variabilele care sunt create şi eventual distruse în timpul execuţiei programului se numesc variabile dinamice O structură de date este formată din datele propriu-zise şi relaţiile dintre ele. În funcţie de modul de organizare, o structură de date poate fi implicită sau explicită. Tablourile, şirurile de caractere, articolele, fişierele şi mulţimile sunt structuri implicite de date. Relaţiile dintre componentele acestor structuri sînt predefinite şi nemodificabile. De exemplu, toate componentele unui şir de caractere au un nume comun, iar caracterul s[i+1] este succesorul caracterului s[i] în virtutea poziţiei ocupate. Structurile de date se clasifică în două mari categorii: statice şi dinamice. Criteriul de clasificare este dat de modul de alocare a memoriei interne. Întrucît structura tablourilor, şirurilor de caractere, articolelor, mulţimilor, fişierelor nu se modifică în timpul execuţiei oricărul program sau subprogram, structurile respective reprezintă structuri statice de date.

§1. Tabloul


Fie Ani={1,2,….ni} mulţimea primelor ni numere naturale. Fie M=An1 x An2 x…..x Ank produsul cartezian a k astfel de mulţimi. Definiţie: Se numeşte tablou o funcţie f:M→T, unde T este o mulţime oarecare. Numărul k este dimensiunea tabloului. Dacă k=1 tabloul se mai numeşte şi vector. Vectorul are n1 componente. Dacă k=2 tabloul se mai numeşte şi matrice. Matricea are n1xn2 elemente. Majoritatea limbajelor de programare evoluate au implementat tipul tablou (array în Turbo Pascal). Pentru a identifica elementele unui tablou se folosesc indicii. Exemplul 1: Distanţa dintre două mulţimi în plan se consideră distanţa dintre două puncte ale acestor mulţimi, situate cel mai aproape unul de altul. Aflaţi distanţa dintre două mulţimi de puncte date. (pr.38, §5, [1])

Download Alocarea-memoriei

duminică, 30 ianuarie 2011

Programe rezolvate în Pascal

Probelma 1. Creaţi un program care afişează următoarea funcţie.



Program P2.1;

uses crt;

var i,n,s : integer;

f : boolean;

begin

clrscr;

repeat

write('Introduceţi un număr natural n=');

readln(n);

until n>2;

if n mod 2=0 then f:=false else f:=true;

write('s=');

for i:=1 to n-2 do

if(not f) and (i mod 2 =0)then write('*',i)

else

if f and (i mod 2<>0)then write('*',i);

writeln('*',n);

readkey;

end.





Se dă un număr natural n. Verificaţi daca acest număr este prim sau nu.





Program P2.2;

uses crt;

var i,n,f : integer;

begin

clrscr;

repeat

write('Introduceţi un număr natural n=');

readln(n);

until n>2;

f:=0;

for i:=2 to n div 2 do

if n mod i=0 then f:=1;

if f=0 then

writeln('Numărul',n:6,' este prim')

else

writeln('Numărul',n:6,' nu este prim');

readkey;

end.

Este dat intervalul numerelor naturale de la n pina la m. Determinati toate numerele naturale din acest interval.



Program P2.3;

uses crt;

var i,n,f,j,r,m : integer;

begin

clrscr;

repeat

write('Introduceţi limita de jos a intervalului n=');

read(n);

write('Introduceţi limita de sus a intervalului m=');

readln(m);

until (n>0) and(m>0) and(n<m);

writeln('Introduceţi intervalul de la',n:6,'pina la',m:6');

r:=0;

for j:=n to m do

begin

f:=0;

for i:=2 to j div 2 do

if j mod i=0 then f:=1;

if f=0 then

begin r:=1;

writeln('Numărul',j:6,' este prim')

end;

end;

if r=0 then writeln('Numărul nu este prim');

readkey;

end.



Se da un număr natural n. Determinaţi toate numerele prime, inclusiv n.



Program P2.4;

uses crt;

var i,n,f,j,r,m : integer;

begin

clrscr;

repeat

write('Introduceţi un număr natural n=');

readln(n);

until n>0;

writeln('Introduceţi intervalul de la 1 pînă la',n:6');

r:=0;

for j:=1 to n do

begin

f:=0;

for i:=2 to j div 2 do

if j mod i=0 then f:=1;

if f=0 then

begin r:=1;

writeln('Numarul',j:6,' este prim')

end;

end;

if r=0 then writeln('Numărul nu este prim');

readkey;

end.

Introduceţi doua numere naturale m si n. Determinaţi împărţitorul lor comun NOD.



Program p2_5;

uses crt;

var i,m,n,k,nod:integer;

begin

clrscr;

repeat

write('Introduceţi numărul natural n=');

readln(n);

write('Introduceţi numărul natural m=');

readln(m);

until (n>0) and (m>0);

if n>m then k:=m else k:=n;

for i:=1 to k do

if (n mod i=0) and (m mod i=0) then nod:=i;

writeln('Împărţitorul numărului comun ',n, 'şi', m,

'nod=',nod);

readkey;

end.

Tema 3:



Sunt date următoarele n numerele naturale. Găsiţi suma tuturor numerelor naturale negative.





Program P3.1;

uses crt;

var n,x,sum,i : integer;

begin

clrscr;

repeat

write('Introduceţi lungimea următoarelor numere n=');

readln(n);

until n>0;

sum:=0;

for i:=1 to n do

begin

writeln('introdu x=');

readln(x);

if x<0 then sum:=sum+x;

end;

if sum=0 then writeln('Numărul negativ nu exisţă')

else

writeln('Suma numerelor negative este sum=',sum);

end.

Sunt date următoarele n numere naturale. Găsiţi numărul maximal.

Program P3.2;

uses crt;

var n,x,max,i : integer;

begin

clrscr;

repeat

write('Introduceţi lungimea următoarelor numere n=');

readln(n);

until n>0;

writeln('introdu x=');

readln(x);

max:=x;

for i:=2 to n do

begin

writeln('introdu x=');

readln(x);

if (x>max) then max:=x;

end;

writeln('Numărul maximal este max=',max);

end.

Download probleme rezolvate Pascal

Limbajul Pascal. Stive. Cozi.

Orice algoritm lucrează cu date (numere întregi, reale, şiruri de caractere etc.). Referitor la acestea, în informatică, s-au cristalizat anumite concepte fundamentale, pe care le vom prezenta în continuare.

Printr-un tip de dată  înţelegem o mulţime cu elemente numite valori.

Exemplu:{-32768, 32767, .......0,1,........32767} este omulţime de numere întregi. Atunci cînd nu există posibilatea de confuzie, putem nota mulţimea de mai sus astfel: [-32768,32767]. Un element al acestei mulţimi este 7 (valoarea 7). În Turbo Pascal un astfel de tip se numeşte integer. Şi este predefinit (este cunoscut de limbaj, nu trebuie definit de programator).

Pe mulţimea valorilor unui tip se definesc operaţiile asociate tipului.

Exemplu: Pentru tipul integer se definesc operaţiile de adunare, scădere, înmulţire etc.

Pentru fiecare tip se defineşte modul în care se valorile sale.

Exemplu: Pentru tipul integer valorile se memorizează utilizînd codul complementar şi se folosesc 2 octeţi consecutivi.

Pentru a lucra cu date de un anumit tip se folosesc variabile.

O variabilă se caracterizează prin: tip (natura datelor şi modul de memorare), nume (prin care aceasta se adresează) şi adresă (număr de ordine al primului octet în care se reţin datele, memoria internă fiind privită ca o succesiune de octeţi numerotaţi).

Tipuri de date pot fi simple (mulţimile care alcătuiesc nu sunt rezultate ca produs cartezian a altor mulţimi) şi stucturate în caz contrar. Exemplu:tipul integer este simplu, iar tipul record este structurat.

Limbajele de programare evoluate utilizează din plin tipurile de date. Mai mult, unele din ele permit programului, folosind tipurile existente, să definească noi tipuri de date. Limbajul Turbo Pascal este un exemplu în acest sens.

Noţiunea de tip de date este strânsă legată de un anumit limbaj de programare. În situaţia în care se renunţă la această legătură, se ajunge la o altă noţiune mult utilizată şi anume cea de structură de date.

Exemplu: Mulţimea este o structură de date (după cum vom arăta). În limbajul Turbo Pascal există tipul mulţime (set). Alte limbaje (de exemplu C) nu cunosc acest tip. Aceasta nu înseamnă că în C nu vom putea lucra cu mulţimi. Sarcina noastră este să înţelegem structura de date numită mulţime şi să o implementăm în orice limbaj de programare dorim.

Un curs de algoritmi trebuie să fie independenţi de orice limbaj. Fapt că în aceasta lucrare algoritmii se implementează în Turbo Pascal nu înseamnă că ei pot fi folosiţi numai în acest limbaj. Din acest motiv, orice curs de algoritmi va utiliza noţiunea de structură de date.

Download Limbajul Pascal Stive Cozi