Orar semigroup #2

Orar semigroup #2

Archive for decembrie 2010

15 decembrie

Se citeşte din fişierul "elevi.in" un număr n şi n linii de forma:
Nume Prenume Clasa Varsta MedieGenerala
a) să se afişeze elevii
b) să se afişeze elevii cu media cea mai mare
c) să se afişeze elevii ordonaţi descrescător după vârstă
d) să se afişeze elevii ordonaţi descrescător după nume şi prenume
e) să se afişeze media generală a fiecărei clase

#include<iostream>
#include<fstream>
using namespace std;
struct elev
{char nume[100],prenume[100],clasa[5];
int varsta;
float mg;};

struct medie
{char cls[100];
float nr;};

int main()

{int i,j=0,n,k,ok,r;
float p;
elev e[100],aux;
medie m[100];

ifstream f("elevi.in");
f>>n;

for(i=0;i<n;i++)
{f>>e[i].nume>>e[i].prenume>>e[i].clasa>>e[i].varsta>>e[i].mg;
cout<<e[i].nume<<" "<<e[i].prenume<<endl;}
p=0;
cout<<endl<<"Media cea mai mare"<<endl;
for(i=0;i<n;i++)
    if(e[i].mg>p)p=e[i].mg;
for(i=0;i<n;i++)
    if(e[i].mg==p)cout<<e[i].nume<<" "<<e[i].nume<<endl;
cout<<endl<<"Descrescator dupa varsta"<<endl;
for(i=0;i<n;i++)
    for(j=i+1;j<n;j++)
        if(e[i].varsta<e[j].varsta)
        {aux=e[i];e[i]=e[j];e[j]=aux;}
for(i=0;i<n;i++)
    cout<<e[i].nume<<" "<<e[i].prenume<<endl;
cout<<endl<<"Descrescator dupa nume si prenume"<<endl;
for(i=0;i<n;i++)
    for(j=i+1;j<n;j++)
        if(strcmp(e[i].nume,e[j].nume)<0)
            {aux=e[i];e[i]=e[j];e[j]=aux;}
        else if(strcmp(e[i].nume,e[j].nume)==0)
            if(strcmp(e[i].prenume,e[j].prenume)<0)
            {aux=e[i];e[i]=e[j];e[j]=aux;}
for(i=0;i<n;i++)
    cout<<e[i].nume<<" "<<e[i].prenume<<endl;

strcpy(m[0].cls,e[0].clasa);
j=1;
for(i=0;i<n;i++)
{    ok=1;
    for(k=0;k<j;k++)
        if(strcmp(e[i].clasa,m[k].cls)==0)ok=0;
          
    if(ok==1)
    {strcpy(m[j].cls,e[i].clasa);
    j++;}
}
cout<<endl<<endl;
for(i=0;i<j;i++)
    cout<<m[i].cls<<endl;

for(k=0;k<j;k++)
{    m[k].nr=0;r=0;  
    for(i=0;i<n;i++)
        if(strcmp(e[i].clasa,m[k].cls)==0)
            {m[k].nr=m[k].nr+e[i].mg;r++;}
m[k].nr=m[k].nr/r;
}
cout<<endl<<endl;
for(k=0;k<j;k++)
    cout<<m[k].cls<<" "<<m[k].nr<<endl;

}
Fişierul
10
Muresan Mihai XA 16 10
Vanea Sergiu XA 16 6.76
Dodel Aristotel XB 18 9.14
Martinica Cristian XC 15 7.87
Florian Walter XD 56 10
Niculescu Claudiu XA 34 6.18
Jaan Kronkamp XC 42 7.86
Diego Armando XD 45 6.88
Victor Ciutacu XB 40 7.66
Mircea Badea XA 45 9.29

miercuri, 15 decembrie 2010 by DlMuresan
Categories: , , , | Leave a comment

13 decembrie - triunghi echilateral, cadrane

1) Se citesc coordonatele a 3 puncte din plan. Sa se verifice daca punctele sunt varfurile unui triunghi isoscel.

#include<iostream>
using namespace std;
struct punct
{float x,y;};

int main ()
{ float p,q,r;
punct A,B,C;

cin>>A.x>>A.y;
cin>>B.x>>B.y;
cin>>C.x>>C.y;

p=sqrtl((A.x-B.x)*(A.x-B.x)+(A.y-B.y)*(A.y-B.y));
q=sqrtl((A.x-C.x)*(A.x-C.x)+(A.y-C.y)*(A.y-C.y));
r=sqrtl((B.x-C.x)*(B.x-C.x)+(B.y-C.y)*(B.y-C.y));

if(p==q || p==r || q==r)
    cout<<"DA";
else cout<<"NU";
}
2. Se citesc coordonatele a n puncte in plan. Sa se afiseze numarul de puncte din fiecare cadran.
#include<iostream>
using namespace std;
struct punct
{float x,y;};

