You are on page 1of 23

Ministerul Educatiei al Republicii Moldova

Universitatea Tehnica a Moldovei


Catedra Sisteme si Dispozitive electronice.

La disciplina:Programare

Lucrare de Laborator nr 9
Tema:Meniuri in C++
A efectuat st. gr. SOE-121
A verificat I. sup.

Corman Corneliu
Chihai Andrei

Chisinau 2013

Conditia:Este dat masivul x[n][n].


a)De aflat pozitia si cantitatea elementelor egale cu cifra propusa de utilizator.
B)Afisati elementul maximal de pe fiecare coloana impara din aria hasurata.

m
START

Schema logic

3: Completare
in mod automat

clrscr()

gotoxy(10,
werey()+1)

textcolor(1
5)

4:Afisarea
masivului initial

gotoxy(10,
2)

Alege din
meniu

gotoxy(10,
werey()+1)

5: Aflarea pozitiilor si a
cantitatii elementelor
egale cu cifra
utilizatorului

gotoxy(10,
wherey()
+2)

1:Afis. cond.
initiale

gotoxy(10,
werey()+1)

6: Aflarea elementului
maximal de pe fiecare
coloana impara din
aria hasurata

gotoxy(10,
werey()+1)

gotoxy(10,
werey()+1)

2:Compl.
Masivului
manual

7. Inscrierea sumei
elementelor negative
din masiv intr-un fisier

gotoxy(10,
werey()+1)
3
1

gotoxy(10,
werey()+1)

w=5

+
e

8:Iesire

w=6

w=7

w=getch()

g
+
w=1

w=8

h
m

+
w=2
b
+
w=3
c

w=4

+
conditii()
d

2
m

z=1

z=1

N=

N=

i=0;i<n;i
++

i=0;i<n;i
++

j=0;j<n;j
++

j=0;j<n;j
++

x[i][j]=
random(100)20

X[i][j]

i=0;i<n;i
++

Tastati Enter

Q
j=0;j<n;j
++

x[i][j]

Pentru iesire
tastati
<ENTER>

Z==1

pozitie(x,n)

greseala(z)

d
m

Z==1

afisare(x,n)

greseala(z)

Z==1

coloana
(x,n)

greseala(z)

clrscr()

Z==1

fisier(x,n)

greseala(z)

gotoxy(15
,10)

Intradevar doriti
sa iesiti

v=getch()

v=n||
v=N

v=y||
v=Y
Pentru iesire
tastati
<ENTER>

getch()

STOP

conditii
START

c) Inscrieti intr-un
fisier suma
elementelor negative
din masiv

clrscr()

gotoxy(20
,2)

k=floor(n/2)

Lucrare de curs
la programare

i=0;i<n;i
++

j=0;j<n;j
++

gotoxy(29
,4)

Conditiile
problemei :

gotoxy(10
,5)

(j<nk+i)&&(j
>=i-k+1)

*(rosu)

*(verde)

Tastati Enter

STOP

Este dat masivul


bidimensional x[n]
[n] cu aria hasurata
(rosie)

a) De aflat pozitia si
cantitatea elementelor
egale cu cifra propusa
de utilizator

b) Aflati elementul
maximal de pe fiecare
coloana impara din
aria hasurata

8
A

afisare

pozitie
START

START

k=floor(m/2)
cant=0

clrscr()

Culege cifra
dorita

k=floor(m/2)
K=floor(k/2)

i=0;
i<m; I++

cif

i=0;
i<k; i++

j=0;
j<m; j++

3
j=m-K;
j<m; j++

Y[i][j]

i1=m-K;
i1<m-1;
i1++
Pentru iesire
tastati
<ENTER>
y[i]
[j]==cif

getch()

+
cant++

STOP

y[i][j]

cant!=0

+
Elementele egale
cu cifra utilizatorului
nu sunt

cant

Pentru iesire
tastati
<ENTER>

getch()

STOP

10

11

coloana
START

i=0;i<mk+j-1;i+
+

k=floor(m/2)

y[i]
[j]>ma
x

j=1; j<k;
j=j+2

+
max=y[i]
[j];pr=i;pc=j;

11
max=y[0]
[j];pr=0;pc=j;

"%d cu pozitia
[%d]
[%d]\n\n",max,p
r,pc

fmod(
m,2)=
=0

+
i=0;i<mk+j;i++

y[i]
[j]>ma
x

+
max=y[i]
[j];pr=i;pc=j;

"%d cu pozitia
[%d]
[%d]\n\n",max,p
r,pc

12

11

(fmod(m,
2)==1)&
&(fmod(
k,2)==1)

(fmod(m,
2)==1)&
&(fmod(
k,2)==0)

12

j=k;j<m;
j=j+2

j=k+1;j<
m;j=j+2

