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

...programinha...


Guest :: Pietro ::

Pergunta

Guest :: Pietro ::

Bom Dia, Programadores!

Estou com uma pequena dúvida, não é difícil, fator é que não foi passado corretamente os detalhes para que eu possa estar fazendo este sisteminha.

O objetivo deste exercício-programa é colocar em prática o uso da mecânica mais elementar

de manipulação de arquivos através de funções da biblioteca-padrão da Linguagem C.

Neste exercício, você deverá fazer um programa que calcule a freqüência de cada um

dos caracteres que apareça em um arquivo especificado pelo usuário.

Quando seu programa for executado, ele deverá solicitar ao usuário qual é o nome do

arquivo cujos símbolos deverão ser contados. Você pode supor que o nome do arquivo

não contém espaços. Você pode também supor que o nome do arquivo especificado pelo

usuário terá, no máximo, 127 caracteres. Em seguida, seu programa deverá ler os dados

desse arquivo a fim de contabilizar quantas vezes cada caractere aparece no arquivo. O

programa deve, por fim, exibir na tela do computador a freqüência de cada caractere que

aparecer pelo menos uma vez no arquivo do usuário.

Exemplo. Se o usuário informar um arquivo que tenha como conteúdo

aaabababa

seu programa deverá exibir algo como

O caractere ’a’ aparece 6 vezes no arquivo.

O caractere ’b’ aparece 3 vezes no arquivo.

na tela.

2 A Implementação

Para manipular arquivos, você deverá usar funções da biblioteca-padrão da Linguagem C.

Emparticular, as funções fopen, fgetc e fclose são as de maior importância para seu programa.

As funções fopen e fclose foram descritas em sala de aula. A função fgetc tem protótipo

int fgetc(FILE *fp);

e ela recebe um ponteiro para um descritor de arquivo já aberto para leitura e devolve o

próximo caractere do arquivo. Observe que apesar de fgetc devolver o próximo caractere

do arquivo indicado por fp, seu tipo devolvido é um int. Isso se deve a dois fatos:

• caracteres podem ser interpretados como “mini-inteiros” em um computador (e,

geralmente, tal valor é uma representação interna do caractere no computador, como,

por exemplo, códigos na tabela ASCII);

• a função fgetc devolve um valor especial chamado EOF (que é definido como uma

macro em stdio.h) caso o final do arquivo indicado por fp seja encontrado.

1

Como o tipo devolvido por fgetc precisa ser grande o bastante para conter todos os

valores possíveis deumchar mais o valor especial EOF para sinalizar que o arquivo terminou,

fgetc não pode devolver um valor do tipo char. Por isso, ela devolve um inteiro, já que o

padrão da Linguagem C garante que inteiros têm capacidade suficiente para armazenar os

valores necessários.

Você pode obter mais informações sobre estas funções no livro de Kernighan & Ritchie

ou na documentação do seu compilador.

Para contabilizar as freqüências de cada caractere que ocorrer no arquivo, uma sugestão

é você utilizar um vetor de inteiros que seja indexado pelo valor que fgetc devolver

(naturalmente, se tal valor for diferente de EOF). Observe-se que, em computadores usuais,

os caracteres podem assumir 256 diferentes valores, sendo que tais valores vão de 0 a 255.

Aguardo ancioso por uma resposta positiva... é claro... com toda educação, preciso disso para hoje sem falta, tenho que entregar isso hoje até as 23:00!

Abraços!!!

PIETRO

Link para o comentário
Compartilhar em outros sites

5 respostass a esta questão

Posts Recomendados

  • 0

dry.gif Aki Pietro, duas coisas:: a primeira-> se registra aew no fórum meu!

segunda-> acho importante você postar dúvidas cara, não pedi o programa, porque assim você não estará aprendendo saca?? Entaum na próxima posta suas dúvidas sobre a implementação do programa, joga seu código aki, que a gente dá uma olhada e te ajuda a resolver seus problemas. Se você num entender o enunciado, é só você postar a parte que não entendeu que alguém aki do fórum te explica. Fiz ele porque num fui na facu e tva de bobeira.Tah do jeito que você descreveu no problema. Fiz rapidinho, entaum dá p/ você dar uma enxugada boa no código...... laugh.gif