int main ()
{ int n,c1=0,c2=0,c3=0,c4=0,c5=0,i;
punct a[100];
cin>>n;

for(i=0;i<n;i++)
{    cin>>a[i].x>>a[i].y;
if(a[i].x>0 && a[i].y>0)c1++;
if(a[i].x<0 && a[i].y>0)c2++;
if(a[i].x<0 && a[i].y<0)c3++;
if(a[i].x>0 && a[i].y<0)c4++;
if(a[i].x==0 || a[i].y==0)c5++;
cout<<endl;}

cout<<c1<<endl<<c2<<endl<<c3<<endl<<c4<<endl<<"Pe axe: "<<c5;
}

luni, 13 decembrie 2010 by DlMuresan
Categories: , | Leave a comment

10 decembrie - suma fractiilor, distanta dintre puncte, aria dreptunghiului

1) Se citeşte din fişier un număr n şi n linii, reprezentând datele a n elevi(nume, prenume, clasa, varsta, numar de note, note). Să se afişeze numele elevilor şi media lor în ordine descrescătoare e mediei.

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

struct elev
{char nume[20],prenume[20],clasa[5];
unsigned int varsta, note[10],l;
float medie;
};

int main(){
    int n,i,j,s,k;
    ifstream f("date");
    elev e[100],aux;
    f>>n;

    for(i=0;i<n;i++){
        f>>e[i].nume;
        f>>e[i].prenume;
        f>>e[i].clasa;
        f>>e[i].varsta;
        f>>e[i].l;
        for(j=0;j<e[i].l;j++)
            f>>e[i].note[j];
    }
   
    for(i=0;i<n;i++){s=0;
        for(j=0;j<e[i].l;j++)
            s=s+e[i].note[j];
        e[i].medie=(float)s/e[i].l;
    }

for(i=0;i<n;i++)
    for(j=i+1;j<n;j++)
        if(e[i].medie<e[j].medie)
        {aux=e[i];
        e[i]=e[j];
        e[j]=aux;
        }

for(i=0;i<n;i++)
    cout<<e[i].nume<<" "<<e[i].prenume<<"  "<<e[i].medie<<endl;

return 0;
}

fisierul
4
Muresan Mihai XA 16 4 10 10 1 1
Vanea Sergiu XA 15 4 8 4 10 7
Dodel Radu XA 16 4 6 6 1 10
Tothazan Septimiu XA 15 5 5 5 5 5 5
2) Se citesc de la tastatură într-o structură numitorul şi număratorul a două fracţii. Să se compare fracţiile şi să se afişeze suma lor.
#include<iostream>
using namespace std;
struct fractie
{int x,y;};
int main()
{
fractie A,B,C;
cout<<"Numaratorul primei fractii"<<endl;
cin>>A.x;
cout<<"Numitorul primei fractii"<<endl;
cin>>A.y;
cout<<"Numaratorul celei de a doua fractii"<<endl;
cin>>B.x;
cout<<"Numaratorul celei de a doua fractii"<<endl;
cin>>B.y;
cout<<"Care este suma?"<<endl;
if(A.y==B.y)
{    C.x=A.x+B.x;
    C.y=A.y;
    cout<<C.x<<"/"<<C.y<<endl;
   
}
else {
C.x=A.x*B.y+B.x*A.y;
C.y=A.y*B.y;
cout<<C.x<<"/"<<C.y<<endl;
}
A.x=A.x*B.y;
B.x=B.x*A.y;
cout<<"Care este mai mare?"<<endl;
if(A.x>B.x)
    cout<<"Prima("<<A.x/B.y<<"/"<<A.y<<")";
else if(B.x>A.x)
    cout<<"A doua("<<B.x/A.y<<"/"<<B.y<<")";
else cout<<"=";
cout<<endl<<"Bine, Mihai! Ai un plus!";
}
3) Se citesc de la tastatură coordonatele a doua puncte în plan: x1,y1,x2,y2. Să se afişeze distanţa dintre puncte. Să se folosească o structură pentru fiecare punct.
#include<iostream>
#include<math.h>
using namespace std;
struct punct
{int x,y;};
int main ()
{ punct A,B;
cin>>A.x>>A.y;
cin>>B.x>>B.y;
cout<<sqrt((A.x-B.x)*(A.x-B.x)+(A.y-B.y)*(A.y-B.y));
}
4) Să se definească structura dreptunghi cu câmpurile Lungime, lăţime şi Suprafaţă. Să se citească de la tastatură lungimile şi lăţimile a două dreptunghiuri şi să se afişeze care are aria mai mare.
#include<iostream>
#include<math.h>
using namespace std;
struct dreptunghi
{int L,l,S;};
int main ()
{dreptunghi a,b;
cout<<"Primul"<<endl;
cin>>a.L>>a.l;
cout<<"Al doilea"<<endl;
cin>>b.L>>b.l;
a.S=a.L*a.l;
b.S=b.L*b.l;
if(a.S>b.S)
    cout<<"Primul ocupa o arie gigantica fata de primul";
else if (b.S>a.S)
    cout<<"Al doilea ocupa o arie gigantica fata de primul";
else cout<<"=";
}

