-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathlistashell2.cpp
106 lines (100 loc) · 1.86 KB
/
listashell2.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
#include<bits/stdc++.h>
using namespace std;
struct alunos
{
string nome;
double n1,n2,n3;
double media;
bool aprovado;
};
vector<alunos>v;
void ordena(int tip)
{
alunos ch;
int pu=1;
while(pu<v.size())
{
pu=3*pu+1;
}
while(pu>1)
{
pu/=3;
for(int i=pu;i<v.size();i++)
{
ch=v[i];
int j=i-pu;
if(tip==1)
{
while(j>=0 && ch.media<v[j].media)
{
v[j+pu]=v[j];
j-=pu;
}
}
else if(tip==2)
{
while(j>=0 && ch.n1>v[j].n1)
{
v[j+pu]=v[j];
j-=pu;
}
}
else if(tip==3)
{
while(j>=0 && ch.nome<v[j].nome)
{
v[j+pu]=v[j];
j-=pu;
}
}
v[j+pu]=ch;
}
}
}
int main()
{
for(int i=0;i<8;i++)
{
string nome;
double n1,n2,n3;
double media;
bool aprovado=false;
printf("\nNome: ");
getline(cin,nome);
printf("\nNota 1(0-10): ");
while(scanf("%lf",&n1),n1<0 || n1>10)printf("\nNota 1(0-10): ");
printf("\nNota 2(0-10): ");
while(scanf("%lf",&n2),n2<0 || n2>10)printf("\nNota 2(0-10): ");
printf("\nNota 3(0-10): ");
while(scanf("%lf",&n3),n3<0 || n3>10)printf("\nNota 3(0-10): ");
media=((n1*2+n2*3+n3*4)/9.0);
if(media>=7.0)aprovado=true;
v.push_back({nome,n1,n2,n3,media,aprovado});
getchar();
}
printf("Alunos ordenados pela media ponderada de suas notas\n");
ordena(1);
for(int i=0;i<v.size();i++)
{
cout << "Nome: " << v[i].nome << endl;
printf("Media: %.2lf\n\n",v[i].media);
}
printf("Alunos ordenados da melhor nota da primeira prova ate a pior nota\n");
ordena(2);
for(int i=0;i<v.size();i++)
{
cout << "Nome: " << v[i].nome << endl;
printf("Nota da primeira prova: %lf\n\n",v[i].n1);
}
printf("Alunos aprovados\n");
ordena(3);
for(int i=0;i<v.size();i++)
{
if(v[i].aprovado==true)
{
cout << "Nome: " << v[i].nome << endl;
printf("Media %.2lf\n\n",v[i].media);
}
}
return 0;
}