Ir para conteúdo
Fórum Script Brasil
  • 0

Exercício faculdade


SocramSadD

Pergunta

Fala galera beleza?

Seguinte to com um problema com um trabalho final da materia de Algoritmos agente trabalha na linguagem C.

O enunciado do trabalho é o seguinte:

Enunciado do trabalho:

Implementar um programa em C para controle de um vestibular, utilizando a estrutura de dados lista encadeada. Considere a existência de apenas um curso. O programa deverá funcionar da seguinte forma:

• O usuário irá indicar a quantidade de alunos que irão participar do vestibular e o número de vagas disponíveis;

• Os dados dos n alunos deverão ser inseridos em um arquivo denominado “vestibular.txt”.

• O programa deverá ler do arquivo “vestibular.txt” os dados dos alunos, verificar quais são os alunos aprovados com o seguinte

critério se a nota for maior ou igual a 60 o aluno e aprovado senão reprovado e, posteriormente,

gravar em um arquivo denominado “aprovados.txt”. Verificar também quais alunos foram reprovados e, posteriormente, gravar em um

arquivo denominado “reprovados.txt”.

• Para cada aluno, informar o nome, o número de inscrição e a nota no vestibular, sendo a nota um valor entre 0 e 100, inclusive.

Até ae tudo beleza, só que to com dificuldade em terminar o programa, vo enviar o codigo do que eu fiz:

#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
#include <io.h>
#include <sys/time.h>
#include <iostream>
//using namespace std;
#define max 10

/* ========================================================================= */
typedef struct {
    int matricula;
    char nome[10];
    int nota;
    /* outros componentes */
}TipoItem;

typedef struct Celula_str {
    TipoItem Item;
    struct Celula_str *Prox;
}Celula;

typedef struct {
    Celula *Primeiro, *Ultimo;
}TipoLista;
/* ========================================================================= */
//Funcao que cria uma lista encadeada vazia
void FLVazia(TipoLista *Lista)
{
    Lista->Primeiro = new Celula[1];
    Lista->Ultimo = Lista->Primeiro;
    Lista->Primeiro->Prox = NULL;
}
/* ========================================================================= */
//Funcao que verifica se a lista esta vazia
int Vazia(TipoLista Lista)
{
    return (Lista.Primeiro == Lista.Ultimo);
}
/* ========================================================================= */
//Funcao que insere um novo item no final da lista
void InsereNoFim(TipoItem x, TipoLista *Lista)
{
    Lista->Ultimo->Prox = new Celula[1];
    Lista->Ultimo = Lista->Ultimo->Prox;
    Lista->Ultimo->Item = x;
    Lista->Ultimo->Prox = NULL;
}
/* ========================================================================= */
// Função insere um novo item entre a celula apontada por
// p e a seguinte. Supõe-se que p != NULL.
void Insere(TipoItem x, Celula *p)
{
    Celula *nova;
    nova = new Celula[1];
    nova->Item = x;
    nova->Prox = p->Prox;
    p->Prox = nova;
}
/* ========================================================================= */
// Funcao para imprimir os elementos da lista
void Imprime(TipoLista Lista) // Imprime do Aquivo
{

    if (Vazia(Lista)){
        printf("\nErro, lista esta vazia");
        return;
    }
    Celula *Aux;
    Aux = Lista.Primeiro->Prox;
    while (Aux != NULL)
    {
        FILE *p;
        p = fopen ("vestibular.txt","w");
        if (!p){
            printf ("Erro na abertura do arquivo. Fim de programa.");
            exit (1);
        }

          // Gravando em arquivo
        fprintf(p,"%d\n ",&Aux->Item.matricula);
        fprintf(p,"%c\n ",&Aux->Item.nome);
        fprintf(p,"%d\n ",&Aux->Item.nota);
        //fprintf(p,"%s\n ",&Aux->Item.situacao);
        Aux = Aux->Prox;
        fclose(p);
    }

}
/* ========================================================================== */
int main(int argc, char *argv[])
{
    TipoLista lista;
    TipoItem item;
    Celula *p;
    int i;
    int Ins; //Numero de Alunos inscritos
    int vag; //Numero de vagas do Vestibular
    FLVazia(&lista);

    printf( "\nInforme a quantidade de Inscritos: ");
    scanf("\n%d", Ins);

    p = lista.Primeiro;

    for(i = 0; i < Ins; i++){
        printf( "\n Dados do Aluno\n");

        printf("\nInforme a matricula do Aluno: ");
        scanf("\n%d", item.matricula);

        printf("\nInforme o Nome do Aluno: ");
        scanf("\n% c", item.nome);

        printf("\nInforme Nota do Aluno (0 a 100): ");
        scanf("\n%d",item.nota);

        



        p = lista.Primeiro;
    }

    Imprime(lista);
    system("pause");
    return(0);
}

Obrigado pela Ajuda

Editado por quintelab
Título alterado, removido: Ajuda com programa
Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0

Socram,

Vejo que você sabe bem da linguagem, mas está com dúvida na solução, né? Vou tentar dar umas dicas

fprintf(p,"%d\n ",&Aux->Item.matricula);
        fprintf(p,"%c\n ",&Aux->Item.nome);
        fprintf(p,"%d\n ",&Aux->Item.nota);
Nesta parte retire os barras N para que um registro fique somente em 1 linha do arquivo, deixando só o barra N final. Ficaria assim
fprintf(p,"%d ",&Aux->Item.matricula);
        fprintf(p,"%s ",&Aux->Item.nome);
        fprintf(p,"%d\n",&Aux->Item.nota);
Assim você pode depois ler linha por linha do arquivo e fazer o seguinte para recuperar os dados:
int listar()
{
    int retorno,cont=0;

   int nota = 0;
   int matricula = 0;
    char str[50];
    char nome[10];

    FILE * arq;
    if ((arq = fopen("vestibular.txt","r+b")) == NULL)
    {
                 printf(" \n Registro nãexiste !");
                 //getch();
    }

    retorno = fread(&str, sizeof(str),1,arq); // ler o primeiro registro (ou linha)

while ( retorno == 1)
{
      sscanf ( str,"%d %s %d", &matricula, nome,&nota,); // aqui coloca a mesma sequencia de quando você inseriu
      if( nota < 50 )
      {
           // Implementa para gravar dados em arquivo dos reprovados
      }
      else if( nota > 50 )
      {
           // Implementa para gravar dados em arquivo dos aprovados
      }

      retorno = fread(&str,sizeof(struct str),1,arq); // próximo registro ou linha
}

Cara acho que é isto... vai brincando aí e se der problema posta aí.

Att,

WebPantoja

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...