joi, 9 decembrie 2010 by DlMuresan
Categories: , , , , , , | Leave a comment

9 decembrie - structuri de date

#include<iostream>
using namespace std;
int main()
{
struct elev

{char nume[20],prenume[20];
unsigned int varsta, noteinfo[10];
char clasa[5];
};

elev e1,e2,*e3;// se comporta ca si o variabila
//
e1.varsta=18;
cout<<e1.varsta<<endl;
strcpy(e1.nume,"Marin"); // NU se poate atribuit e1.nume="Marin"
strcpy(e2.nume,"Dodel");
e1=e2; // se copiaza toate campurile din e2 in e1
e3=&e1;
cout<<(*e3).nume<<endl;

elev corig={"Vanea","Sergiu",5,{3,3,4},"XA"};
cout<<corig.noteinfo[0]<<endl; // trebuie parcurs sirul de intreg pentru a se afisa toate notele
//Se citeste dintr-un fisier text un numar n si n linii. Pe fiecare linie se afla campurile de mai sus
//Sa se afiseze toti elevii in ordine descrescatoare dupa media notelor.
}

by DlMuresan
Categories: , , , , , , , , | 2 comments

Problema 6 - 3+1 variante de rezolvare

Varianta cu 26 de case-uri

#include<iostream>
using namespace std;
int main()
{char a[100],*p,b[100]={0};
cin.get(a,100);
for(p=a;*p;p++)
    switch(*p)
{case 'A' : strcat(b,"11");break;
case 'B' : strcat(b,"12");break;
case 'C' : strcat(b,"13");break;
case 'D' : strcat(b,"14");break;
case 'E' : strcat(b,"15");break;
case 'F' : strcat(b,"21");break;
case 'G' : strcat(b,"22");break;
case 'H' : strcat(b,"23");break;
case 'I' : strcat(b,"24");break;
case 'J' : strcat(b,"24");break;
case 'K' : strcat(b,"25");break;
case 'L' : strcat(b,"31");break;
case 'M' : strcat(b,"32");break;
case 'N' : strcat(b,"33");break;
case 'O' : strcat(b,"34");break;
case 'P' : strcat(b,"35");break;
case 'Q' : strcat(b,"41");break;
case 'R' : strcat(b,"42");break;
case 'S' : strcat(b,"43");break;
case 'T' : strcat(b,"44");break;
case 'U' : strcat(b,"45");break;
case 'V' : strcat(b,"51");break;
case 'W' : strcat(b,"52");break;
case 'X' : strcat(b,"53");break;
case 'Y' : strcat(b,"54");break;
case 'Z' : strcat(b,"55");break;}
cout<<b;
}
Varianta cu o matrice de 26 de linii
#include<iostream>
using namespace std;
int main()
{char t[26][3]={"11","12","13","14","15","21","22","23","24","24","25","31","32","33","34","35","41","42","43","44","45","51","52","53","54","55"};
char b[100],a[100],*p;
cin>>a;
for(p=a;*p;p++)
    strcat(b,t[*p-'A']);
cout<<b;
}
Varianta mai elegantă(provided by Boss)
#include<iostream>
using namespace std;
int main()
{char l[][10]={"aa","aABCDE","aFGHiK","aLMNOP","aQRSTU","aVWXYZ"},c[100];
int x[100]={0},i,j=0,k1,k2;
cin>>c;
for(i=0;i<strlen(c);i++)
{
    if(strchr("IJ",c[i]))
    {    x[j]=2;
        j++;
        x[j]=4;
        j++;
    }
  
    for(k1=1;k1<=5;k1++)
    {
        for(k2=1;k2<=5;k2++)
        {
            if(c[i]==l[k1][k2])
            {
                x[j]=k1;
                j++;
                x[j]=k2;
                j++;
            }
        }
    }
}
for(i=0;i<j;i++)
    cout<<x[i];
}
Varianta şi mai elegantă(provided by DlMureşan)
#include<iostream>
using namespace std;
int main()
{char a[100],*p;
int i=0,b[100]={0},j;
cin.get(a,100);
strupr(a);
for(p=a;*p;p++)
{    if(*p<='I')
    {    b[i]=(*p-'A')/5+1;i++;
        b[i]=(*p-'A')%5+1;i++;
    }
    if(*p>'I')
    {    b[i]=(*p-'A'-1)/5+1;i++;
        b[i]=(*p-'A'-1)%5+1;i++;
    }
}
for(j=0;j<i;j++)
    cout<<b[j];
}