#include<iostream.h>
#include<conio.h>
#include<stdio.h>
#include<string.h>
FILE *p;
struct registro
{
  char caractere[2];
  int qt;
};
int main()
{
  registro reg[20];
  clrscr();
  int extensao=0,cont=0,pos=0;
  char nome[127],nome2[20],resp[2];
  cout<<"INFORME O NOME DO ARQUIVO QUE DESEJA LER O CONTEUDO: ";
  cin>>nome;
  loop:
  extensao=0;
  for(int i=0;i<strlen(nome);i++)
  {
	if(nome[i]=='.')
	{
   extensao++;
   break;
	}
  }
  if(!extensao)
  {
	cout<<"você não INFORMOU A EXTENSAO DO ARQUIVO,\nFAVOR REDIGITAR O NOME DO ARQUIVO SEGUIDO DA SUA EXTENSAO: ";
	cin>>nome;
	goto loop;
  }
  if(!(p=fopen(nome,"r")))
  {
	cout<<"O ARQUIVO SOLICITADO não EXISTE NO SISTEMA!";
	getch();
	return 0;
  }
  cout<<"DIGITE O CARACTER QUE DESEJA LER NO ARQUIVO: ";
  cin>>nome2;
  for(int j=0;j<strlen(nome2);j++)
  {
	rewind(p);
	while(!(feof(p)))
	{
   fscanf(p,"%c",&resp);
   if(resp[0]==nome2[j])
   {
  cont++;
  if(cont==1)
    reg[pos].caractere[0]=resp[0];
   }
	}
	if(!cont)
   reg[pos].caractere[0]=nome2[j];
	reg[pos].qt=cont;
	pos++;
	cont=0;
  }
  cout<<"Saida do sistema:\n";
  for(int k=0;k<pos;k++)
  {
  cout<<"\n\nletra............................."<<reg[k].caractere[0];
  cout<<"\nqt de vezes que aparece ............"<<reg[k].qt;
  getch();
  }
  fclose(p);
  return 1;
}

Falow!

kartter

Link para o comentário
Compartilhar em outros sites

  • 0

Isso tá misturando C com C++, o que não é essencialmente errado, mas eu não gosto, opinião pessoal smile.gif

Outra coisa, como foi dito, pegar pronto não vale a pena, tem que tentar fazer, porque senao tu nunca vai aprender a programar. Da próxima, como o kartter falou, posta as duvidas que a gente te ajuda.

Link para o comentário
Compartilhar em outros sites

  • 0

Okkk.... Rapazes... Agradeço vossa atenção!

Estou certo de que apenas mostrando minha dúvida e não como um todo estarei aprendendo a programar com certeza, porém, foi me feito em cima da hora, ocasionando a falta de pasciência e a junção da anciedade.

Desde já agradeço à atenção de todos vocês.

Abraços!

Mais uma vez obrigado!

PIETRO

P.S.: Já sou registrado!

Link para o comentário
Compartilhar em outros sites

  • 0

dry.gif Isto vai do conhecimento de cada um, misturar c com c++ só vem a abrilhantar a funcionalidade destas duas ferrramentas.

Uma linguagem NUNCA anda sem a outra, uma vem para completar a outra, e não para substituir.

C++ não foi criado com o intuito de substitur a c, nem bem como c# foi criada para substituir c/c++

shtml+php+css+javascript=otima hp

assembly+©+(c++)=sistemas eficazes

.......................

dá uma olhada no tópico:

http://scriptbrasil.com.br/forum/index.php?showtopic=13013

Falow!

kartter

Link para o comentário
Compartilhar em outros sites

  • 0

eu sei cara, por isso deixei claro que é uma opinião minha smile.gif

não disse em nenhum momento que isso tá errado!

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...