Orar semigroup #2

Orar semigroup #2

Archive for februarie 2011

24+25 februarie - matrice

Se citeşte de la tastatură un număr s şi un număr m. Să se scrie funcţii pentru citirea dimensiunii unei matrici pătratice şi a matricii, pentru afişarea matricii, pentru afişarea elementelor de pe diagonala principală, pentru afişarea sumei de pe coloana s, pentru afişarea sumei de pe linia m, pentru inversarea a doua linii ale matricii, pentru schimbarea DP cu DS si pentru calcularea sumei de pe DS.

Pentru DP: [i][i];
Pentru DS: [i][n-i-1]; 

#include<iostream>
using namespace std;
int a[10][10],n;
void citire()
{int i,j;
cout<<"Dimensiunea"<<endl;
cin>>n;
cout<<"Cititi elementele matricii"<<endl;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
cin>>a[i][j];}
void afisare()
{int i,j;
for(i=0;i<n;i++)
{cout<<endl;
for(j=0;j<n;j++)
cout<<a[i][j]<<" ";}}
void diagonala()
{int i;
cout<<endl<<"Elementele de pe diagonala principala sunt:"<<endl;
for(i=0;i<n;i++)
cout<<a[i][i]<<" ";}
int sumai(int i)
{int s1=0,j;
for(j=0;j<n;j++)
s1=s1+a[i][j];
return s1;}
int sumaj(int j)
{int i,s2=0;
for(i=0;i<n;i++)
s2=s2+a[i][j];
return s2;}
void inversare(int i,int j)//inversarea elementelor de pe i si j!
{int k,aux;
for(k=0;k<n;k++)
{aux=a[i][k];
a[i][k]=a[j][k];
a[j][k]=aux;}
}
int sumads()//suma de pe Diagonala secundara,exercitiu nou!
{int i,j,s=0;
for(i=0;i<n;i++)
s=s+a[i][n-1-i];
return s;
}
void schimba()//schimbarea elementelor de pe DP si DS!
{int i,aux;
for(i=0;i<n;i++)
{aux=a[i][i];
a[i][i]=a[i][n-1-i];
a[i][n-1-i]=aux;
}}
int main()
{int s1,s2,s,m;
cout<<"Linia m: ";cin>>m;
cout<<"Coloana s: ";cin>>s;
cout<<endl<<"Citire matrice"<<endl;citire();
cout<<endl<<"Afisare matrice";afisare();
cout<<endl;diagonala();
inversare(0,1);
cout<<endl<<endl<<"Dupa inversarea liniilor";afisare();
schimba();
cout<<endl<<endl<<"Dupa schimbarea DP cu DS";afisare();
cout<<endl<<endl<<"suma de pe linia "<<m<<": "<<sumai(m);
cout<<endl<<"suma de pe coloana "<<s<<": "<<sumaj(s);
cout<<endl<<"suma pe DS este: "<<sumads()<<endl;
}

joi, 24 februarie 2011 by DlMuresan
Categories: , , , | Leave a comment

17 februarie

n elevi au dat un test grila. O intrebare are 3 variante de raspuns, din care doar una e corecta.
Pentru fiecare raspuns corect, elevul primeste un punct.
a) Cunoscand variantele corecte, afisati punctajul fiecaruia.
b) Afisati elevii descrescator dupa punctaj

#include<iostream>
#include<fstream>
using namespace std;
struct elev
{
char nume[100];
int pct;
};
elev e[100]; // variabila globala
int n;
char corect[20];

void citire()
{int i,j;
char a[100];
ifstream f("grila");
f>>n;
f>>corect;
for(i=0;i<n;i++)
    {f>>e[i].nume;
    f>>a;
    for(j=0;j<strlen(corect);j++)
        if(corect[j]==a[j])
            e[i].pct++;
    }
}

void afisare()
{int i;
for(i=0;i<n;i++)
    cout<<e[i].nume<<"-"<<e[i].pct<<endl;
}

void ordonare()
{int i,j;
for(i=0;i<n;i++)
    for(j=i+1;j<n;j++)
        if(e[i].pct<e[j].pct)
            swap(e[i],e[j]);
}