vineri, 3 decembrie 2010 by DlMuresan
Categories: , , , , , , , | Leave a comment

3 decembrie

Se citeste un cuvant de maxim 20 de litere mici. Sa se afiseze cuvantul dupa eliminarea primei si ultimei vocale

#include<iostream>
using namespace std;
int main()
{int i,j;
char *p,a[100],b[100];
cin>>a;
for(p=a;*p;p++)
    if(strchr("aeiou",*p))
    {    strcpy(p,p+1);
        break;
    }
   
for(p=a+strlen(a)-1;*p;p--)
    if(strchr("aeiou",*p))
    {strcpy(p,p+1);
    break;}
cout<<a;
}
Se citesc de la tastatura n cuvinte de maxim 30 de caractere. Sa se afiseze numarul de cuvinte care contine decat vocale.
#include<iostream>
using namespace std;
int main()
{int j=0,i,n,ok;
char *p,a[30];
cin>>n;
for(i=0;i<n;i++)
{    cin>>a;
ok=1;
for(p=a;*p;p++)
    if(strchr("aeiou",*p)==0)
        ok=0;
if(ok==1)
    j++;}
cout<<endl<<j;
}

by DlMuresan
Categories: , , , | Leave a comment

2 decembrie - funcţiile atoi, atof, itoa

Funcţii de conversie între şiruri de caractere şi numere

1) Fie declaraţia char a[100];
atoi(a); - converteşte şirul de caractere în număr întreg(returnează o valoare întreagă);
ex: char a[]="123";
int nr;
nr=atoi(a)*2;
cout<<nr; // se va afişa 246
Dacă a[]="123mmm" se va afişa 246
Daca a[]="aaa" se va fişa 0

2) Se citesc de la tastatură 2 numere, în două variabile de tip şir de caractere. Să se afişeze suma acestora, dacă lungimea fiecărui număr este de maxim 9 caractere. În cazul în care unul din numere are mai mult de 9 caractere, să se afişeze un mesaj.
#include<iostream>
using namespace std;
int main()
{int s;
char a[100],b[100];
cin>>a;
cin>>b;
if(strlen(a)>9 || strlen(b)>9)
    {cout<<"Mesaj";return 0;}
s=atoi(a)+atoi(b);
cout<<s;
}
3) Fie declaraţia float n; char a[100];
atof(a); - converteşte şirul de caractere la număr real(returnează o valoare de tip real)
ex: floar n; char a[100];
cin>>a; // 123.221abc
n=atof(a);
cout<<n; // se afişează 123.221

4) Fie declaraţia int x, baza; char a[100];
itoa(x,a,baza); - converteşte un întreg la şir de caractere. Conversia se face în baza precizată. Returnează pointer la şir(deci o valoare de tip şir de caractere).
ex: int x=1234;char a[10];
itoa(x,a,10);
cout<<a<<" "<<strlen(a); / se afişează 1235 4
sau
int y=7; char a[100];
itoa(y,a,2);
cout<<a; // se afişează 111
Se citeşte un număr întreg. Să se transforme în baza 2 şi să se afişeze.
#include<iostream>
using namespace std;
int main()
{int n;
char a[100];
cin>>n;
itoa(n,a,2);
cout<<a;
}

5) Primele n numere naturale se lipesc şi formează un număr foarte mare. Pentru n citit de la tastatură, să se afişeze: a) lungimea numărului obţinut; b) cifra sau cifrele din mijloc.
#include<iostream>
using namespace std;
int main()
{char a[100]={0},b[100];
int i,n;
cin>>n;
for(i=1;i<=n;i++)
{   itoa(i,b,10);
    strcat(a,b);
}
cout<<"Numarul foarte mare "<<a<<endl;
cout<<"Lungimea "<<strlen(a)<<endl;
if(strlen(a)%2==0)
cout<<"Mijloc "<<a[strlen(a)/2-1]<<a[strlen(a)/2]<<endl;
else cout<<"Mijloc "<<a[strlen(a)/2];
}
6) Se citeşte de la tastatură o propoziţie. Să se codifice, înlocuind fiecare literă cu numărul liniei şi coloanei corespunzătoare.(Litera A se înlocuieşte cu caractere 11, B cu 12. Şirul MARTI devine codificat 3211424424)

joi, 2 decembrie 2010 by DlMuresan
Categories: , , , | 1 comment