Orar semigroup #2

Orar semigroup #2

Archive for septembrie 2011

9/30

1. Se da un vector cu nr intregi cu valori distincte. Se cere sa afisati toate posibilitatile de a alege k din cele n citite astfel incat oricare doua nr alaturate sa fie de paritati diferite.

#include<iostream>
using namespace std;
int a[10];
int n,x[10],nrsol,k;

int afisare()
{int i;
nrsol++;
for(i=1;i<=k;i++)
    cout<<a[x[i]]<<" ";
cout<<endl;
}

int verif(int i)
{int j;
for(j=1;j<i;j++)
    if(x[j]==x[i] || a[x[i]]%2==a[x[i-1]]%2 && i>1)
        return 0;
return 1;
}

void back(int i)
{int j;
for(j=1;j<=n;j++)
{x[i]=j;
if(verif(i))
    if(i==k)
        afisare();
    else back(i+1);
}
}

int main()
{int i;
cout<<"n=";cin>>n;
cout<<"k=";cin>>k;
for(i=1;i<=n;i++)
    cin>>a[i];
back(1);
cout<<endl<<"Nr. sol= "<<nrsol;
}
1.II.
#include<iostream>
using namespace std;
int a[10];
int n,x[10],nrsol,k;

int afisare()
{int i;
nrsol++;
for(i=1;i<=k;i++)
    cout<<x[i]<<" ";
cout<<endl;
}

int verif(int i)
{int j;
for(j=1;j<i;j++)
    if(x[j]==x[i] || x[i]%2==x[i-1]%2 && i>1)
        return 0;
return 1;
}

void back(int i)
{int j;
for(j=1;j<=n;j++)
{x[i]=a[j];
if(verif(i))
    if(i==k)
        afisare();
    else back(i+1);
}
}

int main()
{int i;
cout<<"n=";cin>>n;
cout<<"k=";cin>>k;
for(i=1;i<=n;i++)
    cin>>a[i];
back(1);
cout<<endl<<"Nr. sol= "<<nrsol;
}
2. Se citesc n culori. Sa se formeze toate drapelele de 3 culori astfel incat oricare doua culori alaturate sa fie distincte.
#include<iostream>
using namespace std;
char a[10][10];
int n,x[10],nrsol,k;

int afisare()
{int i;
nrsol++;
for(i=1;i<=k;i++)
    cout<<a[x[i]]<<" ";
cout<<endl;
}

int verif(int i)
{int j;
for(j=1;j<i;j++)
    if(x[j]==x[i] || x[i]==x[i-1] && i>1)
        return 0;
return 1;
}

void back(int i)
{int j;
for(j=1;j<=n;j++)
{x[i]=j;
if(verif(i))
    if(i==k)
        afisare();
    else back(i+1);
}
}

int main()
{int i;
cout<<"n=";cin>>n;
k=3;
for(i=1;i<=n;i++)
    cin>>a[i];
back(1);
cout<<endl<<"Nr. sol= "<<nrsol;
}

joi, 29 septembrie 2011 by DlMuresan
Categories: | Leave a comment

9/29 - Backtracking

Se citesc de la tastatura numele a n copii. Sa se afiseze toate posibilitatile de aranjare a acestora pe n scaune.

#include<iostream>
using namespace std;
char a[10][10];
int n,x[10],nrsol;

int afisare()
{int i;
nrsol++;
for(i=1;i<=n;i++)
    cout<<a[x[i]]<<" ";
cout<<endl;
}

int verif(int i)
{int j;
for(j=1;j<i;j++)
    if(x[j]==x[i])
        return 0;
return 1;
}

void back(int i)
{int j;
for(j=1;j<=n;j++)
{x[i]=j;
if(verif(i))
    if(i==n)
        afisare();
    else back(i+1);
}
}