int main()
{citire();
ordonare();
afisare();
}
Fisierul
4
abacabb
Gigi abcaaaa
Bogdan abacabb
Ion aaaaaab
Marcel cabbbaa

M clase
#include<iostream> // TRIER
#include<fstream>
using namespace std;
int m;
cin>>m;
char r,s[100]="grila";
for(i=0;i<m;i++)
    {r=itoa(i);
        strcat(s,r);
    ifstream f(s);
    }

struct elev
{
char nume[100];
int pct;
};
   
   
struct clasa
{elev x[20];
int n;
}


elev e[100]; // variabila globala
int n;
char corect[20];


void citire()
{int i,j;
char a[100];
ifstream f("grila");
f>>n;
f>>corect;
for(i=0;i<n;i++)
    {f>>e[i].nume;
    f>>a;
    for(j=0;j<strlen(corect);j++)
        if(corect[j]==a[j])
            e[i].pct++;
    }
}

void afisare()
{int i;
for(i=0;i<n;i++)
    cout<<e[i].nume<<"-"<<e[i].pct<<endl;
}

void punctajclasa()
{

int main()
{citire();
ordonare();
afisare();
}

joi, 17 februarie 2011 by DlMuresan
Categories: , , , , , , , , | 1 comment

11 februarie - zaruri + tema/14

1. Din nou zaruri. Doi copii se joaca iar. Fiecare arunca, pana da 6. Castiga cel care a aruncat toate fetele. Daca ambii au aruncat toate fetele, castiga cel care are suma zarurilor mai mare. Daca sumele sunt egale,castiga cel care a aruncat de mai putine ori. Daca au aruncat de acelasi numar, e egalitate. Care castiga?
Se va scrie o functie pentru aruncarile unui copil. 

 #include <iostream>
using namespace std;
int randx(int x){
return rand()%x+1;}

void aruncare(int &s, int &nr, int &ok){
int ar[7]={0},x,i;
s=0; nr=1;
x=randx(6);
cout<<"aruncarile: "<<x;
ar[x]++;
s=s+x;
ok=1;
while(x!=6){
x=randx(6);
cout<<x;
s=s+x;
nr++;
ar[x]++;}
for(i=1;i<7;i++)
if(ar[i]==0) ok=0;
cout<<endl;}

int main(){
int s1,s2,nr1,nr2,ok1,ok2;
srand(time(NULL));
aruncare(s1,nr1,ok1);
aruncare(s2,nr2,ok2);
if(ok1==0 && ok2==0) cout<<endl<<"nu castiga nici unu";
else if(ok1==1 && ok2==0) cout<<endl<<"primul castiga (a aruncat toate fetele)";
else if(ok1==0 && ok2==1) cout<<endl<<"al 2-lea castiga (a aruncat toate fetele)";
else if(ok1==1 && ok2==1 && s1>s2) cout<<endl<<"primul castiga(are suma mai mare)";
else if(ok1==1 && ok2==1 && s1<s2) cout<<endl<<"al 2-lea castiga(are suma mai mare)";
else if(ok1==0 && ok2==1) cout<<endl<<"al 2-lea castiga (a aruncat toate fetele)";
else if(nr2>nr1) cout<<endl<<"primul castiga(a dat de mai putine ori)";
else if(nr2<nr1) cout<<endl<<"al 2-lea castiga(a dat de mai putine ori)";
else if(nr1==nr2)cout<<endl<<"sunt la egalitate";
cout<<endl;
}
2. Sa se implementeze urmatoarele functii:
-functie care numara vocalele dintr-un sir de caractere
-functie care verifica daca un sir de caractere e palindrom
-functie care returneaza suma tuturor cifrelor care apar intr-un sir de caractere

Sa se apeleze toate functiile de mai sus, pentru fiecare linie a unui fisier text.

#include<iostream>
#include<fstream>
using namespace std;
int voc(char a[])
{int i,p=0;
for(i=0;i<strlen(a);i++)
    if(strchr("AEIOUaeiou",a[i]))
        p++;
return p;
}

char* pal(char a[])
{char b[100];
int i,j;
j=0;
for(i=strlen(a)-1;i>=0;i--)
    {b[j]=a[i];j++;}
if(strcmp(a,b)==0)
    return "DA";
else return "NU";
}

int suma(char a[])
{int s=0,i;
for(i=0;i<strlen(a);i++)
    if(isdigit(a[i]))
        s=s+a[i]-'0';
return s;
}

int main()
{srand(time(NULL));
char a[100],c;
ifstream f("dorel");
while(f.get(a,100))
{
    cout<<voc(a)<<" "<<pal(a)<<" "<<suma(a)<<endl;
    f>>c;
    f.putback(c);
}
}
fişierul
Dorel are 4 ani si jumatate
iar peste 23 de zile va avea
141 de mere si 2 pere rosii
dar totul ii va parea ca
si la inceput.Lc,1-4
3. Dorel şi Mirel au la dispoziţie 3 zaruri de mase şi volume egale. O rundă are 3 aruncări consecutive a zarurilor de către un jucător. Să se scrie o funcţie pentru o rundă de aruncări. Fiecare joacă atâtea runde până când suma numerelor de pe feţele primelor două aruncări se împarte exact la numărul de pe faţa ce a ieşit la a 3-a aruncare. Câştigă cel care reuşeşte să termine jocul mai repede. În caz de egalitate după acest procedeu se va mai apela o dată funcţia scrisă pentru o rundă de 3 aruncări şi va câştiga cel care aruncă cea mai mare sumă de numere inscripţionate pe faţa fiecărui zar.

Se va folosi funcţia rand() pentru generarea de numere ce reprezintă feţele zarului şi se va face apelul srand(time(NULL)) la începutul funcţiei int main().

miercuri, 16 februarie 2011 by DlMuresan
Categories: , , , , , , , , | Leave a comment

16 februarie + Tema/17

3. Scrieti functii care sa efectueze urmatoarele:
a) elimina cifrele impare dintr-un numar (numarul initial se transforma in functie)
b) returneaza prima cifra a unui numar
c) elimina dintr-un numar prima si ultima cifra.