max=y[j-k]
[j];pr=j-k;pc=j;

max=y[j-k]
[j];pr=j-k;pc=j;

i=jk;i<m;i+
+

i=jk;i<m;i+
+

y[i]
[j]>ma
x

y[i]
[j]>ma
x

+
max=y[i]
[j];pr=i;pc=j;

max=y[i]
[j];pr=i;pc=j;

"%d cu pozitia
[%d]
[%d]\n\n",max,p
r,pc

"%d cu pozitia
[%d]
[%d]\n\n",max,p
r,pc

13

12

fmod(m,
2)==0)&
&(fmod(
k,2)==1

fmod(m,
2)==0)&
&(fmod(
k,2)==0)

j=k;j<m;
j=j+2

j=k+1;j<
m;j=j+2

max=y[j-k+1]
[j];pr=j-k;pc=j;

max=y[j-k+1]
[j];pr=j-k;pc=j;

i=jk+1;i<m
;i++

i=jk+1;i<m
;i++

y[i]
[j]>ma
x

y[i]
[j]>ma
x

+
max=y[i]
[j];pr=i;pc=j;

max=y[i]
[j];pr=i;pc=j;

"%d cu pozitia
[%d]
[%d]\n\n",max,p
r,pc

"%d cu pozitia
[%d]
[%d]\n\n",max,p
r,pc

14

13

13

fisier
START

Tastati Enter

i=0;i<n;i
++

STOP
j=0;j<n;j
++

s=s+y[i][j];

14

15

y[i]
[j]<0

14

greseala
START

s=

q=0