int main()
{int i;
cin>>n;
for(i=1;i<=n;i++)
    cin>>a[i];
back(1);
cout<<endl<<"Nr. sol= "<<nrsol;
}
n camile sunt asezate in sir indian. Sa se afiseze toate posibilitatile de rearanjare a acestora astfel incat o camila sa aiba in fata ei o camila diferita de cea din configuratia initiala.
#include<iostream>
using namespace std;
int n,x[10],nrsol;

int afisare()
{int i;
nrsol++;
for(i=1;i<=n;i++)
    cout<<x[i]<<" ";
cout<<endl;
}

int verif(int i)
{int j;
for(j=1;j<i;j++)
    if(x[j]==x[i] || x[i]-x[i-1]==1 && i>1)
        return 0;
return 1;
}

void back(int i)
{int j;
for(j=1;j<=n;j++)
{x[i]=j;
if(verif(i))
    if(i==n)
        afisare();
    else back(i+1);
}
}

int main()
{int i;
cin>>n;
back(1);
cout<<endl<<"Nr. sol= "<<nrsol;
}

by DlMuresan
Categories: , , , | Leave a comment

9/26

Subprogramul cif, cu doi parametri, primeşte prin intermediul parametrului a un număr natural cu cel mult 8 cifre şi prin intermediul parametrului b o cifră; subprogramul returnează numărul de apariţii ale cifrei b în scrierea numărului a.
Exemplu: pentru a=125854 şi b=5, subprogramul va returna valoarea 2.
a) Scrieţi definiţia completă a subprogramului cif.
b) Scrieţi un program C/C++ care citeşte de la tastatură un număr natural n cu exact 8 cifre, fiecare cifră fiind nenulă, şi care determină şi afişează pe ecran, folosind apeluri utile ale subprogramului cif, cel mai mic număr palindrom ce poate fi obţinut prin rearanjarea tuturor cifrelor numărului n. Dacă nu se poate obţine un palindrom din toate cifrele numărului
n, programul va afişa pe ecran numărul 0. Un număr natural este palindrom dacă este egal cu numărul obţinut prin scrierea cifrelor sale în ordine inversă.
Exemplu: dacă n=21523531 atunci se va afişa pe ecran numărul 12355321, iar dacă n=12272351 atunci se va afişa pe ecran numărul 0
#include<iostream>
using namespace std;
int cif(int a, int b)
{int i=0;
while(a)
{if(a%10==b)
    i++;
a=a/10;}
return i;
}

int main()
{int nn=0,k,n,i,f[100],j;
cin>>n;
for(i=1;i<=9;i++)
    f[i]=cif(n,i);
for(i=1;i<=9;i++)
    if(f[i]%2==1)
        {cout<<"NU";return 0;}
for(i=1;i<10;i++)
    for(j=1;j<=f[i]/2;j++)
        cout<<i;
for(i=9;i>0;i--)
    for(j=1;j<=f[i]/2;j++)
        cout<<i;
}

Scrieţi un program C/C++ care citeşte de la tastatură două caractere c1 şi c2 (litere distincte ale alfabetului englez), şi un text având cel mult 250 caractere (doar spaţii şi litere ale alfabetului englez), pe care îl modifică înlocuind toate apariţiile caracterului memorat în c1 cu cel memorat în c2 şi toate apariţiile caracterului memorat în c2 cu cel memorat în c1. Programul afişează pe linii separate ale ecranului atât textul iniţial cât şi textul obţinut după
efectuarea înlocuirilor. Exemplu: dacă pentru c1 se citeşte a, pentru c2 se citeşte o iar textul citit este:
hocus pocus preparatus
se va afişa :
hocus pocus preparatus
hacus pacus preporotus
#include<iostream>
using namespace std;

int main()
{char i,a[100],c1,c2;
cin.get(a,100);
cin>>c1>>c2;
cout<<a<<endl;
for(i=0;i<strlen(a);i++)
    if(a[i]==c1)
        a[i]=c2;
    else
    if(a[i]==c2)
        a[i]=c1;
cout<<a;
}
Subprogramul numar cu 4 parametri (n,c1,c2,&x) returneaza prin x numarul obtinut prin eliminarea din n a cifrelor cuprinse in intervalul [c1,c2].
#include<iostream>
using namespace std;