a)#include<iostream>
using namespace std;
int elimina(int &n)
{int k,r,p=0;
k=1;
while(n)
{if(n%10%2==0)
    {p=n%10*k+p;k=k*10;}
n=n/10;}
n=p;
}

int main()
{int n;
cin>>n;
elimina(n);
cout<<n;
}
b)#include<iostream>
using namespace std;
int prima(int n)
{while(n>=10)
    n=n/10;
return n;
}

int main()
{int n;
cin>>n;
cout<<prima(n);
}
c) #include<iostream>
using namespace std;
void elimina(int &n)
{int k,r,p=0;
k=1;
n=n/10;
while(n>10)
{
    {p=n%10*k+p;k=k*10;}
n=n/10;}
n=p;
}

int main()
{int n;
cin>>n;
elimina(n);
cout<<n;
}
4. Se da un tablou de numere intregi.
a) sa se determine elementul maxim si cel minim(intr-o singura functie)
b) sa se afle numarul de aparitii ale unei valori date, k, in tablou
c) sa se elimine elementul de pe pozitia t
Se vor scrie functii pentru citirea si afisarea unui tablou.

#include<iostream>
using namespace std;
void citire(int n, int a[])
{int i;
for(i=0;i<n;i++)
    cin>>a[i];
}

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

void maxmin(int n, int a[], int &max, int &min)
{int i;
max=a[0];min=a[0];
for(i=0;i<n;i++)
    if(a[i]>max)
        max=a[i];
    if(a[i]<min)
        min=a[i];
}

int aparitii(int n, int a[], int k)
{int i,p=0;
for(i=0;i<n;i++)
    if(a[i]==k)
        p++;
    return p;
}

void elimina(int &n, int a[], int t)
{int i;
for(i=t;i<n;i++)
    a[i]=a[i+1];
n--;
}
   
   
int main()
{int n,a[100],max,min,k,t;
cout<<"k=";cin>>k;
cout<<"t=";cin>>t;
cout<<"n=";cin>>n;
cout<<"Citire vector"<<endl;citire(n,a);
afisare(n,a);
cout<<endl;
maxmin(n,a,max,min);
cout<<"MAX MIN: "<<max<<" "<<min<<endl;

cout<<aparitii(n,a,k)<<" aparitii ale el "<<k<<endl;
elimina(n,a,t);
afisare(n,a);
}