f=fopen("c:/su
ma.txt","w");

+
Masivul nu are
valori

f, suma s=

Tastati Enter

fclose()

STOP

Pentru iesire
tastati
<ENTER>

getch()

STOP

16

Listingul programului
#include<stdio.h>
#include<conio.h>
#include<math.h>
#include<stdlib.h>
//afisarea conditiilor problemei la monitor
void conditii (void) {
int i,j,n=10,k,K;clrscr();
gotoxy(20,2);textcolor(11);
cprintf("Lucrare de curs la disciplina programare");
gotoxy(29,4);textcolor( 15); cprintf("Conditiile problemei.:");
gotoxy(10,5);textcolor(11);
cprintf("Este dat masivul bidimensional x[N][N] cu aria hasurata
(rosie)");
gotoxy(5,6);
cprintf("a) De aflat pozitia si cantitatea elementelor egale cu
cifra");
gotoxy(5,7);
cprintf(" propusa de utilizator.");
gotoxy(5,8);
cprintf("b) Aflati elementul maximal de pe fiecare coloana impara
din");
gotoxy(5,9); cprintf(" aria hasurata.");
gotoxy(5,10);
cprintf("c) Inscrieti intr-un fisier suma elementelor negative din
masiv.");
k=floor(float(n)/float(2));
for(i=0;i<n;i++) {
for(j=0;j<n;j++) {
if( (j<n-k+i)&&(j>=i-k+1))
{gotoxy(15+(j*3),13+i);textcolor(12); cprintf("* ");}
else{gotoxy(15+(j*3),13+i);textcolor(15);cprintf("* ");} } }
textcolor( 15);gotoxy( 10,wherey()+2);
cprintf("Pentru iesire in meniu culegeti <ENTER>"); getch(); }
//afisarea masivului initia! in 2 culori la monitor
void afisare (int y[50][50],int m) {
int i,j,k,K; clrscr();gotoxy(15,2);textcolor(15);clrscr();
cprintf("Masivul x[%d][%d] este:\n",m,m);
k=floor(float(m)/float(2));
for(i=0;i<m;i++) {
for(j=0;j<m;j++) {
if( (j<m-k+i)&&(j>=i-k+1))
{gotoxy(15+(j*4),4+i);textcolor(12); cprintf("%3d ",y[i][j]);}
else {gotoxy(15+(j*4),4+i);textcolor(10);cprintf("%3d",y[i]
17

[j]);}} }
textcolor(15);gotoxy( 10,wherey()+2);
cprintf("Pentru iesire in meniu culegeti <ENTER>"); getch(); }
void pozitie (int y[50][50],int m) {
int i,j,cif,cant=0;
clrscr();
gotoxy(2,2);
printf("Culegeti cifra dorita ");
scanf("%d",&cif);
for(i=0;i<m;i++)
for(j=0;j<m;j++)
if(y[i][j]==cif){cant++;gotoxy(5,m+10+cant);
printf("elementul %d cu pozitia [%d][%d]",y[i][j],i,j);}
if(cant!=0){
gotoxy(5,m+7);textcolor(15);
printf("Elementele egale cu cifra utilizatorului sunt:");
gotoxy(5,m+12+cant);textcolor( 15);
printf("Cantitatea lor este : %d",cant);}
else {gotoxy(5,m+9);textcolor( 15);
printf("Elementele egale cu cifra utilizatorului nu sunt");}
for(i=0;i<m;i++)
for(j=0;j<m;j++) {
gotoxy(15+(j*4),4+i);textcolor(15); cprintf("%3d",y[i][j]);
if(y[i][j]==cif)
{gotoxy(15+(j*4),4+i),textcolor(12); cprintf("%3d ",y[i][j]);}
}
textcolor( 12);gotoxy( 10,35);
cprintf(" Pentru iesire in meniu culegeti <ENTER>"); getch(); }
void coloana (int y[50][50],int m) {
int i=0, j=0,k,pr,pc,max;
k=floor(float(m)/float(2));
clrscr();gotoxy(5,m+9);textcolor( 15);
printf("Elementele maxime de pe fiecare coloana impara din aria
hasurata\n\n");
for(j=1;j<k;j=j+2) {max=y[0][j];pr=0;pc=j;
if(fmod(m,2)==0){
for(i=0;i<m-k+j;i++)
if(y[i][j]>max){max=y[i][j];pr=i;pc=j;}
printf("%d cu pozitia [%d][%d]\n\n",max,pr,pc);}
else {
for(i=0;i<m-k+j-1;i++)
if(y[i][j]>max){max=y[i][j];pr=i;pc=j;}
printf("%d cu pozitia [%d][%d]\n\n",max,pr,pc);}}
if((fmod(m,2)==1)&&(fmod(k,2)==0)) {
for(j=k+1;j<m;j=j+2) { max=y[j-k][j];pr=j-k;pc=j;
18

for(i=j-k;i<m;i++)
if((y[i][i]>max )) {max=y[i][j];pr=i;pc=j;}
printf("%d cu pozitia [%d][%d]\n\n",max,pr,pc);}}
else
if((fmod(m,2)==1)&&(fmod(k,2)==1)){
for(j=k;j<m;j=j+2) {max=y[j-k][j];pr=j-k;pc=j;
for(i=j-k;i<m;i++)
if((y[i][j]>max)){max=y[i][j];pr=i;pc=j;}
printf("%d cu pozitia [%d][%d]\n\n",max,pr,pc);}}
else
if((fmod(m,2)==0)&&(fmod(k,2)==0)) {
for(j=k+1;j<m;j=j+2) {max=y[j-k+1][j];pr=j-k;pc=j;
for(i=j-k+1;i<m;i++)
if(y[i][j]>max){max=y[i][j];pr=i;pc=j;}
printf("%d cu pozitia [%d][%d]\n\n",max,pr,pc);}}
else
if((fmod(m,2)==0)&&(fmod(k,2)==1)){
for(j=k;j<m;j=j+2) {max=y[j-k+1][j];pr=j-k;pc=j;
for(i=j-k+1;i<m;i++)
if(y[i][j]>max){max=y[i][j];pr=i;pc=j;}
printf("%d cu pozitia [%d][%d]\n\n",max,pr,pc);}}
gotoxy(15,2);textcolor( 15);
printf("Masivul");
for(i=0;i<m;i++)
for(j=0;j<m;j++) {
if( (j<m-k+i)&&(j>=i-k+1))
{gotoxy(15+(j*4),4+i);textcolor(12);cprintf("%3d",y[i][j]);}
if( (j<m-k+i)&&(j>=i-k+1)&&(fmod(j,2)==1))
{gotoxy(15+(j*4),4+i);textcolor(12);cprintf("%3d",y[i][j]);}
else {gotoxy(15+(j*4),4+i);textcolor(10);cprintf("%3d ",y[i]
[j]);} }
textcolor(12 );gotoxy(10,40);
cprintf(" Pentru iesire in meniu culegeti <ENTER>"); getch(); }
void fisier (int y[50][50],int m) {
int i,j,k,s=0;FILE *f;
clrscr();
gotoxy(2,2);
for(i=0;i<m;i++)
for(j=0;j<m;j++)
if(y[i][j]<0) s=s+y[i][j];
gotoxy(2,wherey()+1);
for(i=0;i<m;i++)
for(j=0;j<m;j++){
if (y[i][j]<0) {gotoxy(15+(j*4),4+i);textcolor(15);
cprintf("%3d",y[i][j]);}
19

else {gotoxy(15+(j*4),4+i);textcolor(10);cprintf("%3d",y[i][j]);}
}
gotoxy(5,wherey()+2);
printf("Suma elementelor negative din masiv este %d",s); getch();
f=fopen("c:/suma.txt","w");
fprintf(f,"Suma = %d",s);
fclose(f);
gotoxy(15,wherey()+2);textcolor(15); clrscr(); gotoxy(5,2);
cprintf("Suma elementelor negative din masiv");
gotoxy(15,wherey()+2);
cprintf("a fost inscrisa in fisierul c:/suma.txt");
textcolor(12);gotoxy( 15,wherey()+2);
cprintf("Pentru iesire in meniu culegeti <ENTER>"); getch(); }
void gresala (int q) {
if (q==0) { clrscr();gotoxy(15,2);textcolor(12);
cprintf("Masivul nu poate fi prelucrat. Elementele nu au valori");
textcolor(15);gotoxy( 15,wherey()+2);
cprintf("Pentru iesire in meniu culegeti <ENTER>"); getch(); } }
//programul principal
void main(void) {
int x[50][50]={0};
int n,i, j,z=0; char w,v;
//afisarea meniului
m0:clrscr(); textcolor(15); gotoxy(15,2);
cprintf("Alege din meniu:\n"); gotoxy(15,4);
cprintf("1: Afisarea conditiilor initiale"); gotoxy(15,5);
cprintf("2: Completarea masivului in mod manual\n");
gotoxy(15,6);
cprintf("3: Completarea masivului in mod automat\n");
gotoxy(15,7);
cprintf("4: Afisarea masivului initial"); gotoxy(15,8);
cprintf("5: Aflarea pozitiilor si a cantitatii elementelor egale");
gotoxy(15,9);
cprintf(" cu cifra utilizatorului\n");gotoxy(15,10);
cprintf("6: Aflarea elementului maximal de pe fiecare coloana");
gotoxy(15,11);
cprintf(" impara din aria hasurata\n");gotoxy( 15,12);
cprintf("7: Inscrierea sumei elementelor negative din masiv");
gotoxy(15,13);
cprintf(" intr-un fisier\n"); gotoxy(15,14);
cprintf("8: Iesire\n"); gotoxy(15,15);
// alegerea din meniu
w=getch();
switch (w) {
case '1': goto m1;
case '2': goto m2;
20

case '3': goto m3;


case '4': goto m4;
case '5': goto m5;
case '6': goto m6;
case '7': goto m7;
case '8': goto m8;
default: goto m0;}
m1: conditii(); goto m0;
m2: //completare manuala a masivului
clrscr(); z=1; gotoxy(15,2); textcolor(15);
cprintf("Culege marimea masivului x N=");
scanf("%d",&n); gotoxy(15,3);
cprintf("Culege elementele masivului x[%d][%d]\n",n,n);
for(i=0;i<n;i++) {
for(j=0;j<n;j++) {
gotoxy(15+(j*4),5+i);
scanf("%3d",&x[i][j]); } }
textcolor( 15);gotoxy( 10, wherey()+1);
cprintf("Pentru iesire in meniu culegeti <ENTER>"); getch(); goto
m0;
m3: //completare automata a masivului
clrscr(); z=1; gotoxy(15,2); textcolor(15);
cprintf( "Culege marimea masivului x N=");
scanf("%d",&n); randomize();
for(i=0;i<n;i++) {
for(j=0;j<n;j++) {
x[i][j]=random(100)-20; }}
// afisarea masivului initial
gotoxy(15,4); textcolor(15);
cprintf("Masivul initial x[%d][%d] este;\n",n,n);
for(i=0;i<n;i++) {
for(j=0;j<n;j++) {
textcolor(15); gotoxy(15+(j*4),6+i);
cprintf("%3d",x[i][j]); } }
gotoxy( 10, wherey()+2);
cprintf("Pentru iesire in meniu culegeti <ENTER>");
getch(); goto m0;
m4: if (z==1) {afisare(x,n); goto m0;};
gresala(z); goto m0;
m5: if (z==1) {pozitie(x,n); goto m0; };
gresala(z); goto m0;
m6: if (z==1) {coloana(x,n); goto m0;};
gresala(z); goto m0;
m7: if (z==1) {fisier(x,n); goto m0;};
gresala(z); goto m0;
m8: clrscr();
21

gotoxy(15,2); textcolor(15);
cprintf("Intradevar doriti sa iesiti ? y/n");
v=getch(); if ((v=='n')||(v=='N')) goto m0;
gotoxy(15,4); textcolor(15);
cprintf("Pentru iesire din program culegeti <ENTER>"); getch();}

Descrierea algoritmului programului.


Executarea programului se ncepe cu apariia unui meniu din care
putem alege o funcie s ndeplineasc programul n felul
urmtor:

Tastnd punctul 1 al meniului se vor afia urmtoarele condiii:

22

Concluzii.
n urma efecturii lucrrii de curs am fcut cunotin cu unul
dintre cele mai avansate limbaje de programare, C++, care d
posibilitatea de a ridica nivelul de programare al calculatoarelor.
Cu ajutorul lui uor se poate de ndeplinit diverse condiii de
prelucrare a masivelor unidimensionale i bidimensionale.

23

You might also like