void numar(int n, int c1, int c2, int &x)
{int r,p=1;
x=0;
while(n)
{if(n%10<c1 || n%10>c2)
    {x=n%10*p+x;p=p*10;}
    n=n/10;
}
}
   
int main()
{int n,c1,c2,x;
cin>>n>>c1>>c2;
numar(n,c1,c2,x);
cout<<x;
}
Min/max
#include<iostream>
using namespace std;

void f(int a, int b, int c, int &min, int &max)
{max=min=a;
if(b>max)max=b;
if(c>max)max=c;
if(b<min)min=b;
if(c<min)min=c;
}

int main()
{int a,b,c,min,max;
cin>>a>>b>>c;
f(a,b,c,min,max);
cout<<min<<" "<<max;
}
reduce(a,b) returneaza suma cifrelor lui a care nu divid numarul b
#include<iostream>
using namespace std;

int reduce(int a, int b)
{int s=0;
while(a)
{if (b%(a%10)!=0)
    s=s+a%10;
a=a/10;
}
return s;
}

int main()
{int a,b;
cin>>a>>b;
cout<<reduce(a,b);
}
suma(n,v[]) returneaza suma el. lui v care au prima cifra egala cu ultima
#include<iostream>
using namespace std;

int suma(int n, int v[])
{int i,s=0;
for(i=0;i<n;i++)
    if(v[i]%10==v[i]/100)
        s=s+v[i];
    return s;
}

int main()
{int n,v[100],i;
cin>>n;
for(i=0;i<n;i++)
    cin>>v[i];
cout<<suma(n,v);
}
Se dau două numere reale cu două cifre la partea întreagă şi două la partea fracţionară. Să se scrie o funcţie care returnează maximul dintre următoarele 4 numere: cele două numere şi alte două numere obţinute prin interschimbarea părţii întregi cu partea fracţionară.
#include<iostream>
using namespace std;
void max(float a, float b, float &c)
{float aa=0.0,bb=0.0,p,d;
p=(int)a;
aa=(a-p)*100+p/100;
d=(int)b;
bb=(b-d)*100+d/100;
c=a;
if(b>c)c=b;
if(aa>c)c=aa;
if(bb>c)c=bb;
}

int main()
{float a,b,c,p;
cin>>a>>b;
max(a,b,c);
cout<<c;
}

luni, 26 septembrie 2011 by DlMuresan
Categories: , , , , , , , | Leave a comment

9/23

5. Fişierul text bac.txt conţine, pe o singură linie, cel mult 1000 de numere naturale nenule cu cel mult 4 cifre fiecare, numerele fiind separate prin câte un spaţiu. Scrieţi un program C/C++ care citeşte de la tastatură un număr natural nenul n (n<999) şi numerele din fişierul bac.txt şi care afişează pe ecran, separate prin câte un spaţiu, toate numerele din fişier care sunt divizibile cu n. Dacă fişierul nu conţine niciun astfel de număr, atunci se va afişa pe ecran mesajul NU EXISTA.
Exemplu: dacă fişierul bac.txt conţine numerele: 3 100 40 70 25 5 80 6 3798, pentru n=10 atunci pe ecran se va afişa: 100 40 70 80

