Вы находитесь на странице: 1из 3

#include

#include
#include
#include

<iostream> //para usar cin e cout


<fstream> //para usar ifstream e ofstream
<cstdlib> //para usar o system
<cstring> //para usar strcpy, strcat

using namespace std; //para usar cin e cout


struct Aluno{ //criando o novo tipo de dados: Aluno
int RA;
float pontos;
}alunos[100]; //um vetor global para guardar at 100 Alunos
//variveis globais (todas as funes enxergam)
int qtd = 0; //varivel para armazenar a quantidade de alunos atual no vetor
int arqNum = 1; //varivel para guardar qual arquivo est sendo lido no momento
float pontos; //varivel para guardar qual a pontuao no momento
ifstream arquivo; //varivel para abrir um arquivo fsico
int getPos(int ra) //procura e retorna a posio do RA no vetor se ele j existir, seno
retorna -1
{
int pos = -1;
for (int i = 0; i < qtd; i++)
{
if (alunos[i].RA == ra)
{
pos = i;
break;
}
}
return pos;
}
void leArquivo(char nome[]) //l para o vetor os dados de um arquivo passado por p
armetro, ex.: "pontos1.txt"
{
char linha[50];
int ra;
float floatVal;
int pos = 0;
while (arquivo.getline(linha,50)) //at terminar o arquivo
{
if (strlen(linha) >= 5) //se for um RA
{
ra = atoi(linha); //converte o valor para inteiro
pos = getPos(ra); //procura se j existe o RA no vetor
if (pos == -1) //se no existe, armazena-o numa posio nova
{
alunos[qtd].RA = ra;
alunos[qtd].pontos = pontos;
qtd++;
}
else
{
alunos[pos].pontos += pontos; //se j exite, apenas soma mais pont
os pra ele
}
}
else //se no for um RA ( uma nota, ex.: "0.5"). Atualiza o valor da nota a
tual global (pontos)

{
floatVal = atof(linha); //converte valor pra float
pontos = floatVal;
}
}
arquivo.close(); //fecha arquivo atual
}
void leArquivos() //essa funo vai ler todos os arquivos presentes na pasta, um a u
m
{
char nomeArquivo[] = "pontos"; //comeo do nome de qualquer arquivo
char extensao[] = ".txt"; //final do nome de qualquer arquivo
do
{
char num[10]; //nmero do arquivo atual comeando em "1"
strcpy(nomeArquivo,"pontos"); //reinicia o valor para as prximas passagen
s do looping
strcpy(extensao,".txt"); //reinicia o valor para as prximas passagens do
looping
strcpy(num,""); //reinicia o valor para as prximas passagens do looping
itoa(arqNum,num,10); //converte o inteiro em texto para podermos criar o
nome final do arquivo
strcat(nomeArquivo,num); //junta "pontos" com "1" por exemplo
strcat(nomeArquivo,extensao); //junta "pontos1" com ".txt" por exemplo
arqNum++; //incrementa o nmero do arquivo
arquivo.open(nomeArquivo); //tenta abrir o arquivo
if (arquivo) //se funcionou (se o arquivo existia na pasta e foi aberto
com sucesso)
{
leArquivo(nomeArquivo); //le os dados do arquivo fsico para o vetor n
a memria
}
else // se no conseguiu abrir o arquivo (provavelmente pq no existia esse
arquivo na pasta)
{
break; //sai do looping
}
}while(1); //roda o looping pra sempre at tentar abrir um arquivo que no exist
e
}
void exibeVetor() //exibe os dados do vetor na tela
{
for (int i = 0; i < qtd; i++)
{
cout << "RA " << alunos[i].RA << " --> " << alunos[i].pontos << endl;
}
}
void ordenaVetor() //ordena o vetor por ordem de RA (vc no precisa entender essa
funo inteira)
{
Aluno temp; //varivel auxiliar s pra usar na troca de um Aluno por outro
for (int i = 0; i < qtd-1; i++)
{
for (int j = 0; j < qtd-1 - i; j++)
{
if (alunos[j].RA > alunos[j+1].RA) //se aluno estiver fora de ordem,
troca!

{
temp.RA = alunos[j].RA;
temp.pontos = alunos[j].pontos;
alunos[j].RA = alunos[j+1].RA;
alunos[j].pontos = alunos[j+1].pontos;
alunos[j+1].RA = temp.RA;
alunos[j+1].pontos = temp.pontos;
}
}
}
}
void gravaArquivo() //grava dados finais num outro arquivo
{
ofstream arqFinal; //abre arquivo em branco para gravao de dados
arqFinal.open("final.txt");
for (int i = 0; i < qtd; i++)
{
arqFinal << alunos[i].RA << " " << alunos[i].pontos << endl; //insere da
dos no arquivo
}
arqFinal.close(); //fecha arquivo
}
int main() //funo principal, seu programa comea aqui
{
leArquivos(); //l cada arquivo da pasta, um a um
ordenaVetor(); //ordena os dados por RA
exibeVetor(); //exibe na tela o que ser gravado no arquivo final
gravaArquivo(); //grava dados no arquivo final
return 0; //sai do programa
}

Вам также может понравиться