marți, 15 februarie 2011 by DlMuresan
Categories: , , | Leave a comment

21 ianuarie - fisa subprograme BAC

1. Scrieţi definiţia completă a subprogramului număr, cu 4 parametrii, care primeşte prin intermediul parametrului n un număr natural format din cel mult 9 cifre, iar prin intermediul parametrilor c1 şi c2 câte o cifră cu proprietatea c1<c2; subprogramul furnizează prin intermediul celui de-al 4-lea parametru, x, o valoare obţinută prin eliminarea din numărul primit prin parametrul n a fiecărei cifre cuprinse în intervalul închis [c1,c2]. Dacă toate cifrele lui n aparţin acestui interval se va afişa 0.

#include<iostream>
using namespace std;
void numar(int n, int c1, int c2, int &x)
{   int r=0,k=1; x=0;
  while(n)
  {  if (n%10<c1 || n%10>c2)
    {x=n%10*k+x; k=k*10;}
       n=n/10; }
}
int main()
{  int n,c1,c2,x;
cin>>n;
cin>>c1;
cin>>c2;
numar(n,c1,c2,x);
cout<<x;
}
2. Scrieţi definiţia completă a subprogramului reduce, cu doi parametrii, care primeşte prin intermediul parametrilor a şi b două numere naturale formate din cel mult 9 cifre fiecare. Funcţia returnează o valoare obţinută din numărul a prin însumarea acelor cifre diferite de 0 ale numărului a care NU divid numărul b. Dacă nu există asemenea cifre, se va returna valoarea 0.
 #include<iostream>
