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

Ajuda código em C trabalho de faculdade


Beatriz Rachel

Pergunta

Olá pessoal, gostaria de tirar algumas duvidas sobre meu código.
Tenho que entregar hoje esse trabalho de estrutura de dados e estou ferrada.
Isso foi o que consegui fazer.. mas não consigo rodar.. Será que alguém tem alguma dica do que pode estar errado, ou se estou perdida mesmo e não tem mais salvação?
Quem puder ajudar eu agradeço muito!!!!
O "programa" está em (uma tentativa de) C.
Segue código:
(coloquei a especificação do trabalho no comentário)

#include <iostream>

/* run this program using the console pauser or add your own getch, system("pause") or input loop */

struct candidato
{
char inscr[10];
char nome[44];
int periodo;
char turno[3];
int posicao;
char curso[30];
};
typedef struct candidato Candidato;

struct Nolista{
char *nomearquivo[14];
struct Nolista *prox;
};

struct NolistaFiles{
FILE *arquivo;
struct Nolista *prox;
};


//Usar uma lista que contém os nomes dos arquivos a ordenar
//A cada passo do algoritmo, retirar os 7 primeiros itens da
//lista, intercalá-los, colocar o arquivo resultante no final da lista
//O algoritmo pára quando a lista tiver apenas 1 arquivo(que será o resultante)

int main(void) {
Nolista *lista_nomearquivo, *lista_nomearquivoatual;
lista_nomearquivoatual = lista_nomearquivo; //ponteiros para lista de nomes de arquivos

NolistaFiles *lista_arquivos, *lista_arquivosatual;
lista_arquivosatual = lista_arquivos; //ponteiros para lista de arquivos

//FILE *saida, *file1, *file2, *file3, *file4, *file5, *file6;
FILE *saida;
saida = fopen("candidatos.txt","a");

char nomearquivo[14]; //guarda nome de cada arquivo no while que constrói os nomes
int numeroarquivo=000; //numero do nome do arquivo que será construido no while que constrói os nomes

int totalarquivos - 68; //total de 68 arquivos
int contadorarquivos = 0; //contador de arquivos lidos
while (contadorarquivos < totalarquivos){ //enquanto ainda existir algum arquivo

//constrói lista dos nomes dos arquivos
int i = 1;
while (i <8) {
nomearquivo = strcat("candidatos.", numeroarquivo);
lista_nomearquivoatual = nomearquivo;
lista_nomearquivoatual = lista_nomearquivoatual.prox;
numeroarquivo++;
i++;
}

//abre 6 arquivos na lista de arquivos
lista_nomearquivoatual = lista_nomearquivo;
lista_arquivosatual = fopen(lista_nomearquivoatual, "r");

lista_nomearquivoatual = lista_nomearquivoatual.prox;
lista_arquivosatual = lista_arquivosatual.prox;
lista_arquivosatual = fopen(lista_nomearquivoatual, "r");

lista_nomearquivoatual = lista_nomearquivoatual.prox;
lista_arquivosatual = lista_arquivosatual.prox;
lista_arquivosatual = fopen(lista_nomearquivoatual, "r");

lista_nomearquivoatual = lista_nomearquivoatual.prox;
lista_arquivosatual = lista_arquivosatual.prox;
lista_arquivosatual = fopen(lista_nomearquivoatual, "r");

lista_nomearquivoatual = lista_nomearquivoatual.prox;
lista_arquivosatual = lista_arquivosatual.prox;
lista_arquivosatual = fopen(lista_nomearquivoatual, "r");

lista_nomearquivoatual = lista_nomearquivoatual.prox;
lista_arquivosatual = lista_arquivosatual.prox;
lista_arquivosatual = fopen(lista_nomearquivoatual, "r");

lista_arquivosatual = lista_arquivos;

while (lista_arquivosatual != NULL) { //Enquanto não chegar ao fim da lista de arquivos,
while(!feof(lista_arquivosatual.arquivo) { //enquanto não encontrar o fim do arquivo atual, ler dados de cada candidato.
Candidato candidato_lido;

fgets(candidato_lido.inscr, 10, lista_arquivosatual);
fgets(candidato_lido.nome, 44, lista_arquivosatual);
fgets(candidato_lido.periodo, 2, lista_arquivosatual);
fgets(candidato_lido.turno, 3, lista_arquivosatual);
fgets(candidato_lido.posicao, 3, lista_arquivosatual);
fgets(candidato_lido.curso, 30, lista_arquivosatual);

fprintf (saida, candidato_lido.inscr, candidato_lido.nome, candidato_lido.periodo, candidato_lido.turno, candidato_lido.posicao, candidato_lido.curso, "\n");
//escreve dados lidos no arquivo saida
}

lista_arquivosatual = lista_arquivosatual.prox; //ler próximo arquivo
}


//fecha 6 arquivos
lista_arquivosatual = lista_arquivos;
fclose(lista_arquivosatual);
lista_arquivosatual = lista_arquivosatual.prox;
fclose(lista_arquivosatual);
lista_arquivosatual = lista_arquivosatual.prox;
fclose(lista_arquivosatual);
lista_arquivosatual = lista_arquivosatual.prox;
fclose(lista_arquivosatual);
lista_arquivosatual = lista_arquivosatual.prox;
fclose(lista_arquivosatual);
lista_arquivosatual = lista_arquivosatual.prox;
fclose(lista_arquivosatual);

contadorarquivos = contadorarquivos+6; //conta +6 arquivos lidos
}

fclose(saida); //fecha arquivo de saida

system("pause");
return 0;
}

Editado por Beatriz Rachel
Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0

especificação do trabalho:

Para este trabalho considere um conjunto de arquivos de entrada binários (partições) cada um
contendo uma quantidade de registros do tipo Candidato, conforme definido a seguir, dispostos em
ordem crescente de acordo com o nome dos candidatos:
struct candidato
{
char inscr[10];
char nome[44];
int periodo;
char turno[3];
int posicao;
char curso[30];
};
typedef struct candidato Candidato;
Os arquivos de entrada estão nomeados da forma “candidatos.NNN”, onde “NNN” é uma
numeração crescente indicando a ordem de criação do arquivo, variando de 000 a 068. Estes
arquivos estão disponíveis no link:
Considerando que o sistema operacional pode manter no máximo 7 arquivos abertos
simultaneamente, implemente um programa em C que realiza a intercalação destes arquivos
empregando a estratégia de intercalação ótima. O arquivo de saída deve ser do tipo texto, conter
todos os registros ordenados de acordo com o nome do candidato e receber o nome
“candidatos.txt”. Além disso, o programa deve determinar e imprimir o tempo decorrido para a
execução da intercalação e calcular e imprimir o número de passos na etapa de intercalação.
Link para o comentário
Compartilhar em outros sites

  • 0

sou novo no forum e no ibot e toda vez que meu char vai compra pot vem um backpack junto e assim ele não da item count e eu tenho que pegar e colocar os itens na mainbp senao ele não vai pra cave mais o problema é que eu trabalho o dia todo fora e preciso deixar no bot o que eu faço ? ajudem plz

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
      152k
    • Posts
      651,8k
×
×
  • Criar Novo...