#include<iostream>
#include<fstream>
using namespace std;
int main()
{ifstream f("bac.txt");
int n,a,ok=0;
cin>>n;
while(f>>a)
    if(a%n==0)
    {    cout<<a<<" ";ok=1;}
    if(ok==0)
        cout<<"NU EXISTA";
}
6. Subprogramul sub, cu trei parametri, primeşte prin intermediul parametrilor:
– v un tablou unidimensional cu cel mult 100 de componente ce memorează numere întregi de cel mult 4 cifre fiecare;
– n un număr natural nenul mai mic sau egal cu 100 ce reprezintă numărul efectiv de componente ale tabloului primit prin intermediul parametrului v;
– a un număr întreg cu cel mult 4 cifre.
Subprogramul sub returnează numărul componentelor tabloului primit prin intermediul parametrului v ale căror valori sunt strict mai mici decât valoarea parametrului a.
Exemplu: pentru valorile n=5, v=(1,21,9,21,403), a=20 ale parametrilor, în urma apelului, subprogramului sub va returna valoarea 2.
a) Scrieţi definiţia completă a subprogramului sub.
b) Să se scrie un program C/C++ care să citească de la tastatură un număr natural nenul n (n≤100) şi n numere întregi, fiecare având cel mult 4 cifre, şi care, folosind apeluri utile ale subprogramului sub, să afişeze pe ecran mesajul DA dacă oricare două dintre cele n numere întregi citite sunt distincte două câte două, sau mesajul NU în caz contrar.
Exemplu: pentru n=6 şi cele n numere citite de la tastatură: 47 183 69 8 134 -56
se va afişa pe ecran mesajul DA

#include<iostream>
#include<fstream>
using namespace std;
int sub(int v[], int n, int a)
{int i,k=0;
for(i=0;i<n;i++)
    if(v[i]<a)
        k++;
return k;
}

int main()
{int v[100],n,i,a,j,ok=1;
cout<<"a=";cin>>a;
cout<<"n=";cin>>n;
for(i=0;i<n;i++)
    cin>>v[i];
cout<<sub(v,n,a)<<endl;
for(i=0;i<n;i++)
    for(j=i+1;j<n;j++)
        if(sub(v,n,v[i])==sub(v,n,v[j]))
            {ok=0;}
if(ok)
    cout<<"DA";
else cout<<"NU";
}
7. Un număr n se numeşte extraprim dacă atât el, cât şi orice număr obţinut prin permutarea cifrelor lui n, sunt numere prime. De exemplu, numărul 113 este un număr extraprim deoarece 113, 311, 131 sunt numere prime.
a) Scrieţi definiţia completă a unui subprogram f, cu un parametru, subprogram care:
- primeşte prin intermediul parametrului a un număr natural cu cel mult 3 cifre (a>1)
- returnează suma tuturor exponenţilor din descompunerea în factori primi a valorii
parametrului a.
Exemplu: pentru a=90 subprogramul va returna valoarea 4, deoarece a=2*32*5 şi
1+2+1=4.
b) Scrieţi un program C/C++ care citeşte de la tastatură un număr natural n, 2≤n≤999 şi,
folosind apeluri utile ale subprogramului f, verifică dacă n este un număr extraprim. În caz afirmativ, programul afişează pe ecran mesajul DA, în caz contrar afişând mesajul NU.

#include<iostream>
#include<fstream>
using namespace std;

int prim(int a)
{int i,d,ok=1;
for(d=2;d<=a/2;d++)
    if(a%d==0)
        ok=0;
    return ok;
}
    
int permutari(int &n)
{int z,nn,k,i,j=0;
z=1;nn=n;k=0;

while(n>9)
{z=z*10;n=n/10;k++;}
n=nn;k++;
for(i=0;i<k;i++)
{
n=(n%10)*z+n/10;
return n;
}
}

int nr_cif(int n)
{int i=0;
while(n)
{i++;n=n/10;}
return i;}

int main()
{int i,n,j,ok=1;
cin>>n;
for(i=0;i<nr_cif(n);i++)
    if(prim(permutari(n))==0)
        ok=0;
if(ok)
    cout<<"DA";
else cout<<"NU";
}
Fur le function f:
#include<iostream>
#include<fstream>
using namespace std;

int prim(int a)
{int i,d,ok=1;
for(d=2;d<=a/2;d++)
    if(a%d==0)
        ok=0;
    return ok;
}

