-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathprodutos.c
56 lines (50 loc) · 1.53 KB
/
produtos.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
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "produtos.h"
Produto* lerProdutos(const char* nome_do_arquivo, int* n) {
FILE *arquivo = fopen(nome_do_arquivo, "r");
if (arquivo == NULL) {
printf("Erro ao abrir o arquivo");
return NULL;
}
int capacidade = 50;
Produto *produtos = (Produto*) malloc(capacidade * sizeof(Produto));
if (produtos == NULL) {
printf("Erro ao alocar memoria");
fclose(arquivo);
return NULL;
}
*n = 0;
while (fscanf(arquivo, "%s %f", produtos[*n].nome, &produtos[*n].preco) != EOF) {
(*n)++;
if (*n >= capacidade) {
capacidade *= 2;
produtos = (Produto*) realloc(produtos, capacidade * sizeof(Produto));
if (produtos == NULL) {
printf("Erro ao realocar memoria");
fclose(arquivo);
return NULL;
}
}
}
fclose(arquivo);
return produtos;
}
void exibirProdutos(const Produto* produtos, int n) {
for (int i = 0; i < n; i++) {
printf("%s - R$ %.2f\n", produtos[i].nome, produtos[i].preco);
}
}
void ordenarProdutosPorPreco(Produto* produtos, int n) {
for (int gap = n / 2; gap > 0; gap /= 2) {
for (int i = gap; i < n; i++) {
Produto temp = produtos[i];
int j;
for (j = i; j >= gap && produtos[j - gap].preco > temp.preco; j -= gap) {
produtos[j] = produtos[j - gap];
}
produtos[j] = temp;
}
}
}