Orar semigroup #2

Orar semigroup #2

2 martie - aplicaţie complexă pe unul din vectori

Se dă un vector format din n elemente, toate cifre. Să se efectueze urmatoarele operaţii până când vectorul nu va mai conţine elemente(lungimea sa va fi egală cu 0):
- cautarea elementului 0 si eliminarea tuturor elementelor din stânga lui şi a sa
- calcularea mediei aritmetice a elementelor rămase în tablou
- căutarea ultimei apariţii(de la stânga la dreapta, de la 0 la n) a mediei aritmetice în vector; (în cazul în care medie aritmetică(partea întreagă) nu se regăseşte în vector se va căuta ultima apariţie a celui mai mare element mai mic decât media aritmetică
- scăderea valorii 1 din acest element în cazul în care este impar şi a valorii 2 în cazul în care este par
Să se afişeze numărul de paşi necesari parcurgerii programului pentru eliminarea tuturor elementelor din vector şi toate modificările făcute asupra vectorului.

#include<iostream>
using namespace std;
void citire(int &n,int x[])
{int i;
cin>>n;
cout<<endl<<"Cititi elementele vecetorului";
for(i=0;i<n;i++)
cin>>x[i];
}

void cauta_zero(int n,int x[],int &poz)
{
int i;
poz=-1;
for(i=n-1;i>=0;i--)
{
if(x[i]==0)
{ poz=i;
break;
}
}
}

void sterge(int &n,int x[],int poz)
{int i;
for(i=poz+1;i<n;i++)
x[i-poz-1]=x[i];
n=n-poz-1;
}

void afisare(int n, int x[])
{int i;
cout<<endl;
for(i=0;i<n;i++)
cout<<x[i]<<" ";
cout<<endl;
}

int media(int n,int x[]){
int i,m,s=0;
for(i=0;i<n;i++)
s=s+x[i];
m=s/n;
return m;}

void scade(int n, int x[], int poz1)
{
if(x[poz1]%2==0)
x[poz1]=x[poz1]-2;
else x[poz1]=x[poz1]-1;
}
void cauta_media( int n, int x[], int m, int &poz1)
{ int i;
poz1=-1;
for(i=n-1;i>=0;i--)
if(x[i]==m){ poz1=i;break;}
}
void cauta_numar(int n,int x[],int m,int &poz1)
{int i,m1=0;
for(i=0;i<n;i++)
if( x[i]<m && x[i]>=m1)
{m1=x[i]; poz1=i; }
}
int main()
{int n,x[100],poz,m,poz1,DLM=1;
cout<<"Cititi lungimea vectorului, iar mai apoi elementele"<<endl;
citire(n,x);
while(n)
{cauta_zero(n,x,poz);
if(poz!=-1)
{sterge(n,x,poz);
afisare(n,x);}
if(n==0)
break;
m=media(n,x);
cauta_media(n,x,m,poz1);
if(poz1==-1)
cauta_numar(n,x,m,poz1);
scade(n,x,poz1);
afisare(n,x);
DLM++;
}
cout<<endl<<DLM<<" incercari";
return 0;}

miercuri, 2 martie 2011 by DlMuresan
Categories: , , | Leave a comment

Leave a Reply