680 likes | 927 Views
Tablouri unidimensionale. Algoritmi fundamentali. Realizat de Carmen Rus. Maxime si Minime. Căutare binară. Căutari de elemente. Căutare liniară. Parcurgeri. Sume si num ă r ă ri. Oare de ce dai daca apesi butonul acesta ??. Puţină teorie. Dacă vreţi binenţeles. Daca nu apăsaţi.
E N D
Tablouri unidimensionale Algoritmi fundamentali Realizat de Carmen Rus
Maxime si Minime Căutare binară Căutari de elemente Căutare liniară Parcurgeri Sume si numărări Oare de ce dai daca apesi butonul acesta ??
Puţină teorie. Dacă vreţi binenţeles. Daca nu apăsaţi
{Cunoscandu-se numele, inaltimea si greutateaa n elevi sa se afiseze numele acestora in ordinea descrescatoare a inaltimi. Daca exista doi elevicu aceeasi inaltime se va afisa cel care are greutatea mai mare.}
uses crt; var aux,i,j,n,k,min:integer; a,e:array[1..100] of string; b,c,d,f:array[1..100] of integer; aux1:string; begin clrscr; writeln('Dati numarul de elevi 1<=n<=100 ');readln(n); writeln('Dati numele,inaltimea si greutatea celor ',n,' elevi:'); for i:=1 to n do begin readln(a[i]); readln(b[i]); d[i]:=b[i]; readln(c[i]); end; for i:=1 to n-1 do for j:=i+1 to n do if b[i]<b[j] then begin aux:=b[i]; b[i]:=b[j]; b[j]:=aux; end; for i:=1 to n do for j:=1 to n do if b[i]=d[j] then begin e[i]:=a[j]; f[i]:=c[j]; d[j]:=0; j:=n; end; for i:=1 to n-1 do if b[i]=b[i+1] then if f[i]<f[i+1] then begin aux1:=e[i]; e[i]:=e[i+1]; e[i+1]:=aux1; aux:=f[i]; f[i]:=f[i+1]; f[i+1]:=aux end; for j:=1 to n do begin write ('Numele: ',e[j],' ','Inaltimea: ',b[j],' ','Greutatea: ',f[j]); writeln; end; readln end.
{Se citesc n numere intregi. Sa se afiseze cel mai mare numar obtinutdin prima cifra a fiecarui numar.}
var d:array[1..20] of byte; a,i,c,aux,j,nr,n:longint; begin write('dati nr de nr');readln(n); writeln('Dati elem: '); for i:=1 to n do begin readln(a); aux:=a; while aux<>0 do begin c:=aux mod 10; aux:=aux div 10; end; d[i]:=c end; for i:=1 to n-1 do for j:=i+1 to n do if d[i]<d[j] then begin aux:=d[i]; d[i]:=d[j]; d[j]:=aux end; for i:=1 to n do nr:=nr*10+d[i]; writeln('Cel mai mare nr este: ',nr); readln end.
{Se citesc de la tastatura n numere naturale. Se cere sa se sorteze sirul in ordinea crescatoare a numarului de apaitii a cifrei 1 in reprezentarea in baza 2 a numerelor.In cazul in care doua numere au aceeasi numar de cifre egale cu 1 in reprezentare lor binara atunci ele vor aparea in ordinea in care sunt citite de la tastatura.}
for i:=1 to n-1 do for j:=i+1 to n do if b[i]>b[j] then begin aux:=b[j]; b[j]:=b[i]; b[i]:=aux {b[i]retine poz dupa sortare} end; k:=0; for i:=1 to n do begin for j:=1 to n do if (b[i]=c[j]) and (b[i]>k) then write(d[j],' '); k:=b[i] end; readln end. var a,b,c,d:array[1..100]of longint; aux,n,k,i,j:integer; begin writeln('Dati nr de elemente ');readln(n); for i:=1 to n do begin write('a[',i,']=');readln(a[i]); d[i]:=a[i]; j:=0; while a[i]>0 do begin if a[i] mod 2=1 then j:=j+1; a[i]:=a[i] div 2 {in a[i] o sa am doar valoarea 0} end; b[i]:=j; c[i]:=j;{retine pozitiile inainte de sortare} end;
{Dandu-se un vector cu maxim 100 de numere naturale, sa se localizeze elmentul maxim si toate elementele dinaintea lui sa se ordoneze crescator, iar cele de dupa el descrescator.}
var a,b:array[1..100]of integer; max,aux,n,k,i,j:integer; begin writeln('Dati nr de elemente ');readln(n); max:=-maxint; for i:=1 to n do begin write('a[',i,']=');readln(a[i]); if a[i]>max then begin max:=a[i]; end; end; for i:=1 to n do if a[i]=max then k:=i; for i:=1 to k-1 do for j:=i+1 to k do if a[i]>a[j] then begin aux:=a[i]; a[i]:=a[j]; a[j]:=aux end; writeln; for i:=k+1 to n-1 do for j:=i+1 to n do if a[i]<a[j] then begin aux:=a[i]; a[i]:=a[j]; a[j]:=aux; end; writeln('Vectorul ordonat conform cerintei: '); for i:=1 to n do write (a[i],' '); readln end.
{Se dau doi vectori x,y cu n componente. Primul contine nume de elevi, iar al doilea notele la informatica. Se cere sa se afiseze numele elevilor cu nota cea mai mica. Daca mai multi elevi au aceasta nota vor fi afisati toti.}
uses crt; var i,n,min:integer; x:array[1..100] of string; y:array[1..100] of integer; begin clrscr; writeln('Dati numarul de elevi 1<=n<=100 ');readln(n); writeln('Dati numele celor ',n,' elevi:'); for i:=1 to n do readln(x[i]); writeln('Dati mediile celor ',n,' elevi: '); for i:=1 to n do read(y[i]);readln; min:=y[1]; for i:=2 to n do if y[i]<min then min:=y[i]; for i:=1 to n do if min=y[i] then write(x[i],' '); readln; end.
{Sa se realizeze programul pentru determinare elementului maxim si a tuturor pozitilor unde apare el intr-un vector A de numere intregi cu dimensinea N.}
var a:array[1..100]of longint; max,n,k,i,j:integer; begin writeln('Dati nr de elemente ');readln(n); for i:=1 to n do begin write('a[',i,']=');readln(a[i]); end; max:=-maxint; for i:=1 to n do begin if (a[i]>max) then max:=a[i];end; writeln('Nr maxim este ', max ); writeln('pozitile maximului in vector sunt: '); for i:=1 to n do if a[i]=max then write (i,' '); readln end.
{Sa se determine elementele cu numar maxim de divizori si elementele cu numar minim de divizori dintr-un vector x de numere intregi.}
var a,b:array[1..100]of integer; max,min,n,k,i,j:integer; begin writeln('Dati nr de elemente ');readln(n); for i:=1 to n do begin write('a[',i,']=');readln(a[i]); k:=0; for j:=1 to a[i] do begin if a[i] mod j=0 then begin k:=k+1; b[i]:=k end end end; max:=-maxint;min:=maxint; for i:=1 to n do begin if (b[i]>max) then max:=b[i]; if b[i]<min then min:=b[i] end; writeln('Componenetele cu nr maxim de divizori sunt: '); for i:=1 to n do if b[i]=max then write (a[i],' '); writeln;writeln('Componenetele cu nr minim de divizori sunt: '); for i:=1 to n do if b[i]=min then write (a[i],' '); readln end.
{Se da un vector continand litere. Sa se afiseze frecventa aparitiei fiecarei litere in vector si literele cu cea mai mare frecventa, respectiv cea mai mica frecventa de aparitie.}
var a,b:array[1..100]of char; c,d,e:array[1..100] of integer; max,min,n,k,i,j,l:integer;aux:char; begin writeln('Dati nr de elemente ');readln(n); for i:=1 to n do begin write('a[',i,']=');readln(a[i]); end; for i:=1 to n-1 do for j:=i+1 to n do if a[i]>a[j] then begin aux:=a[j]; a[j]:=a[i]; a[i]:=aux end; l:=1; for i:=ord('A') to ord('Z') do begin k:=0; for j:=1 to n do if i=ord(a[j])then k:=k+1; c[l]:=k; l:=l+1; end; l:=1; for i:=ord('a') to ord('z') do begin k:=0; for j:=1 to n do if i=ord(a[j]) then k:=k+1; d[l]:=k; l:=l+1; end;
min:=maxint;max:=-maxint; for i:=1 to l do begin e[i]:=c[i]+d[i]; end; for i:=1 to l do begin if (e[i]<min) and (e[i]>0) then min:=e[i]; if e[i]>max then max:=e[i] end; writeln('Litera/Literele cu cea mai mare frecventa de aparitie este/sunt:'); for i:=1 to l do if e[i]=max then write(chr(64+i),' ');writeln; writeln('Litera/Literele cu cea mai mica frecventa de aparitie este/sunt:'); for i:=1 to l do if e[i]=min then write(chr(64+i),' '); { for i:=1 to n do write (a[i],' ');} readln end.
{Se citeste de la tastatura un sir cu n elemente numere naturale, nu neaparat distincte. Sa se afiseze elementul care apare de cele mai multe ori in sir. Daca exista mai multe astfel de elmente,se vor afisa toate.}
var a,b:array[1..100]of longint; max,n,k,i,j:integer;aux:longint; begin writeln('Dati nr de elemente ');readln(n); for i:=1 to n do begin write('a[',i,']=');readln(a[i]); end; for i:=1 to n-1 do for j:=i+1 to n do if a[i]>a[j] then begin aux:=a[j]; a[j]:=a[i]; a[i]:=aux end; k:=1;j:=0; for i:=1 to n do begin if a[i]=a[i+1] then inc(k) else begin j:=j+1 ; b[j]:=k; if i=n-1 then b[j+1]:=1; k:=1; end; end; max:=-maxint; for i:=1 to j+1 do if b[i]>max then max:=b[i]; {write(max:5);writeln;} k:=1; for i:=1 to j+1 do if b[i]=max then begin write(a[k],' '); k:=k+b[i] end else k:=k+b[i]; readln end.
{Se considera un sir cu n numere naturale. Se cere sa se afiseze un numar din sir care in scrierea sa cat mai multe cifre distincte. Daca exista mai multe numere cu aceasta proprietate se va afisa primul dintre ele.}
var t,k,i,j,l,n,aux:longint; a,b,c,d:array[1..100]of longint; begin write('Dati n: ');readln(n); for i:=1 to n do begin write('a[',i,']=');readln(a[i]); t:=1;k:=0;d[i]:=a[i]; repeat k:=k+1; b[k]:=a[i] mod 10; a[i]:=a[i] div 10; until a[i]=0; for j:=1 to k-1 do for l:=j+1 to k do if b[j]>b[l] then begin aux:=b[j]; b[j]:=b[l]; b[l]:=aux end; for j:=1 to k-1 do if b[j]<>b[j+1] then t:=t+1; c[i]:=t end; l:=c[1]; for i:=2 to n do if l<c[i] then begin l:=c[i]; k:=i ; end; write('primul numarul cu cele mai multe cifre distincte este',d[k]:5); readln end.
Cautare binara a)pe structura “repeat..until” b)pe structura “while..do”
a) program cautare_binara; var n,i,j,aux,x,ls,ld,mij:integer; a:array[byte] of integer; begin write('n=');readln(n); for i:=1 to n do begin write('a[',i,']='); readln(a[i]); end; write('x=');readln(x); for i:=1 to n-1 do for j:=i+1 to n do if a[i]>a[j] then begin aux:=a[i]; a[i]:=a[j]; a[j]:=aux; end; ls:=1; ld:=n; repeat mij:=(ls+ld) div 2; if a[mij]=x then writeln('cautare cu succes') else if a[mij]>x then ld:=mij-1 else ls:=mij+1; until (a[mij]=x) or (ls>ld); if ls>ld then write('nu exista ',x,' in vector'); readln end.
b) program cautarebinara; var n,i,j,aux,x,ls,ld,mij,sw:integer; a:array[byte] of integer; begin write('n=');readln(n); for i:=1 to n do begin write('a[',i,']='); readln(a[i]); end; write('x=');readln(x); for i:=1 to n-1 do for j:=i+1 to n do if a[i]>a[j] then begin aux:=a[i]; a[i]:=a[j]; a[j]:=aux; end; ls:=1; ld:=n; mij:=(ls+ld) div 2; sw:=0; while (a[mij]<>x) and (ls<=ld) do begin if a[mij]>x then ld:=mij-1 else ls:=mij+1; mij:=(ls+ld) div 2; end; if a[mij]=x then writeln('este in vector') else writeln('nu exista ',x,' in vector'); readln end.
program cautare_liniara; var a:array[1..50] of integer; x:integer; i,n,sw:byte; begin write('n=');readln(n); for i:=1 to n do begin write('a[',i,']='); readln(a[i]); end; write('x=');readln(x); sw:=0; for i:=1 to n do if a[i]=x then sw:=1; if sw=0 then write(x,' nu se afla in vector') else write('cautare cu succes'); readln end.
Parcurgeri Sume si numarari
{Scrieti un program care tipareste elementele pare aflate pe pozitii divizibile cu 3 dintr-un vector de nr intregi.} var a:array[1..30] of integer; s,n,i:integer; begin write ('n= ');readln(n); for i:=1 to n do begin write ('a[',i,']=');readln(a[i]) end; i:=3; while i<=n do begin if a[i] mod 2=0 then write(a[i]:5); i:=i+3; end; readln end.
{Fiid dat un vector de numere intregi,sa se determine suma elementelor pozitive din vector.} var a:array[1..30] of integer; s,n,i:integer; begin write ('n= ');readln(n); for i:=1 to n do begin write ('a[',i,']=');readln(a[i]) end; s:=0; for i:=1 to n do if a[i]>0 then s:=s+a[i]; writeln('Suma este: ', s); readln; end.
{Sa se afiseze doar elementele pare dintr-un vector de numere intregi.} var a:array[1..30] of integer; s,n,i:integer; begin write ('n= ');readln(n); for i:=1 to n do begin write ('a[',i,']=');readln(a[i]) end; for i:=1 to n do if a[i] mod 2=0 then write ('Numerele sunt: a[i],','); readln end.
{Se citeste de la tastatura un vector cu n componente de tip intreg. Se cere sa se construiasca si sa se afiseze un nou vector cu componentelepatrate perfecte din vectorul initial.} var a,b:array[1..100] of integer; n,i,j,p,k:integer; begin write ('n= ');readln(n);k:=0; for i:=1 to n do begin write ('a[',i,']=');readln(a[i]); if a[i]>=0 then for j:=1 to trunc(sqrt(a[i])) do if j*j=a[i] then begin k:=k+1; b[k]:=a[i] end; end; writeln('Componentele patrate din vectorul dat sunt: '); for i:=1 to k do write(b[i], ' '); readln end.
{Sa se calculeze suma elementelor negative si de valoare para dintr-un vector de nr intregi} var a:array[1..30] of integer; s,n,i:integer; begin s:=0; write ('n= ');readln(n); for i:=1 to n do begin write ('a[',i,']=');readln(a[i]); if (a[i]<0) and (a[i] mod 2=0) then s:=s+a[i]; end; writeln('Suma este: ',s); readln end.
{Se da un vector v cu n elemente numere intregi.Sa se copieze intr-un vector u elementele pozitive ale vectorului initial} var a,b:array[1..30] of integer; n,i,j:integer; begin write ('n= ');readln(n);j:=0; for i:=1 to n do begin write ('a[',i,']=');readln(a[i]); if a[i]>0 then begin j:=j+1; b[j]:=a[i] end; end; for i:=1 to j do write(b[i],' '); readln; end.
{Se da un vector de numere reale.Sa se determine procentul de numere din vector mai mici strict decat MA si procentul de numere din vector mai mari strict decat MA,unde am notat cu MA media aritemtica a componentelor din vector.} var a:array[1..30] of real; n,i,p,k:integer;ma,s:real; begin s:=0; write ('n= ');readln(n); for i:=1 to n do begin write ('a[',i,']=');readln(a[i]); s:=s+a[i]; end; ma:=s/n; for i:=1 to n do if a[i]>ma then k:=k+1 else if a[i]<ma then p:=p+1; writeln('Procentul celor strict mai mari decat MA este: ',k/n*100:5:2,'%'); write(' Procentul celor strict mai mici decat MA este: ',p/n*100:5:2,'%'); readln; end.
{Scrieti un program care citeste de la tastatura cele n numere reale ce compun vectorul a si apoi cele m numere reale ce constituie componentele vectorului b si afiseaz pe ecran cate din componentele lui a sunt strict mai mici decat toate componentele vectorului b.} var a,b:array[1..30] of real; n,i,m,j:integer; begin write ('n= ');readln(n);write ('m= ');readln(m); for i:=1 to n do begin write ('a[',i,']=');readln(a[i]); end; for j:=1 to m do begin write ('b[',j,']=');readln(b[j]); end; for i:=1 to n do if a[i]<b[i] then write(a[i]:5:2,' '); readln; end.
{Fiind dat un vector v cu n elemente numere intregi ,sa se construiasca alti doi vectori :primul care va contine numai elemente pare ,iar al doilea numai elem impare din vectorul initial} var a,b,c:array[1..30] of integer; n,i,m,p:integer; begin write ('n= ');readln(n);m:=0;p:=0; for i:=1 to n do begin write ('a[',i,']=');readln(a[i]); if a[i] mod 2=0 then begin inc(m); b[m]:=a[i]; end else begin inc(p); c[p]:=a[i]; end; end; readln end.
{Fie un vector x de numere intregi. Sa se formeze un vector y de numere intregi, in care y[i] sa fie restul impartiri lui x[i] la suma cifrelor lui x[i].} type vector=array[1..100] of integer; var x,y:vector;aux,s:integer; i,n,c:byte; begin Writeln('Dati dimensiunea vector,<=100 ');read(n); writeln('Introduceti cele ',n,' componente:'); for i:=1 to n do begin readln(x[i]);aux:=x[i];s:=0; while aux<>0 do begin c:=aux mod 10; s:=s+c; aux:=aux div 10 end; y[i]:=x[i] mod s; end; for i:=1 to n do write(y[i],' '); readln end.
{La codificarea unui text scris cu cel mult primele n litere mici ale afabetului englez, se folosesc cele mai mici n numere naturale care au exact 3 divizori naturali. Pentru litera 'a' se foloseste cel mai mic nr cu proprietatea respectiva, pentr 'b' cel mai mic numar diferit de cel folosit pentru 'a',si asa mai departe. a)Sa se afiseze, separate prin cate un spatiu, cele n numere folosite la codificare. b)Pentru un text dat de la tastatura,se cere sa se afiseze codificarea textului, fiecare caracter fiind inlocuit cu numarul corespunzator si orice doua coduri conscutive vor fi separate printr-un spatiu.}
var n,i,d,j,c:integer; a:array[1..25] of char; b:array[1..25] of integer; begin writeln('Dati nr de litere -vezi enunt');readln(n); writeln('Dati textul'); for i:=1 to n do read(a[i]); i:=4; repeat d:=2;c:=1; while(d<=i) do begin if (i mod d=0) then begin c:=c+1; d:=d+1 end else d:=d+1; end; if c=3 then begin j:=j+1; b[j]:=i; end; i:=i+1 until j=n; writeln('Nr cu 3 divizori folosite la codificare: '); for i:=1 to n do write(b[i], ' ' ); writeln; writeln('Textul dat se codifica astfel:'); for i:=1 to n do begin c:=ord(a[i])-ord('a'); write(b[c+1],' '); end; readln end.
{Sa se calculeze cmmdc(x1,x2,x3,...,xn)} type vector=array[1..100] of integer; var a:vector;cmmdc:integer; i,n:byte; begin Writeln('Dati dimensiunea vector,<=100 ');read(n); writeln('Introduceti cele ',n,' componente pozitive nenule:'); for i:=1 to n do read(a[i]); readln; cmmdc:=a[1]; for i:=2 to n do begin while a[i-1]<>a[i] do if a[i-1]>a[i] then a[i-1]:=a[i-1]-a[i] else a[i]:=a[i]-a[i-1]; end; cmmdc:=a[n]; writeln('Cmmdc este: ',cmmdc); readln end.
{Cate numere perfecte exista in tabloul x=(x1,x2,..,xn) de numere intregi citite de la tastatura. Un numar este perfect daca este egal cu suma divizorilor sai mai mici ca el.} var a:array[1..100]of integer; d,s,n,k,i,j:integer; begin writeln('Dati nr de elemente ');readln(n); for i:=1 to n do begin write('a[',i,']=');readln(a[i]); end;k:=0; write('Numerele perfecte sunt: '); for i:=1 to n do begin s:=0; for j:=1 to a[i] do if a[i] mod j=0 then s:=s+j ; if (2*a[i]=s) and (a[i]>0) then begin k:=k+1; write(a[i],' ') end;end; write('Avem ',k,' numere perfecte. '); readln end.
{Cate elemente dintr-un vector de numere intregi sunt prime cu un nr dat.} var a:array[1..100]of integer; q,n,k,i,j,t:integer; begin writeln('Dati nr de elemente ');readln(n); writeln('Dati un nr. k ');readln(k);q:=k; for i:=1 to n do begin write('a[',i,']=');readln(a[i]); end; writeln('Nr care sunt prime cu ',k ,' sunt: '); for i:=1 to n do begin t:=a[i]; while a[i]<>k do if a[i]>k then a[i]:=a[i]-k else k:=k-a[i]; k:=q; if a[i]=1 then begin j:=j+1; write(t,' ') end;end; writeln;writeln('Avem: ',j,' nr prime cu ',q); readln end.