int f(int a)
{int i,j=0,s=0,v[100],f[100]={0};
while(a>1)
    for(i=2;i<=a;i++)
        if(prim(i))
            if(a%i==0)
                {v[j]=i;j++;a=a/i;}
for(i=0;i<j;i++)
    f[v[i]]++;
for(i=0;i<100;i++)
    s=s+f[i];
return s;}
              
int main()
{int a;
cin>>a;
cout<<f(a);
}

vineri, 23 septembrie 2011 by DlMuresan
Categories: , , , , , , , | Leave a comment

9/20 - Bork Bork Bork!

The Swedish Chef is a character from the Muppet Show.  He spoke in his own language.  The language is a combination of English, mock-Swedish and nonsense.  Your task is to create an English to Chef translator.  The language rules in priority order are as follows:

Rezolvată pentru partea cu BORK, pentru înlocuirea unui caracter cu un altul şi a unui şir cu un altul.
#include<iostream.h>
#include<fstream.h>
char a[]=" BORK BORK BORK!",s[100];

void BORK(char s[])
{strcat(s,a);}

void f10(char s[],char c1,char c2)
{char *p;
while(p=strchr(s,c1))
s[p-s]=c2;
}

void f2(char s[],char t[],char u[])
{int a=strlen(t);
char v[100],*p;
v[0]=NULL;

while(p=strstr(s,t))
    {strcpy(v,s);
    v[p-s]='\0';
    strcat(v,u);
    strcat(v,p+a);
    strcpy(s,v);
    v[0]=NULL;}
}

void f4(char s[],char t[],char u[])
{int a=strlen(t);
char v[100],*p;
v[0]=NULL;

while(p=strstr(s+1,t))
    if(s[p-s-1]!=' ')
    {strcpy(v,s);
    v[p-s]=NULL;
    strcat(v,u);
    strcat(v,p+a);
    strcpy(s,v);
    v[0]=NULL;}
}

void FF(char s[])
{char v[100];
int i,j=0;
v[0]=NULL;
for(i=0;i<strlen(s);i++)
    if(s[i]=='F')
    {v[j]='F';
    v[j+1]='F';
    j+=2;}
    else
    {v[j]=s[i];
    j++;}
v[j]=NULL;
strcpy(s,v);
}

void f5(char s[])
{char v[100];
int i,j=0;
v[0]=NULL;
for(i=0;i<strlen(s);i++)
    if(s[i]=='A' && (s[i+1]!=' ' && s[i+1]!='.'))
        {v[j]='E';j++;}
    else {v[j]=s[i];j++;}
    v[j]=NULL;
    strcpy(s,v);
}

void f3(char s[])
{char v[100];
int i,j=0;
v[0]=NULL;
for(i=0;i<strlen(s);i++)
    if(s[i]=='E' && (s[i+1]==' ' || s[i+1]=='.'))
        {v[j]='E';j++;
        v[j]='-';j++;
        v[j]='A';j++;}
    else {v[j]=s[i];j++;}
    v[j]=NULL;
    strcpy(s,v);
}

void f6(char s[])
{char v[100];
int i,j=0;
v[0]=NULL;
for(i=0;i<strlen(s);i++)
    if(s[i]=='U' && s[i-1]!=' ' && i-1!=-1)
        {v[j]='O';j++;
        v[j]='O';j++;}
    else {v[j]=s[i];j++;}
    v[j]=NULL;
    strcpy(s,v);
}

int main()
{
ifstream f("date.in");
ofstream g("date.out");
int n,i;
f>>n;
f.get();
for(i=0;i<n;i++)
    {
    f.getline(s,100);
    f2(s,"THE","ZEE");
    f2(s,"AN","UN");
    f2(s,"AU","OO");
    f5(s);
    f2(s,"OW","OO");
    f2(s,"O","U");
    f2(s,"IR","UR");
    f2(s,"TION","SHUN");
    f4(s,"I","EE");
    f2(s,"EN","EE");
    FF(s);
    f3(s);
    f6(s);
    f2(s,"V","F");
    f2(s,"W","V");
    BORK(s);
    g<<s<<endl;
    }
}

