Enviado em 27/09/2015 - 00:45h
Tenho 2 duvidas que são a seguinte, tenho q ordenar dados que estão e um vetor de tipo struct Dados utilizando o método bolha (eu sei que ele é uma bosta), e também não estou conseguindo fazer o seguinte : em determinado ponto do código apos uma série de leituras de dados de alunos de uma turma como por exemplo nome, matricula nota, media eu tenho q pegar esses dados que estão guardados no vetor struct Dados turma[qtdeAlunos] e separa-los em 2 arquivos, Arquivo 1 contendo alunos da letra 'A' a 'N ' e no outro de 'M' a 'Z'.
#include <stdio.h>
#include <conio.h>
#include <string.h>
#define NOME_MAX 100
#define MAX_ALUNOS 120
#define MIN_ALUNOS 1
#define QTDE_NOTAS 2
#define NOTA_MIN 0
#define NOTA_MAX 10
////////STRUCTS///////////////
struct Dados
{
char nome[NOME_MAX];
float notas[QTDE_NOTAS];
int matricula;
float media;
};
/////////////////////////////////////////////
/////////////////PROTÓTIPOS///////////////////
void leValidaTexto (char *texto, char *mensagemTitulo, int tamanho, int aux);
int leValidaInt(char *titulo);
int leValidaQuantidade(char *titulo,int min, int max);
void cadastraAluno(struct Dados *turma,int qtdeAlunos);
int leValidaMatricula();
float leValidaNotas(char *titulo, float valorMin, float valorMax);
int verificaRepetido(struct Dados *turma, int qtdeAlunos);
void armazenarDados(struct Dados *turma, char * nomeArquivo1, char * nomeArquivo2, int qtdeAlunos);
/*void ordenaCadastro(struct Dados *turma, int qtdeAlunos);*/
//////////////////////////////////////////////
int main(void)
{
// Declaracoes
char nomeArquivo1[NOME_MAX];
char nomeArquivo2[NOME_MAX];
int qtdeAlunos;
//FILE *arquivo1;
//FILE *arquivo2;
FILE *erro;
int aux;
// Instrucoes
qtdeAlunos=leValidaQuantidade("Informe a quantidade de alunos da turma:",MIN_ALUNOS, MAX_ALUNOS);
struct Dados turma[qtdeAlunos];
erro=fopen("erro.txt","w");
fclose(erro);
for ( aux = 0;aux<1;aux++)
{
leValidaTexto(nomeArquivo1,"Informe o nome do arquivo n 1 :",NOME_MAX, aux);
leValidaTexto(nomeArquivo2,"Informe o nome do arquivo n 2 :",NOME_MAX, aux);
};
if(strcmp(nomeArquivo1,nomeArquivo2)==0)
{
printf("Nomes iguais");
getch();
fopen("erro.txt","a");
fprintf(erro,"Nome dos arquivos iguais, impossibilitando a criacao.");
fclose(erro);
exit(0);
};
//arquivo1=fopen(nomeArquivo1,"w");
//arquivo2=fopen(nomeArquivo2,"w");
cadastraAluno(&turma, qtdeAlunos);
armazenarDados(turma, nomeArquivo1, nomeArquivo2, qtdeAlunos);
/*ordenaCadastro(&turma,qtdeAlunos);*/
getch();
return 0;
}
//Objetivo:
//Parametros:
//Retorno:
//Objetivo: ler e Validar um Nome
//Parametros: endereço de titulo, endereco de msgErro, tamanho maximo e endereço de nome
//Retorno:
void leValidaTexto (char *texto, char *mensagemTitulo, int tamanho, int aux)
{
do{
printf("%s\n",mensagemTitulo);
fflush(stdin);
fgets(texto, tamanho, stdin);
fflush(stdin);
if(texto[strlen(texto)-1] == '\n')
{
texto[strlen(texto)-1] = '\0';
}
if(strlen(texto) == 0)
{
system("cls");
printf("Nada foi informado\n");
getch();
}
}while(strlen(texto) == 0);
system("cls");
}
//Objetivo:Ler e validar uma quantidade de alunos
//Parametros:endereço do vetor titulo, quantidade minima e maxima de alunos.
//Retorno: Quantidade de alunos válida
int leValidaQuantidade(char *titulo,int min, int max)
{
int qtde;
do{
qtde=leValidaInt(titulo);
if(qtde<min||qtde>max)
{
printf("Quantidade de alunos, invalida, informe uma quantidade na faixa: [1]..[120]");
getch();
}
system("cls");
}while(qtde<min||qtde>max);
return qtde;
}
//Objetivo: ler e validar inteiro
//Parametros: endereco de titulo
//Retorno: inteiro validado
int leValidaInt(char *titulo)
{
int ret;
int nro;
do
{
printf("%s\n",titulo);
fflush(stdin);
ret = scanf("%d",&nro);
fflush(stdin);
if(ret == 0 )
{
printf("Campo destinado para numeros inteiros, informe novamente");
getch();
}
system("cls");
}while(ret==0);
return nro;
}
//Objetivo:Cadastrar os dados dos alunos da turma
//Parametros:endereço de memória do vetor turma, quantidade de alunos
//Retorno:sem retorno
void cadastraAluno(struct Dados *turma,int qtdeAlunos)
{
int aux;
int validacao;
system("cls");
for(aux=0;aux<qtdeAlunos;aux++){
do
{
printf("Informe a matricula do aluno %d\n",aux+1);
turma[aux].matricula=leValidaMatricula();
validacao = verificaRepetido(turma,aux);
if(validacao == 1 )
{
printf("Matricula repetido informe outra novamente\n");
getch();
system("cls");
}
}while(validacao == 1);
leValidaTexto(turma->nome,"Informe o nome do estudante n :",NOME_MAX,aux);
turma[aux].notas[0]=leValidaNotas("Informe a nota 1:",NOTA_MIN,NOTA_MAX);
turma[aux].notas[1]=leValidaNotas("Informe a nota 2:",NOTA_MIN,NOTA_MAX);
turma[aux].media=(turma[aux].notas[0]+turma[aux].notas[1])/2;
}
}
void armazenarDados(struct Dados *turma,char *nomeArquivo1, char *nomeArquivo2, int qtdeAlunos) {
FILE * arquivo1;
FILE * arquivo2;
int aux;
arquivo1 = fopen(nomeArquivo1, "w+b");
arquivo2 = fopen(nomeArquivo2, "w+b");
for(aux=0;aux<qtdeAlunos;aux++){
//if(turma[aux].nome[0]>=63 && turma[aux].nome[0]<=79)
fprintf(arquivo1,"%d",turma[aux].matricula);
fprintf(arquivo1,"%20.20s",turma[aux].nome);
fprintf(arquivo1,"%20.2f",turma[aux].media);
fclose(arquivo1);
}
}
//Objetivo: Ordenar os elementos do vetor
//Parametros: endereço do vetor matricula, quantidade de alunos
//Retorno:
/*void ordenaCadastro(struct Dados *turma, int qtdeAlunos)
{
int i;
int j;
//int auxMatricula;
char auxNome[NOME_MAX];
int auxMedia;
int resultado;
for(i = qtdeAlunos-1; i >= 1; i--) {
for(j = 0; j < i; j++) {
if(strcmp(turma[j].nome, turma[i].nome) == -1) {
strcpy(auxNome, turma[j].nome);
strcpy(turma[j+1].nome, turma[j].nome);
strcpy(turma[j+1].nome, auxNome);
}
}
}
for(resultado = 0; resultado < qtdeAlunos; resultado++) {
printf("%s\n", turma[resultado].nome);
}
}*/
//Objetivo:Ler e validar uma matricula
//Parametros: endereço do vetor matricula, endereço do vetor de titulo,contador
//Retorno:
int leValidaMatricula()
{
int matricula;
do{
matricula=leValidaInt("Insira:");
}while(matricula<0||matricula>99999);
return matricula;
}
//Objetivo: Verificar numero repetido em uma matriz
//Parametros: endereço da matriz e o ultimo lido
//Retorno: 1 se repetido 0 se não repetido
int verificaRepetido(struct Dados *turma, int aux)
{
int cont;
int flag = 0;
for(cont = 0; cont < aux; cont++)
{
if(turma[aux].matricula == turma[cont].matricula)
{
flag = 1;
break;
}
}
return flag;
}
//Objetivo: ler e validar real
//Parametros: endereco de titulo, endereco de mensagem de erro , valorMin e valor Max
//Retorno: real validado
float leValidaNotas(char *titulo, float valorMin, float valorMax)
{
int ret = 0;
int flag;
float nro;
do
{
flag = 0;
printf("%s\n",titulo);
fflush(stdin);
ret = scanf("%f",&nro);
fflush(stdin);
if(ret == 0 || nro < valorMin || nro > valorMax)
{
flag = 1;
printf("ERRO, campo destinado para numeros");
getch();
}
system("cls");
}while(flag == 1);
return nro;
}
Enviar mensagem ao usuário trabalhando com as opções do php.ini
Meu Fork do Plugin de Integração do CVS para o KDevelop
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Criando uma VPC na AWS via CLI
Multifuncional HP imprime mas não digitaliza
Dica básica para escrever um Artigo.
Como Exibir Imagens Aleatórias no Neofetch para Personalizar seu Terminal
como coloco para instalar com esse erro. (13)
Alguém sabe de documentos de texto e /ou vídeo aulas de certificações ... (1)