Jump to content

Search the Community

Showing results for tags 'ficheiros'.



More search options

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Forums

  • Bem-vindos ao Portugal-a-Programar
    • Sugestões, Críticas ou Dúvidas relativas ao P@P
    • Acerca do P@P
  • Comunidade a Trabalhar
    • Wiki P@P
    • Apresentação de Projectos de Programação
    • Downloads
  • Revista PROGRAMAR
    • Revista PROGRAMAR
  • Desenvolvimento Geral
    • C
    • C++
    • Java
    • Haskell
    • Pascal
    • Python
    • Bases de Dados
    • Visual Basic Clássico
    • Visual Basic for Applications (VBA)
    • Dispositivos Móveis
    • Outras Linguagens
  • Desenvolvimento Orientado para Web
    • PHP
    • HTML
    • CSS
    • Javascript
    • Outras Linguagens de WebDevelopment
    • Desenvolvimento Web
  • Desenvolvimento .NET
    • C#
    • Visual Basic .NET
    • ASP.NET
    • WPF & SilverLight
  • Software e Sistemas Operativos
    • Software de Produtividade
    • Sistemas Operativos
    • Apresentação de Software
  • Informática
    • Interfaces Visuais
    • Computação Gráfica
    • Algoritmia e Lógica
    • Segurança e Redes
    • Hardware
    • Electrónica
    • Automação Industrial
    • Matemática
    • Dúvidas e Discussão de Programação
    • Notícias de Tecnologia
  • Outras Áreas
    • Dúvidas Gerais
    • Discussão Geral
    • Eventos
    • Anúncios de Emprego
    • Tutoriais
    • Snippets / Armazém de Código
  • Arquivo Morto
    • Projectos Descontinuados
    • System Empires

Blogs

  • Blog dos Moderadores
  • Eventos
  • Notícias de Tecnologia
  • Blog do Staff
  • Revista PROGRAMAR
  • Projectos
  • Wiki

Categories

  • Revista PROGRAMAR
  • Tutoriais
  • Textos Académicos
  • Exercícios Académicos
    • Exercícios c/ Solução
    • Exercícios s/ Solução
  • Bibliotecas e Aplicações
  • Outros

Find results in...

Find results that contain...


Date Created

  • Start

    End


Last Updated

  • Start

    End


Filter by number of...