marți, 20 septembrie 2011 by DlMuresan
Categories: , , , , , , | Leave a comment

9/19 - Structuri

1.Fie definitia urmatoare: struct fractie {int numitor,numarator;}; a) declarati variabilele f1,f2,f, de tipul definit mai sus; b) initializati variabila f cu suma fractiilor f1 si f2

#include<iostream>
using namespace std;
struct fractie
    {int numitor,numarator;};
int main()
{fractie f1,f2,f;
int a,b;
cin>>f1.numarator>>f1.numitor;
cin>>f2.numarator>>f2.numitor;
f.numitor=f1.numitor*f2.numitor;
f.numarator=f2.numitor*f1.numarator+f2.numarator*f1.numitor;
a=f.numarator;
b=f.numitor;
while(a!=b)
{if(a>b)a=a-b;
else b=b-a;}
f.numarator=f.numarator/a;
f.numitor=f.numitor/b;
cout<<f1.numarator<<"/"<<f1.numitor<<"+"<<f2.numarator<<"/"<<f2.numitor<<"="<<f.numarator<<"/"<<f.numitor;
}
2.Scrieti un program in care se citeste de la tastatura un cuvant. Inlocuiti fiecare vocala cu consoana care o urmeaza si fiecare consoana cu vocala care o precede.
#include<iostream>
using namespace std;
struct fractie
    {int numitor,numarator;};
int main()
{char a[100],j;
int i;
cin>>a;
for(i=0;i<strlen(a);i++)
 if(strchr("aeiou",a[i]))
  a[i]=a[i]+1;
 else for(j=a[i];j>='a';j--)
  if(strchr("aeiou",j))
   {a[i]=j;break;}
cout<<a;
}
3.Dintr-un fisier text se citesc un numar n si n+1 cuvinte. Afisati-le pe acelea care incep cu ultimul.
#include<iostream>
#include<fstream>
using namespace std;
ifstream f("date");
int main()
{int n,i,j,k;
char t[100][100];
f>>n;
for(i=0;i<=n;i++)
 f>>t[i];
for(i=0;i<n;i++)
 if(strstr(t[i],t[n])==t[i])
  cout<<t[i]<<endl;
}
4. Bork Bork Bork! (1-7)
#include<iostream>
#include<fstream>
using namespace std;
int main()
{char a[100],*p;
int n,i,j,k;
cin.get(a,100);
n=strlen(a);
p=strstr(a,"THE");
while(strstr(a,"THE"))
{a[strstr(a,"THE")-a]='Z';
a[strstr(a,"ZHE")-a+1]='E';}

while(strstr(a,"AN"))
    a[strstr(a,"AN")-a]='U';

while(strstr(a,"AU"))
    {a[strstr(a,"AU")-a]='O';
    a[strstr(a,"OU")-a]='O';}
  
for(i=0;i<n;i++)
    if(a[i]=='A' && a[i+1]!=' ')
        a[i]='E';
  
while(strstr(a,"OW"))
    a[strstr(a,"OW")-a+1]='O';

for(i=0;i<n;i++)
    if(a[i]=='O')
        a[i]='U';
  
strcat(a,"Bork Bork Bork!");
cout<<a;
}

duminică, 18 septembrie 2011 by DlMuresan
Categories: , , , , , , , , , , | 1 comment

Les H'Orar della ziua de Luni - Die Version 1.1

by DlMuresan
Categories: | Leave a comment

9/15 - Recapitulare

1. Subprogramul sub are trei parametri:
    n, prin care primeste un număr natural (0<n<100);
    v, prin care primeste un tablou unidimensional care memorează un sir de n numere naturale, fiecare având cel putin două cifre si cel mult patru cifre;
    s, un număr natural (0<s<18).
