CAPITOLUL 12
Probleme
Problema nr. 1
Sa se prezinte sub forma de chema logicã şi instrucţiunea unui limbaj de programare sau pseudocod un algoritm eficient care sã determine pentru o matrice de n linii şi m coloane a cãrei elemente se citesc de la tastaturã urmãtoarele:
a) media aritmeticã a elementelor de pe fiecare linie
b) media aritmetica a elementelor de pe fiecare coloanã
c) valoarea elem. maxim şi locul în care acesta se aflã de pe fiecare linie
d) valoarea elem. maxim şi locul în care acesta se aflã de pe fiecare coloanã
e) valoarea elem. minim şi locul în care acesta se aflã de pe fiecare linie
f) valoarea elem. minim şi locul în care acesta se aflã de pe fiecare coloanã
g) elementul maxim la nivel de matrice
h) elementul minim la nivel de matrice
program matricea_de_la_curs;
type matrice=array[1..20,1..20] of integer;
var a:matrice;
max,max2,min,min2,w,z,i,p,maa,m,n,d,e,f,g,minn,maxx,j,s,ma,x,y:integer;
begin
writeln('dati nr de linii şi nr de coloane');
write('n=');
readln(n);
write('m=');
readln(m);
for i:=1 to n do
for j:=1 to m do
begin
writeln('a[',i,',',j,']=');
read(a[i,j]);
end;
a) for i:=1 to n do
begin
s:=0;
for j:=1 to m do
s:=s+a[i,j];
ma:=(s div m);
writeln('media aritmetica pe linia ',i ,'=',ma);
readln;
end;
b) for j:=1 to m do
begin
p:=0;
for i:=1 to n do
p:=p+a[i,j];
maa:=(p div n);
writeln('media aritmetica pe coloana ',j,'= ',maa);
readln;
end;
c) for i:=1 to n do
begin
max:=-3200;
for j:=1 to m do
if a[i,j]>max then
begin
max:=a[i,j];
x:=j;
end;
writeln('maximul liniei ',i,' este elementul a[',i,',',x,'] şi este egal cu ',max);
readln;
end;
d) for j:=1 to m do
begin
max2:=-3200;
for i:=1 to n do
if a[i,j]>max2 then
begin
max2:=a[i,j];
y:=i;
end;
writeln('maximul coloanei ',j,' este elementul a[',y,',',j,'] şi este egal cu ',max2);
readln;
end;
e) for i:=1 to n do
begin
min:=3200;
for j:=1 to m do
if a[i,j]
begin
min:=a[i,j];
w:=j;
end;
writeln('minimul liniei ',i,' este elementul a[',i,',',w,'] şi este egal cu ',min);
readln;
end;
f) for j:=1 to m do
begin
min2:=3200;
for i:=1 to n do
if a[i,j]
begin
min2:=a[i,j];
z:=i;
end;
writeln('minimul coloanei ',j,' este elementul a[',z,',',j,'] şi este egal cu ',min2);
readln;
end;
g) maxx:=-3200;
minn:=3200;
for i:=1 to n do
for j:=1 to m do
if a[i,j]>maxx then
begin
maxx:=a[i,j];
d:=i;
e:=j;
end;
h) for i:=1 to n do
for j:=1 to m do
if a[i,j]
begin
minn:=a[i,j];
f:=i;
g:=j;
end;
writeln('elementul maxim al matricei este a[',d,',',e,']=',maxx);
writeln('elementul minim al matricei este a[',f,',',g,']=',minn);
readln;
end.
SCHEMA LOGICÃ:
Problema nr. 2
Se dã un vector cu n elemente numere întregi. Sã se mute la sfârşitul vectorului elementele sale nule pãstrând ordinea celorlalte elemente.
program ddd;
type vector=array[1..20] of integer;
var v:vector;
n,i,j,k:integer;
begin
write('dati numarul de elemente');
readln(n);
for i:=1 to n do
begin
write('v[',i,']=');
readln(v[i]);
end;
for i:=1 to n-1 do
for j:=i+1 to n do
if v[i]=0 then
begin
k:=v[i];
v[i]:=v[j];
v[j]:=k;
end;
for i:=1 to n do
writeln('v[',i,']=',v[i]);
readln;
end.
SCHEMA LOGICÃ:
Problema nr. 3
Să se realizeze un program pentru evaluarea expresiei:
A +B, dacă C≥0
E=
A-B, dacă C<0
Analizând problema dată, se observă că datele de intrare sunt A, B şi C. Algoritmul va testa pe C, şi, în funcţie de valoarea sa, va calcula pe E fie ca A+B, fie ca A-B.
program prg2_pagina_187;
var a,b,c:integer;
e:real;
begin
write('Introduceti valoarea pentru a= ');read(a);
write('Introduceti valoarea pentru b= ');read(b);
write('Introduceti valoarea pentru c= ');read(c);
e:=0;
if (c<0) then e:=(a*a)-b
else
if (c=0) then e:=sqrt((a*a)-b)
else e:=(1/(a*a))-b;
write('E:= ',e:8:2);
readln;
end.
SCHEMA LOGICÃ:
Problema nr. 4
Sa se verifice dacã 2 numere sunt prietene
Doua numere sunt prieten dacã primul numar este = cu suma divizorilor celui de-al doilea mai putin el insusi şi cel de-al doilea este egal cu suma divizorilor primului numar mai putin el insusi
n=220 1+2+4+5+10+11+20+22+44+55+110
m=284 1+2+4+71+142
s1 = suma divizorilor lui n mai putin el insusi
s2 = suma divizorilor lui m mai putin el insusi
n şi m prietene dacã s1=m şi s2=n
program lalala;
var m,n,s1,s2,i:integer;
begin
write('n=');
readln(n);
write('m=');
readln(m);
for i:=1 to n-1 do
if n mod i=0 then s1:=s1+i;
for i:=1 to m-1 do
if m mod i=0 then s2:=s2+i;
if (s1=m) and (s2=n) then writeln('aceste doua numere sunt prietene')
else writeln('din pacate nu sunt prietene');
readln;
end.
SCHEMA LOGICÃ:
Probleme de logicã:
Problema nr. 5:
În această vară, bătrânul Trică a murit, lăsând proprietăţile sale ca moştenire nepotului său Andi, prietenul meu. El a moştenit şi castelul Towertia, bântuit de fantome. Începând cu ora 12 noaptea până dimineaţa se aud în tot castelul două zgomote descifrabile: un cântat duios la vioară şi un râs puternic. Andi a observat anumite obiceiuri:
-
când el cântă la pian şi fantoma nu râde, fantoma care cântă la vioara îşi schimbă activitatea (dacă cânta-tace, dacã tăcea-cântă); altfel ea face în fiecare minut ce făcea în cel precedent;
-
când fereastra este închisă fantoma care râde face ce făcea cealaltă fantomă în minutul precedent (râde dacă cealaltă cântă, tace dacă cealaltă tăcea);
-
când fereastra este deschisă, fantoma care râde face opusul la ceea ce cealaltă făcea în minutul precedent.
Andi vrea să ştie cum să scape de fantome (să le facă să tacă)!
Rezolvare:
-
3: când fereastra este deschisă, fantoma care râde face opusul la ceea ce cealaltă făcea în minutul precedent.
-
1: când el cântă la pian şi fantoma nu râde, fantoma care cântă la vioara îşi schimbă activitatea (dacă cânta-tace, dacã tăcea-cântă); altfel ea face în fiecare minut ce făcea în cel precedent;
-
2: când fereastra este închisă fantoma care râde face ce făcea cealaltă fantomă în minutul precedent (râde dacă cealaltă cântă, tace dacă cealaltă tăcea)
Problema nr. 6
Duminică, Marius şi Radu au fost să vadă la hipodrom cursa de cai. Mai întâi s-au dus să vadă caii. Au făcut pariuri pe primele cinci locuri.
Radu a crezut astfel:
-
Doodoo; 2) Azur; 3) Elfy; 4)Candy; 5) Emily.
Marius a pariat astfel:
-
Azur; 2) Emily; 3)Candy; 4)Doodoo; 5) Elfy
Rezultatele au arătat că nici unul nu a căştigat:
1)Marius nu a ghicit locul nici unui cal
2)Marius nu a ghicit nici măcar ordinea a câte doi cai unul după altul
Radu a fost mai aproape de realitate:
3)A ghicit locurile a doi cai;
4)A ghicit ordinea finala a două perechi de cai unul după altul.
Care a fost rezultatul ?
|
1
|
2
|
3
|
4
|
5
|
Radu
|
Doodoo
|
Azur
|
Elfy
|
Candy
|
Emily
|
Marius
|
Azur
|
Emily
|
Candy
|
Doodoo
|
Elfy
|
Urmărind tabelul de mai sus putem afirma că:
Pe locul I nu va fi Doodoo sau Azur
Pe locul II nu va fi Emily
Pe locul III nu va fi Candy
Pe locul IV nu va fi Doodoo
Pe locul V nu va fi Elfy
Deci Doodoo poate fi pe locurile II sau V.
Ordinea este:
1
|
2
|
3
|
4
|
5
|
Elfy
|
Doodoo
|
Azur
|
Candy
|
Emily
|
Problema nr. 7
Un batranel se duce la piaţã (mai bine statea acasa) sã vândã nişte ouã. Un tânãr neatent l-a îmbrâncit şi coşul a cãzut spãrgând ouãle. vinovatul vrând sã îşi rãscumpere greşeala l-a întrebat :
-Câte ouã au fost în coş?
-Nu-mi aduc aminte, dar ştiu cã dacã le scoteam câte 2,câte 3,câte 4,câte 5 sau câte 6, în coş rãmânea mereu un singur ou, iar dacã le scoteam câte 7 , nu rãmânea nici unul.
Dupã câteva minute de gândire, tânãrul a calculat câte ouã erau.
Tu poţi gãsi numãrul de ouã din coş?
Rezolvare:
-
batrânelul spune cã dacã scotea ouãle câte 7 nu mai rãmânea nici un ou un coş de unde tragem concluzia cã numãrul ouãlor trebuie sã fie un multiplu de 7
-
mai spune cã dacã le scotea câte 2,câte 3,câte 4,câte 5 sau câte 6, în coş rãmânea mereu un singur ou de unde rezultã cã din numãrul care este multiplu de 7 dacã scadem 1 trebuie sã rãmânã un numãr care sã fie divizibil şi cu 2 şi cu 3 şi cu 4 şi cu 5 şi cu 6
-
deci cãutãm un numãr care sã aibe ultima cifrã 1 sau 6
-
astfel 7, 14 sunt excluse
-
incercãm 21:7=3
21-1=20:2=10
20:3 nu este divizibil
- cãutãm în continuare...
- 28, 35, 42, 49 sunt excluse
- verificãm 56:7=8
56-1=55:2 nu este divizibil
- 63, 70, 77, 84 sunt excluse
- continuãm cu 91:7=13
91-1=90:2=45
:3=30
:4=25
:5=18
:6=15
Rezultã cã bãtrânelul avea în coş exact 91 de ouã.
Bibliografie
Manual „Algoritmi şi structuri de date: fundamente ale programãrii structurate” / Cezar Botezatu – Bucureşti : Editura Universitarã, 2004
0>
Dostları ilə paylaş: |