Prog Lab 9
Prog Lab 9
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
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
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
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();}
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