Subprogramul determină si afisează pe ecran, separate prin câte un spatiu, în ordine descrescătoare, toate numerele din sir care au suma dintre cifra unitătilor si cifra zecilor strict mai mare decât s. Dacă sirul nu contine niciun astfel de număr, subprogramul afisează pe ecran mesajul NU EXISTA. În urma apelului, tabloul transmis subprogramului ca parametru nu se modifică.
Scrieti în limbajul C/C++ definitia completă a subprogramului sub.
Exemplu: pentru n=10, v=(351,149,3794,502,785,258,258,1512,489,693),
s=12 în urma apelului, subprogramul afisează pe ecran, în această ordine, valorile:
3794 785 489 258 258 149.
#include<iostream>
using namespace std;
void ordonare(int a[], int j)
{int i,k;
for(i=0;i<j;i++)
    for(k=i+1;k<j;k++)
        if(a[i]<a[k])
            swap(a[i],a[i+1]);
}

void sub(int n, int v[], int s)
{int a[100],i,j=0,m;
for(i=0;i<n;i++)
    if(v[i]%10+v[i]/10%10>s)
        {a[j]=v[i];j++;}
if(j==0)
    {cout<<"NU EXISTA";return;}
ordonare(a,j);
for(i=0;i<j;i++)
    cout<<a[i]<<" ";
}

int main()
{int n,v[100],s,i;
cin>>n>>s;
for(i=0;i<n;i++)
    cin>>v[i];
sub(n,v,s);
}
2. Se citesc cele n elemente ale unui tablou de numere intregi. Sa se scrie un subprogram care afiseaza mesajul DA dacă elementele pare în şir sunt în ordine crescătoare, iar cele impare sunt în ordine descrescătoare şi mesajul NU în caz contrar.
Exemplu:  n=8    10 1133 12 331 42 1354 221 13 Se va afisa DA

#include<iostream>
using namespace std;
void ordonare(int a[], int j)
{int i,k;
for(i=0;i<j;i++)
    for(k=i+1;k<j;k++)
        if(a[i]<a[k])
            swap(a[i],a[i+1]);
}

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

void sub(int n, int v[], int s)
{int a[100],b[100],i,j=0,k=0,t,ok=1;
for(i=0;i<n;i++)
    if(v[i]%2==0)
        {a[j]=v[i];j++;}
    else {b[k]=v[i];k++;}

/*    cout<<endl;   
afisare(a,j);
    cout<<endl;
afisare(b,k);
    cout<<endl;
*/
   
for(i=0;i<j-1;i++)
    if(a[i]>a[i+1])
        {ok=0;break;}

if(ok==0)
    {cout<<"NU";return;}

ok=1;
for(i=0;i<k-1;i++)
    if(b[i]<b[i+1])
        ok=0;

if(ok==0)
    cout<<"NU";
else cout<<"DA";
}

int main()
{int n,v[100],s,i;
cin>>n;
for(i=0;i<n;i++)
    cin>>v[i];
sub(n,v,12);
}
3. Se consideră subprogramul pr, care primeşte prin intermediul parametrului a un număr natural nenul cu cel mult 9 cifre şi returnează 1 dacă numărul este prim şi 0 în caz contrar.
a) Scrieţi subprogramul pr.
b) Considerăm un număr natural nenul n>99 cu cel mult 9 cifre. Să se realizeze un program C/C++ care citeşte numărul n şi care, folosind apeluri utile ale subprogramul pr, afişează pe ecran, separate prin câte un spaţiu, doar valorile prime din şirul numerelor obţinute din n, prin eliminarea succesivă a ultimei cifre, apoi a ultimelor două cifre, apoi a ultimelor trei cifre etc., până se obţine un număr de două cifre, ca în exemplu.
Exemplu: pentru n=193124 se obţine şirul de valori 19312,1931, 193, 19. din care se
vor afişa pe ecran doar valorile 1931 193 19.

int pr(int a)
{int d,ok=1,i;
for(d=2;d<=a/2;d++)
    if(a%d==0)
        ok=0;
    return ok;}

