-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathatividade1.c
137 lines (117 loc) · 3.58 KB
/
atividade1.c
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
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
#include <stdio.h>
#include <stdlib.h>
// Registro que representa uma loja
struct Store {
char name[81];
char tel[15];
float tabletPrice;
};
/*
* Função que adiciona uma loja nova ao vetor
* de lojas.
* Recebe como parâmetros o vetor de lojas e
* o índice que vai controlar o número de lojas
* cadastradas
*/
void addStore(struct Store *s, int *index);
/*
* Função que remove uma loja do vetor de lojas.
* Recebe como parâmetros o vetor de lojas e
* o índice da loja que deseja excluir.
*/
void removeStore(struct Store *s, int *index);
/*
* Função que exibe o nome e o telefone das lojas
* cadastradas que tem o tablet com preço abaixo
* da média.
* Recebe como parâmetros o vetor de lojas e
* o índice
*/
void bestPrices(struct Store *s, int index);
/*
* Função auxiliar que move as lojas no vetor
* para a esquerda quando alguma é excluida
* Recebe como paramento o vetor de lojas,
* o índice da loja que será excluída e o
* índice que controla o tamanho de lojas
* cadastradas.
*/
void shiftLeft(struct Store *s, int rIndex, int *index);
/*
* Função auxiliar que retorna a média de preço
* do Tablet nas lojas cadastradas.
* Recebe como parametro o vetor de lojas e
* o índice que controla o tamanho das lojas
* cadastradas.
*/
float avgPrices(struct Store *s, int index);
int main() {
struct Store stores[15]; // Declara vetor que vai armazenar as lojas
int i = 0; // Declara índice que vai controlar o número de lojas cadastradas
char option; // Declara variável que vai guardar a opção de menu
setbuf(stdin, NULL); // Substitui o buffer de entrada por NULL
do {
// Menu de Opções para o usuário
printf("[ I ] Inserir nova loja\n");
printf("[ E ] Excluir loja cadastrada\n");
printf("[ P ] Melhores Preços\n");
printf("[ S ] Sair\n");
printf("Digite sua opção: ");
scanf(" %c", &option); // Armazena opção digitada
if (option == 'I') {
addStore(stores, &i); // Chamada da função de cadastro de nova loja
} else if (option == 'E') {
removeStore(stores, &i); // Chamada da função de remoção de loja
} else if (option == 'P') {
bestPrices(stores, i); // Chamada da função que mostra as lojas com preço abaixo da média
}
} while (option != 'S');
return 0;
}
void addStore(struct Store *s, int *index) {
if (*index < 15) {
printf("Digite o nome da loja:");
scanf("%s", s[*index].name);
printf("Digite o telefone da loja:");
scanf("%s", s[*index].tel);
printf("Digite o preço do Tablet:");
scanf("%f", &s[*index].tabletPrice);
*index = *index + 1;
} else {
printf("Já foram cadastradas 15 lojas\n");
}
}
void removeStore(struct Store *s, int *index) {
if (*index > 0) {
int removeIndex;
for (int i = 0; i < *index; i++) {
printf("Loja %d: %s\n", i + 1, s[i].name);
}
printf("Digite o número da loja que deseja excluir: ");
scanf("%d", &removeIndex);
shiftLeft(s, removeIndex-1, index);
} else {
printf("Não há lojas cadastradas!\n");
}
}
void bestPrices(struct Store *s, int index) {
for (int i = 0; i < index; i++) {
if (s[i].tabletPrice < avgPrices(s, index)) {
printf("Loja %d: %s - Tel: %s\n", i + 1, s[i].name, s[i].tel);
}
}
}
void shiftLeft(struct Store *s, int rIndex, int *index) {
for (int i = rIndex; i < (*index - 1); i++) {
s[i] = s[i+1];
}
*index = *index - 1;
}
float avgPrices(struct Store *s, int index) {
float avg = 0;
for (int i = 0; i < index; i++) {
avg = s[i].tabletPrice;
}
avg = avg / (index - 1);
return avg;
}