using namespace std;
int reduce(int a, int b)
{  int s=0;
 while (a)
 {   if(a%10!=0 && b%(a%10)!=0)
     s=s+a%10;
    a=a/10;
 }
 return s;
}
int main()
{   int a,b;
cin>>a;
cin>>b;
cout<<reduce(a,b);
}
3. Scrieţi definiţia completă a subprogramului număr, cu 3 parametrii, care primeşte prin intermediul parametrului n un număr natural format din cel mult 9 cifre, iar prin intermediul parametrilor c1 şi c2 câte o cifră nenulă; subprogramul returnează numărul obţinut prin înlocuirea în numărul primit prin parametrul n a fiecărei apariţii a cifrei c1 cu cifra c2. Dacă c1 nu apare în n, subprogramul returnează valoarea n.
#include<iostream>
using namespace std;
int numar(int n, int c1, int c2)
{int r=0,k=1;
    while(n)
{    if(n%10==c1)r=c2*k+r;
    else r=(n%10)*k+r;
    k=k*10;
    n=n/10;
}
return r;
}
int main()
{int n,c1,c2;
cin>>n;
cin>>c1>>c2;
cout<<numar(n,c1,c2);
}
4. Scrieţi definiţia completă a subprogramului suma care are 2 parametrii: n, prin care primeşte un număr natural(1<=n<=100) şi v prin care primeşte un tablou unidimensional cu n elemente, fiecare element memorând un număr cu exact 3 cifre. Funcţia returnează suma elementelor din tablou care au prima cifră egală cu ultima cifră.
#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);
}
5. Scrieţi definiţia completă a subprogramului suma care are 2 parametrii: n, prin care primeşte un număr natural(1<=n<=100) şi v prin care primeşte un tablou unidimensional cu n elemente, numere întregi situate în intervalul [10...30000]. Funcţia returnează suma numerelor din tabloul v care au ultimele două cifre identice.
#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]/10%10)
        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);
}
6. Scrieţi definiţia completă a subprogramului medie care are 2 parametrii: n, prin care primeşte un număr natural situat între 1 şi 100, şi v prin care primeşte un tablou unidimensional cu n elemente, fiecare din ele având cel mult 4 cifre. Subprogramul returnează media aritmetică a numerelor din tablou.
#include<iostream>
using namespace std;
int medie(int n, int v[])
{int i,s=0;
float p;
for(i=0;i<n;i++)
    s=s+v[i];
cout<<(float)s/n;
}
int main()
{int n,v[100],i;
cin>>n;
for(i=0;i<n;i++)
    cin>>v[i];
medie(n,v);
}
7. Scrieţi definiţia completă a unui subprogram max care primeşte prin intermediul parametrilor a şi b două numere reale cu cel mult 4 cifre la partea întreagă şi cel mult 5 zecimale fiecare. Subprogramul determină cel mai mare număr real dintre următoarele 4 valori: a, b şi numerele reale obţinute din a şi b prin interschimbarea părţii întregi cu partea fracţionară în cadrul aceluiaşi număr. Această valoare(maximă) este furnizată prin intermediul parametrului real c.
#include<iostream>   //   GRESIT
using namespace std;
float max(float a, float b, float &c)
{float x,y,p,k=1,t=1;
p=a;
while((int)p)
{k=k*10;p=p/10;}
p=a;
while(int(p)!=p)
{p=p*10;t=t*10;}
x=(a-(int)a)*t+(int)a/k;

p=b;k=1;t=1;
while((int)p)
{k=k*10;p=p/10;}
p=b;
while(int(p)!=p)
{p=p*10;t=t*10;}
y=(b-(int)b)*t+(int)b/k;

c=a;
if(b>c)c=b;
if(x>c)c=x;
if(y>c)c=y;
}
int main()
{float a,b,c;
cin>>a>>b;
max(a,b,c);
cout<<c;
}
8. Se consideră subprogramul CMMDC care primeşte prin cei doi parametrii x şi y două numere naturale şi returnează cel mai mare divizor comun al lor. 
a) scrieţi numai antetul subprogramului CMMDC
b) Fişierul text NUMERE.IN conţine, pe fiecare linie, câte două numere naturale nenule mai mici sau egale cu 10000, despărţite printr-un spaţiu, reprezentând numitorul şi numărătorul câte unei fracţii. Scrieţi un program care, pentru fiecare linie k din fişierul NUMERE.IN, citeşte numitorul şi numărătorul fracţiei pe această linie şi scrie în fişierul text NUMERE.OUT, tot pe linia k, numitorul şi numărătorul acestei fracţii, adusă la forma ireductibilă, ca în exemplu. Se vor utiliza apeluri utile ale funcţiei CMMDC. 
#include<iostream>   //   GRESIT
#include<fstream>
using namespace std;
int CMMDC(int x, int y)
{
    while(x!=y)
        if(x>y)x=x-y;
        else y=y-x;
return x;
}
int main()
{int x,y;
    ifstream f("NUMERE.IN");
    ofstream g("NUMERE.OUT");
    f>>x>>y;
    while(!f.eof())
{       
    x=x/CMMDC(x,y);
    y=y/CMMDC(x,y);
    g<<x<<" "<<y<<endl;
    f>>x>>y;
}
}
9. Ne putem folosi de formula CMMMC = a*b/CMMDC.
Se consideră subprogramul CMMMC care primeşte prin cei doi parametrii x şi y două numere naturale şi returnează cel mai mic multiplu comun al lor. Fişierul text NUMERE.IN conţine, pe fiecare linie, câte două numere naturale nenule mai mici decât 10000, despărţite printr-un spaţiu. Scrieţi un program care, pentru fiecare linie k din fişierul NUMERE.IN, citeşte câte două numere de pe această linie şi scrie în fişierul NUMERE.OUT, tot pe linia k, cel mai mic multiplu comun al acestora. Se vor folosi apeluri utile ale funcţiei CMMMC. 


10. Scrieţi doar antetul unui subprogram prim cu doi parametrii, care primeşte prin intermediul parametrului n un număr natural cu cel mult 4 cifre şi returnează prin intermediul parametrului p valoarea 1 dacă n este prim şi 0 în caz contrar. 
Scrieţi un program care citeşte de la tastatură un număr natural n<1000 şi afişează pe ecran, desparţite prin câte un spaţiu, primele n numere prime, utilizând apeluri utile ale subprogramului prim. 