int main()
{int n,p,k;
cin>>n;
p=n/10;
while(p>9)
{if(pr(p)==1)
    cout<<p<<" ";
p=p/10;}
}
4. Considerăm definite subprogramele:
- pr, care primeşte prin intermediul parametrului x un număr natural cu cel mult 4 cifre şi
returnează 1 dacă numărul este prim şi 0 în caz contrar;
- sdiv care primeşte prin intermediul parametrului y un număr natural cu cel mult 4 cifre
şi returnează suma tuturor divizorilor numărului y.
a) Scrieţi numai antetul subprogramelor pr şi sdiv.
b) Scrieţi un program C/C++ care citeşte de la tastatură un număr natural n (n<1000) şi
care afişează pe ecran toate numerele mai mici decât n cu proprietatea că suma divizorilor
lor este număr prim. Se vor utiliza apeluri utile ale subprogramelor pr şi sdiv.
Exemplu: dacă n=20, atunci programul va afişa: 2 4 9 16

int pr(int a)
{int d,ok=1,i;
for(d=2;d<=a/2;d++)
    if(a%d==0)
        ok=0;
    return ok;}

int sdiv(int y)
{int d,s=0;
for(d=1;d<=y;d++)
    if(y%d==0)
        s+=d;
    return s;}

int main()
{int n,p,k;
cin>>n;
for(p=2;p<n;p++)
    if(pr(sdiv(p))==1)
        cout<<p<<" ";
}

5. Folosind subprograme utile sa se rezolve urmatoarele probleme:
a. Să se determine diferenta minima intre un numar dat n si un numar prim.
b. Sa se determine media a k numere dintr-un sir dat, incepand cu pozitia poz.
c. Sa se permute circular la stanga cu o pozitie numerele dintr-un vector.
d. Sa se determine valoarea minima si cea maxima din sir si media aritmetica a celorlalte elemente.
e. Sa se elimine elementele x[i], x[i+1], …,  x[j] dintr-un sir citit.
int pr(int a)
{int d,ok=1,i;
for(d=2;d<=a/2;d++)
    if(a%d==0)
        ok=0;
    return ok;}
int main()
{int n,p,k,a,b;
cin>>n;
a=n-1;b=n+1;
while(pr(a)==0 && pr(b)==0)
    {a--;b++;}
if(pr(a)==1)
    cout<<"Diferenta minima: "<<n-a;
else cout<<"Diferenta minima: "<<abs(n-b);
}
float medie(int a[],float k, int poz)
{int i,s=0;
for(i=poz;i<poz+k;i++)
    s+=a[i];
return float(s/k);
}

int main()
{int n,a[100],poz,i;
float k;
cin>>n;
for(i=0;i<n;i++)
    cin>>a[i];
cout<<"poz/k?"<<endl;
cin>>poz>>k;
cout<<medie(a,k,poz);
}
int maxim(int a[], int n)
{int max=0,i;
for(i=0;i<n;i++)
    if(a[i]>max)
        max=a[i];
    return max;
}

int minim(int a[], int n)
{int min=a[0],i;
for(i=0;i<n;i++)
    if(a[i]<min)
        min=a[i];
    return min;
}
   
int main()
{int n,a[100],poz,i;
float k=0,s=0;
cin>>n;
for(i=0;i<n;i++)
    cin>>a[i];
for(i=0;i<n;i++)
    if(a[i]!=minim(a,n) && a[i]!=maxim(a,n))
        {s+=a[i];k++;}
cout<<float(s/k);
}

miercuri, 14 septembrie 2011 by DlMuresan
Categories: , , , , , , | Leave a comment

9/11 - O venit momentu' !

Info X A vs. Info XI A
infoXa.blogspot.com vs. infoXIa.blogspot.com

Nu ştiu de la ce ar putea veni fiecare, da o venit momentu' să votaţi. Astăzi, 9/11. În dreapta

duminică, 11 septembrie 2011 by DlMuresan
Categories: | Leave a comment