Proiect: Programare evolutiva si algoritmi genetici
Programare Evolutiva si Algoritmi Genetici Subiecte de Proiect
Full description
Introducere Programare Evolutiva si Algoritmi Genetici
Masini Si Utilaje Pentru Pasteurizare
Full description
Probleme rezolvate in Pascal
Colocviu programareFull description
Matematica = pregatire pentru bacalaureat = Legi de compozitie - teorie si problemeFull description
Descripción completa
DANIELA-ELENA ILIE
GEORGETA-IULIA BALACEA
GENIA JOC
MUŞUNOIU NOVETSCHI MONICA
POPESCU MĂDĂLINA
NEAGU VIOLETA
DIMITRIEVICI LUCIAN
TUDOR VERONICA
GAVRILĂ IULIA
GHEORGHIU BOGDAN
GHEORGHIU CARMEN
VOINEA MIRELA
STAN MIHAELA
IORDACHI LIZETA
DĂU LILIANA
MAGDALENA GRIGORE
PROGRAMARE PE ÎNŢELESUL TUTUROR
1
ARGUMENT
Informatica Informatica – ştiinţǎ relativ nouǎ în raport cu cele deja consacrate, devenite clasice, este abordatǎ ca disciplinǎ şcolarǎ astfel încât sǎ contribuie la dezvoltarea unei personalitǎţi autonome şi creative a elevilor. Pentru a înţelege dinamica şi pentru a se putea adapta ei, elevii trebuie mai întâi sǎ înţeleagǎ elementele fundamentale ale programǎrii. In acest context, lucrarea Programare Programare pe înţelesul tuturor este un instrument de lucru simplu şi practic destinat elevilor şi profesorilor. Este centratǎ pe tematica de pregǎtire pentru examenul de bacalaureat şi pentru atestatul profesional dar şi pentru lucrul la clasǎ. Lucrarea este structuratǎ în trei pǎrţi : algoritmicǎ şi programare , baze de date- modulul FOX şi baze de date- modulul ORACLE. Partea de programare conţine 40 de probleme ce abordeazǎ noţiunile de bazǎ ale limbajelor de programare: algoritmi elementari, structuri de date, recursivitatea. Atât partea de baze de date – modulul FOX cât şi partea de baze de datemodulul ORACLE cuprind câte 40 de probleme variate, care pot fi rezolvate atât realizând programe (în varianta FoxPro) cât şi lucrând în mod comandǎ ( varianta FoxPro sau varianta ORACLE). Pentru a fi de un real folos elevilor, la fiecare problemǎ se furnizeazǎ furnizeazǎ codul sursǎ atât în limbajul C++ cât şi în limbajul Pascal.. In speranţa cǎ aceastǎ lucrare va contribui, sub aspect metodico-didac metodico-didactic tic , atât la formarea celor ce se iniţiazǎ în tainele profesiei profesiei de dascǎl cât şi, mai ales, elevilor şi viitorilor absolvenţi, dorim cititorilor acestei cǎrţi o lecturǎ plǎcutǎ şi, nǎdǎjduim noi, utilǎ.
Autorii
2
ARGUMENT
Informatica Informatica – ştiinţǎ relativ nouǎ în raport cu cele deja consacrate, devenite clasice, este abordatǎ ca disciplinǎ şcolarǎ astfel încât sǎ contribuie la dezvoltarea unei personalitǎţi autonome şi creative a elevilor. Pentru a înţelege dinamica şi pentru a se putea adapta ei, elevii trebuie mai întâi sǎ înţeleagǎ elementele fundamentale ale programǎrii. In acest context, lucrarea Programare Programare pe înţelesul tuturor este un instrument de lucru simplu şi practic destinat elevilor şi profesorilor. Este centratǎ pe tematica de pregǎtire pentru examenul de bacalaureat şi pentru atestatul profesional dar şi pentru lucrul la clasǎ. Lucrarea este structuratǎ în trei pǎrţi : algoritmicǎ şi programare , baze de date- modulul FOX şi baze de date- modulul ORACLE. Partea de programare conţine 40 de probleme ce abordeazǎ noţiunile de bazǎ ale limbajelor de programare: algoritmi elementari, structuri de date, recursivitatea. Atât partea de baze de date – modulul FOX cât şi partea de baze de datemodulul ORACLE cuprind câte 40 de probleme variate, care pot fi rezolvate atât realizând programe (în varianta FoxPro) cât şi lucrând în mod comandǎ ( varianta FoxPro sau varianta ORACLE). Pentru a fi de un real folos elevilor, la fiecare problemǎ se furnizeazǎ furnizeazǎ codul sursǎ atât în limbajul C++ cât şi în limbajul Pascal.. In speranţa cǎ aceastǎ lucrare va contribui, sub aspect metodico-didac metodico-didactic tic , atât la formarea celor ce se iniţiazǎ în tainele profesiei profesiei de dascǎl cât şi, mai ales, elevilor şi viitorilor absolvenţi, dorim cititorilor acestei cǎrţi o lecturǎ plǎcutǎ şi, nǎdǎjduim noi, utilǎ.
Autorii
2
PROBLEME PENTRU ALGORITMICǍ ŞI PROGRAMARE
Au fost propuse un numǎr de 40 de probleme de programare. Subiectele de programare propuse doresc sǎ evalueze elevii în urmǎtoarele direcţii : 1) Identificarea datelor care intervin într-o problemă şi a relaţiilor dintre acestea; 2) Elaborarea algoritmilor algoritmilor de rezolvare rezolvare a problemelor; problemelor; 3) Aplicarea algoritmilor algoritmilor fundamentali în prelucrarea prelucrarea datelor; 4) Aplicarea în mod creativ a algoritmilor fundamentali în rezolvarea rezolvarea unor probleme concrete; 5) Implementarea algoritmilor algoritmilor într-un limbaj de programare; programare; 6) Identificarea necesităţii necesităţii structurării datelor în tablouri, structuri, liste; 7) Prelucrarea datelor datelor structurate în tablouri unidimensionale unidimensionale şi bidimensionale; 8) Utilizarea fişierelor text pentru introducerea introducerea datelor şi extragerea extragerea rezultatelor; rezultatelor; 9) Alegerea celui mai eficient algoritm de rezolvare a unei probleme; 10) Analizarea unei probleme în scopul identificării datelor necesare şi alegerea modalităţilor adecvate de structurare a datelor care intervin într-o problemă; 11) Identificarea avantajelor utilizării diferitelor metode de structurare a datelor necesare pentru rezolvarea unei probleme; 12) Utilizarea tablourilor, tablourilor, a şirurilor de caractere şi a structurilor structurilor de date neomogene în modelarea modelarea unor situaţii problemă; 13) Implementarea unor algoritmi de prelucrare a tablourilor , a şirurilor de caractere şi a structurilor neomogene ; 14) Recunoaşterea situaţiilor în care este necesară utilizarea unor subprograme; subprograme; 15) Analiza problemei în scopul identificării subproblemelor acesteia; 16) Utilizarea corectă a subprogramelor predefinite şi a celor definite de utilizator; 17) Descrierea Descrierea şi aplicarea aplicarea mecanismului recursivităţii; recursivităţii; 18) Descrierea operaţiilor specifice listelor simplu înlănţuite şi elaborarea unor subprograme subprograme care să implementeze aceste operaţii; 19) Analizarea în mod comparativ a avantajelor utilizării diferitelor metode de structurare a datelor necesare pentru rezolvarea unei probleme;
3
Problema nr. 1 Descompuneţi un număr natural în factori primi şi determinaţi factorul care apare în descompunere, la puterea cea mai mare şi factorul care apare la puterea cea mai mică. LIMBAJUL PASCAL
LIMBAJUL C++
#include void main() {int n,fp,p,fmax,fmin,pmax,pmin; cout<<”n=”; cin>>n; fp=2; pmax=0; pmin=1000; while(n!=1) { p=0; while(n%fp==0) { p++; n=n/fp; } if( p!=0) {if(ppmax) { p=pmax; fmax=fp; } } fp++; } cout<<”pmin=”<
program Problema1; uses crt; var n,max,min,d,fmin,fmax:longint; cont,m,i:byte; v:array[1..100] of longint; begin write('n='); readln(n); min:=maxint; max:=-maxint; d:=2; m:=0; while n<>1 do begin cont:=0; while n mod d=0 do begin n:=n div d; inc(cont); end; if cont>0 then begin inc(m); v[m]:=d; if min>cont then begin min:=cont; fmin:=d; end; if max
Problema nr. 2 Fie matricea A, pătratică, de dimensiune nXn, cu elemente numere întregi. Să se determine suma elementelor de sub diagonala principală a matricei,inclusiv elementele de pe diagonala principală. 4
program Problema 2; var a:array[1..10,1..10] of integer; n,i,j:byte; s:integer; begin write('Dimensiunea matricii: '); readln(n); for i:=1 to n do for j:=1 to n do begin write('a[',i,',',j,']='); readln(a[i,j]); end; s:=0; for i:=1 to n do for j:=1 to i do inc(s,a[i,j]); writeln('Suma ceruta este: ',s); end.
Problema nr. 3 Fie v un tablou unidimensional cu n elemente de tip întreg. Să se construiască vectorii v1 şi v2 astfel încât elementul v1[i] să fie egal cu suma cifrelor lui v[i] şi v2[i] să fie egal cu produsul cifrelor lui v[i]. LIMBAJUL PASCAL
program Problema 3; var v,v1,v2:array[1..100] of integer; n,i:byte; suma,prod,x:integer; begin write('Dimensiunea vectorului: ');readln(n); for i:=1 to n do begin write('v[',i,']='); readln(v[i]); v[i]:=abs(v[i]); end; for i:=1 to n do if v[i]=0 then begin v1[i]:=0; v2[i]:=0; end else begin x:=v[i]; suma:=0; prod:=1; repeat suma:=suma+(x mod 10); prod:= prod*(x mod 10); x:=x div 10; until x=0; v1[i]:=suma; v2[i]:=prod; end; writeln('Vectorul initial:'); for i:=1 to n do write(v[i],' '); writeln;writeln('Vectorul cu sumele:'); for i:=1 to n do write(v1[i],' '); writeln;writeln('Vectorul cu produsele:'); for i:=1 to n do 5write(v2[i],' '); end.
Problema nr. 4 Fie a şi b două numere naturale, a
LIMBAJUL C++
#include int a,b; int prim(int x) {int j; if(x<=1) return 0; else if (x==2) return 1; else if (i%2==0) return 0; else for(j=3;j<=x/2;j+=2) if(x%j==0) return 0; return 1; } void main() {clrscr(); cout<<"a=";cin>>a; cout<<"b=";cin>>b; for(int i=a;i<=b;i++) if(prim(i)==1) cout<<"\n nr prim este: "<
program Problema 4; var a,b,j:integer; function prim(x:integer):boolean; var i:integer; begin prim:=true; if x<=1 then prim:=false else if x=2 then prim:=true else if x mod 2=0 then prim=false else begin i:=3; while (i<= x div 2) and (prim=true) do if x mod i=0 then prim:=false else i:=i+2; end; begin writeln('Dati intervalul:'); write('a='); readln(a);write('b='); readln(b); writeln('Numerele prime din intervalul [',a,',',b,'] sunt:'); for j:=a to b do if prim(j) then write(j,' '); end.
Problema nr. 5 Să se calculeze cel mai mare divizor comun a două numere naturale nenule date, a şi b, utilizând algoritmul lui Euclid . LIMBAJUL C++
#include int a,b; int cmmdc(int a,int b) {int r,d,i; d=a; i=b; r=d%i; if(r==0) return i; else {while(r!=0) {r=d%i; d=i; i=r; } return d; } } void main() { int man; cout<<"a=";cin>>a; cout<<"b=";cin>>b; if(a
LIMBAJUL PASCAL
program Problema 5; var a,b:integer; function cmmdc (x,y:integer):integer; var r:integer; begin while x mod y<>0 do begin r:=x mod y; x:=y; y:=r; end; cmmdc:=y; end; begin clrscr; writeln('Introduceti cele doua valori:'); write('a='); readln(a); write('b='); readln(b); write('Cmmdc al celor doua valori este: ',cmmdc(a,b)); end.
6
Problema nr. 6 Fie tabloul bidimensional A, cu m linii şi n coloane. Să se elimine linia l şi coloana c, l şi c citite de la tastatură. Să se afiseze matricea după fiecare prelucrare . LIMBAJUL C++
LIMBAJUL PASCAL
program Problema6 ; var a:array[1..10,1..10] of integer; n,m,i,j,p,q:byte; procedure elimlinie(l:byte); var j:byte; begin if l=n then dec(n) else begin for i:=l to n-1 do for j:=1 to m do a[i,j]:=a[i+1,j]; dec(n); end; end; procedure elimcoloana(c:byte); var i:byte; begin if c=m then dec(m) else begin for j:=c to m-1 do for i:=1 to n do a[i,j]:=a[i,j+1]; dec(m); end; end; procedure afisare; var i,j:byte; begin for i:=1 to n do begin for j:=1 to m do write(a[i,j],' '); writeln; end; end; begin writeln('Introduceti dimensiunile matricii:'); write('Linii: '); readln(n); write('Coloane: ');readln(m); for i:=1 to n do for j:=1 to m do begin write('a[',i,',',j,']='); readln(a[i,j]); end; writeln('Matricea inainte de modificare este:'); afisare; repeat write('Linia de eliminat:'); readln(p); until (p>=1) and (p<=n); elimlinie(p); afisare; repeat write('Coloana de eliminat:'); readln(q); until (q>=1) and (q<=m); elimcoloana(q); afisare; end .
#include int n,m,a[20][20]; void elimlin(int l) { int i,j; for(i=l+1;i<=n;i++) for(j=1;j<=m;j++) a[i-1][j]=a[i][j]; n--; } void elimcol(int c) { int i,j; for(i=1;i<=n;i++) for(j=c+1;j<=m;j++) a[i][j-1]=a[i][j]; m--; } void main() {int i,j,l,c; printf("n="); scanf("%d",&n); printf("m=");scanf("%d",&m); for(i=1;i<=n;i++) for(j=1;j<=m;j++) { printf("a[%d][%d]=",i,j); scanf("%d",&a[i][j]); } printf("\n Matricea inainte de modificare este:\n"); for(i=1;i<=n;i++) { for(j=1;j<=m;j++) printf("%3d",a[i][j]); printf("\n"); } printf("l="); scanf("%d",&l); printf("c="); scanf("%d",&c); if(l>n||l<1) printf("Introduceti o alta linie"); else {elimlin(l); printf("\n Matricea dupa eliminarea liniei %d este:\n",l); for(i=1;i<=n;i++) {for(j=1;j<=m;j++) printf("%3d",a[i][j]); printf("\n"); } } if(c>m||c<1) printf("Introduceti o alta coloana"); else {elimcol(c); printf("\n Matricea dupa eliminarea coloanei %d este :\n",c); for(i=1;i<=n;i++) {for(j=1;j<=m;j++) printf("%3d",a[i][j]); printf("\n"); } } }
7
Problema nr. 7 Fie V un tablou unidimensional cu n elemente de tip întreg şi x un număr întreg. Să se determine poziţia numărului x în vectorul V, utilizând algoritmul căutării binare. Dacă numărul x nu este element al vectorului V , să se insereze în vector pe prima poziţie a sa. LIMBAJUL PASCAL
program Problema7 ; var v:array[1..100] of integer; c1,c2,n,i,sw:byte; x,aux:integer; function caut :boolean; var sw1:integer; li,ls,mijloc:byte; begin sw1:=1; if c1=n-1 then begin li:=1; ls:=n; end else if c2=n-1 then begin li:=n; ls:=1; sw1:=-1; end else begin repeat sw:=0; for i:=1 to n-1 do if v[i+1]>v[i] then begin aux:=v[i]; v[i]:=v[i+1]; v[i+1]:=aux; sw:=1; end; until sw=0; li:=1; ls:=n; end; repeat mijloc:=(li+ls) div 2; if x>v[mijloc] then li:=mijloc+sw1; if xls)) or ((sw1=-1) and (li=v[i] then inc(c1); if v[i+1]<=v[i] then inc (c2); end; if caut then writeln('DA, elementul exista in vector') else begin writeln('NU, elementul nu exista, il voi insera pe prima pozitie:'); for i:=n downto 1 do v[i+1]:=v[i]; v[1]:=x; inc(n); for i:=1 to n do write(v[i],' '); end; end.
8
Problema nr. 8 Să se interclaseze doi vectori ordonaţi crescător, folosind metoda interclasării cu santinelă.
program Problema8 ; var a,b,c:array[1..100] of integer; n,m,i,j,k:integer; begin writeln('Introduceti vectorii ordonati crecscator'); write('n='); readln(n); for i:=1 to n do begin write('a[',i,']='); readln(a[i]); end; write('m='); readln(m); for i:=1 to m do begin write('b[',i,']='); readln(b[i]); end; i:=1; j:=1; k:=0; while (i<=n) and (j<=m) do if a[i]b[j] then begin k:=k+1; c[k]:=b[j]; j:=j+1; end else begin k:=k+1;c[k]:=b[j]; j:=j+1; k:=k+1; c[k]:=a[i]; i:=i+1; end; if i<=n then for j:=i to n do begin k:=k+1; c[k]:=a[j]; end; if j<=m then for i:=j to m do begin k:=k+1; c[k]:=b[i]; end; writeln('Vectorul obtinut prin interclasare este:'); for i:=1 to k do write(c[i],' ') ; end.
Problema nr. 9 Se ştie că orice număr natural par mai mare decât 4 se poate scrie ca suma a două numere prime. (CONJECTURA LUI GOLDBACH). Să se scrie un program care să scrie un număr natural par mai mare decât 4 ca suma a două numere prime. Să se utilizeze o funcţie care să verifice proprietatea de număr prim a unui număr natural.
9
LIMBAJUL C++
#include int prim(int x) {int j,test; if(x==1) return 0; test=1; //pp ca nr x este prim for(j=2;j<=x/2;j++) if(x%j==0) {test=0; break; } return test; } void main() {int n,i; clrscr(); printf("n=");scanf("%d",&n); if(n>=4&&n%2==0) {for(i=1;i<=n;i++) if(prim(i)==1&&prim(n-i)==1) printf("\n suma este %d =%d+%d",n,i,n-i); } else printf("Date eronate"); }
LIMBAJUL PASCAL
program Problema9; var n,i,q:word; function prim(x,k:word):boolean; begin if k=(x div 2)+1 then prim:=true else if x mod k=0 then prim:=false else prim:=prim(x,k+1); end; begin write('Introduceti n>=4, par:'); readln(n); writeln('Perechile de valori prime sunt:'); for i:=2 to n div 2 do begin q:=2; if prim(i,q) and prim(n-i,q) then writeln('(',i,',',n-i,')'); end; end.
Problema nr. 10 Se citesc de la tastatură cele n elemente ale unui tablou unidimensional cu elemente distincte. Să se determine elementul cu numărul de ordine k , din tabloul ordonat crescător, fără a ordona tabloul. LIMBAJUL C++
LIMBAJUL PASCAL
#include void main() {int n,v[20],poz[20],i,j,k; printf("n=");scanf("%d",&n); for(i=1;i<=n;i++) {printf("v[%d]=",i); scanf("%d",&v[i]); } printf("k=");scanf("%d",&k); for(i=1;i<=n;i++) poz[i]=1; for(i=1;i<=n-1;i++) {for(j=i+1;j<=n;j++) if(v[i]
program Problema10 ; var v,poz,u:array[1..100] of integer; n,i,j,k:integer; begin writeln('vector cu elemente distincte'); write('n=');readln(n); for i:=1 to n do begin write('v[',i,']='); readln(v[i]); end; write('introduceti pozitia k=');readln(k); for i:=1 to n do poz[i]:=0; for i:=1 to n-1 do for j:=i+1 to n do if v[i]>v[j] then poz[i]:=poz[i]+1 else poz[j]:=poz[j]+1; writeln('Elementul care va ocupa pozitia ',k,' este:'); for i:=1 to n do if poz[i]+1=k then writeln(v[i]); end.
Problema nr. 11 Să se ordoneze alfabetic numele a n copii.