11. Scrieţi definiţia completă a unui subprogram s care primeşte prin intermediul parametrului n un număr natural de maximum 9 cifre, prin intermediul parametrului c o cifră şi furnizează prin intermediul parametrului k numărului de cifre ale numărului n care aparţin intervalului [c-1,c+1]. 

sâmbătă, 12 februarie 2011 by DlMuresan
Categories: , , , , , , , , , , , | 2 comments

10 februarie - zaruri

2 copii se joaca un joc cu zarul. Fiecare face cate n aruncari. Aruncarile fiecarei fete se memoreaza in cate un tablou.
A) Sa se afiseze cele 2 tablouri
B) Castiga cel care a acumulat mai multe puncte. Sa se afiseze castigatorul.
C) Sa se afiseze, pentru fiecare jucator, numarul maxim de aruncari consecutive ale unei fete x.
de exemplu, daca ne intereseaza fata 5 si un jucator arunca 3 5 5 6 5 5 5 7 5, numarul cautat este 3.

Indicatii:

  1. Se va folosi functia rand() care genereaza numere aleatoare intre 0 si RAND_MAX.
  2. La inceputul programului se va face urmatorul apel: srand(time(NULL));
se va scrie o functie care genereaza numere aleatoare intre 1 si x, cu x parametru
#include<iostream>
using namespace std;
int randx(int x)
{return rand()%x+1;
}
void aruncari(int a[],int n)
{ int i;
for(i=0;i<n;i++)
a[i]=randx(6);
}
void afisare(int a[],int n)
{ int i;
cout<<"jucatorul a aruncat zarurile: ";
for(i=0;i<n;i++)
cout<<a[i]<<" ";
cout<<endl;
}
int suma(int a[],int n)
{int s=0,i;
for(i=0;i<n;i++)
s=s+a[i];
return s;
}
void fata(int &x)
{x=rand()%6+1;}
int main()
{ int n,x,a1[200],a2[200],s1,s2,max,v[100]={0},t[100]={0},j,k,r,p,i;
cout<<"Nr de aruncari:";
cin>>n;
srand(time(NULL));
aruncari(a1,n);
aruncari(a2,n);
afisare(a1,n);
afisare(a2,n);
s1=suma(a1,n);
s2=suma(a2,n);
if(s1>s2)
cout<<"primul castiga";
else if(s2>s1) cout<<"castiga al doilea";
else cout<<"egalitate";
fata(x);
cout<<endl<<"x="<<x<<endl;

max=0;j=0;
for(i=0;i<=n;i++)
{ if(a1[i]==x)
max++;
if(a1[i]!=x)
{v[j]=max;
j++;
max=0;}
}
p=0;
for(k=0;k<=j;k++)
if(v[k]>p)
p=v[k];
cout<<p<<" aparitii consecutive ale fetei "<<x<<" pentu primul jucator"<<endl;

max=0;j=0;
for(i=0;i<=n;i++)
{ if(a2[i]==x)
max++;
if(a2[i]!=x)
{t[j]=max;
j++;
max=0;}
}
p=0;
for(k=0;k<=j;k++)
if(t[k]>p)
p=t[k];
cout<<p<<" aparitii consecutive ale fetei "<<x<<" pentu al doilea jucator"<<endl;
}

miercuri, 9 februarie 2011 by DlMuresan
Categories: , , , , , | Leave a comment

7 februarie: Aplicatie Fizica

Cu ce forta trebuie sa tragi un corp ca sa marga cu viteza constanta?
Se citesc unghiul de inclinare al planului, masa corpului si coeficientul de frecare.

#include<iostream>
#include<math.h>
using namespace std;
void frecare(double &Ff, double m, double u, double a)
{double Gy,Gx;
Gy=cos(a)*m*10;
Gx=sin(a)*m*10;
Ff=u*Gy;
Ff=Ff+Gx;}

int main()
{double Ff,m,u,a;
    cout<<"Unghiul in grade";
    cin>>a;
    cout<<"Masa";
    cin>>m;
    cout<<"Coef";
    cin>>u;
a=3.14*a/180;
frecare(Ff,m,u,a);
cout<<Ff+m*10*sin(a);
}

luni, 7 februarie 2011 by DlMuresan
Categories: , , | Leave a comment