Found 127 results

  1. Faustino

    Erro na leitura de ficheiros

    Fiz este programa em pascal: Program Pzim ; type pessoa=record nome:string; idade:integer; end; var f:file of pessoa; p:pessoa; x:integer; Begin assign(f,'pessoa.dat'); {$I-} reset(f); if ioresult<>0 then rewrite(f); {$I+} repeat write('Insira o nome: '); readln(p.nome); if upcase(p.nome)<>'FIM' then begin write('Idade: '); readln(p.idade); write(f,p); end; writeln; until upcase(p.nome)='FIM'; close(f); reset(f); clrscr; gotoxy(1,1); write('Nome'); gotoxy(35,1); write('Idade'); x:=3; while not eof(f) do begin read(f,p); gotoxy(1,x); write(p.nome); gotoxy(35,x); write(p.idade); x:=x+1; end; close(f); End. Entretanto quando é para listar os dados da lista, alem de o primeiro de sobrepor ao anterior, ele apenas mostra 5 dos dados presentes no ficheiro. Conseguem ajudar? Feito no Pascalzim 6.0.3
  2. Márcio Pinho

    Escolher ficheiro e gravar

    Boas malta, Queria que na minha aplicação, o utilizador possa escolher um ficheiro (mais propriamente, imagens), e que este não só aparecesse na tela como ficasse gravado numa base de dados (por enquanto local) já criada. Obviamente que por enquanto só posso testar num browser devido à base de dados. Obrigado
  3. Boas, Estou a desenvolver um programa em C para um trabalho da faculdade e tenho uma dúvida no acesso aos ficheiros. Eu tenho um ficheiro de texto com pilotos (e suas definições) na seguinte forma: Paulo Andrade 2 23 12 1995 76 0.5 0 Faisca 3 1 1 1980 50 9.5 1 Diana Alves Pombo 4 1 10 1990 55 4.5 0 Ana Luisa Freitas 7 12 7 1976 68 1.0 3 Ricardo Cardoso 8 4 2 1999 65 0.2 0 Os valores apresentados por baixo dos nomes correspondem, respetivamente ao ID, data de nascimento (dd mm aaaa), peso, experiencia, impedimento. O valor "impedimento" corresponde ao número de corridas que um determinado piloto está impedido de correr. P.ex. O primeiro piloto está autorizado a correr e o quarto está impedido durante 3 corridas. O meu objetivo é abrir o ficheiro e contar o nº de pilotos que estão autorizados a correr, acedendo apenas ao campo "impedimento", mas não sei se isso é possível. Tenho algum código que fiz mas penso que o que está a fazer é simplesmente contar o número de pilotos que estão no ficheiro: typedef struct dados_pilotos { char nome[100]; int id; data nasc; // struct para data de nascimento do piloto float peso; float exp; // exp >= 0.0 int impedimento; // lesão ou penalização } piloto; int conta_pilotos() { FILE *f; piloto *v; int tam_fich, cont; f = fopen("pilotos.txt", "rt"); // abre o ficheiro e verifica se deu erro if(f == NULL) { printf("Erro no acesso ao ficheiro.\n"); return 0; } else // verifica se o ficheiro está vazio { fseek(f, 0, SEEK_END); tam_fich = ftell(f); if(tam_fich == 0) { printf("O ficheiro esta vazio\n\n"); return 0; } } fseek(f, 0, SEEK_SET); v = malloc(sizeof(piloto)); // aloca memoria e verifica se deu erro if(v == NULL) { printf("Erro na alocacao de memoria.\n"); return 0; } do { if(fscanf(f, "%49[^\n] %d %d %d %d %f %f %d\n", v->nome, &v->id, &v->nasc.dia, // verifica se tem 8 argumentos &v->nasc.mes, &v->nasc.ano, &v->peso, &v->exp, &v->impedimento) != 8) { printf("Formato invalido\n\n"); return 0; } else // aqui verifica quantos pilotos estão impedidos de correr { if(v->impedimento == 0) cont++; } }while(!feof(f)); return cont; }
  4. Como posso mover o ponteiro do arquivo em Pascal??
  5. whoami-r

    Converter um ficheiro clq para txt em C

    Boas pessoal, sei que o tópico que vou criar pode não ser muito bem explícito mas vou tentar explicar da melhor maneira o que tenho em mente para fazer, e gostava que me pudessem ajudar. Eu tenho um ficheiro que é apresentado desta forma: c FILE: MANN_a9.clq.b // linhas começadas com c são apenas comentários c c By: Carlo Mannino c p edge 45 918 // indica que é um grafo com 45 vertices e 918 linhas e 2 1 // aresta que liga os vertices 1 e 2 e 3 1 // aresta que liga os vertices 1 e 3 e 3 2 // ... e 4 1 e 4 2 ... e 45 39 e 45 40 e 45 41 e 45 42 // ultima aresta que une 42 e 45 E depois tenho outro em txt deste genero 100 20 0 1 0 1 0 0 0 1 0 0 0 0 1 1 0 1 0 0 1 0 1 0 0 1 1 0 1 0 0 1 0 0 1 0 1 0 1 0 0 1 0 0 0 1 0 0 0 1 0 0 1 0 1 1 0 0 0 1 0 0 1 1 1 0 0 0 0 1 1 1 0 1 0 0 0 1 1 0 0 1 0 1 0 0 0 0 0 0 1 0 0 1 0 0 1 1 0 1 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 1 1 0 0 1 0 0 0 0 0 1 0 1 0 0 0 0 0 1 0 1 1 1 1 0 1 1 0 0 1 0 1 1 0 0 0 1 0 0 0 0 0 1 0 0 0 1 1 0 0 1 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 1 0 1 1 1 0 0 1 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 1 0 0 0 0 1 1 0 0 0 1 0 0 0 1 1 1 0 0 0 0 0 1 1 1 0 0 0 0 0 0 1 0 1 0 0 0 0 1 1 0 0 1 0 1 0 0 1 0 1 0 0 1 1 0 0 0 0 1 0 0 0 0 1 0 0 1 0 0 0 0 0 0 1 0 0 0 0 1 0 1 0 1 0 0 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 1 0 0 0 0 1 0 0 0 1 1 1 0 0 0 0 0 0 0 1 0 1 1 1 0 0 0 0 0 1 0 0 0 0 0 1 0 1 0 0 0 0 1 1 0 0 0 1 0 0 0 1 1 0 1 0 1 0 1 0 1 1 0 1 1 0 0 0 0 0 0 0 0 0 0 1 0 Em que aresta corresponde a 2 posições na matriz. Por exemplo, a aresta "e 2 1" vai marcar com '1' em p[2][6] e p[6][2]. A minha dúvida é como é que consigo ler o ficheiro clq e colocar no txt os 1's e 0's correspondentes a cada vertice. p.s. O numero 20 antes da matriz corresponde ao numero de vertices. Ou seja, no ficheiro clq em cima criaria uma matriz 45x45 O que tenho até agora é apenas isto: #include <stdio.h> #include <stdlib.h> int main(int argc, char** argv) { FILE *f1, *f2; char filename[20], c; f1 = fopen("brock200_1.clq", "r"); if(f1 == NULL) { printf("Erro ao abrir o ficheiro"); exit(0); } printf("Introduza o nome do ficheiro para escrita: "); scanf("%s", filename); f2 = fopen(filename, "w"); if(f2 == NULL) { printf("Impossivel abrir o ficheiro"); exit(0); } c = fgetc(f1); while (c != EOF) { fputc(c, f2); c = fgetc(f1); } printf("Conteudo copiado para %s\n", filename); fclose(f1); fclose(f2); return 0; } Espero que me possam ajudar. Obrigado
  6. whoami-r

    Copiar dados de ficheiro bin para txt

    Boas pessoal, Tenho de fazer uma função que copie, de um ficheiro binário para um de texto, os "id's" de vários clientes correspondentes à venda de bilhetes de uma determinada sessão de cinema. Ainda não criei código, mas pensei em 2 formas de fazer: 1. Abrir o ficheiro binário, copiar 1 a um 1, colocar num vetor de inteiros e de seguida colocá-lo no ficheiro de texto. 2. Manter os 2 ficheiros abertos (não sei se é possível) e copiar os "id's" diretamente para o ficheiro de texto. Se puderem ajudar a escolher qual das técnicas é mais eficaz Obrigado
  7. miguel__1

    Apagar linha de ficheiro txt

    Boas, estou com um problema que não estou a conseguir resolver. Sem nada anteriomente definido e apenas recebendo o ficheiro e o nome a remover tenho que eliminar toda essa linha do ficheiro txt. Como poderia resolver? O Ficheiro é o seguinte: Comfortably Numb;Pink Floyd;6:53;1979 Money For Nothing;Dire Straits;4:59;1985 By The Way;Red Hot Chili Peppers;3:37;2002 The Pretender;Foo Fighters;4:30;2007 Kashmir;Led Zeppelin;8:31;1975 Desde já obrigado.
  8. whoami-r

    Listar a partir de ficheiro txt

    Boas pessoal, no programa que estou a tentar fazer já consigo registar um cliente e escrever os dados num ficheiro de texto, mas quando tenciono listar todos os clientes ou algum específico através do NIF, dá um erro e não apresenta nada do que é suposto... se alguém me puder ajudar #include <stdio.h> #include <stdlib.h> #include <string.h> // biblioteca de funções de strings #include <ctype.h> // para usar o toupper() #include "structs.h" // ficheiro onde estão as structs typedef struct { char nome[50], sexo[30], username[30]; int idade, nif, id; } CLIENTE; void syst() { // função para parar o sistema system("pause"); system("cls"); } FILE* abrir_ficheiro(char caminho[], char modo) { // função para abrir o ficheiro de texto FILE *file; switch (toupper(modo)) { // coloca o modo em letras maiusculas case 'W': file = fopen(caminho, "w"); // w - write break; case 'R': file = fopen(caminho, "r"); // r - read break; case 'A': file = fopen(caminho, "a"); // a - append break; } if (file == NULL) { puts("Falha na abertura do ficheiro!"); exit(0); } return file; } void guardar_ficheiro(CLIENTE cliente) { // função para guardar dados no ficheiro FILE *file; file = abrir_ficheiro("clientes.txt", 'a'); // abre o ficheiro para acrescentar fprintf(file, "%s %d %s %d\n", cliente.nome, cliente.idade, cliente.sexo, cliente.nif); // escreve no ficheiro o nome, idade, sexo e nif fclose(file); printf("Registo efetuado com sucesso!\n"); syst(); } void mostrar() { // função para mostrar um cliente específico CLIENTE cliente; FILE *file; file = abrir_ficheiro("clientes.txt", 'r'); while (!feof(file)) { //enquanto não chegar ao fim do ficheiro fscanf(file, "%s %d %s %d\n", cliente.nome, cliente.idade, cliente.sexo, cliente.nif); // lê do ficheiro o nome, idade, sexo e nif printf("CLIENTE: %s\nIDADE: %d\nSEXO: %s\nNIF: %d", cliente.nome, cliente.idade, cliente.sexo, cliente.nif); } fclose(file); syst(); } void mostrar_especifico() { CLIENTE cliente; FILE *file; char username[30]; int opcao, verif_nif, cont = 0; printf("Informe o NIF do cliente: "); fflush(stdin); scanf(" %d", &verif_nif); file = abrir_ficheiro("clientes.txt", 'r'); while(!feof(file)) { fscanf(file, "%s %d %s %d\n", cliente.nome, cliente.idade, cliente.sexo, cliente.nif); if(cliente.nif == verif_nif) { printf("CLIENTE: %s\nIDADE: %d\nSEXO: %s\nNIF: %d", cliente.nome, cliente.idade, cliente.sexo, cliente.nif); cont++; } } fclose(file); if(cont == 0); printf("\nO NIF informado nao esta registado"); syst(); } int menu() { int opcao; do { puts("MENU: "); puts("1 - REGISTAR CLIENTE"); puts("2 - LISTAR TODOS OS CLIENTES"); puts("3 - LISTAR CLIENTE ESPECIFICO"); puts("0 - SAIR"); printf("OPCAO: "); scanf("%d", &opcao); if (opcao < 0 || opcao > 3) { puts("\nOPCAO INVALIDA, TENTE NOVAMENTE!"); syst(); } } while (opcao < 0 || opcao > 3); system("cls"); return opcao; } void registar(CLIENTE *cliente) { int opcao; do { printf("NOME: "); fflush(stdin); gets(cliente->nome); do { printf("SEXO: [1] - Masculino\t[2] - Feminino\n"); printf("Opcao: "); scanf("%d", &opcao); if (opcao == 1) { strcpy(cliente->sexo, "Masculino"); } else { if (opcao == 2) { strcpy(cliente->sexo, "Feminino"); } else { printf("Opcao Invalida!\n"); } } } while (opcao != 1 && opcao != 2); printf("Idade: "); scanf("%d", &cliente->idade); fflush(stdin); printf("NIF: "); scanf("%d", &cliente->nif); printf("\nConfirma todas as informacoes?\n[1] Sim\t[2] Nao\n"); printf("Opcao: "); scanf("%d", &opcao); if (opcao == 2) syst(); }while(opcao != 1); syst(); } void main() { CLIENTE cliente; while(1) { switch(menu()) { case 1: registar(&cliente); guardar_ficheiro(cliente); break; case 2: mostrar(); break; case 3: mostrar_especifico(); break; default: puts("Finalizando o programa..."); exit(0); } } }
  9. whoami-r

    Guardar dados em ficheiro txt

    Boas pessoal, estou a tentar criar uma função que guarde os dados de um cliente (neste momento apenas o nome), mas sempre que executo o programa os dados ficam guardados em binário. se me poderem ajudar a descobrir onde estou a errar... deixo a função que fiz em baixo void registar_cliente() { FILE *arq_clientes = fopen("clientes.txt", "w"); if (arq_clientes == NULL) { printf("\nErro ao abrir o ficheiro!\n"); exit(1); // aborta o programa } int cont_bytes = 0; //o ID do cliente deve ser gerado automaticamente // cont irá guardar o número total de bytes fseek(arq_clientes, 0, SEEK_END); // o ponteiro aponta para o final do ficheiro cont_bytes = ftell(arq_clientes); // ftell devolve a posiçao atual em bytes t_cliente cliente; if(cont_bytes == 0) { cliente.id = 1; } else { t_cliente ultimo_cliente; fseek(arq_clientes, cont_bytes - sizeof (t_cliente), SEEK_SET); //cont_bytes - sizeof(t_cliente) serve para posicionar // para que possamos chegar ao último cliente registado fread(&ultimo_cliente, sizeof (t_cliente), 1, arq_clientes); cliente.id = ultimo_cliente.id + 1; // o ID do cliente é o ID do último cliente acrescido em 1 } printf("\nDigite o nome do cliente: "); scanf("%99[^\n]%*c", cliente.nome); // ^\n indica para pegar até a quebra de linha (enter) fflush(stdin); fseek(arq_clientes, 0, SEEK_END); fwrite(&cliente, sizeof (t_cliente), 1, arq_clientes); // escreve no arquivo fclose(arq_clientes); printf("\nCliente \"%s\" cadastrado com sucesso!\n", cliente.nome); printf("\nPressione <Enter> para continuar..."); scanf("%*c"); fflush(stdin); }
  10. LadyCiaradh

    Extrair dados de ficheiro TXT

    Eu tenho esta função que lê cada linha de um ficheiro e atribui a uma posição de um array (que eu tenho definido na classe) mas aparece-me um erro ao executar no i++; (linha 9) que diz isto: "System.NullReferenceException: 'A referência de objecto não foi definida como uma instância de um objecto.'" int GetData() { int i = 0; StreamReader sr = new StreamReader("pw.txt"); string line; while ((line = sr.ReadLine()) != null) { majorData[i] = line; i++; } sr.Close(); return i; } Alguém sabe como resolvo?
  11. davidcbbc

    Ler linhas de ficheiro TXT

    Olá , tenho andado a programar umas coisas em C e precisava de um código que me lê-se coisas do ficheiro txt ignorado outras: por exemplo , tenho isto no ficheiro txt: nome: teste1 local: porto Queria dar output só de "teste1" e "porto" No entanto , eu arranjei um código que me fornece essa informação: int main(){ char linha[1020]; char teste1[1020]; char teste2[1020]; FILE *fp; fp= fopen("cinemas.txt", "r"); fgets(linha,sizeof(linha),fp); linha[strlen(linha)-1]=0; strcpy(teste1, &linha[6]); fgets(linha,sizeof(linha),fp); linha[strlen(linha)-1]=0; strcpy(teste2, &linha[7]); printf("%s\n",teste1); printf("%s",teste2); fclose(fp); return 0; } Mas não percebo o porquê dele funcionar! supostamente o sizeof() contava o número de bytes que a memória estava a guardar para a string . Se alguém me esclarecesse detalhadamente este código ficava imensamente grato!
  12. Boas malta, estou com uns problemas para passar a informação de um ficheiro txt para uma lista ligada. O ficheiro de texto está assim: nome Nascimento 2 consultas tipo cnsulta - data - medico tipo cnsulta - data - medico nome Nascimento 0 consultas e a minha estrutura está: typedef struct{ int dia, mes, ano; } info; struct consulta { char nome_medico[50]; char tipo_consulta[20]; char especialidade[50]; int dia; int mes; int ano; pConsulta prox; }; struct paciente { char nome[50]; //char apelido[50]; //char num_consultas; int num_consultas; // data de nascimento info data_nascimento; // historico consultas pConsulta lista; pPaciente prox; }; Agora o meu problema é passar a infomação para a lista ligada.
  13. Boa tarde! Estou a fazer um trabalho em linguagem `C`, onde tenho de mostrar na consola a informação guardada num ficheiro de texto, mas é obrigatório passar toda a informação para `vetores` dinâmicos de estruturas. Eu penso já ter conseguido feito alguma coisa, mas quando tento guardar a especialidade numa `variável`, o ficheiro acaba por guardar as palavras seguintes. Ex: O `v->nome` está a guardar "Joao Silva" e o `v->especialidade` está a guardar "Neurologia 9.30 - 17.00" e eu pretendo guardar apenas "Neurologia". Alguém me consegue ajudar? struct hora_entrada{int horas, minutos;}; struct hora_saida{int horas, minutos;}; typedef struct medico med, *p_med; struct medico{ char nome[ST_TAM]; char especialidade[ST_TAM]; struct hora_entrada h_e; struct hora_saida h_s; }; int le_dados (){ FILE *f, *g; med *v; f=fopen("medico.txt", "rt"); g=fopen("paciente.txt", "rt"); if (f==NULL || g==NULL){ printf("Erro no acesso ao ficheiro.\n"); return 0; } v=malloc(sizeof(med)); if (v==NULL){ printf("Erro na alocaçao de memoria.\n"); return 0; } while ((fscanf(f,"%49[^\n] %49[^\n]",v->nome, v->especialidade))==2 ) printf("%s\n%s",v->nome, v->especialidade); fclose(f); }
  14. Boa noite! Estou a fazer um trabalho em ´C´ onde tenho de procurar médicos por especialidade, ou seja, pergunto ao utilizador o nome da especialidade a procurar e faço um ´printf´ dos médicos dessa especialidade. Eu tentei fazer isso mas dá-me sempre "Especialidade inexistente." mesmo procurando por uma especialidade que sei que está no ficheiro. Alguém me consegue ajudar? Até agora o meu código é este: struct hora_entrada{int horas, minutos;}; struct hora_saida{int horas, minutos;}; typedef struct medico med, *p_med; struct medico{ char nome[ST_TAM]; char especialidade[ST_TAM]; struct hora_entrada h_e; struct hora_saida h_s; p_med prox; }; struct data_nasc{int dia, mes, ano;}; struct historico{ char grau[ST_TAM]; int d_dia; int d_mes; int d_ano; char nome[ST_TAM]; }; typedef struct paciente pac, *p_pac; struct paciente{ char nome[ST_TAM]; struct data_nasc d_n; int consultas; struct historico h; p_pac prox; }; //------------------------------------------------------------------ //Listagem completa de medicos e pacientes int le_dados (){ FILE *f, *g; med *v; pac *a; int i; f=fopen("medico.txt", "rt"); g=fopen("paciente.txt", "rt"); if (f==NULL || g==NULL){ printf("Erro no acesso ao ficheiro.\n"); return 0; } v=malloc(sizeof(med)); a=malloc(sizeof(pac)); if (v==NULL || a==NULL){ printf("Erro na alocaçao de memoria.\n"); return 0; } med *listaMedicos = v; //a lista começa no v, o primeiro médico med *antMed = NULL; printf("\nMEDICOS\n"); while (fscanf(f,"%49[^\n] %49s %d.%d - %d.%d\n",v->nome, v->especialidade, &v->h_e.horas, &v->h_e.minutos, &v->h_s.horas, &v->h_s.minutos )==6 ){ printf("%s\n%s %d.%d %d.%d\n",v->nome, v->especialidade, v->h_e.horas, v->h_e.minutos, v->h_s.horas, v->h_s.minutos); v->prox = malloc(sizeof(med)); //aloca um nó para o próximo médico antMed = v; //ponteiro para o médico antes do fim v=v->prox; } if (antMed == NULL){ //não deu para ler nenhum médico, libertar o único nó alocado free(listaMedicos); listaMedicos = NULL; //por o a apontar para NULL para a impressão funcionar } else{ free(antMed->prox); //libertar o último médico alocado que não foi utilizado antMed->prox = NULL; //por a apontar para NULL para a impressão funcionar } pac *listaPacientes = a; //a lista começa no a, o primeiro paciente pac *antPac = NULL; printf("\n\nPACIENTES\n"); while (fscanf(g,"%49[^\n] %d-%d-%d %d",a->nome, &a->d_n.dia, &a->d_n.mes, &a->d_n.ano, &a->consultas)==5){ printf("Nome: %s\nData de nascimento: %d-%d-%d\nConsultas: %d\n",a->nome, a->d_n.dia, a->d_n.mes, a->d_n.ano, a->consultas); for(i=0;i<a->consultas;i++){ fscanf(g,"%s - %d/%d/%d - %[^\n]\n",a->h.grau, &a->h.d_dia, &a->h.d_mes, &a->h.d_ano, &a->h.nome); printf("\t%s %d/%d/%d %s\n",a->h.grau, a->h.d_dia, a->h.d_mes, a->h.d_ano, a->h.nome); } a->prox = malloc(sizeof(pac)); //alocar um nó para o próximo paciente antPac = a; //ponteiro para o paciente antes do fim a = a->prox; } if (antPac == NULL){ //não deu para ler nenhum paciente, libertar o único nó alocado free(listaPacientes); listaPacientes = NULL; //por a apontar para NULL para a impressão funcionar } else{ free(antPac->prox); //libertar o ultimo paciente alocado que não foi utilizado antPac->prox = NULL; //por a apontar para NULL para a impressão funcionar } fclose(f); } //Pesquisar médicos por especialidade int pesquisa (p_med v){ char *esp; printf("Insira uma especialidade a pesquisar:\n"); scanf("%s", &esp); while (v!=NULL && v->especialidade!=esp) v=v->prox; if (v!=NULL) printf("%s\n",v->nome); else printf("Especialidade inixestente.\n"); }
  15. 9,825 downloads

    Instituto Politécnico de Viana do Castelo Escola Superior de Técnologia e Gestão Algoritmos e Estruturas de Dados Autor: Filipe Marques Conteúdo Cap. 2 - Introdução Cap. 3 - Tipos de Dados Básicos Cap. 4 - Testes e Condições Cap. 5 - Ciclos Cap. 6 - Arrays Cap. 7 - Strings Cap. 8 - Estruturas Cap. 9 - Funções Cap. 10 - Parâmetros das Funções Cap. 13 - Apontadores Cap. 17 - Ficheiros
  16. joanacs

    Problema com fscanf

    Boa noite! Estou com uma dúvida no meu segundo `fscanf` da parte dos PACIENTES, porque queria guardar a data que aparece no ficheiro de texto (o dia em a->h.d_dia, o mes em a->h.d_mes e o ano em a->h.d_ano), mas está-me a aparecer números aleatórios na consola. Alguém sabe como me ajudar? P.S: Na parte dos médicos também era suposto aparecer alguma coisa, mas não consigo achar o erro. Se alguém souber, também agradeço. struct hora_entrada{int horas, minutos;}; struct hora_saida{int horas, minutos;}; typedef struct medico med, *p_med; struct medico{ char nome[ST_TAM]; char especialidade[ST_TAM]; struct hora_entrada h_e; struct hora_saida h_s; p_med prox; }; struct data_nasc{int dia, mes, ano;}; struct historico{ char grau[ST_TAM]; int d_dia; int d_mes; int d_ano; char nome[ST_TAM]; }; typedef struct paciente pac, *p_pac; struct paciente{ char nome[ST_TAM]; struct data_nasc d_n; int consultas; struct historico h; p_pac prox; }; int le_dados (){ FILE *f, *g; med *v; pac *a; int i; f=fopen("medico.txt", "rt"); g=fopen("paciente.txt", "rt"); if (f==NULL || g==NULL){ printf("Erro no acesso ao ficheiro.\n"); return 0; } v=malloc(sizeof(med)); a=malloc(sizeof(pac)); if (v==NULL || a==NULL){ printf("Erro na alocaçao de memoria.\n"); return 0; } printf("\nMEDICOS\n"); while (fscanf(f,"%49[^\n] %49s %d:%d-%d:%d",v->nome, v->especialidade, &v->h_e.horas, &v->h_e.minutos, &v->h_s.horas, &v->h_s.minutos )==6 ) printf("%s %s %d %d %d %d\n",v->nome, v->especialidade, &v->h_e.horas, &v->h_e.minutos, &v->h_s.horas, &v->h_s.minutos); printf("\n\nPACIENTES\n"); while (fscanf(g,"%49[^\n] %d-%d-%d %d",a->nome, &a->d_n.dia, &a->d_n.mes, &a->d_n.ano, &a->consultas)==5) printf("Nome: %s\nData de nascimento: %d-%d-%d\nConsultas: %d\n",a->nome, a->d_n.dia, a->d_n.mes, a->d_n.ano, a->consultas); for(i=0;i<a->consultas;i++){ fscanf(g,"%s %d %d %d",a->h.grau, &a->h.d_dia, &a->h.d_mes, &a->h.d_ano); printf("\t%s %d/%d/%d",a->h.grau, a->h.d_dia, a->h.d_mes, a->h.d_ano); } fclose(f); }
  17. Olá! Vim pedir ajuda relativamente um jogo da forca, o enunciado deste exercício pede que tenha um ficheiro disponível com diversas palavras que o jogador possa adicionar, alterar e visualizar a partir desse ficheiro e outra parte evidentemente que é para jogar, mas visto que não estou a entender como poderei fazer a parte do sorteio da palavra o jogo não corre na execução. Aqui fica a minha tentativa resolução. Provavelmente o código terá outros erros... Ainda estou em fase de experimentação . void jogar(char ficheiro[]){ FILE *f; jogador_t temp; char letra[5],jogador[500]; char pal [60]; int qtd=0; int tentativas=5,pontos=0,vidas=0,confirmacao,palavrascertas=0,sessao=0,j; f=fopen(ficheiro,"r"); if (f==NULL){ printf("Erro ao abrir o ficheiro. Tente novamente!\n\n"); } printf("\n Insira o nome do jogador: "); scanf("%s",jogador); srand(time(NULL)); while(!feof(f)) { fread(&temp,sizeof(temp),1,f); qtd++; } fclose(f); pal=rand()%1; tentativas=strlen(pal); vidas=tentativas-1; while (vidas < tentativas){ // enquanto as vidas forem inferiores ao comprimento da palavra(tentativas) --> jogo corre sessao++; printf("\n\nDe momento, esta na %iª jogada e tem %i pontos. \n Tem %i palavras certas.",sessao,pontos,palavrascertas); //inf. para o jogador printf("\nInsira uma letra: "); scanf("%s",letra); for(j=0;j<tentativas;j++){ confirmacao=0; if (letra[0]==pal[tentativas]){ // se a letra for igual alguam das letras das palvras pontos++; //adiona uma ponto confirmacao++; // adiciona se for igual a letra algumas das letras fda palavra em jogo caso contrário fica com 0 } } if (confirmacao==0){ //caso não tenha sido confirmado,logo a letra não seja igual -> jogador perde vidas--; //retira uma vida ao jogador if (vidas==0){ //caso as vidas sejam 0 == 0 , termina o jogo printf("GAME OVER! \n A palavra seria %s.\n",pal); // jogador é derrotado } else{ printf("A letra esta errada! Ainda tens %i vidas.\n"); // jogador falaha tentativa } } else { if (pontos==tentativas){ //caso os pontos que sido iguais às tentativas (por cada letra da palavra em jogo) --> jogador vence printf("PARABENS! A palavra e: %s .",pal); palavrascertas++; //conta palavra acertada jogarnov(jogador,palavrascertas,sessao,pontos); // mensagem de fim do jogo }else{ printf("A letra esta correta."); // letra está corrta e prosegue --> jogador certou letra } } } }
  18. _covinhas_

    Jogo da "Forca"

    #include <stdio.h> #include<stdlib.h> #include<string.h> #include<time.h> #include <ctype.h> #define N 500 #define PAL 100 typedef struct jogador_s { char palavra[300]; struct jogador_s *seg; }jogador_t; jogador_t *insere_lista(jogador_t contem,jogador_t *p){ jogador_t *aux,*aux1; // 2 ponteiros auxiliares aux=p; //por inicio ou à cabeça if(p==NULL){ // Se não existir nada na lista, insere dados p=(jogador_t*) malloc(sizeof(jogador_t)); // aloca na memória *p=contem; //aquilo que estiver no ponteiro armaneza p->seg=NULL; // aponta para NULL return p; } while (aux->seg!=NULL) { // se não tiver vazia, procura por "espaço" vazio aux=aux->seg; } //faz a função anterior aux1=(jogador_t *)malloc(sizeof(jogador_t)); // aloca na memória *aux1=contem; aux->seg=aux1; aux1->seg=NULL; return p; } jogador_t *pede_dados(jogador_t *p){ jogador_t novo; printf("Inserir palavra: "); scanf("%s",novo.palavra); // pede os dados e irá à funçao da insere_lista p=insere_lista(novo,p); printf("Foi adicionado com sucesso!\n\n"); } jogador_t *alterar(jogador_t *p){ jogador_t novo,velho; jogador_t*aux; // PONTEIRO AUXULIAR int cont=0; aux=p; do{ cont=0; p=aux; printf("Introduza a palavra que pretende alterar:"); scanf("%s",novo.palavra); // se a lista não tiver vazia irá verificar se existe algum número na lista while(p!=NULL){ if (strcmp(p->palavra,velho.palavra)){ // verifica se exista cont++; // caso exista -> contabiliza } p=p->seg; //aponta para próximo } if(cont==0){ printf("Palavra não existe!\n" ); // caso não exista, diz que não existe o nº inventário } } while( cont!=1); p=aux; printf("Insira a palavra nova: "); scanf("%s",novo.palavra); // pede os novos dados while(p!=NULL){ // se a lista não tiver vazia, copia os dados novos ou substitui os anteriores if(strcmp(p->palavra,novo.palavra)){ strcpy(p->palavra,novo.palavra); // copia a palavra nova } p=p->seg; // ponta para o próximo } p=aux; printf("Alterado com sucesso!\n"); return p; } jogador_t mostra(jogador_t *p){ if (p==NULL){ printf("Lista está vazia!\n"); exit(-1);// como ponteiro de p == NULL , logo a lista está vazia } do{ printf("\n %s \n",p->palavra); p=p->seg; // mostra até sempre encontrar um elemento, caso contrário p == NULL pará de mostrar } while(p!=NULL); } jogador_t *le_ficheiro(jogador_t *p,char ficheiro[]){ jogador_t existe; FILE *f; f=fopen(ficheiro,"r+b"); if(f==NULL){ printf("Erro ao abrir o ficheiro,tente novamente!\n\n"); } while(fread(&existe,1,sizeof(jogador_t),f)>0){ p=insere_lista(existe,p); } return p; fclose(f); } jogador_t guardar(jogador_t *p,char ficheiro[]){ FILE *f; f=fopen(ficheiro,"w+b"); if(f==NULL){ printf("Erro ao abrir o ficheiro,tente novamente!\n\n"); } while(p!=NULL){ fwrite(p,1,sizeof(jogador_t),f); p=p->seg; // se for diferente de NULL, passa para o seguinte vai sempre guardando ou escrevendo no documento } fclose(f); } void jogar(char ficheiro[]){ FILE *f; char letra[5],jogador[500],selecionada[800], palavras[PAL][50],espaco[20],c,letra1 = '\n'; int tentativas,pontos=0,vidas=7,confirmacao=0,palavrascertas=0,sessao=0,j=0,nome=0; int gera; int pal=0; srand(time(NULL)); f=fopen(ficheiro,"r+b"); if (f==NULL){ printf("Erro ao abrir o ficheiro! \n"); } while(fread (&c, sizeof(char), 1, f)) { if(c == letra1) { pal++; } } gera=rand()%10; //gere uma palvra strcpy(selecionada,palavras[gera]); // printf("A palavra seleciona e %s\n",selecionada); if (nome==0){ printf("\n Insira o nome do jogador: "); scanf("%s",jogador); //pede o nome nome++; //incrementa um vez ,pois assim sempre que reinciar o jogo não pergunta o nome novamente } tentativas = strlen(selecionada); // tamanho da palavra selcionada while (vidas > 0){ // enquanto as vidas forem inferiores ao comprimento da palavra(tentativas) --> jogo corre sessao++; printf("\n\nDe momento, esta na %iª jogada e tem %i pontos. \n Tem %i palavras certas.",sessao,pontos,palavrascertas); //inf. para o jogador for(j=0;j<strlen(selecionada);j++){ espaco[j]='_'; // conta os espaco da palvra selcionada } printf("\n %s ",espaco); // coloca o espaço da palvr a a ser adivinha printf("\nInsira uma letra: "); scanf("%s",letra); for(j=0;j<tentativas;j++){ if (letra[0]==selecionada[tentativas]){ // se a letra for igual alguam das letras das palvras espaco[j]=selecionada[j]; pontos++; //adiciona uma ponto confirmacao++; // adiciona se for igual a letra algumas das letras fda palavra em jogo caso contrário fica com 0 } } if (confirmacao==0){ //caso não tenha sido confirmado,logo a letra não seja igual -> jogador perde vidas--; //retira uma vida ao jogador if (vidas==0){ //caso as vidas sejam 0 == 0 , termina o jogo printf("GAME OVER! \n A palavra seria %s.\n",selecionada); // jogador é derrotado } else{ printf("A letra esta errada! Ainda tens %i vidas.\n"); // jogador falha uma tentativa } } else { if (pontos==tentativas){ //caso os pontos que sido iguais às tentativas (por cada letra da palavra em jogo) --> jogador vence printf("PARABENS! A palavra e: %s .",selecionada); palavrascertas++; //conta palavra acertada //jogarnov(jogador,palavrascertas,sessao,pontos); // mensagem de fim do jogo }else{ printf("A letra esta correta."); // letra está corrta e prosegue --> jogador certou letra } } } fclose(f); } void jogarnov(char jogador[600],int palavrascertas,int sessao,int pontos) { int sessao1=1,op; char ficheiro[] = "filmes.dat"; printf("\n\n\nTERMINOU O SEU JOGO!\n Deseja jogar novamente? Sim [1] ou Nao [2].\n"); scanf("%i",&op); if (op==1){ //caso o jogador queira jogar novamente printf("---------------------------------------\n"); printf("||| JOGADOR * %s |||\n",jogador); printf("||| PONTUACAO * %i |||\n",pontos); printf("||| PALVRAS CERTAS * %i |||\n",palavrascertas); printf("||| JOGADAS * %i |||\n",sessao); printf("||| SESSAO * %i |||\n",sessao1); printf("---------------------------------------\n"); jogar(ficheiro); } sessao1++; if(op==2) { // termina o jogo e encerra o programa printf("---------------------------------------\n"); printf("||| JOGADOR * %s |||\n",jogador); printf("||| PONTUACAO * %i |||\n",pontos); printf("||| PALVRAS CERTAS * %i |||\n",palavrascertas); printf("||| JOGADAS * %i |||\n",sessao); printf("||| SESSAO * %i |||\n",sessao1); printf("---------------------------------------\n\n"); exit(-1); } } int main (){ char ficheiro[] = "filmes.dat"; jogador_t *p = NULL; int op,op1; do{ p=le_ficheiro(p,ficheiro); printf(" ================================== \n"); printf(" || Menu do Jogo da Forca || \n"); printf(" ----------------------------------\n"); printf(" || 1. Dicionario || \n"); printf(" || 2.Jogar || \n"); printf(" ================================== \n"); printf("Escolha a sua opcao:"); scanf("%i",&op); if (op==1){ do{ p=le_ficheiro(p,ficheiro); printf(" \n\n*** DICIONARIO *** \n"); printf("1. Ver palavras. \n"); printf("2. Adicionar palavras.\n"); printf("3. Alterar palavras.\n"); printf("4. Sair. \n"); printf("Escolha a sua opcao:"); scanf("%i",&op1); switch(op1){ case 1: mostra(p); break; case 2: p=pede_dados(p); guardar(p,ficheiro); break; case 3: p=alterar(p); guardar(p,ficheiro); break; case 4: return 0; break; } }while (op1!=4); } if (op==2){ printf("Bem-vindo ao Jogo da Forca! \n"); jogar(ficheiro); } }while (op!=3); } Olá! Vim pedir ajuda relativamente um jogo da forca, o enunciado deste exercício pede que tenha um ficheiro disponível com diversas palavras que o jogador possa adicionar, alterar e visualizar a partir desse ficheiro e outra parte evidentemente que é para jogar, mas visto que não estou a entender como poderei fazer a parte do sorteio da palavra o jogo não corre na execução. Aqui fica a minha tentativa resolução. Provavelmente o código terá outros erros... Ainda estou em fase de experimentação .
  19. Ola Muito Boa Noite eu tenho que fazer um projeto em pascal e no projeto diz que devo calcular e apresentar a média das idades no conjunto das pessoas no mesmo ficheiro e eu não sei como fazer,Podem me ajudar?Agradecia Muito!Obrigada O código ta Assim: program registo_de_pessoas; uses crt; type registo=record nome:String; idade:integer; end; type data=record dia,mes,ano:integer; end; var fich1:file of registo; pessoa:registo; data_nas:data; n,c:Integer; function existeFicheiro:Boolean; Begin assign(fich1,'RegistoPessoas.dat'); {$I-} reset(fich1);Close(fich1); {$I+} existeFicheiro:=(IoResult=0); end; procedure registo_de_pessoas; Begin clrscr; writeln('Registar Pessoas'); if existeFicheiro then reset(fich1) else rewrite(fich1); write('Quantos Registo vai Introduzir?'); readln(n); for c:=1 to n do Begin write('Nome:'); readln(pessoa.nome); write('Idade'); readln(pessoa.idade); writeln('Data de Nascimento'); write('Dia:'); readln(data_nas.dia); write('Mes:'); readln(data_nas.mes); write('Ano:'); readln(data_nas.ano); seek(fich1,Filesize(fich1)); write(fich1,pessoa); end; close(fich1); end; Begin Writeln('Bem Vindo ao Registos de Pessoas'); registo_de_pessoas; readln; end.
  20. Olá, Estou a construir um programa no VB.Net que tem como objetivo criar um ficheiro de texto chamado "Agenda.txt". Este programa inclui várias opções/botões na interface gráfica como: INSERIR (isto é, inserir o nome e o telefone da pessoa), LISTAR (após gravar os dados no ficheiro, esta opção mostra esses dados numa DataGrid), APAGAR, PROCURAR (procurar o nome no ficheiro através de uma sugestão de um nome pelo utilizador), e por fim GRAVAR E SAIR. Ora, o problema é que na opção PROCURAR, eu quero exibir uma mensagem no ecrã a dizer "O nome introduzido não foi encontrado na lista" quando o utilizador tenta procurar por um nome que deseja e esse nome não se encontra na lista. Quando eu procuro por um nome não existente na lista, essa mensagem aparece-me muitas vezes - o nº de vezes que me aparece é exatamente o mesmo nº de linhas que o ficheiro tem (essas linhas contêm cada nome que já foi inserido + uma linha em branco), ou seja a mensagem vai aparecendo enquanto não encontrar o nome na lista. Eu tive sucesso em fazer o inverso - procurar um nome que esteja na lista, e felizmente a MessageBox aparece-me apenas uma vez (quando efetivamente encontra o nome na agenda). O código é: Dim i As Integer Dim nome As String nome = InputBox("Qual o nome a procurar") For i = 0 To Form3.DataGridView1.RowCount - 1 If nome = Form3.DataGridView1.Rows(i).Cells(0).Value Then Form3.DataGridView1.Rows(i).Selected = True MessageBox.Show("O nome introduzido foi encontrado na lista.") End If Next Se alguém pudesse me dar uma dica como é que eu devia incluir a messagem de "O nome não foi encontrado" apenas uma vez, seria ótimo!
  21. David Fernandes

    Eliminar texto de um ficheiro (dúvida)

    Boa tarde. Encontro-me a realizar um trabalho para a faculdade em que consiste no desenvolvimento de um sistema de controlo de um supermercado. A linguagem utilizada é C. Acontece que uma (das várias) funcionalidades pretendidas com este trabalho, é a remoção de um produto x de um ficheiro. E após compilar e executar o programa obtenho o seguinte erro: "Falha de segmentação". Muito obrigado a quem poder ajudar. DF void del_prod(produto prod[], int a) { //função para eliminar um produto FILE *fx; FILE *ft; fx=fopen(FX,"r"); ft=fopen(FT,"w"); int i, comp; char temp[50], x[50], s[50]; printf("Indique o código do produto que quer eliminar: \n"); scanf("%s", s); while((fgets(temp, 51, fx))!=NULL) { for(i=0; temp[i]!=";"; i++) { x[i]=temp[i]; } comp=strcmp(x,s); if(comp!=0) { fputs(temp, ft); } x[0] = '\0'; } fclose(fx); fclose(ft); remove("supermercado.txt"); rename("temporario.txt", "supermercado.txt"); }
  22. Marco Verdial

    fgets para estrutura (dados no ficheiro)

    Boa tarde a todos, estou aqui com uma dúvida e se alguém me pudesse ajudar agradecia No meu problema eu tenho um ficheiro (simples) em que tenho lá algo como: 7987 Luís Miguel 9879 João Freitas Numa linha tenho o nr do aluno, seguidamente tenho o nr do aluno. (são só umas 10 linhas) Eu estou a tentar preencher um vetor de structs com esses dados (para cada aluno). Eu crio o apontador *aluno que é do tipo alunos (a tal estrutura). Este código é em linux que está a ser trabalhado então dai os argv e argc. Basicamente temos de executar o programa na consola e dar logo os "dados". Por exemplo: ./turma 13 alunos.txt o 13 é o nr de linhas que eu vou ler do ficheiro e o alunos.txt é o ficheiro onde estão os dados. A minha dúvida é no fgest. Eu inicialmente tinha usado fscanf só que estava-me a dar problemas porque estava a ignorar o espaço entre o nome. Por exemplo, em vez de ficar guardado o nome Luís Miguel ficava só Luís... O código como está não funciona bem, alguém me pode ajudar pf? Peço desculpa se não expliquei bem, mas qualquer questão digam ai que eu tento explicar #include <stdio.h> #include <stdlib.h> #include <string.h> #include "funcoes.h" int main (int argc, char *argv[]) { FILE *fp; int i,size; alunos *aluno; // (anteriormente) Vetor criado conforme o tamanho que o utilizador quer size=atoi(argv[1]); aluno=(alunos*)calloc(size, sizeof(alunos)); fp=fopen(argv[2],"r"); for (i=0;i<size;i++) { fscanf(fp,"%d", &(aluno[i].numero)); fgets(aluno[i].nome,sizeof aluno[i].nome,fp); } imprimir(aluno,size); // dar print do vetor fclose(fp); // fechar o ficheiro que abri para leitura }
  23. CláudiaMagalhães

    Matrizes Vetores e Ficheiros em Java

    Boa tarde Pessoal, Será que me sabem indicar algum local onde tenha trabalhos feitos com matrizes e ficheiros em java? Exemplo de um output com ficheiro e matrizes: Classificações de Frequência Número Nome Nota de Frequência Resultado 1999999 Ana Gomes Silva 18.0 Admitido a Exame 1999888 Manuel Castro 7.0 SM Obrigada.
  24. johnny244

    Ficheiro binário

    Boa tarde, sei que ja existe bastantes topicos sobre o assunto, mas nao consegui esclarecer a minha duvida na mesma. Deixo abaixo o código do respectivo programa. #include <stdio.h> #include <stdlib.h> #define LIM 31 #define TAMUC 60 #define MAXNOME 30 typedef struct { int numAluno; char nome[MAXNOME]; int notafinal; } T_ALUNO; FILE *f; //Prototipo das funçoes int MenuOpcoes(void); T_ALUNO ler_dados_estudante(void); void mostra_Dados_Alunos(T_ALUNO aluno); void mostrar_dados_estudantes(T_ALUNO vetorAlunos[TAMUC], int numAlunosInseridos); int Alterar_nota_Aluno(T_ALUNO vetorAlunos[TAMUC], int numAlunosInseridos); void mostrar_estatisticas(T_ALUNO vetorAlunos[TAMUC], int numAlunosInseridos); void gravar_ficheiro(T_ALUNO vetorAlunos[TAMUC], int numAlunosInseridos); int AbrirFich(int numAlunosInseridos); void Mostrar(T_ALUNO vetorAlunos[TAMUC], int numAlunosInseridos); int ler_ficheiro(T_ALUNO vetorAlunos[TAMUC], int numAlunosInseridos); void main(void) { T_ALUNO vetorAlunos[TAMUC]; int numAlunosInseridos = 0, opcao, numAlunoAmostrar, i; do { opcao = MenuOpcoes(); switch(opcao) { case 1: vetorAlunos[numAlunosInseridos] = ler_dados_estudante(); numAlunosInseridos++; system("cls"); break; case 2: mostrar_dados_estudantes(vetorAlunos, numAlunosInseridos); system("pause"); system("cls"); break; case 3: numAlunosInseridos = Alterar_nota_Aluno(vetorAlunos, numAlunosInseridos); system("pause"); system("cls"); break; case 4: mostrar_estatisticas(vetorAlunos, numAlunosInseridos); system("pause"); system("cls"); break; case 5: gravar_ficheiro(vetorAlunos, numAlunosInseridos); system("pause"); system("cls"); break; case 6: ler_ficheiro(vetorAlunos, numAlunosInseridos); system("pause"); system("cls"); break; } } while(opcao != 0); return 0; } T_ALUNO ler_dados_estudante(void) { T_ALUNO novoAluno; printf("Num. aluno: "); scanf(" %d", &novoAluno.numAluno); printf("Nome: "); scanf(" %[^\n]s", novoAluno.nome); do { printf("Nota Final: "); scanf("%d", &novoAluno.notafinal); if (novoAluno.notafinal < -1 || novoAluno.notafinal > 20) printf("\n\nNota invalida.\n"); } while (novoAluno.notafinal < -1 || novoAluno.notafinal > 20); return novoAluno; } void mostrar_dados_estudantes(T_ALUNO vetorAlunos[TAMUC], int numAlunosInseridos) { int i; for(i=0; i<numAlunosInseridos; i++) { mostra_Dados_Alunos(vetorAlunos[i]); } } void mostra_Dados_Alunos(T_ALUNO aluno) { printf("Numero Aluno: %d \n Nome do Aluno: %s \n Nota Final: %d \n\n", aluno.numAluno, aluno.nome, aluno.notafinal); } int Alterar_nota_Aluno(T_ALUNO vetorAlunos[TAMUC], int numAlunosInseridos) { int numAlunoAlterar, i, j; printf("Num Aluno: "); scanf("%d", &numAlunoAlterar); for(i=0; i<numAlunosInseridos; i++) { if(vetorAlunos[i].numAluno == numAlunoAlterar) { do { printf("Nota Final: "); scanf("%d", &vetorAlunos[i].notafinal); if (vetorAlunos[i].notafinal < -1 || vetorAlunos[i].notafinal > 20) printf("\n\nNota invalida.\n"); } while (vetorAlunos[i].notafinal < -1 || vetorAlunos[i].notafinal > 20); return numAlunosInseridos; } } } void mostrar_estatisticas(T_ALUNO vetorAlunos[TAMUC], int numAlunosInseridos) { int i, somaNotas = 0, maior = -1, menor = 21, cont=0; float media,percentagem = 0; for(i=0; i< numAlunosInseridos; i++) { somaNotas += vetorAlunos[i].notafinal; } //Media media = (float)somaNotas/numAlunosInseridos; printf("\nA media das Notas: %.2f \n", media); //Nota mais alta for (i = 0; i < numAlunosInseridos; i++) if (vetorAlunos[i].notafinal > maior) { maior = vetorAlunos[i].notafinal; } printf("\n A nota mais alta e: %d \n", maior); //Nota mais baixa for (i = 0; i < numAlunosInseridos; i++) if (vetorAlunos[i].notafinal < menor) menor = vetorAlunos[i].notafinal; printf("\n A nota mais Baixa e: %d \n", menor); for(i=0; i< numAlunosInseridos; i++) if (vetorAlunos[i].notafinal >= 10) cont = cont+1; percentagem = ((float)cont/numAlunosInseridos)*100; printf("\nA percentagem de notas positivas e: %.0f %% \n", percentagem); } void gravar_ficheiro(T_ALUNO vetorAlunos[TAMUC], int numAlunosInseridos) { FILE *f; int i; f=fopen("aluno.dat", "wb"); if(f==NULL) { printf("Ocorreu um erro!"); } else { for(i=0; i< numAlunosInseridos; i++) { fwrite(&vetorAlunos, sizeof(T_ALUNO), 1, f); } } fclose(f); } int AbrirFich(int numAlunosInseridos) { if ((f=fopen("aluno.dat","rb"))==NULL) return 0; fseek(f,0,SEEK_END); numAlunosInseridos = ftell(f)/sizeof(T_ALUNO); printf("\nExistem %d registos\n",numAlunosInseridos); return -1; } void Mostrar(T_ALUNO vetorAlunos[TAMUC], int numAlunosInseridos) { int i; rewind(f); for(i=0; i< numAlunosInseridos; i++) { fread(&vetorAlunos, sizeof(T_ALUNO), 1, f); printf("\nNumero : %d \n ", vetorAlunos[i].numAluno); printf("\nNome : %s\n", vetorAlunos[i].nome); printf("\nNota Final : %d\n", vetorAlunos[i].notafinal); } printf("\n"); } int ler_ficheiro(T_ALUNO vetorAlunos[TAMUC], int numAlunosInseridos) { char op; if (AbrirFich(numAlunosInseridos)==0) { printf("Ficheiro não existe\n"); exit(1); } do { printf("m=Mostrar s=Sair\n"); scanf(" %c", &op); switch (op) { case 'm': Mostrar(vetorAlunos, numAlunosInseridos); break; case 's': break; default: printf("opção inválida!"); } } while (op != 's'); fclose(f); } int MenuOpcoes(void) { int opcao; do { printf("1 - Inserir dados dos estudantes \n"); printf("2 - Mostrar dados dos estudantes\n"); printf("3 - Alterar notas finais dos estudantes \n"); printf("4 - Estatisticas das avaliacoes\n"); printf("5 - Gravar dados em ficheiro\n"); printf("6 - Ler dados de ficheiro \n"); printf("0 - Sair"); printf("\nOpcao: "); scanf("%d", &opcao); if(opcao < 0 || opcao > 6) { printf("Opcao inválida!"); } } while(opcao < 0 || opcao > 6); return opcao; } Neste caso a minha duvida é a seguinte, quando executo o programa e insiro alunos e logo a seguir gravar e ler posteriormente o ficheiro, o programa lê sem problemas o ficheiro. Mas quando executo o programa e escolho logo a opção para ler o ficheiro, ele não lê dados do ficheiros. Obrigado a quem se disponibilizar a ajudar.
  25. a3deluxe

    Copiar ficheiros txt

    Boa tarde, O meu programa tem um Botão para copiar o conteúdo de um ficheiro txt (file2.txt) para um segundo ficheiro txt(file1.txt) quando copia do file2.txt para o file1.txt. O file1 já esta vazio, sem contudo, porque foi apagado por outro processo. // Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Dim a = My.Computer.FileSystem.ReadAllText("C:\file2.txt") My.Computer.FileSystem.WriteAllText("C:\file1.txt", a, False) End Sub Precisava de uma ajuda como posso fazer em género de um "ciclo". sempre que carrego no botão copiar do file2 para o file1 e depois do file1 para o file2. O PROBLEMA é que quando o ficheiro é copiado o primeiro esta vazio neste caso o file fica vazio. Tinha pensado em colocar um 3 ficheiro, a copia de algum dos outros. Como acham que posso fazer? Obrigado
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.